@johnmorrisdotca/kyogijo-stadiums 0.11.0 → 0.12.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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The rules of a tournament layout. `:where` keeps the specificity at nothing so that a page's own custom properties win; the layout's group follows the device and the page like a drawing does, and a
3
+ * `data-theme` of light or dark forces it.
4
+ */
5
+ export declare const KYOGIJO_MULTI_STYLE: string;
@@ -0,0 +1,45 @@
1
+ /** The floor of each look and the ink an empty place is drawn in on it, in light and in dark. */
2
+ const FLOORS = {
3
+ blue: { light: ["#2e5f9b", "#f4f7fb"], dark: ["#1d3d63", "#dbe6f3"] },
4
+ green: { light: ["#2f7a4c", "#f2f8f3"], dark: ["#1f5234", "#d6e8dc"] },
5
+ wood: { light: ["#c99a5b", "#3a2813"], dark: ["#8a6638", "#f0e0c8"] },
6
+ red: { light: ["#b3362b", "#fdf3f1"], dark: ["#7a241d", "#f3d8d4"] },
7
+ ice: { light: ["#e4eef5", "#1d2b36"], dark: ["#a9bccb", "#10181f"] },
8
+ };
9
+ const COMMON_LIGHT = "--ky-mu-neutral:#bdb9ad;--ky-mu-barrier:#161a1f;--ky-mu-board:#1d2430;--ky-mu-board-ink:#f4f1ea;--ky-mu-chair:#ece7da;--ky-mu-chair-edge:#4a4f56;--ky-mu-sb:#10151b;--ky-mu-sb-ink:#f6f6f6;--ky-mu-wall:#3a4048;--ky-mu-hall:#d9d5c8;--ky-mu-over:#c0392b";
10
+ const COMMON_DARK = "--ky-mu-neutral:#2b2f2c;--ky-mu-barrier:#05070a;--ky-mu-board:#0d1218;--ky-mu-board-ink:#e8e4da;--ky-mu-chair:#b9b4a6;--ky-mu-chair-edge:#050607;--ky-mu-sb:#05080b;--ky-mu-sb-ink:#e9e9e9;--ky-mu-wall:#0a0c0f;--ky-mu-hall:#1b1f1c;--ky-mu-over:#e0614f";
11
+ const hallVars = (which) => Object.entries(FLOORS).map(([name, f]) => `--ky-mu-f-${name}:${f[which][0]}`).join(";");
12
+ const looks = (which) => Object.entries(FLOORS).map(([name, f]) => `.kyogijo.ky-multi[data-floor=${name}]{--ky-mu-floor:${f[which][0]};--ky-mu-slot:${f[which][1]}}`).join("");
13
+ /**
14
+ * The rules of a tournament layout. `:where` keeps the specificity at nothing so that a page's own custom properties win; the layout's group follows the device and the page like a drawing does, and a
15
+ * `data-theme` of light or dark forces it.
16
+ */
17
+ export const KYOGIJO_MULTI_STYLE = `
18
+ :where(.kyogijo){${COMMON_LIGHT};${hallVars("light")}}
19
+ @media (prefers-color-scheme:dark){:where(html:not([data-theme=light]) .kyogijo:not([data-theme=light])){${COMMON_DARK};${hallVars("dark")}}}
20
+ :where(html[data-theme=dark] .kyogijo,.kyogijo[data-theme=dark]){${COMMON_DARK};${hallVars("dark")}}
21
+ ${looks("light")}
22
+ @media (prefers-color-scheme:dark){${Object.entries(FLOORS).map(([name, f]) => `html:not([data-theme=light]) .kyogijo.ky-multi:not([data-theme=light])[data-floor=${name}]{--ky-mu-floor:${f.dark[0]};--ky-mu-slot:${f.dark[1]}}`).join("")}}
23
+ ${Object.entries(FLOORS).map(([name, f]) => `html[data-theme=dark] .kyogijo.ky-multi[data-floor=${name}],.kyogijo.ky-multi[data-theme=dark][data-floor=${name}]{--ky-mu-floor:${f.dark[0]};--ky-mu-slot:${f.dark[1]}}`).join("")}
24
+ .kyogijo .ky-mu-apron{fill:var(--ky-mu-hall)}
25
+ .kyogijo .ky-mu-floor{fill:var(--ky-mu-floor)}
26
+ .kyogijo .ky-mu-hall{fill:var(--ky-mu-floor);fill-opacity:.0;stroke:var(--ky-mu-wall);stroke-width:.8;stroke-dasharray:4 2.5}
27
+ .kyogijo .ky-mu-hallfloor{fill:var(--ky-mu-neutral);stroke:var(--ky-mu-wall);stroke-width:.8}
28
+ ${Object.keys(FLOORS).map((name) => `.kyogijo .ky-mu-hf-${name}{fill:var(--ky-mu-f-${name})}`).join("\n")}
29
+ .kyogijo .ky-mu-wall{fill:none;stroke:var(--ky-mu-wall);stroke-width:2.2;stroke-linejoin:round}
30
+ .kyogijo .ky-mu-over{fill:none;stroke:var(--ky-mu-over);stroke-width:1.4;stroke-dasharray:5 3}
31
+ .kyogijo .ky-mu-barrier{fill:none;stroke:var(--ky-mu-barrier);stroke-width:1;stroke-opacity:.9}
32
+ .kyogijo .ky-mu-board{fill:var(--ky-mu-board)}
33
+ .kyogijo .ky-mu-board-cut{stroke:var(--ky-mu-board-ink);stroke-opacity:.35;stroke-width:.25}
34
+ .kyogijo .ky-mu-chair{fill:var(--ky-mu-chair);stroke:var(--ky-mu-chair-edge);stroke-width:.25}
35
+ .kyogijo .ky-mu-desk{fill:var(--ky-mu-chair);fill-opacity:.7;stroke:var(--ky-mu-chair-edge);stroke-width:.2}
36
+ .kyogijo .ky-mu-sb{fill:var(--ky-mu-sb);fill-opacity:.82;stroke:var(--ky-mu-sb-ink);stroke-width:.3;stroke-dasharray:1.4 .8}
37
+ .kyogijo .ky-mu-sb-cut{stroke:var(--ky-mu-sb-ink);stroke-opacity:.5;stroke-width:.2}
38
+ .kyogijo .ky-mu-slot{fill:none;stroke:var(--ky-mu-slot);stroke-width:.3;stroke-dasharray:1.2 .8;stroke-opacity:.85}
39
+ .kyogijo .ky-mu-slot-board{stroke:var(--ky-mu-board-ink)}
40
+ .kyogijo .ky-mu-slot-text{fill:var(--ky-mu-slot);fill-opacity:.8;font-family:var(--ky-font);font-weight:700;text-anchor:middle}
41
+ .kyogijo .ky-mu-slot-text-board{fill:var(--ky-mu-board-ink)}
42
+ .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}
43
+ .kyogijo .ky-mu-caption{fill:var(--ky-mu-sb-ink);font-family:var(--ky-font);font-weight:700;text-anchor:middle}
44
+ .kyogijo.ky-multi{--ky-cr-home:#8b94a3;--ky-cr-away:#8b94a3}
45
+ `.trim();
@@ -0,0 +1,258 @@
1
+ import type { Sport, SurfaceOptions } from "./types.ts";
2
+ /** The unit a layout's lengths are written in: the one its rulebook prints. */
3
+ export type MultiUnit = "m" | "ft";
4
+ /** A length along the layout (`x`, left to right) and across it (`y`, top to bottom). */
5
+ export interface MultiSize {
6
+ length: number;
7
+ width: number;
8
+ unit: MultiUnit;
9
+ }
10
+ /**
11
+ * How sure the arrangement is. `rulebook`: the spacing is what a rulebook or a federation's specification asks for (the least, or the recommendation it names), laid out in the grid it allows;
12
+ * no event's plan is drawn. `event`: the numbers are a rulebook's, and the arrangement (how many areas, one floor, one scoreboard) is what an event used, read from reports and from photographs; the
13
+ * event's own plan was not seen, so it is not drawn as measured.
14
+ */
15
+ export type MultiBasis = "rulebook" | "event";
16
+ /** The event a layout is tied to, where one is named: what was held, when, in which hall. */
17
+ export interface MultiEvent {
18
+ name: string;
19
+ year: number;
20
+ venue: string;
21
+ city: string;
22
+ /** ISO 3166-1 alpha-2. */
23
+ country: string;
24
+ /** The event, the hall and the city as Japanese writes them, for the Japanese output (the English names are used where this is missing). */
25
+ ja?: {
26
+ name: string;
27
+ venue: string;
28
+ city: string;
29
+ };
30
+ /** A key of `MULTI_VENUES`, when the hall's floor is published. */
31
+ floor?: string;
32
+ /** What is known of the arrangement, and what is only read from a picture. */
33
+ note: {
34
+ en: string;
35
+ ja: string;
36
+ };
37
+ /** Keys of `MULTI_SOURCES`. */
38
+ sources: readonly string[];
39
+ }
40
+ /** What stands on or beside each playing surface, and over the floor. */
41
+ export interface MultiParts {
42
+ /** The barriers (surrounds) that enclose each playing area, drawn round the area's bay. */
43
+ barriers?: boolean;
44
+ /** An umpire's chair and a score table beside each surface. */
45
+ officials?: boolean;
46
+ /** A scoreboard for each surface (`each`), one hung over the middle of the floor for all (`shared`), or none. */
47
+ scoreboard?: "each" | "shared" | "none";
48
+ /** Boards along the edges of the floor, empty, to carry whatever the event puts there. */
49
+ boards?: boolean;
50
+ /** Empty places for the event's own words and marks: printed on the floor (`floor`), or on the mats of a budō floor (`mat`, which sit on the surface itself, as a judo floor is printed). */
51
+ brand?: "floor" | "mat" | "none";
52
+ }
53
+ /** The floors a layout can be set on: the colour of the hall's floor and the words for what each surface is called. */
54
+ export type MultiFloor = "blue" | "green" | "wood" | "red" | "ice";
55
+ /** What each surface of a layout is called. */
56
+ export type MultiWord = "table" | "court" | "sheet" | "area";
57
+ /** The surface of each cell: the options of `drawKyogijo` for one of them. */
58
+ export type MultiSurface = Omit<SurfaceOptions, "id" | "style" | "margin" | "theme" | "language" | "title" | "description" | "className" | "width" | "height" | "score">;
59
+ /** A layout as data: the surface, the grid, the space each surface is given, and what is on and round it. */
60
+ export interface MultiSpec {
61
+ /** The key: `tabletennis-4`. */
62
+ id: string;
63
+ name: {
64
+ en: string;
65
+ ja: string;
66
+ };
67
+ /** The sport of the surfaces: the stands a stadium draws round the floor follow it. */
68
+ sport: Sport;
69
+ /** The surface of every cell. A `budo` layout is one drawing of the sport's own several areas, and `surface` says how many. */
70
+ surface: MultiSurface;
71
+ /** The cells are the surfaces laid in a grid; `budo` (judo and karate) has the sport's own areas in one floor of mats. */
72
+ kind: "cells" | "budo";
73
+ rows: number;
74
+ columns: number;
75
+ /** The space each surface is given, along it and across it, centre to centre, in the unit its rulebook prints. Not for a `budo` layout, whose spacing is the sport's own. */
76
+ bay?: MultiSize;
77
+ /** The space from the outermost surface's edge to the edge of the floor: along the layout at each end (`length`) and across it at each side (`width`). Half of what the bay has beyond the surface, when missing. */
78
+ edge?: MultiSize;
79
+ /** Each surface is turned a quarter: the surfaces stand across the layout instead of along it (curling sheets and badminton courts side by side), so a row of N is `rows: 1, columns: N`. `bay` and `edge` are then in the layout's own frame (along it, across it). */
80
+ turn?: 90;
81
+ /** Every other row moved along the layout by this share of the bay's length (0 to 1): a staggered grid. */
82
+ stagger?: number;
83
+ /** What each surface is called on the plan. */
84
+ word: MultiWord;
85
+ parts: MultiParts;
86
+ /** The colour of the hall's floor round the surfaces (a `budo` layout's is the mats'). */
87
+ floor: MultiFloor;
88
+ basis: MultiBasis;
89
+ event?: MultiEvent;
90
+ /** What the spacing is, in a sentence of each language, and the rule it is from. */
91
+ rule: {
92
+ en: string;
93
+ ja: string;
94
+ };
95
+ /** Keys of `MULTI_SOURCES` (or `LEAGUE_SOURCES`) the figures are read from. */
96
+ sources: readonly string[];
97
+ }
98
+ /** One surface of a laid-out floor, in feet, in the layout's frame (x along, y across, from the top left of the floor). */
99
+ export interface MultiCell {
100
+ /** `1`, `2`, ... in reading order. */
101
+ n: number;
102
+ /** The name on the plan: `Table 1`. */
103
+ label: string;
104
+ row: number;
105
+ column: number;
106
+ /** The playing surface: where its top left is, and its size. */
107
+ x: number;
108
+ y: number;
109
+ w: number;
110
+ h: number;
111
+ /** True when the surface is turned a quarter in the layout (see `MultiSpec.turn`): `w` and `h` are then the turned size. */
112
+ turn: boolean;
113
+ /** The space the surface is given: the bay. */
114
+ bay: {
115
+ x: number;
116
+ y: number;
117
+ w: number;
118
+ h: number;
119
+ };
120
+ }
121
+ /** An empty place for the event's own words or a mark: nothing is printed in it. */
122
+ export interface MultiSlot {
123
+ id: string;
124
+ kind: "floor-text" | "floor-logo" | "board";
125
+ /** True when the slot is on a budō floor's mats (printed on the surface itself). */
126
+ onMat: boolean;
127
+ x: number;
128
+ y: number;
129
+ w: number;
130
+ h: number;
131
+ }
132
+ /** What a layout is, laid out. */
133
+ export interface MultiLayout {
134
+ spec: MultiSpec;
135
+ cells: MultiCell[];
136
+ slots: MultiSlot[];
137
+ /** The floor the layout needs, in feet: the union of the bays (a budō floor's: the tatami and the free zone round it), from the top left corner at 0, 0. */
138
+ floor: {
139
+ w: number;
140
+ h: number;
141
+ };
142
+ /** For a budō floor: the tatami (the contest areas with their safety areas), where it stands on the floor, in feet. */
143
+ tatami?: {
144
+ x: number;
145
+ y: number;
146
+ w: number;
147
+ h: number;
148
+ };
149
+ /** Where the scoreboard hangs, when there is one for all (the middle of the floor), and its size. */
150
+ shared?: {
151
+ x: number;
152
+ y: number;
153
+ w: number;
154
+ h: number;
155
+ };
156
+ needs: MultiNeeds;
157
+ }
158
+ /** The floor a layout needs, in metres and square metres: what a hall has to give. */
159
+ export interface MultiNeeds {
160
+ /** Along the layout, then across it. */
161
+ length: number;
162
+ width: number;
163
+ area: number;
164
+ /** How many playing surfaces. */
165
+ surfaces: number;
166
+ }
167
+ /** A hall's floor as the data gives it. */
168
+ export interface MultiVenue {
169
+ /** The key: `copper-box-arena`. */
170
+ id: string;
171
+ name: {
172
+ en: string;
173
+ ja: string;
174
+ };
175
+ /** Where it stands, for a hall (an ice pad of a given size is anywhere). */
176
+ city?: string;
177
+ country?: string;
178
+ /** `rectangle`: a floor of `length` by `width`; `octagon`: a regular octagon `across` the flats; `area`: only an area is published, so a shape is not known. */
179
+ shape: "rectangle" | "octagon" | "area";
180
+ length?: number;
181
+ width?: number;
182
+ across?: number;
183
+ /** In square metres, when the source gives it (and for a shape that is only an area, the whole of what it gives). */
184
+ area?: number;
185
+ unit: MultiUnit;
186
+ /** What the figure is a figure of, in a sentence of each language. */
187
+ what: {
188
+ en: string;
189
+ ja: string;
190
+ };
191
+ /** What the hall's floor is, for the drawing: ice for an ice pad, wood for a sports hall, neutral when the source says nothing of it. */
192
+ floor?: MultiFloor | "neutral";
193
+ /** The sports whose stands the hall's are like, for a stadium drawn round it. */
194
+ standsLike: Sport;
195
+ sources: readonly string[];
196
+ }
197
+ /** Whether a layout fits a floor, and how. */
198
+ export interface MultiFit {
199
+ /** `true` when it fits, `false` when it does not, `null` when the floor's shape is not known (only its area) and the area is enough, so that it may. */
200
+ fits: boolean | null;
201
+ /** How the layout sits: as drawn, or turned a quarter. */
202
+ turned: boolean;
203
+ /** `size`: the shape was held to a rectangle or an octagon; `area`: only the areas were compared. */
204
+ by: "size" | "area";
205
+ needs: MultiNeeds;
206
+ /** What is left of the floor, in metres, along it and across it (negative when short), for a floor with a shape; in square metres for the area. */
207
+ spare: {
208
+ length: number;
209
+ width: number;
210
+ } | {
211
+ area: number;
212
+ };
213
+ floor: {
214
+ length?: number;
215
+ width?: number;
216
+ across?: number;
217
+ area: number;
218
+ };
219
+ }
220
+ /** A layout as the options of `drawMulti` ask for it. */
221
+ export interface MultiOptions {
222
+ /** A preset of `MULTI_PRESETS`, by key. */
223
+ preset?: string;
224
+ /** A layout of your own, in place of a preset. */
225
+ layout?: MultiSpec;
226
+ /** The grid, when it is not the preset's. A `budo` layout takes `columns` as its areas in a row and `rows` as its rows. */
227
+ rows?: number;
228
+ columns?: number;
229
+ /** A staggered grid: every other row moved along by this share of the bay (0 to 1). */
230
+ stagger?: number;
231
+ /** The hall's floor: a key of `MULTI_VENUES`, a hall of `MULTI_VENUES` itself, or a floor of your own. The layout is set in it, and the drawing says whether it fits. */
232
+ venue?: string | MultiVenue | {
233
+ length: number;
234
+ width: number;
235
+ unit?: MultiUnit;
236
+ };
237
+ /** A real stadium round the floor, to the same scale: the walls, the stands and the crowd the package draws for the sport. Off by default. */
238
+ stadium?: boolean | {
239
+ crowd?: boolean;
240
+ density?: number;
241
+ roof?: boolean;
242
+ shape?: "bowl" | "sides";
243
+ detail?: "fine" | "plain";
244
+ };
245
+ /** The empty places for the event's words and marks, and the boards: on by default; `false` draws neither. */
246
+ slots?: boolean;
247
+ /** The names of the surfaces over them. On by default. */
248
+ labels?: boolean;
249
+ language?: "en" | "ja";
250
+ theme?: "light" | "dark";
251
+ /** A prefix for the ids. Made from the options when missing. */
252
+ id?: string;
253
+ className?: string;
254
+ title?: string;
255
+ description?: string;
256
+ /** `none` leaves the stylesheet to the page (`KYOGIJO_STYLE` and `KYOGIJO_MULTI_STYLE`). */
257
+ style?: "embed" | "none";
258
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,70 @@
1
+ import type { Language } from "./types.ts";
2
+ import type { MultiWord } from "./multi.types.ts";
3
+ export interface MultiWords {
4
+ /** The name of a surface on the plan, `{n}` its number. */
5
+ names: Record<MultiWord, string>;
6
+ /** The names of the things that stand on and round the floor. */
7
+ parts: {
8
+ chair: string;
9
+ table: string;
10
+ scoreboard: string;
11
+ shared: string;
12
+ barrier: string;
13
+ board: string;
14
+ floor: string;
15
+ hall: string;
16
+ stands: string;
17
+ };
18
+ /** What an empty place says: it is a place to be filled by the event, and nothing is printed in it. */
19
+ slots: {
20
+ floorText: string;
21
+ floorLogo: string;
22
+ board: string;
23
+ };
24
+ /** The sentences of the title and the description. */
25
+ say: {
26
+ title: string;
27
+ drawn: string;
28
+ grid: string;
29
+ stagger: string;
30
+ shared: string;
31
+ slots: string;
32
+ venue: string;
33
+ stadium: string;
34
+ event: string;
35
+ basisRulebook: string;
36
+ basisEvent: string;
37
+ };
38
+ /** The fit's sentences. */
39
+ fit: {
40
+ fits: string;
41
+ short: string;
42
+ maybe: string;
43
+ tooSmall: string;
44
+ turned: string;
45
+ spare: string;
46
+ area: string;
47
+ };
48
+ /** The table that says the same as the picture. */
49
+ table: {
50
+ caption: string;
51
+ surface: string;
52
+ row: string;
53
+ column: string;
54
+ x: string;
55
+ y: string;
56
+ size: string;
57
+ slot: string;
58
+ onMat: string;
59
+ where: {
60
+ top: string;
61
+ bottom: string;
62
+ left: string;
63
+ right: string;
64
+ start: string;
65
+ end: string;
66
+ common: string;
67
+ };
68
+ };
69
+ }
70
+ export declare const MULTI_WORDS: Record<Language, MultiWords>;
@@ -0,0 +1,58 @@
1
+ export const MULTI_WORDS = {
2
+ en: {
3
+ names: { table: "Table {n}", court: "Court {n}", sheet: "Sheet {n}", area: "Area {n}" },
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
+ slots: { floorText: "Event name, year and city", floorLogo: "Logo", board: "Board" },
6
+ say: {
7
+ title: "{name}",
8
+ drawn: "Drawn as: {name}, {surfaces} playing surfaces to scale on one floor of {length} by {width} metres ({area} square metres).",
9
+ grid: "They are laid {rows} by {columns}: {rows} rows of {columns}.",
10
+ stagger: "Every other row is moved along by {share} of a bay.",
11
+ shared: "One scoreboard for all is hung over the middle of the floor.",
12
+ slots: "The empty places for the event's own words and marks are drawn dashed: {n}.",
13
+ venue: "Set in {venue}: {fit}",
14
+ stadium: "Drawn inside a stadium to the same scale: walls, stands and crowd.",
15
+ event: "Tied to {event}, {year}, {venue}, {city}.",
16
+ basisRulebook: "The spacing is the rulebook's; no event's plan is drawn.",
17
+ basisEvent: "The spacing is the rulebook's; the arrangement is what the event used, read from reports and photographs, not a measured plan.",
18
+ },
19
+ fit: {
20
+ fits: "it fits, with {length} by {width} metres to spare{turned}.",
21
+ short: "it does not fit: it is short by {length} metres along and {width} metres across{turned}.",
22
+ maybe: "it may fit: it needs {need} of its {have} square metres, and the shape of the floor is not published.",
23
+ tooSmall: "it does not fit: it needs {need} square metres and the floor has {have}.",
24
+ turned: ", turned a quarter",
25
+ spare: "{length} by {width} metres",
26
+ area: "{area} square metres",
27
+ },
28
+ table: { caption: "{name}: the playing surfaces and the empty places", surface: "Surface", row: "Row", column: "Column", x: "Left (m)", y: "Top (m)", size: "Size (m)", slot: "Empty place", onMat: "on the mats", where: { top: "top", bottom: "bottom", left: "left", right: "right", start: "first end", end: "far end", common: "between areas" } },
29
+ },
30
+ ja: {
31
+ names: { table: "第{n}台", court: "第{n}コート", sheet: "第{n}シート", area: "第{n}試合場" },
32
+ parts: { chair: "審判席", table: "記録台", scoreboard: "スコアボード", shared: "中央の真上に吊るした全面共用のスコアボード", barrier: "フェンス", board: "ボード", floor: "床", hall: "会場の床", stands: "スタンド" },
33
+ slots: { floorText: "大会名・年・開催地", floorLogo: "ロゴ", board: "ボード" },
34
+ say: {
35
+ title: "{name}",
36
+ drawn: "{name}。競技面を{surfaces}面、横{length}m×縦{width}m({area}平方メートル)の床1枚の上に縮尺どおりに描いています。",
37
+ grid: "{rows}行×{columns}列に並べています。",
38
+ stagger: "1行おきに、1区画の{share}だけずらしています。",
39
+ shared: "床の中央の上に、全面共用のスコアボードを1台吊るしています。",
40
+ slots: "大会の文字やマークを入れる空き枠を破線で描いています:{n}か所。",
41
+ venue: "{venue}に置いた場合:{fit}",
42
+ stadium: "同じ縮尺で、壁・スタンド・観客を備えたスタジアムの中に描いています。",
43
+ event: "関連する大会:{event}({year}年、{venue}、{city})。",
44
+ basisRulebook: "間隔は競技規則のとおりです。特定の大会の図面は描いていません。",
45
+ basisEvent: "間隔は競技規則のとおりです。並べ方は大会で実際に使われたものを報道や写真から読み取ったもので、実測の図面ではありません。",
46
+ },
47
+ fit: {
48
+ fits: "収まります。横に{length}m、縦に{width}mの余裕があります{turned}。",
49
+ short: "収まりません。横に{length}m、縦に{width}m足りません{turned}。",
50
+ maybe: "収まるかもしれません。必要な面積は{need}平方メートル、床は{have}平方メートルですが、床の形は公表されていません。",
51
+ tooSmall: "収まりません。{need}平方メートルが必要ですが、床は{have}平方メートルしかありません。",
52
+ turned: "(90度回した向き)",
53
+ spare: "横{length}m×縦{width}m",
54
+ area: "{area}平方メートル",
55
+ },
56
+ table: { caption: "{name}:競技面と空き枠の一覧", surface: "競技面", row: "行", column: "列", x: "左(m)", y: "上(m)", size: "大きさ(m)", slot: "空き枠", onMat: "マット上", where: { top: "上", bottom: "下", left: "左", right: "右", start: "一方の端", end: "反対の端", common: "試合場の間" } },
57
+ },
58
+ };
@@ -918,6 +918,9 @@ export const PARK_DATA = [
918
918
  ]
919
919
  ],
920
920
  "backstop_ft": 55,
921
+ "dugouts": {
922
+ "home": "third"
923
+ },
921
924
  "walls": [
922
925
  {
923
926
  "from": -45,
@@ -2002,6 +2005,16 @@ export const PARK_DATA = [
2002
2005
  },
2003
2006
  "note": "The infobox's final figures.",
2004
2007
  "backstop_ft": 61,
2008
+ "quirks": [
2009
+ {
2010
+ "kind": "bullpen",
2011
+ "label": "Left-field bullpen",
2012
+ "angle": -45,
2013
+ "feet": 388,
2014
+ "first": 1956,
2015
+ "last": 1961
2016
+ }
2017
+ ],
2005
2018
  "walls": [
2006
2019
  {
2007
2020
  "from": 22.5,
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.11.0";
2
+ export declare const VERSION = "0.12.0";
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.11.0";
2
+ export const VERSION = "0.12.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnmorrisdotca/kyogijo-stadiums",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
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",
@@ -166,6 +166,11 @@
166
166
  "import": "./dist/layouts-entry.js",
167
167
  "default": "./dist/layouts-entry.js"
168
168
  },
169
+ "./multi": {
170
+ "types": "./dist/multi-entry.d.ts",
171
+ "import": "./dist/multi-entry.js",
172
+ "default": "./dist/multi-entry.js"
173
+ },
169
174
  "./replay": {
170
175
  "types": "./dist/replay-entry.d.ts",
171
176
  "import": "./dist/replay-entry.js",