@johnmorrisdotca/dougu-sports 0.16.2 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.md +4 -4
  3. package/dist/emblems/emblem.descriptions.js +8 -0
  4. package/dist/emblems/emblem.equipment.js +1 -1
  5. package/dist/emblems/emblem.ids.d.ts +4 -4
  6. package/dist/emblems/emblem.ids.js +8 -1
  7. package/dist/emblems/emblem.lathe.d.ts +28 -2
  8. package/dist/emblems/emblem.lathe.js +6 -1
  9. package/dist/emblems/emblem.named.js +70 -0
  10. package/dist/emblems/emblem.registry.js +14 -0
  11. package/dist/emblems/gear/gear.baseballcap.d.ts +1 -0
  12. package/dist/emblems/gear/gear.baseballcap.js +29 -0
  13. package/dist/emblems/gear/gear.index.js +2 -1
  14. package/dist/emblems/lathe.extras.d.ts +3 -0
  15. package/dist/emblems/lathe.extras.js +59 -0
  16. package/dist/emblems/trophy/bill-russell-trophy.d.ts +2 -0
  17. package/dist/emblems/trophy/bill-russell-trophy.js +24 -0
  18. package/dist/emblems/trophy/calder-cup.d.ts +2 -0
  19. package/dist/emblems/trophy/calder-cup.js +38 -0
  20. package/dist/emblems/trophy/cfp-trophy.d.ts +2 -0
  21. package/dist/emblems/trophy/cfp-trophy.js +21 -0
  22. package/dist/emblems/trophy/hank-aaron-award.d.ts +2 -0
  23. package/dist/emblems/trophy/hank-aaron-award.js +22 -0
  24. package/dist/emblems/trophy/kelly-cup.d.ts +2 -0
  25. package/dist/emblems/trophy/kelly-cup.js +32 -0
  26. package/dist/emblems/trophy/mls-cup.d.ts +2 -0
  27. package/dist/emblems/trophy/mls-cup.js +24 -0
  28. package/dist/emblems/trophy/relief-man-award.d.ts +2 -0
  29. package/dist/emblems/trophy/relief-man-award.js +28 -0
  30. package/dist/index.d.ts +8 -0
  31. package/dist/index.js +8 -0
  32. package/dist/turn-control.d.ts +2 -1
  33. package/dist/turn-control.js +6 -5
  34. package/dist/version.d.ts +1 -1
  35. package/dist/version.js +1 -1
  36. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,124 @@ All notable changes to this project are written here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.26.0] - 2026-10-30
10
+
11
+ Four league championship trophies, each measured on a photograph of the real one, for the big-game cards of a results site.
12
+
13
+ ### Fixed
14
+
15
+ - The lathe skips a face of a flat-sided body that is exactly edge on (a square body turned 45 degrees showed a stray stroke at its edge in the line style), and the `panel` decoration does the same.
16
+
17
+ ### Added
18
+
19
+ - **`trophy:calder-cup`**: the Calder Cup of the American Hockey League, a two-handled silver bowl, wide and round, with a raised band of laurel leaves round its rim, on a round knob and a flared foot over a black round plinth, standing on two black blocks with plates: two on each face of the upper block, three on each face of the lower, which stands on two low feet. The blocks are boxes with plates on every face, so the turned view shows the side plates. The handles are the thin S-shaped straps of the real cup. Measured on File:LAM 8801 (Wikimedia Commons, CC BY 2.0), with two more Commons photographs and three photographs John supplied (looked at, never copied).
20
+ - **`trophy:kelly-cup`**: the Kelly Cup of the ECHL, a two-handled silver cup with a tall straight-sided bowl and two ring bands, on a short collar and a flared foot, over a stack of three black drums with silver-edged plate bands over a flat black disc. Measured on File:Kelly Cup.jpg (CC BY-SA 3.0). The bands are left plain, for the `engrave` option.
21
+ - **`trophy:mls-cup`**: the MLS Cup (the Philip F. Anschutz Trophy), a tall silver goblet with a gilt rim whose bowl narrows steadily to a slim stem, on a flared pedestal with a dark groove, with four fluted blades that sweep up and out from the stem, past the rim, and curl in over it. Measured on File:KC Ballet & Sporting KC (11232058043).jpg (CC BY 2.0). Approximate: each blade is a pair of tubes where the real one is a bundle of flat fluted strips, and the real blades cross in front of the cup, which the lathe cannot draw.
22
+ - **`trophy:cfp-trophy`**: the College Football Playoff national championship trophy, an upright dark football with a gilt rim and four laces on a tall slim gold column that narrows to a collar, over a black drum with a plate band. Approximate: the only freely licensed photograph (File:2019 CFP - trophy on the sidelines (crop).jpg, CC BY-SA 4.0) shows it at a distance.
23
+ - Their facts are in `NAMED_TROPHIES`, their references in `docs/likeness-sources.md`, and the four join the famous-trophies picture. Japanese names and descriptions were reviewed. 334 emblems, 78 trophies, 54 named. No lettering, league mark or sponsor mark on any of them; no new runtime dependency.
24
+ - The NWSL Championship trophy is not drawn: the only photographs on Wikimedia Commons show it far off, and two of them show different objects, so the plain cup stays for it (docs/trophy-audit.md).
25
+
26
+ ## [0.25.3] - 2026-10-28
27
+
28
+ ### Fixed
29
+
30
+ - **A drag up (and Arrow Up) in `bindTurn` lifts the FRONT of the emblem**, as if its near edge were held and raised, and a drag down lowers it. It did the opposite (a drag up tipped the front down and showed a cup from above). The `pitch` option and `angles.pitch` keep their meaning and sign (positive is the tilt toward the eye, seen more from above); only what the hand and the arrow keys do to it is reversed, so a drag up now makes `pitch` go down, and a program that read `angles.pitch` to mirror a drag sees the opposite sign. Left and right are unchanged. In the demo the Tilt slider is the opposite sign of `pitch` (its top is a drag up), and the address and the code line still say `pitch`, so `?pitch=` from before means the same thing. Tests: `test/turn-control.test.ts`, `e2e/turn.demo.ts`.
31
+
32
+ ## [0.25.2] - 2026-10-28
33
+
34
+ ### Changed
35
+
36
+ - The lathe's extra decorations, `mesh` (the etched net of many diamonds, which was `net` with a `rows` number), `patch` and `panel`, are drawn by `src/emblems/lathe.extras.ts`, which a model asks for with `extras: LATHE_EXTRAS` (the Bill Russell Trophy and the Relief Man Award do). A cup that uses none of them no longer carries their code: the hockey cup alone bundles to 7213 bytes gzipped again (it was 7450 with them in the renderer, over the 7.1 kB limit, which `pnpm check` caught only in `scripts/check-package.ts`), and `test/size.test.ts` now holds that it leaves them out. The pictures do not change.
37
+
38
+ ## [0.25.1] - 2026-10-28
39
+
40
+ ### Fixed
41
+
42
+ - The Japanese name and description of `trophy:bill-russell-trophy` and the description of `trophy:hank-aaron-award` read as the awards are named in Japanese (the name `ビル・ラッセル・トロフィー`, `NBAファイナル` for the finals, `最優秀打者` for the best hitter); reviewed.
43
+
44
+ ## [0.25.0] - 2026-10-28
45
+
46
+ Two of baseball's awards, redrawn from photographs of the real ones. The earlier Hank Aaron Award, a silver batter, was a different object: the real award is a block of mahogany cut as home plate.
47
+
48
+ ### Added
49
+
50
+ - **`trophy:hank-aaron-award`**: the Hank Aaron Award, a mahogany block in the shape of home plate with a grey metal face, a bat laid across it and two ribbons over the bat, in the flat plaque style of the Cy Young and MLB MVP awards, with a back and a coin-flip turn. Measured on a Wikimedia Commons photograph (CC BY 2.0; looked at, never copied). No lettering, league mark or engraving. 330 emblems, 74 trophies, 50 named with the Relief Man Award.
51
+ - **`trophy:relief-man-award`**: the Relief Man Award (the fireman trophy given from 1976 to 2012), a silver fire helmet with a gilt shield on a short chrome column, over a walnut block with a brass nameplate and a stepped walnut base, built on the lathe like the Stanley Cup. Measured on an auction photograph of a 1981 trophy (looked at, never copied). Approximate: the helmet is drawn round. The shield, the plate and every mark and word are left blank, the plate taking the engraving option. 330 emblems, 74 trophies, 50 named.
52
+ - The lathe's decorations `patch` (a tone laid on a round body between two angles and two heights, a shield on a helmet) and `panel` (a tone laid on one flat face of a body with flat sides, a nameplate on a block).
53
+
54
+ ## [0.24.0] - 2026-10-28
55
+
56
+ A baseball cap, redrawn from two photographs of plain caps.
57
+
58
+ ### Added
59
+
60
+ - **`gear:baseball-cap`**: a baseball cap in three-quarter view, with a dome crown, button, front seam and three eyelets, and a curved brim with its edge and rows of stitching, in the same flat layered style as the package's helmet and glove, with a coin-flip turn. Measured on two public-domain and CC0 photographs of plain caps (looked at, never copied). No team mark, lettering or brand. It is in the gear list and with baseball's bat and glove. 328 emblems, 71 pieces of gear.
61
+
62
+ ## [0.23.0] - 2026-10-28
63
+
64
+ The NBA's Finals MVP trophy, redrawn from a photograph of the real one.
65
+
66
+ ### Added
67
+
68
+ - **`trophy:bill-russell-trophy`**: the Bill Russell NBA Finals Most Valuable Player Trophy, a gold basketball seated on the flared rim of a net-patterned goblet that narrows in a long concave curve to a slim waist, over a round foot of two tiers. Measured on a press photograph of the 2022 design standing beside the championship trophy (looked at, never copied; no freely licensed photograph exists), and built with the same lathe as the Stanley Cup and the Larry O'Brien Trophy. No lettering. 327 emblems, 72 trophies, 48 named.
69
+ - The lathe's `net` decoration takes a fifth number, `rows`: strands that wind a column to the side at each row, one way and the other, make a net of many diamonds down a body (a trophy's etched net) in a pale line. Without it `net` draws one row of diamonds as before.
70
+
71
+ ## [0.22.0] - 2026-10-28
72
+
73
+ The award trophies and the cap of 0.17.0 to 0.21.0, which were never published, are taken out. Drawn from written descriptions, they did not match the real objects and were far below the Stanley Cup and the Larry O'Brien Trophy. A site that asks for these awards draws the plain cup, which is honest; each comes back only when it can be drawn from a photograph of the real thing and passes beside the Stanley Cup.
74
+
75
+ ### Removed
76
+
77
+ - The trophies `jackie-robinson-award`, `mlb-manager-award`, `relief-man-award`, `hank-aaron-award`, `michael-jordan-trophy`, `bill-russell-trophy`, `olajuwon-trophy`, `chamberlain-trophy`, `havlicek-trophy`, `auerbach-trophy`, `mikan-trophy`, `rozelle-trophy`, `halas-trophy` and `gregory-trophy`, and `gear:baseball-cap`. None was ever on npm. 326 emblems again: 71 trophies, 70 pieces of gear.
78
+
79
+ ### Changed
80
+
81
+ - `docs/trophy-audit.md` says, for each of these awards, what the real object is and why it has no emblem yet.
82
+
83
+ ## [0.21.0] - 2026-10-23
84
+
85
+ A baseball cap. The Canadian and writers' football awards stay the plain cup: no photograph or measured description of those objects was found, so nothing new was drawn for them.
86
+
87
+ ### Added
88
+
89
+ - **`gear:baseball-cap`**: a baseball cap in three-quarter view (crown, button, panel seams, eyelets and a brim with an edge), in the gear list and with baseball's bat and glove. 341 emblems, 71 pieces of gear.
90
+
91
+ ### Fixed
92
+
93
+ - **`trophy:gregory-trophy`**: from behind, the three skaters stay on the trophy. The back had kept only the metal, so it was thinner than the front.
94
+
95
+ ## [0.20.0] - 2026-10-23
96
+
97
+ The National Hockey League's general-manager award that a site still drew as a plain cup.
98
+
99
+ ### Added
100
+
101
+ - **`trophy:gregory-trophy`**: the Jim Gregory General Manager of the Year Award, a silver bowl over three bronze skaters on a tall silver block. Drawn for this package from a Hockey Hall of Fame collection photograph that was looked at and never copied; Wikimedia Commons had no freely licensed photograph (searched 2026-10-23), so it is marked approximate. No shield, lettering or nameplates. 340 emblems, 85 trophies, 61 named.
102
+
103
+ ## [0.19.0] - 2026-10-23
104
+
105
+ Two National Football League awards that a site still drew as a plain cup.
106
+
107
+ ### Added
108
+
109
+ - **`trophy:rozelle-trophy`** and **`trophy:halas-trophy`**: the Pete Rozelle Trophy (the championship-game most valuable player; a silver football on a short disc) and the George Halas Trophy (the National Football Conference champion; a hollow silver football on a short three-sided stand, the counterpart of the Lamar Hunt Trophy). Each is this package's own drawing from a published description of the object; Wikimedia Commons had no freely licensed photograph (searched 2026-10-23), so they are marked approximate. No lettering, logo or conference mark. The Associated Press awards have no famous trophy and keep the generic plaque. 339 emblems, 84 trophies, 60 named.
110
+
111
+ ## [0.18.0] - 2026-10-23
112
+
113
+ Seven National Basketball Association awards that a site still drew as a plain cup.
114
+
115
+ ### Added
116
+
117
+ - **`trophy:michael-jordan-trophy`**, **`trophy:bill-russell-trophy`**, **`trophy:olajuwon-trophy`**, **`trophy:chamberlain-trophy`**, **`trophy:havlicek-trophy`**, **`trophy:auerbach-trophy`** and **`trophy:mikan-trophy`**: the Michael Jordan Trophy (regular-season most valuable player), the Bill Russell Trophy (championship-series most valuable player), the Hakeem Olajuwon, Wilt Chamberlain, John Havlicek and George Mikan trophies (defensive player, rookie, sixth man and most improved) and the Red Auerbach Trophy (coach of the year). Each is this package's own drawing from a published description of the object; Wikimedia Commons had no freely licensed photograph (searched 2026-10-23), so they are marked approximate. No lettering, logo or sponsor name. The MVP trophy's id is the current name, not the old commissioner's cup. 337 emblems, 82 trophies, 58 named.
118
+
119
+ ## [0.17.0] - 2026-10-23
120
+
121
+ Four Major League Baseball awards that a site still drew as a plain cup.
122
+
123
+ ### Added
124
+
125
+ - **`trophy:jackie-robinson-award`**, **`trophy:mlb-manager-award`**, **`trophy:relief-man-award`** and **`trophy:hank-aaron-award`**: the Jackie Robinson Award (Rookie of the Year of each league), the Manager of the Year Award, the Relief Man Award (the fireman trophy given 1976 to 2012) and the Hank Aaron Award. Each is this package's own drawing from a public description of the object; Wikimedia Commons had no freely licensed photograph (searched 2026-10-23), so they are marked approximate. No lettering, logo or sponsor name (the Relief Man's id is not the old sponsor's). 330 emblems, 75 trophies, 51 named.
126
+
9
127
  ## [0.16.2] - 2026-10-21
10
128
 
11
129
  Every piece that flips or turns has a body at every angle: a solid edge, a back of its own, and what hangs from it still there.
package/README.md CHANGED
@@ -61,7 +61,7 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
61
61
 
62
62
  ## The best of it
63
63
 
64
- - **47 famous trophies**, each a close likeness measured on a photograph and carrying no lettering, logo or mark: the Stanley Cup, the FIFA World Cup, the Lombardi Trophy, the Larry O'Brien trophy, the Grey Cup and the rest ([famous trophies](./docs/famous-trophies.md)).
64
+ - **54 famous trophies**, each a close likeness measured on a photograph and carrying no lettering, logo or mark: the Stanley Cup, the FIFA World Cup, the Lombardi Trophy, the Larry O'Brien trophy, the Grey Cup and the rest ([famous trophies](./docs/famous-trophies.md)).
65
65
 
66
66
  <p align="center">
67
67
  <picture>
@@ -106,11 +106,11 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
106
106
  </picture>
107
107
  </p>
108
108
 
109
- - **70 pieces of gear**, among them the Japanese sports and budo ([Japanese sports](./docs/japanese-sports.md)).
109
+ - **71 pieces of gear**, among them the Japanese sports and budo ([Japanese sports](./docs/japanese-sports.md)).
110
110
 
111
111
  - **On a phone**, and **turned by hand**: drag, arrow keys or the automatic turn ([turning](./docs/turning.md)).
112
112
 
113
- > **Status: preview.** 326 emblems: 71 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 42 sports, 118 balls and implements drawn in 3D, 8 printed pucks ([docs/pucks.md](./docs/pucks.md)), 70 pieces of gear (among them the Japanese sports and budo, [docs/japanese-sports.md](./docs/japanese-sports.md)) and a championship pennant; [docs/layout.md](./docs/layout.md) says where each goes. All of it is drawn for this package: no art is copied from another project.
113
+ > **Status: preview.** 334 emblems: 78 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 42 sports, 118 balls and implements drawn in 3D, 8 printed pucks ([docs/pucks.md](./docs/pucks.md)), 71 pieces of gear (among them the Japanese sports and budo, [docs/japanese-sports.md](./docs/japanese-sports.md)) and a championship pennant; [docs/layout.md](./docs/layout.md) says where each goes. All of it is drawn for this package: no art is copied from another project.
114
114
 
115
115
  ## In 30 seconds
116
116
 
@@ -676,7 +676,7 @@ Bug reports and ideas go in the [issues](https://github.com/johnmorrisdotca/doug
676
676
 
677
677
  ## Changes
678
678
 
679
- See [CHANGELOG.md](./CHANGELOG.md). 0.16.0 adds a slotted plastic practice baseball (`ball:plastic-baseball-slotted`, 326 emblems: [docs/slotted-ball.md](./docs/slotted-ball.md)); 0.15.0 gives the pickleballs real holes, cut through the shell and drawn with the inside of the ball behind them, so the page shows through where two holes line up ([docs/pickleball.md](./docs/pickleball.md)); 0.14.0 lets the auto-turn go either way (`direction: "clockwise"` or `"counterclockwise"`, `setDirection()`); 0.13.0 adds a pictogram for each of four combat sports, MMA (a cage), boxing (a glove), wrestling (two wrestlers on the mat) and professional wrestling (a ring with ropes), in the three styles (326 emblems); 0.12.0 adds forty-seven named trophies, each a close likeness measured on a photograph (321 emblems); 0.11.0 gives the era soccer balls neutral ids (the old ones stay as aliases), new looks and a second 1980s ball (274 emblems); 0.10.0 adds a standalone ribbon and the nets and posts of sepak takraw, netball and teqball from their rulebooks' sizes (273 emblems); 0.9.0 lets the baseball, the softball and the classic soccer balls be painted and printed: solid and two-tone colours, a logo of your own wrapped onto the ball, stamped text, an original cursive word and a small mark, all turning with the ball ([docs/custom-balls.md](./docs/custom-balls.md)); 0.8.0 makes `bindTurn` light: it takes an emblem object and then needs no registry, so a turnable cup is about 9.4 kB gzipped instead of about 81 kB, and an id loads the registry on demand; 0.7.3 turns the build, docs and picture scripts, the browser tests and the demo's source from JavaScript into TypeScript, with no change to the package; 0.7.2 makes every docs page single-language (a page in Japanese beside each page that had Japanese words in it, and a test that holds them apart), with no change to the pictures; 0.7.1 puts real countries (Canada, Japan) in the crest and puck examples in place of made-up teams, with no change to the code; 0.7.0 gives the national volleyballs layouts that tell them apart (Japan a crimson band, Poland white above and red below, the USA a navy field), strengthens the 2010-style grooved soccer ball, and adds six pictures of how the judo belt is tied, `gear:obi-step-1` to `gear:obi-step-6` (269 emblems: [docs/obi-steps.md](./docs/obi-steps.md)); 0.6.0 gives the judo suit and the karate suit their sleeves (a judogi has no short ones: they reach the wrist) and adds the judogi seen from behind with the IJF-style back number, a family name and a country code on a patch, with a `backnumber` option (269 emblems: [docs/judogi-back.md](./docs/judogi-back.md)); 0.5.1 redraws the judo suit, the belt and the football pictograms and adds the blue and folded suits and the belts of every grade (261 emblems: [docs/japanese-sports.md](./docs/japanese-sports.md)); 0.5.0 adds fifty balls: vintage leather soccer balls, era-style and shop-wall soccer balls, baseballs of other threads and volleyballs in national colours, with a `colors` option (244 emblems: [docs/vintage-balls.md](./docs/vintage-balls.md)); 0.4.0 adds eight printed pucks and a `face` option (194 emblems: [docs/pucks.md](./docs/pucks.md)); 0.3.0 adds nineteen soccer balls (26, 18, 14, 12 and 6 panels, winter orange and high-visibility yellow, futsal and beach soccer: 186 emblems); 0.2.1 draws every ball and implement to the rulebook's proportions; 0.2.0 is 167 emblems, every one drawn here, with the Japanese sports, engraving, a turn for every emblem and the compose helpers; 0.1.0 brought the first full set of 148; 0.0.1 was the first preview.
679
+ See [CHANGELOG.md](./CHANGELOG.md). 0.26.0 adds four league championship trophies, drawn from photographs of the real ones: the Calder Cup of the AHL, the Kelly Cup of the ECHL, the MLS Cup and the College Football Playoff trophy (`trophy:calder-cup`, `trophy:kelly-cup`, `trophy:mls-cup`, `trophy:cfp-trophy`, 334 emblems); 0.25.0 adds two of baseball's awards, drawn from photographs of the real ones: the Hank Aaron Award and the Relief Man Award (`trophy:hank-aaron-award`, `trophy:relief-man-award`, 330 emblems); 0.24.0 adds a baseball cap (`gear:baseball-cap`, 328 emblems); 0.23.0 adds the Bill Russell Finals MVP Trophy, drawn from a photograph of the real one (`trophy:bill-russell-trophy`, 327 emblems); 0.22.0 takes out the award cups and the cap of the unpublished 0.17.0 to 0.21.0, which did not match the real objects; 0.16.0 adds a slotted plastic practice baseball (`ball:plastic-baseball-slotted`, 326 emblems: [docs/slotted-ball.md](./docs/slotted-ball.md)); 0.15.0 gives the pickleballs real holes, cut through the shell and drawn with the inside of the ball behind them, so the page shows through where two holes line up ([docs/pickleball.md](./docs/pickleball.md)); 0.14.0 lets the auto-turn go either way (`direction: "clockwise"` or `"counterclockwise"`, `setDirection()`); 0.13.0 adds a pictogram for each of four combat sports, MMA (a cage), boxing (a glove), wrestling (two wrestlers on the mat) and professional wrestling (a ring with ropes), in the three styles (326 emblems); 0.12.0 adds forty-seven named trophies, each a close likeness measured on a photograph (321 emblems); 0.11.0 gives the era soccer balls neutral ids (the old ones stay as aliases), new looks and a second 1980s ball (274 emblems); 0.10.0 adds a standalone ribbon and the nets and posts of sepak takraw, netball and teqball from their rulebooks' sizes (273 emblems); 0.9.0 lets the baseball, the softball and the classic soccer balls be painted and printed: solid and two-tone colours, a logo of your own wrapped onto the ball, stamped text, an original cursive word and a small mark, all turning with the ball ([docs/custom-balls.md](./docs/custom-balls.md)); 0.8.0 makes `bindTurn` light: it takes an emblem object and then needs no registry, so a turnable cup is about 9.4 kB gzipped instead of about 81 kB, and an id loads the registry on demand; 0.7.3 turns the build, docs and picture scripts, the browser tests and the demo's source from JavaScript into TypeScript, with no change to the package; 0.7.2 makes every docs page single-language (a page in Japanese beside each page that had Japanese words in it, and a test that holds them apart), with no change to the pictures; 0.7.1 puts real countries (Canada, Japan) in the crest and puck examples in place of made-up teams, with no change to the code; 0.7.0 gives the national volleyballs layouts that tell them apart (Japan a crimson band, Poland white above and red below, the USA a navy field), strengthens the 2010-style grooved soccer ball, and adds six pictures of how the judo belt is tied, `gear:obi-step-1` to `gear:obi-step-6` (269 emblems: [docs/obi-steps.md](./docs/obi-steps.md)); 0.6.0 gives the judo suit and the karate suit their sleeves (a judogi has no short ones: they reach the wrist) and adds the judogi seen from behind with the IJF-style back number, a family name and a country code on a patch, with a `backnumber` option (269 emblems: [docs/judogi-back.md](./docs/judogi-back.md)); 0.5.1 redraws the judo suit, the belt and the football pictograms and adds the blue and folded suits and the belts of every grade (261 emblems: [docs/japanese-sports.md](./docs/japanese-sports.md)); 0.5.0 adds fifty balls: vintage leather soccer balls, era-style and shop-wall soccer balls, baseballs of other threads and volleyballs in national colours, with a `colors` option (244 emblems: [docs/vintage-balls.md](./docs/vintage-balls.md)); 0.4.0 adds eight printed pucks and a `face` option (194 emblems: [docs/pucks.md](./docs/pucks.md)); 0.3.0 adds nineteen soccer balls (26, 18, 14, 12 and 6 panels, winter orange and high-visibility yellow, futsal and beach soccer: 186 emblems); 0.2.1 draws every ball and implement to the rulebook's proportions; 0.2.0 is 167 emblems, every one drawn here, with the Japanese sports, engraving, a turn for every emblem and the compose helpers; 0.1.0 brought the first full set of 148; 0.0.1 was the first preview.
680
680
 
681
681
  ## Credits
682
682
 
@@ -69,6 +69,7 @@ export const EMBLEM_DESCRIPTIONS = {
69
69
  "gear:table-tennis-paddle": { en: "Table-tennis paddle and ball", ja: "卓球のラケットとボール" },
70
70
  "gear:badminton-racket": { en: "Badminton racket and shuttlecock", ja: "バドミントンのラケットとシャトルコック" },
71
71
  "gear:football-helmet": { en: "Football helmet", ja: "アメリカンフットボールのヘルメット" },
72
+ "gear:baseball-cap": { en: "A baseball cap in three-quarter view: a dome crown with a button, a seam and three eyelets, and a curved brim with its edge and rows of stitching.", ja: "野球帽を斜め前から描いています。頭頂のボタン、縫い目、3つのはと目のあるドーム形のクラウンと、縁と何列もの縫い目のある湾曲したつばが見えます。" },
72
73
  "gear:hurley": { en: "Hurley", ja: "ハーリー(ハーリングのスティック)" },
73
74
  "trophy:sumo-cup": { en: "A tall silver cup on a tall stepped stand, with an ornate phoenix-crested handle on each side", ja: "段のある高い台に載った、背の高い銀の杯。両側の取っ手に鳳凰の飾りが付く" },
74
75
  "trophy:paterson-cup": { en: "The Paterson Cup: a wide silver bowl with a straight engraved band at the rim, two scrolled ear handles, a short stem and a dark wooden base. Given to the champion of the Pacific Coast Hockey Association from 1912", ja: "パターソン・カップ。縁にまっすぐな彫刻の帯がある幅広の銀のボウルで、渦巻き形の耳状の取っ手が2つ付き、短い脚と濃い色の木の台座があります。1912年から、パシフィック・コースト・ホッケー協会の優勝チームに贈られました。" },
@@ -96,6 +97,9 @@ export const EMBLEM_DESCRIPTIONS = {
96
97
  "trophy:commissioners-trophy": { en: "The Commissioner's Trophy: thirty slender poles with gilt pennants in a ring whose tops are higher at the back than at the front, over a wide round silver base.", ja: "コミッショナーズ・トロフィーは、30本の細い支柱が、それぞれ金色のペナントを付けて輪になり、輪の上端は後ろが高く手前が低く、幅広い丸い銀色の台の上に立つ姿を描いています。ワールドシリーズの優勝チームに贈られます。" },
97
98
  "trophy:grey-cup": { en: "The Grey Cup: a two-handled silver cup with a swirled stem on a tall flared cone of twelve panels crossed by dark bands.", ja: "グレイカップは、持ち手が2つで渦巻き模様の脚をもつ銀色のカップが、暗い帯の入った12面の背の高い広がる円錐形の台の上に載った姿を描いています。カナディアン・フットボール・リーグの優勝決定戦に勝ったチームに贈られます。" },
98
99
  "trophy:cy-young-award": { en: "The Cy Young Award: a dark plaque with a curved silver band, a V and a hand holding a baseball over a nameplate.", ja: "サイ・ヤング賞は、暗い色の飾り板に、曲線を描く銀色の帯とV字、銘板の上で野球のボールを握る手をあしらった姿を描いています。各リーグの最優秀投手に贈られます。" },
100
+ "trophy:relief-man-award": { en: "The Relief Man Award: a silver fire helmet with a gilt shield, on a short chrome column over a walnut block with a brass nameplate and a stepped walnut base.", ja: "リリーフマン賞は、金色の盾を付けた銀色の消防ヘルメットが、短いクロームの支柱の上に載り、真鍮の銘板を付けたクルミ材の角柱と、段のあるクルミ材の台の上に立つ姿を描いています。1976年から2012年まで、各リーグの最優秀救援投手に贈られました。" },
101
+ "trophy:hank-aaron-award": { en: "The Hank Aaron Award: a mahogany block cut in the shape of home plate, with a grey metal face, a bat laid across it from the upper left and two ribbons over the bat.", ja: "ハンク・アーロン賞は、ホームベースの形に削り出したマホガニーの台に、灰色の金属の面、左上がりに置かれたバット、その上に重なる2本のリボンをあしらった姿を描いています。各リーグの最優秀打者に贈られます。" },
102
+ "trophy:bill-russell-trophy": { en: "The Bill Russell Trophy: a gold basketball seated on the flared rim of a net-patterned goblet that narrows to a slim waist, over a round foot of two tiers.", ja: "ビル・ラッセル・トロフィーは、金色のバスケットボールが、ネット模様のゴブレットの広がった縁に載り、ゴブレットは細い脚へとすぼまり、二段の丸い台の上に立つ姿を描いています。NBAファイナルの最優秀選手に贈られます。" },
99
103
  "trophy:mlb-mvp-award": { en: "The Most Valuable Player Award: a dark octagonal plaque with a silver ring and diamond, a gilt medallion, a nameplate and crossed bats.", ja: "MVP賞は、銀色の輪とダイヤモンド、金色のメダリオン、銘板、交差した2本のバットを配した、暗い色の八角形の飾り板を描いています。各リーグの最優秀選手に贈られます。" },
100
104
  "trophy:walter-cup": { en: "The Walter Cup: a wide shallow silver bowl on a stem between two tall stick-shaped blades, over a heavy round base.", ja: "ウォルター・カップは、脚付きの幅広く浅い銀色のボウルが、スティック形の背の高い2枚のブレードの間に立ち、重厚な丸い台の上に載った姿を描いています。プロフェッショナル・ウィメンズ・ホッケー・リーグ(PWHL)の優勝チームに贈られます。" },
101
105
  "trophy:wnba-championship-trophy": { en: "The WNBA Championship Trophy: a silver basketball held on two slanting tubes over a low slab.", ja: "WNBA優勝トロフィーは、銀色のバスケットボールを、斜めに伸びる2本の管が支え、低い板状の台に載った姿を描いています。WNBAファイナルの優勝チームに贈られます。" },
@@ -118,6 +122,10 @@ export const EMBLEM_DESCRIPTIONS = {
118
122
  "trophy:ashes-urn": { en: "The Ashes urn: a small terracotta urn with square handles on a turned wooden base.", ja: "テラコッタの小さな壺を描いています。四角い取っ手が付き、旋盤で削り出した木の台に載っています。イングランドとオーストラリアが戦うアッシズ・シリーズの象徴として、ローズ・クリケット・グラウンドに保管されています。" },
119
123
  "trophy:webb-ellis-cup": { en: "The Webb Ellis Cup: a gilt lidded two-handled cup with a pineapple finial on a round plinth.", ja: "金色のふた付きカップを描いています。取っ手が二つあり、ふたの上にパイナップル形の飾りが付いて、丸い台座に載っています。男子のラグビーワールドカップの優勝チームに贈られます。" },
120
124
  "trophy:champions-league-trophy": { en: "The UEFA Champions League trophy: a tall silver urn with two long looping handles.", ja: "UEFAチャンピオンズリーグ・トロフィー。長い取っ手が二つ輪を描く、背の高い銀の壺を描いています。UEFAチャンピオンズリーグの優勝クラブに贈られます。" },
125
+ "trophy:calder-cup": { en: "The Calder Cup: a two-handled silver bowl with a band of laurel leaves round its rim, on a knobbed stem that flares to a bell, over a black round plinth and two stepped black blocks with plates.", ja: "カルダー・カップは、縁に月桂樹の葉の帯をめぐらせ、持ち手が2つある銀色のボウルが、こぶのある脚の上に載る姿を描いています。脚は鐘の形に広がり、黒い丸い台座と、板をはめた2段の黒い角台の上に立っています。アメリカン・ホッケー・リーグ(AHL)の優勝チームに贈られます。" },
126
+ "trophy:kelly-cup": { en: "The Kelly Cup: a small two-handled silver cup with two thin rings under its lip, on a stack of three black drums with silver-edged plate bands, the lowest the widest.", ja: "ケリー・カップは、口縁の下に細い輪を2本めぐらせ、持ち手が2つある小さな銀色のカップが、銀で縁取った板の帯を巻いた3段の黒い円筒の台座の上に立つ姿を描いています。下の段ほど幅が広くなっています。ECHLの優勝チームに贈られます。" },
127
+ "trophy:cfp-trophy": { en: "The College Football Playoff trophy: an upright dark football with a gilt rim on a tall slim gold column that narrows to a small collar, over a black drum with a plate band.", ja: "CFPトロフィーは、縁が金色で縦に立てた黒いフットボールが、背の高い細い金色の柱の上に載る姿を描いています。柱は上へ細くすぼまって小さな受け皿になり、板の帯を巻いた黒い円筒の台座の上に立っています。カレッジフットボール・プレーオフの全米王者に贈られます。" },
128
+ "trophy:mls-cup": { en: "The MLS Cup: a tall silver goblet with a gilt rim whose bowl narrows steadily to a slim stem, on a flared round pedestal with one dark groove, with four fluted blades that sweep up and out from the stem, past the rim, and curl in over it.", ja: "MLSカップは、金色の縁をもつ背の高い銀色のゴブレットが、裾の広がった丸い台座の上に載る姿を描いています。ゴブレットの杯部は脚に向かってなだらかにすぼまり、台座には濃い色の溝が1本刻まれています。脚から立ち上がる溝入りの4枚の羽根状の飾りが、外側へ広がりながら上へ伸び、縁を越えてから内側へ巻いています。メジャーリーグサッカー(MLS)のプレーオフの優勝クラブに贈られます。" },
121
129
  "trophy:championship-banner": { en: "A fringed banner on a pole with a gilt finial and an embroidered border, with no lettering unless some is given", ja: "金の先端飾りの付いた竿に掛けた、刺繍の縁と房の付いた旗。文字は指定したときだけ入る" },
122
130
  "sport:sumo": { en: "Two wrestlers in the crouch they face each other in at the start of a bout, with their belts", ja: "仕切りの姿勢で向かい合う、廻しを締めた二人の力士" },
123
131
  "sport:handball": { en: "A hand throwing the ball, with lines of speed", ja: "ボールを投げる手と、速さを表す線" },
@@ -5,7 +5,7 @@ const TABLE = {
5
5
  ifaf: ["ball:football-ifaf", ["gear:football-helmet", "gear:goalposts"], "trophy:cup"],
6
6
  nhl: ["ball:puck", ["gear:hockey-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net"], "trophy:hockey-cup"],
7
7
  nba: ["ball:basketball", ["gear:basketball-hoop"], "trophy:basketball"],
8
- mlb: ["ball:baseball", ["gear:baseball-bat", "gear:baseball-glove"], "trophy:baseball"],
8
+ mlb: ["ball:baseball", ["gear:baseball-bat", "gear:baseball-glove", "gear:baseball-cap"], "trophy:baseball"],
9
9
  soccer: ["ball:soccer", ["gear:goal-net"], "trophy:soccer-globe", GOLD],
10
10
  curling: ["ball:curling-stone", ["gear:curling-broom"], "trophy:bowl", GOLD],
11
11
  tennis: ["ball:tennis", ["gear:tennis-racket"], "trophy:tennis-cup", GOLD],
@@ -5,7 +5,7 @@ export type SportName = (typeof SPORT_NAMES)[number];
5
5
  export declare const AWARD_IDS: readonly ["award:medal", "award:badge", "award:crown", "award:star", "award:shield", "award:ribbon"];
6
6
  export type AwardId = (typeof AWARD_IDS)[number];
7
7
  /** The trophies: a cup for each league's champion in a descriptive, generic form, the plain cups and dishes, and the flat plaque, belt, wreath and rosette. */
8
- export declare const TROPHY_IDS: readonly ["trophy:cup", "trophy:lidded-cup", "trophy:bowl", "trophy:salver", "trophy:globe", "trophy:hockey-cup", "trophy:basketball", "trophy:baseball", "trophy:football", "trophy:canadian-bowl", "trophy:soccer-ball", "trophy:soccer-globe", "trophy:tennis-plate", "trophy:tennis-cup", "trophy:cricket-urn", "trophy:rugby-cup", "trophy:plaque", "trophy:belt", "trophy:laurel", "trophy:rosette", "trophy:ring", "trophy:banner", "trophy:sumo-cup", "trophy:championship-banner", "trophy:paterson-cup", "trophy:stanley-cup", "trophy:hart-trophy", "trophy:vezina-trophy", "trophy:norris-trophy", "trophy:calder-trophy", "trophy:presidents-trophy", "trophy:art-ross-trophy", "trophy:lady-byng-trophy", "trophy:jennings-trophy", "trophy:selke-trophy", "trophy:king-clancy-trophy", "trophy:masterton-trophy", "trophy:jack-adams-trophy", "trophy:prince-of-wales-trophy", "trophy:campbell-bowl", "trophy:rocket-richard-trophy", "trophy:conn-smythe-trophy", "trophy:ted-lindsay-award", "trophy:lester-patrick-trophy", "trophy:lombardi-trophy", "trophy:larry-obrien-trophy", "trophy:commissioners-trophy", "trophy:grey-cup", "trophy:cy-young-award", "trophy:mlb-mvp-award", "trophy:walter-cup", "trophy:wnba-championship-trophy", "trophy:lamar-hunt-trophy", "trophy:silver-slugger-award", "trophy:world-series-mvp-trophy", "trophy:avco-world-trophy", "trophy:obrien-cup", "trophy:gold-glove-award", "trophy:fifa-world-cup", "trophy:woodlawn-vase", "trophy:dfb-pokal", "trophy:champions-league-trophy", "trophy:webb-ellis-cup", "trophy:fa-cup", "trophy:cricket-world-cup", "trophy:wimbledon-gentlemens-trophy", "trophy:venus-rosewater-dish", "trophy:ballon-dor", "trophy:ashes-urn", "trophy:borg-warner-trophy", "trophy:americas-cup"];
8
+ export declare const TROPHY_IDS: readonly ["trophy:cup", "trophy:lidded-cup", "trophy:bowl", "trophy:salver", "trophy:globe", "trophy:hockey-cup", "trophy:basketball", "trophy:baseball", "trophy:football", "trophy:canadian-bowl", "trophy:soccer-ball", "trophy:soccer-globe", "trophy:tennis-plate", "trophy:tennis-cup", "trophy:cricket-urn", "trophy:rugby-cup", "trophy:plaque", "trophy:belt", "trophy:laurel", "trophy:rosette", "trophy:ring", "trophy:banner", "trophy:sumo-cup", "trophy:championship-banner", "trophy:paterson-cup", "trophy:stanley-cup", "trophy:hart-trophy", "trophy:vezina-trophy", "trophy:norris-trophy", "trophy:calder-trophy", "trophy:presidents-trophy", "trophy:art-ross-trophy", "trophy:lady-byng-trophy", "trophy:jennings-trophy", "trophy:selke-trophy", "trophy:king-clancy-trophy", "trophy:masterton-trophy", "trophy:jack-adams-trophy", "trophy:prince-of-wales-trophy", "trophy:campbell-bowl", "trophy:rocket-richard-trophy", "trophy:conn-smythe-trophy", "trophy:ted-lindsay-award", "trophy:lester-patrick-trophy", "trophy:lombardi-trophy", "trophy:larry-obrien-trophy", "trophy:commissioners-trophy", "trophy:grey-cup", "trophy:cy-young-award", "trophy:mlb-mvp-award", "trophy:relief-man-award", "trophy:hank-aaron-award", "trophy:bill-russell-trophy", "trophy:walter-cup", "trophy:wnba-championship-trophy", "trophy:lamar-hunt-trophy", "trophy:silver-slugger-award", "trophy:world-series-mvp-trophy", "trophy:avco-world-trophy", "trophy:obrien-cup", "trophy:gold-glove-award", "trophy:fifa-world-cup", "trophy:woodlawn-vase", "trophy:dfb-pokal", "trophy:champions-league-trophy", "trophy:webb-ellis-cup", "trophy:fa-cup", "trophy:cricket-world-cup", "trophy:wimbledon-gentlemens-trophy", "trophy:venus-rosewater-dish", "trophy:ballon-dor", "trophy:ashes-urn", "trophy:borg-warner-trophy", "trophy:americas-cup", "trophy:calder-cup", "trophy:kelly-cup", "trophy:cfp-trophy", "trophy:mls-cup"];
9
9
  export type TrophyId = (typeof TROPHY_IDS)[number];
10
10
  /** The medals on a ribbon, and the badges for the first three places. */
11
11
  export declare const MEDAL_KINDS: readonly ["gold", "silver", "bronze"];
@@ -24,7 +24,7 @@ export type BallId = (typeof BALL_IDS)[number];
24
24
  export declare const PUCK_IDS: readonly ["puck:canada", "puck:canada-red", "puck:canada-white", "puck:usa", "puck:usa-navy", "puck:player", "puck:signed", "puck:souvenir"];
25
25
  export type PuckId = (typeof PUCK_IDS)[number];
26
26
  /** The pieces of gear: a piece of equipment for each sport, flat, drawn for this package, turning like a coin. */
27
- export declare const GEAR_IDS: readonly ["gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket", "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle", "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:football-helmet", "gear:goalposts", "gear:hurley", "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles", "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "gear:yumi", "gear:ya", "gear:karate-gi"];
27
+ export declare const GEAR_IDS: readonly ["gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket", "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle", "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:baseball-cap", "gear:football-helmet", "gear:goalposts", "gear:hurley", "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles", "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "gear:yumi", "gear:ya", "gear:karate-gi"];
28
28
  export type GearId = (typeof GEAR_IDS)[number];
29
29
  /** The Japanese sports and budo: sumo, kendo, judo, kyudo and karate, with the trophies and the gear that belong to them. Every one is also in its own group; this list is for showing them together. */
30
30
  export declare const JAPANESE_IDS: readonly ["sport:sumo", "trophy:sumo-cup", "gear:gunbai", "gear:mawashi", "trophy:championship-banner", "sport:kendo", "gear:shinai", "gear:kendo-men", "sport:judo", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "sport:kyudo", "gear:yumi", "gear:ya", "sport:karate", "gear:karate-gi"];
@@ -40,12 +40,12 @@ export type EmblemId = AwardId | TrophyId | MedalId | CrestId | BallId | PuckId
40
40
  /** The groups of ids, in the order a gallery shows them. */
41
41
  export declare const EMBLEM_GROUPS: {
42
42
  readonly award: readonly ["award:medal", "award:badge", "award:crown", "award:star", "award:shield", "award:ribbon"];
43
- readonly trophy: readonly ["trophy:cup", "trophy:lidded-cup", "trophy:bowl", "trophy:salver", "trophy:globe", "trophy:hockey-cup", "trophy:basketball", "trophy:baseball", "trophy:football", "trophy:canadian-bowl", "trophy:soccer-ball", "trophy:soccer-globe", "trophy:tennis-plate", "trophy:tennis-cup", "trophy:cricket-urn", "trophy:rugby-cup", "trophy:plaque", "trophy:belt", "trophy:laurel", "trophy:rosette", "trophy:ring", "trophy:banner", "trophy:sumo-cup", "trophy:championship-banner", "trophy:paterson-cup", "trophy:stanley-cup", "trophy:hart-trophy", "trophy:vezina-trophy", "trophy:norris-trophy", "trophy:calder-trophy", "trophy:presidents-trophy", "trophy:art-ross-trophy", "trophy:lady-byng-trophy", "trophy:jennings-trophy", "trophy:selke-trophy", "trophy:king-clancy-trophy", "trophy:masterton-trophy", "trophy:jack-adams-trophy", "trophy:prince-of-wales-trophy", "trophy:campbell-bowl", "trophy:rocket-richard-trophy", "trophy:conn-smythe-trophy", "trophy:ted-lindsay-award", "trophy:lester-patrick-trophy", "trophy:lombardi-trophy", "trophy:larry-obrien-trophy", "trophy:commissioners-trophy", "trophy:grey-cup", "trophy:cy-young-award", "trophy:mlb-mvp-award", "trophy:walter-cup", "trophy:wnba-championship-trophy", "trophy:lamar-hunt-trophy", "trophy:silver-slugger-award", "trophy:world-series-mvp-trophy", "trophy:avco-world-trophy", "trophy:obrien-cup", "trophy:gold-glove-award", "trophy:fifa-world-cup", "trophy:woodlawn-vase", "trophy:dfb-pokal", "trophy:champions-league-trophy", "trophy:webb-ellis-cup", "trophy:fa-cup", "trophy:cricket-world-cup", "trophy:wimbledon-gentlemens-trophy", "trophy:venus-rosewater-dish", "trophy:ballon-dor", "trophy:ashes-urn", "trophy:borg-warner-trophy", "trophy:americas-cup"];
43
+ readonly trophy: readonly ["trophy:cup", "trophy:lidded-cup", "trophy:bowl", "trophy:salver", "trophy:globe", "trophy:hockey-cup", "trophy:basketball", "trophy:baseball", "trophy:football", "trophy:canadian-bowl", "trophy:soccer-ball", "trophy:soccer-globe", "trophy:tennis-plate", "trophy:tennis-cup", "trophy:cricket-urn", "trophy:rugby-cup", "trophy:plaque", "trophy:belt", "trophy:laurel", "trophy:rosette", "trophy:ring", "trophy:banner", "trophy:sumo-cup", "trophy:championship-banner", "trophy:paterson-cup", "trophy:stanley-cup", "trophy:hart-trophy", "trophy:vezina-trophy", "trophy:norris-trophy", "trophy:calder-trophy", "trophy:presidents-trophy", "trophy:art-ross-trophy", "trophy:lady-byng-trophy", "trophy:jennings-trophy", "trophy:selke-trophy", "trophy:king-clancy-trophy", "trophy:masterton-trophy", "trophy:jack-adams-trophy", "trophy:prince-of-wales-trophy", "trophy:campbell-bowl", "trophy:rocket-richard-trophy", "trophy:conn-smythe-trophy", "trophy:ted-lindsay-award", "trophy:lester-patrick-trophy", "trophy:lombardi-trophy", "trophy:larry-obrien-trophy", "trophy:commissioners-trophy", "trophy:grey-cup", "trophy:cy-young-award", "trophy:mlb-mvp-award", "trophy:relief-man-award", "trophy:hank-aaron-award", "trophy:bill-russell-trophy", "trophy:walter-cup", "trophy:wnba-championship-trophy", "trophy:lamar-hunt-trophy", "trophy:silver-slugger-award", "trophy:world-series-mvp-trophy", "trophy:avco-world-trophy", "trophy:obrien-cup", "trophy:gold-glove-award", "trophy:fifa-world-cup", "trophy:woodlawn-vase", "trophy:dfb-pokal", "trophy:champions-league-trophy", "trophy:webb-ellis-cup", "trophy:fa-cup", "trophy:cricket-world-cup", "trophy:wimbledon-gentlemens-trophy", "trophy:venus-rosewater-dish", "trophy:ballon-dor", "trophy:ashes-urn", "trophy:borg-warner-trophy", "trophy:americas-cup", "trophy:calder-cup", "trophy:kelly-cup", "trophy:cfp-trophy", "trophy:mls-cup"];
44
44
  readonly medal: readonly ["medal:gold", "medal:silver", "medal:bronze", "medal:place-1", "medal:place-2", "medal:place-3"];
45
45
  readonly crest: readonly ["crest:shield", "crest:roundel", "crest:diamond", "crest:pennant"];
46
46
  readonly ball: readonly ["ball:soccer", "ball:soccer-colour", "ball:soccer-26", "ball:soccer-18", "ball:soccer-14", "ball:soccer-12", "ball:soccer-6", "ball:soccer-orange", "ball:soccer-26-orange", "ball:soccer-18-orange", "ball:soccer-14-orange", "ball:soccer-12-orange", "ball:soccer-6-orange", "ball:soccer-yellow", "ball:soccer-26-yellow", "ball:soccer-18-yellow", "ball:soccer-14-yellow", "ball:soccer-12-yellow", "ball:soccer-6-yellow", "ball:futsal", "ball:beach-soccer", "ball:soccer-1870-hand-stitched", "ball:soccer-1900-laced", "ball:soccer-1930-18-panel", "ball:soccer-1950-12-panel", "ball:soccer-1960-32-panel-leather", "ball:soccer-retro-pentagons", "ball:soccer-retro-leaves", "ball:soccer-retro-rosette", "ball:soccer-retro-star", "ball:soccer-retro-pinwheel", "ball:soccer-retro-kites", "ball:soccer-14-panel-double-border", "ball:soccer-8-panel-plain", "ball:soccer-6-panel-bands", "ball:soccer-6-panel-diamonds", "ball:soccer-20-panel-dots", "ball:soccer-training-high-vis", "ball:soccer-stars-blue", "ball:soccer-stars-red", "ball:soccer-stars-night", "ball:soccer-hexagons-cyan", "ball:soccer-hexagons-magenta", "ball:soccer-hexagons-lime", "ball:soccer-flames-fire", "ball:soccer-flames-ice", "ball:soccer-flames-toxic", "ball:soccer-chevrons-red", "ball:soccer-chevrons-green", "ball:soccer-chevrons-blue", "ball:soccer-swirl-blue", "ball:soccer-swirl-red", "ball:soccer-swirl-teal", "ball:soccer-metallic-gold", "ball:soccer-metallic-silver", "ball:soccer-metallic-cobalt", "ball:teqball", "ball:basketball", "ball:basketball-6", "ball:basketball-3x3", "ball:baseball", "ball:softball", "ball:baseball-lemon-peel", "ball:baseball-red-blue", "ball:baseball-black-red", "ball:baseball-vintage-leather", "ball:softball-11-optic", "ball:tennis", "ball:padel", "ball:sliotar", "ball:volleyball", "ball:volleyball-8", "ball:beach-volleyball", "ball:volleyball-colours", "ball:volleyball-brazil", "ball:volleyball-japan", "ball:volleyball-canada", "ball:volleyball-usa", "ball:volleyball-italy", "ball:volleyball-poland", "ball:volleyball-france", "ball:volleyball-serbia", "ball:volleyball-netherlands", "ball:volleyball-germany", "ball:cricket-red", "ball:cricket-white", "ball:cricket-pink", "ball:football", "ball:football-cfl", "ball:football-ifaf", "ball:rugby", "ball:afl", "ball:gaelic-football", "ball:netball", "ball:pickleball-outdoor", "ball:pickleball-indoor", "ball:plastic-baseball-slotted", "ball:squash", "ball:squash-yellow", "ball:squash-green", "ball:squash-red", "ball:squash-blue", "ball:racquetball", "ball:lacrosse", "ball:field-hockey", "ball:table-tennis", "ball:handball", "ball:water-polo", "ball:golf", "ball:puck", "ball:curling-stone", "ball:shot", "ball:discus", "ball:hammer", "ball:sepak-takraw", "ball:roundnet", "ball:shuttlecock-feather", "ball:shuttlecock-nylon"];
47
47
  readonly puck: readonly ["puck:canada", "puck:canada-red", "puck:canada-white", "puck:usa", "puck:usa-navy", "puck:player", "puck:signed", "puck:souvenir"];
48
- readonly gear: readonly ["gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket", "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle", "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:football-helmet", "gear:goalposts", "gear:hurley", "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles", "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "gear:yumi", "gear:ya", "gear:karate-gi"];
48
+ readonly gear: readonly ["gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket", "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle", "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:baseball-cap", "gear:football-helmet", "gear:goalposts", "gear:hurley", "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles", "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "gear:yumi", "gear:ya", "gear:karate-gi"];
49
49
  readonly sport: readonly ("sport:sumo" | "sport:kendo" | "sport:judo" | "sport:kyudo" | "sport:karate" | "sport:nfl" | "sport:cfl" | "sport:ifaf" | "sport:nhl" | "sport:nba" | "sport:mlb" | "sport:soccer" | "sport:curling" | "sport:tennis" | "sport:volleyball" | "sport:badminton" | "sport:pickleball" | "sport:tabletennis" | "sport:padel" | "sport:squash" | "sport:racquetball" | "sport:sepaktakraw" | "sport:teqball" | "sport:roundnet" | "sport:netball" | "sport:swimming" | "sport:waterpolo" | "sport:diving" | "sport:artisticswimming" | "sport:lacrosse" | "sport:rugby" | "sport:afl" | "sport:gaelic" | "sport:cricket" | "sport:fieldhockey" | "sport:handball" | "sport:athletics" | "sport:skating" | "sport:mma" | "sport:boxing" | "sport:wrestling" | "sport:prowrestling")[];
50
50
  readonly pennant: readonly ["pennant:championship"];
51
51
  };
@@ -42,6 +42,9 @@ export const TROPHY_IDS = [
42
42
  "trophy:grey-cup",
43
43
  "trophy:cy-young-award",
44
44
  "trophy:mlb-mvp-award",
45
+ "trophy:relief-man-award",
46
+ "trophy:hank-aaron-award",
47
+ "trophy:bill-russell-trophy",
45
48
  "trophy:walter-cup",
46
49
  "trophy:wnba-championship-trophy",
47
50
  "trophy:lamar-hunt-trophy",
@@ -63,6 +66,10 @@ export const TROPHY_IDS = [
63
66
  "trophy:ashes-urn",
64
67
  "trophy:borg-warner-trophy",
65
68
  "trophy:americas-cup",
69
+ "trophy:calder-cup",
70
+ "trophy:kelly-cup",
71
+ "trophy:cfp-trophy",
72
+ "trophy:mls-cup",
66
73
  ];
67
74
  /** The medals on a ribbon, and the badges for the first three places. */
68
75
  export const MEDAL_KINDS = ["gold", "silver", "bronze"];
@@ -85,7 +92,7 @@ export const PUCK_IDS = ["puck:canada", "puck:canada-red", "puck:canada-white",
85
92
  export const GEAR_IDS = [
86
93
  "gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket",
87
94
  "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle",
88
- "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:football-helmet", "gear:goalposts", "gear:hurley",
95
+ "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:baseball-cap", "gear:football-helmet", "gear:goalposts", "gear:hurley",
89
96
  "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles",
90
97
  "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back",
91
98
  "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6",
@@ -1,9 +1,25 @@
1
- import { type Emblem, type EmblemSource, type Metal } from "./emblem.core.ts";
1
+ import { type Emblem, type EmblemSource, type Metal, type Rgb } from "./emblem.core.ts";
2
2
  import { type Band } from "./emblem.engrave.ts";
3
3
  /** A point of the profile: the height `y` (0 at the top of the 64 unit box), the radius `r` from the axis (x = 32), 1 for a sharp corner (a smooth run of points ends at one), and the tone of the piece that starts here. */
4
4
  export type Pt = readonly [y: number, r: number, corner?: 0 | 1, tone?: string];
5
5
  /** Something drawn on the surface, by height and angle (90 degrees is the right side, 0 faces the eye): a `ring` round the body at a height; `mer`idians from one height to another; `helix` strands that wind `turns` times; a diamond `net`; `dots` (beads) round at a height with a size; on an open top, a `disc` of a tone out to a radius and `pills`, short rounded marks, round a radius. */
6
- export type Decor = readonly ["ring", y: number] | readonly ["mer", y0: number, y1: number, n: number, off?: number] | readonly ["helix", y0: number, y1: number, n: number, turns: number] | readonly ["net", y0: number, y1: number, n: number] | readonly ["dots", y: number, n: number, size: number, off?: number] | readonly ["disc", rho: number, tone: string] | readonly ["pills", rho: number, n: number, length: number, width: number, tone: string];
6
+ export type Decor = readonly ["ring", y: number] | readonly ["mer", y0: number, y1: number, n: number, off?: number] | readonly ["helix", y0: number, y1: number, n: number, turns: number] | readonly ["net", y0: number, y1: number, n: number] | readonly ["dots", y: number, n: number, size: number, off?: number] | readonly ["disc", rho: number, tone: string] | readonly ["pills", rho: number, n: number, length: number, width: number, tone: string] | ExtraDecor;
7
+ /**
8
+ * Decorations that only some bodies use, drawn by the model's own `extras` (`lathe.extras.ts`) so that a body without them carries none of their code: a `mesh` is `rows` rows of diamonds stacked down the body from `y0` to `y1`
9
+ * with `n` strands round (strands that wind a column to the side at each row, one way and the other: an etched net); a `patch` is a tone laid on a round body between two angles and two heights (a shield on a helmet); a
10
+ * `panel` is a tone laid on one flat face of a body with flat sides, from a fraction `u0` to `u1` across the face (a nameplate on a block).
11
+ */
12
+ export type ExtraDecor = readonly ["mesh", y0: number, y1: number, n: number, rows: number] | readonly ["patch", y0: number, y1: number, deg0: number, deg1: number, tone: string] | readonly ["panel", face: number, y0: number, y1: number, u0: number, u1: number, tone: string];
13
+ /** What a drawer of `extras` is given: the solid, the turn and the helpers that place a point of its surface. */
14
+ export interface DecorCtx {
15
+ p: readonly Pt[];
16
+ solid: Solid;
17
+ yaw: number;
18
+ base: Tone;
19
+ tone: (name?: string) => Tone;
20
+ at: (R: number, y: number, deg: number) => readonly [number, number, number];
21
+ where: (R: number, y: number, deg: number) => string;
22
+ }
7
23
  /** One solid of revolution: a profile from the top down, whether its top is an open rim, how many flat sides it has (none: round) and what is drawn on it. */
8
24
  export interface Solid {
9
25
  p: readonly Pt[];
@@ -69,8 +85,18 @@ export interface LatheModel {
69
85
  poles?: Poles;
70
86
  /** The plinth: the band of the body (heights, the tone it is cut into, and for a body with flat sides which side) that holds an engraving, which turns with the body. */
71
87
  plate?: Band;
88
+ /** Draws the `mesh`, `patch` and `panel` decorations of the solids (`LATHE_EXTRAS` in `lathe.extras.ts`); a body that uses none leaves it out. */
89
+ extras?: (c: DecorCtx, d: ExtraDecor) => string;
72
90
  }
73
91
  /** The radius of the body at a height. */
74
92
  export declare function radiusAt(profile: readonly Pt[], y: number): number;
93
+ /** One tone: its colour, its fill in the style, and the colours it makes. */
94
+ export interface Tone {
95
+ rgb: Rgb;
96
+ fill: string;
97
+ light: string;
98
+ deep: string;
99
+ edge: string;
100
+ }
75
101
  /** A lathe emblem: the object with its names and its model, the still drawing and the turned one. */
76
102
  export declare function defineLathe(id: string, en: string, ja: string, source: EmblemSource, model: LatheModel): Emblem<LatheModel>;
@@ -137,7 +137,7 @@ function draw(model, r, o, yaw, pitch) {
137
137
  const a0 = (360 * face) / n + yaw + (solid.turn ?? 0);
138
138
  const a1 = (360 * (face + 1)) / n + yaw + (solid.turn ?? 0);
139
139
  const m = (a0 + a1) / 2;
140
- if (Math.cos(m * RAD) <= 0)
140
+ if (Math.cos(m * RAD) <= 1e-9)
141
141
  continue;
142
142
  const lit = -Math.sin(m * RAD);
143
143
  const colour = line ? "none" : mix(t.rgb, 0.18 + 0.36 * lit);
@@ -242,6 +242,11 @@ function draw(model, r, o, yaw, pitch) {
242
242
  }
243
243
  mid.push(`<path d="${m}" stroke-width="${width}" stroke="${t.edge}"/><path d="${m}" stroke-width="${width - 0.9}" stroke="${t.light}"/>`);
244
244
  }
245
+ else if (model.extras !== undefined) {
246
+ const m = model.extras({ p, solid, yaw, base, tone, at, where }, d);
247
+ if (m !== "")
248
+ mid.push(m);
249
+ }
245
250
  }
246
251
  // A solid that stands off the axis is moved to its place, behind the body when it is on the far side and in front of it when it is on the near side.
247
252
  if (solid.at !== undefined) {
@@ -470,6 +470,76 @@ export const NAMED_TROPHIES = [
470
470
  first: "1955-56",
471
471
  reference: "File:Trofeo UEFA Champions League.jpg (Wikimedia Commons, CC BY 2.0)",
472
472
  },
473
+ {
474
+ id: "trophy:bill-russell-trophy",
475
+ name: "Bill Russell Trophy",
476
+ sport: "basketball",
477
+ competition: "National Basketball Association",
478
+ kind: "player",
479
+ honours: "The most valuable player of the championship series.",
480
+ first: "1969",
481
+ reference: "A press photograph of the 2022 design standing beside the championship trophy (cbssports.com, 12 May 2022), looked at and measured only; not copied. No freely licensed photograph on Wikimedia Commons (searched 2026-10-27).",
482
+ },
483
+ {
484
+ id: "trophy:hank-aaron-award",
485
+ name: "Hank Aaron Award",
486
+ sport: "baseball",
487
+ competition: "Major League Baseball",
488
+ kind: "player",
489
+ honours: "The best offensive performer of each league.",
490
+ first: "1999",
491
+ reference: "File:Kris Bryant, Hank Aaron, Rob Manfred and David Ortiz during the Aaron Award ceremony. (29955118983).jpg (Wikimedia Commons, CC BY 2.0), looked at and measured only; not copied.",
492
+ },
493
+ {
494
+ id: "trophy:relief-man-award",
495
+ name: "Relief Man Award",
496
+ sport: "baseball",
497
+ competition: "Major League Baseball",
498
+ kind: "player",
499
+ honours: "The top relief pitcher of each league (given 1976 to 2012; the fireman trophy).",
500
+ first: "1976",
501
+ reference: "An auction photograph of a 1981 trophy standing on its base (SCP Auctions lot image), looked at and measured only; not copied; not ours to licence. No photograph on Wikimedia Commons (searched 2026-10-27).",
502
+ },
503
+ {
504
+ id: "trophy:calder-cup",
505
+ name: "Calder Cup",
506
+ sport: "hockey",
507
+ competition: "American Hockey League",
508
+ kind: "champion",
509
+ honours: "The champion of the AHL's playoffs.",
510
+ first: "1936-37",
511
+ reference: "File:LAM 8801 (16408891091).jpg (Wikimedia Commons, CC BY 2.0) for the profile, with File:Calder Cup.JPG (CC BY 3.0) and File:Calder Cup at Crouse Hospital in Syracuse, New York (8960910887).jpg (CC BY-SA 2.0); looked at and measured only; not copied.",
512
+ },
513
+ {
514
+ id: "trophy:kelly-cup",
515
+ name: "Kelly Cup",
516
+ sport: "hockey",
517
+ competition: "ECHL",
518
+ kind: "champion",
519
+ honours: "The champion of the ECHL's playoffs (the Patrick J. Kelly Cup).",
520
+ first: "1997",
521
+ reference: "File:Kelly Cup.jpg (Wikimedia Commons, CC BY-SA 3.0), looked at and measured only; not copied.",
522
+ },
523
+ {
524
+ id: "trophy:cfp-trophy",
525
+ name: "College Football Playoff National Championship Trophy",
526
+ sport: "football",
527
+ competition: "College Football Playoff",
528
+ kind: "champion",
529
+ honours: "The national champion of NCAA Division I college football (FBS).",
530
+ first: "2015",
531
+ reference: "File:2019 CFP - trophy on the sidelines (crop).jpg (Wikimedia Commons, CC BY-SA 4.0), a photograph of the trophy standing at a distance, looked at and measured only; not copied.",
532
+ },
533
+ {
534
+ id: "trophy:mls-cup",
535
+ name: "MLS Cup",
536
+ sport: "soccer",
537
+ competition: "Major League Soccer",
538
+ kind: "champion",
539
+ honours: "The champion of Major League Soccer's playoffs (the Philip F. Anschutz Trophy).",
540
+ first: "1996",
541
+ reference: "File:KC Ballet & Sporting KC (11232058043).jpg (Wikimedia Commons, CC BY 2.0), looked at and measured only; not copied.",
542
+ },
473
543
  ];
474
544
  /** The facts of a named trophy by its emblem id, or `undefined` for a generic trophy. */
475
545
  export function namedTrophy(id) {
@@ -54,6 +54,9 @@ import { TROPHY_COMMISSIONERS_TROPHY } from "./trophy/commissioners-trophy.js";
54
54
  import { TROPHY_GREY_CUP } from "./trophy/grey-cup.js";
55
55
  import { TROPHY_CY_YOUNG_AWARD } from "./trophy/cy-young-award.js";
56
56
  import { TROPHY_MLB_MVP_AWARD } from "./trophy/mlb-mvp-award.js";
57
+ import { TROPHY_RELIEF_MAN_AWARD } from "./trophy/relief-man-award.js";
58
+ import { TROPHY_HANK_AARON_AWARD } from "./trophy/hank-aaron-award.js";
59
+ import { TROPHY_BILL_RUSSELL_TROPHY } from "./trophy/bill-russell-trophy.js";
57
60
  import { TROPHY_WALTER_CUP } from "./trophy/walter-cup.js";
58
61
  import { TROPHY_WNBA_CHAMPIONSHIP_TROPHY } from "./trophy/wnba-championship-trophy.js";
59
62
  import { TROPHY_LAMAR_HUNT_TROPHY } from "./trophy/lamar-hunt-trophy.js";
@@ -66,6 +69,10 @@ import { TROPHY_FIFA_WORLD_CUP } from "./trophy/fifa-world-cup.js";
66
69
  import { TROPHY_WOODLAWN_VASE } from "./trophy/woodlawn-vase.js";
67
70
  import { TROPHY_DFB_POKAL } from "./trophy/dfb-pokal.js";
68
71
  import { TROPHY_CHAMPIONS_LEAGUE_TROPHY } from "./trophy/champions-league-trophy.js";
72
+ import { TROPHY_CALDER_CUP } from "./trophy/calder-cup.js";
73
+ import { TROPHY_KELLY_CUP } from "./trophy/kelly-cup.js";
74
+ import { TROPHY_CFP_TROPHY } from "./trophy/cfp-trophy.js";
75
+ import { TROPHY_MLS_CUP } from "./trophy/mls-cup.js";
69
76
  import { TROPHY_WEBB_ELLIS_CUP } from "./trophy/webb-ellis-cup.js";
70
77
  import { TROPHY_FA_CUP } from "./trophy/fa-cup.js";
71
78
  import { TROPHY_CRICKET_WORLD_CUP } from "./trophy/cricket-world-cup.js";
@@ -174,6 +181,10 @@ const OWN = {
174
181
  "trophy:fa-cup": TROPHY_FA_CUP,
175
182
  "trophy:webb-ellis-cup": TROPHY_WEBB_ELLIS_CUP,
176
183
  "trophy:champions-league-trophy": TROPHY_CHAMPIONS_LEAGUE_TROPHY,
184
+ "trophy:calder-cup": TROPHY_CALDER_CUP,
185
+ "trophy:kelly-cup": TROPHY_KELLY_CUP,
186
+ "trophy:cfp-trophy": TROPHY_CFP_TROPHY,
187
+ "trophy:mls-cup": TROPHY_MLS_CUP,
177
188
  "trophy:dfb-pokal": TROPHY_DFB_POKAL,
178
189
  "trophy:woodlawn-vase": TROPHY_WOODLAWN_VASE,
179
190
  "trophy:fifa-world-cup": TROPHY_FIFA_WORLD_CUP,
@@ -187,6 +198,9 @@ const OWN = {
187
198
  "trophy:walter-cup": TROPHY_WALTER_CUP,
188
199
  "trophy:mlb-mvp-award": TROPHY_MLB_MVP_AWARD,
189
200
  "trophy:cy-young-award": TROPHY_CY_YOUNG_AWARD,
201
+ "trophy:relief-man-award": TROPHY_RELIEF_MAN_AWARD,
202
+ "trophy:hank-aaron-award": TROPHY_HANK_AARON_AWARD,
203
+ "trophy:bill-russell-trophy": TROPHY_BILL_RUSSELL_TROPHY,
190
204
  "trophy:grey-cup": TROPHY_GREY_CUP,
191
205
  "trophy:commissioners-trophy": TROPHY_COMMISSIONERS_TROPHY,
192
206
  "trophy:larry-obrien-trophy": TROPHY_LARRY_OBRIEN_TROPHY,
@@ -0,0 +1 @@
1
+ export declare const GEAR_BASEBALL_CAP: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
@@ -0,0 +1,29 @@
1
+ // A baseball cap in three-quarter view with its brim toward the lower left, drawn for this package from two photographs of plain caps (docs/likeness-sources.md): the crown is a dome that is widest low at the back, with a
2
+ // button and a front seam set off to the right of the middle, three eyelets, and a brim that is a wide curved shield with its edge, its underside and rows of stitching. No team mark, lettering or brand. It turns with the gear coin-flip.
3
+ import { drawn, ellipse } from "./gear.core.js";
4
+ export const GEAR_BASEBALL_CAP = /* @__PURE__ */ drawn("gear:baseball-cap", "Baseball cap", "野球帽", {
5
+ main: "#243656",
6
+ accent: "#d5dde6",
7
+ parts: [
8
+ // The crown: a dome from the back of the head over the button down to the band, dropping lower at the back and the right.
9
+ { d: "M16.6 31.4C13.4 22.4 15.4 15.2 22 11.2C27.6 8 34.8 7.4 41.4 9C50 11.2 57.4 16.6 59.2 25.4C60.4 31.8 59.8 37.6 56 41.8C50.8 44.4 43.6 44.8 36.4 43.2C28.2 41.6 21 37.6 16.6 31.4Z", fill: "$main", cyl: 0.6 },
10
+ // The seams of the panels: the front seam to the right of the button, one behind it, and the one on the left side.
11
+ { d: "M38.6 9.2C41.4 18.4 44.6 28 45.4 42.4", fill: "none", stroke: "#152238", w: 0.9, line: "stroke" },
12
+ { d: "M45.4 9.8C53.6 14 57 21 57.8 28", fill: "none", stroke: "#152238", w: 0.8, line: "stroke" },
13
+ // The button, then the eyelets.
14
+ { d: ellipse(36, 8.7, 3.1, 1.9), fill: "$accent", stroke: "#8f9bab", shade: 0.3 },
15
+ { d: ellipse(21.5, 17.6, 1.2, 1.1), fill: "#101828", stroke: "$accent", w: 0.6, shade: 0 },
16
+ { d: ellipse(34.4, 21, 1.2, 1.1), fill: "#101828", stroke: "$accent", w: 0.6, shade: 0 },
17
+ { d: ellipse(50.6, 19, 1.2, 1.1), fill: "#101828", stroke: "$accent", w: 0.6, shade: 0 },
18
+ // A light on the dome, from the upper left.
19
+ { d: "M21.6 16.6C25 12.6 30.6 10.4 35.2 10.4", fill: "none", stroke: "#fff", w: 1.8, op: 0.3, line: "none", fx: true },
20
+ // The brim: the top is a curved shield, widest at the front, with its edge, which is a thin band along the outer curve, and four rows of stitching.
21
+ { d: "M4.6 41.8C9 36.4 13.8 32.6 18 30.4C21.4 37 27.4 41.2 35 43C42 44.4 48.4 44.2 54.6 40.6C55.8 47.6 52 52.6 44.6 55C34.6 58 19.6 56 11.8 49.8C7.6 46.8 5.4 44.4 4.6 41.8Z", t: "translate(0 1.7)", fill: "#17233a", stroke: "#101828", shade: 0.4 },
22
+ { d: "M4.6 41.8C9 36.4 13.8 32.6 18 30.4C21.4 37 27.4 41.2 35 43C42 44.4 48.4 44.2 54.6 40.6C55.8 47.6 52 52.6 44.6 55C34.6 58 19.6 56 11.8 49.8C7.6 46.8 5.4 44.4 4.6 41.8Z", fill: "#2c4264", stroke: "#1a2740", cyl: 0.35 },
23
+ { d: "M9.6 41.2C16 46.4 25.6 50.2 35.4 50.2C43.2 50.2 49.4 47.8 52.2 43.6M12.6 39.4C18.8 44.6 27.2 47.6 36 47.6C42.2 47.6 47.2 45.8 50.4 42.8M16 36.8C21.8 41.4 28.6 44.2 36.2 44.6", fill: "none", stroke: "$accent", w: 0.45, op: 0.55, line: "none" },
24
+ // The band where the crown meets the brim.
25
+ { d: "M18 30.6C22 37.4 28 41.4 36 43.2C43.6 44.6 49.6 44.2 55 41", fill: "none", stroke: "#101828", w: 1.3, line: "stroke" },
26
+ // The light along the top of the brim.
27
+ { d: "M9 40.6C13 36.4 16 34.4 18.4 33.2", fill: "none", stroke: "#fff", w: 1.4, op: 0.28, line: "none", fx: true },
28
+ ],
29
+ });
@@ -1,4 +1,5 @@
1
1
  import { GEAR_BADMINTON_RACKET } from "./gear.badmintonracket.js";
2
+ import { GEAR_BASEBALL_CAP } from "./gear.baseballcap.js";
2
3
  import { GEAR_BASEBALL_GLOVE } from "./gear.baseballglove.js";
3
4
  import { GEAR_CRICKET_BAT } from "./gear.cricketbat.js";
4
5
  import { GEAR_BASEBALL_BAT, GEAR_BASKETBALL_HOOP, GEAR_VOLLEYBALL_NET, GEAR_GOALPOSTS, GEAR_WICKET, GEAR_ROUNDNET_SET } from "./gear.field.js";
@@ -22,7 +23,7 @@ import { GEAR_JUDOGI, GEAR_JUDOGI_BLUE, GEAR_JUDOGI_FOLDED, GEAR_JUDOGI_BLUE_FOL
22
23
  import { GEAR_OBI_STEP_1, GEAR_OBI_STEP_2, GEAR_OBI_STEP_3, GEAR_OBI_STEP_4, GEAR_OBI_STEP_5, GEAR_OBI_STEP_6 } from "./gear.budo.steps.js";
23
24
  import { GEAR_YUMI, GEAR_YA } from "./gear.kyudo.js";
24
25
  /** Every piece of gear, in the order a gallery shows them. */
25
- export const GEARS = [GEAR_HOCKEY_STICK, GEAR_GOALIE_STICK, GEAR_HOCKEY_SKATE, GEAR_GOALIE_MASK, GEAR_GOAL_NET, GEAR_FIELD_HOCKEY_STICK, GEAR_LACROSSE_STICK, GEAR_CRICKET_BAT, GEAR_WICKET, GEAR_TABLE_TENNIS_PADDLE, GEAR_BADMINTON_RACKET, GEAR_TENNIS_RACKET, GEAR_SQUASH_RACKET, GEAR_RACQUETBALL_RACKET, GEAR_PADEL_RACKET, GEAR_PICKLEBALL_PADDLE, GEAR_ROUNDNET_SET, GEAR_TAKRAW_NET, GEAR_NETBALL_POST, GEAR_TEQBALL_TABLE, GEAR_VOLLEYBALL_NET, GEAR_BASKETBALL_HOOP, GEAR_BASEBALL_BAT, GEAR_BASEBALL_GLOVE, GEAR_FOOTBALL_HELMET, GEAR_GOALPOSTS, GEAR_HURLEY, GEAR_CURLING_BROOM, GEAR_FIGURE_SKATE, GEAR_SPEED_SKATE, GEAR_DIVING_BOARD, GEAR_SWIM_GOGGLES, GEAR_STARTING_BLOCKS, GEAR_RELAY_BATON, GEAR_JAVELIN, GEAR_HURDLES, GEAR_GUNBAI, GEAR_MAWASHI, GEAR_SHINAI, GEAR_KENDO_MEN, GEAR_JUDOGI, GEAR_JUDOGI_BLUE, GEAR_JUDOGI_FOLDED, GEAR_JUDOGI_BLUE_FOLDED, GEAR_JUDOGI_BACK, GEAR_JUDOGI_BLUE_BACK, GEAR_OBI, GEAR_OBI_WHITE, GEAR_OBI_YELLOW, GEAR_OBI_ORANGE, GEAR_OBI_GREEN, GEAR_OBI_BLUE, GEAR_OBI_BROWN, GEAR_OBI_KOHAKU, GEAR_OBI_RED, GEAR_OBI_WOMEN, GEAR_OBI_WHITE_YELLOW, GEAR_OBI_YELLOW_ORANGE, GEAR_OBI_ORANGE_GREEN, GEAR_OBI_GREEN_BLUE, GEAR_OBI_BLUE_BROWN, GEAR_OBI_STEP_1, GEAR_OBI_STEP_2, GEAR_OBI_STEP_3, GEAR_OBI_STEP_4, GEAR_OBI_STEP_5, GEAR_OBI_STEP_6, GEAR_YUMI, GEAR_YA, GEAR_KARATE_GI];
26
+ export const GEARS = [GEAR_HOCKEY_STICK, GEAR_GOALIE_STICK, GEAR_HOCKEY_SKATE, GEAR_GOALIE_MASK, GEAR_GOAL_NET, GEAR_FIELD_HOCKEY_STICK, GEAR_LACROSSE_STICK, GEAR_CRICKET_BAT, GEAR_WICKET, GEAR_TABLE_TENNIS_PADDLE, GEAR_BADMINTON_RACKET, GEAR_TENNIS_RACKET, GEAR_SQUASH_RACKET, GEAR_RACQUETBALL_RACKET, GEAR_PADEL_RACKET, GEAR_PICKLEBALL_PADDLE, GEAR_ROUNDNET_SET, GEAR_TAKRAW_NET, GEAR_NETBALL_POST, GEAR_TEQBALL_TABLE, GEAR_VOLLEYBALL_NET, GEAR_BASKETBALL_HOOP, GEAR_BASEBALL_BAT, GEAR_BASEBALL_GLOVE, GEAR_BASEBALL_CAP, GEAR_FOOTBALL_HELMET, GEAR_GOALPOSTS, GEAR_HURLEY, GEAR_CURLING_BROOM, GEAR_FIGURE_SKATE, GEAR_SPEED_SKATE, GEAR_DIVING_BOARD, GEAR_SWIM_GOGGLES, GEAR_STARTING_BLOCKS, GEAR_RELAY_BATON, GEAR_JAVELIN, GEAR_HURDLES, GEAR_GUNBAI, GEAR_MAWASHI, GEAR_SHINAI, GEAR_KENDO_MEN, GEAR_JUDOGI, GEAR_JUDOGI_BLUE, GEAR_JUDOGI_FOLDED, GEAR_JUDOGI_BLUE_FOLDED, GEAR_JUDOGI_BACK, GEAR_JUDOGI_BLUE_BACK, GEAR_OBI, GEAR_OBI_WHITE, GEAR_OBI_YELLOW, GEAR_OBI_ORANGE, GEAR_OBI_GREEN, GEAR_OBI_BLUE, GEAR_OBI_BROWN, GEAR_OBI_KOHAKU, GEAR_OBI_RED, GEAR_OBI_WOMEN, GEAR_OBI_WHITE_YELLOW, GEAR_OBI_YELLOW_ORANGE, GEAR_OBI_ORANGE_GREEN, GEAR_OBI_GREEN_BLUE, GEAR_OBI_BLUE_BROWN, GEAR_OBI_STEP_1, GEAR_OBI_STEP_2, GEAR_OBI_STEP_3, GEAR_OBI_STEP_4, GEAR_OBI_STEP_5, GEAR_OBI_STEP_6, GEAR_YUMI, GEAR_YA, GEAR_KARATE_GI];
26
27
  /** The id of every piece of gear: `"gear:hockey-stick"`. */
27
28
  export const GEAR_IDS = GEARS.map((g) => g.id);
28
29
  const TABLE = new Map(GEARS.map((g) => [g.id, g]));
@@ -0,0 +1,3 @@
1
+ import { type DecorCtx, type ExtraDecor } from "./emblem.lathe.ts";
2
+ /** Draws one extra decoration of a solid, as markup ("" when none of it shows). */
3
+ export declare function LATHE_EXTRAS(c: DecorCtx, d: ExtraDecor): string;
@@ -0,0 +1,59 @@
1
+ // The decorations a few bodies of revolution use and most do not (see `ExtraDecor` in emblem.lathe.ts): an etched net of many diamonds, a shield laid on a round body, a nameplate laid on a flat face. A model that
2
+ // wants them sets `extras: LATHE_EXTRAS`; one that does not never imports this file, so its bundle carries none of the code.
3
+ import { mix } from "./emblem.core.js";
4
+ import { radiusAt } from "./emblem.lathe.js";
5
+ const RAD = Math.PI / 180;
6
+ const f = (n) => String(Math.round(n * 10) / 10 + 0);
7
+ const pt = (x, y) => `${f(x)} ${f(y)}`;
8
+ /** Draws one extra decoration of a solid, as markup ("" when none of it shows). */
9
+ export function LATHE_EXTRAS(c, d) {
10
+ const { p, solid, yaw, where, at } = c;
11
+ if (d[0] === "mesh") {
12
+ const [, y0, y1, n, rows] = d;
13
+ let m = "";
14
+ for (let i = 0; i < n; i++) {
15
+ for (const way of [1, -1]) {
16
+ let pen = false;
17
+ for (let j = 0; j <= rows * 4; j++) {
18
+ const u = j / (rows * 4);
19
+ const y = y0 + (y1 - y0) * u;
20
+ const deg = yaw + (360 * (i + way * rows * u)) / n;
21
+ if (Math.cos(deg * RAD) <= 0.05) {
22
+ pen = false;
23
+ continue;
24
+ }
25
+ m += `${pen ? "L" : "M"}${where(radiusAt(p, y), y, deg)}`;
26
+ pen = true;
27
+ }
28
+ }
29
+ }
30
+ return m === "" ? "" : `<path d="${m}" stroke="${mix(c.base.rgb, 0.55)}" stroke-width=".55" stroke-opacity=".9"/>`;
31
+ }
32
+ if (d[0] === "patch") {
33
+ const [, y0, y1, deg0, deg1, name] = d;
34
+ const t = c.tone(name);
35
+ const top = [];
36
+ const bottom = [];
37
+ for (let j = 0; j <= 12; j++) {
38
+ const deg = yaw + deg0 + ((deg1 - deg0) * j) / 12;
39
+ if (Math.cos(deg * RAD) <= 0.04)
40
+ continue;
41
+ top.push(where(radiusAt(p, y0), y0, deg));
42
+ bottom.unshift(where(radiusAt(p, y1), y1, deg));
43
+ }
44
+ return top.length > 1 ? `<path d="M${top.join("L")}L${bottom.join("L")}z" fill="${t.fill}" stroke="${t.edge}" stroke-width=".5"/>` : "";
45
+ }
46
+ const [, face, y0, y1, u0, u1, name] = d;
47
+ const n = solid.sides ?? 0;
48
+ const a0 = (360 * face) / (n || 1) + yaw + (solid.turn ?? 0);
49
+ const a1 = (360 * (face + 1)) / (n || 1) + yaw + (solid.turn ?? 0);
50
+ if (n === 0 || Math.cos(((a0 + a1) / 2) * RAD) <= 1e-9)
51
+ return "";
52
+ const t = c.tone(name);
53
+ const lerp = (y, u) => {
54
+ const c0 = at(radiusAt(p, y), y, a0);
55
+ const c1 = at(radiusAt(p, y), y, a1);
56
+ return pt(c0[0] + (c1[0] - c0[0]) * u, c0[1] + (c1[1] - c0[1]) * u);
57
+ };
58
+ return `<path d="M${lerp(y0, u0)}L${lerp(y0, u1)}L${lerp(y1, u1)}L${lerp(y1, u0)}z" fill="${t.fill}" stroke="${t.edge}" stroke-width=".5"/>`;
59
+ }
@@ -0,0 +1,2 @@
1
+ /** The Bill Russell NBA Finals Most Valuable Player Trophy: a gold basketball on a flared net goblet over a stepped round foot. */
2
+ export declare const TROPHY_BILL_RUSSELL_TROPHY: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,24 @@
1
+ // A gold basketball seated straight on the flared rim of a tall goblet: the body is a net-patterned cup that narrows in a long concave curve to a slim waist, then flares into a round foot of two stacked tiers, the upper one
2
+ // holding the plain band for the engraving. Drawn for this package from a press photograph of the trophy standing beside the championship trophy (docs/likeness.md): the ball is a third of the height, the rim is wider than the ball,
3
+ // the waist is under half the width of the rim and the foot is nearly as wide as the rim; the lettering and the etched strands are left out (the net is a diamond net in the model).
4
+ import { defineLathe } from "../emblem.lathe.js";
5
+ import { LATHE_EXTRAS } from "../lathe.extras.js";
6
+ /** The Bill Russell NBA Finals Most Valuable Player Trophy: a gold basketball on a flared net goblet over a stepped round foot. */
7
+ export const TROPHY_BILL_RUSSELL_TROPHY = /* @__PURE__ */ defineLathe("trophy:bill-russell-trophy", "Bill Russell Trophy", "ビル・ラッセル・トロフィー", "ours", {
8
+ extras: LATHE_EXTRAS,
9
+ metal: "gold",
10
+ turnBox: "-3.7 0 71.4 71.4",
11
+ tilt: 8,
12
+ solids: [
13
+ {
14
+ p: [
15
+ [22.3, 5, 1], [22.3, 11.3, 1], [22.9, 11.3, 1], [23.5, 10.4], [24.4, 9.9],
16
+ [26.5, 8.7], [28.7, 7.5], [32, 6.6], [35.1, 6.1], [38.5, 5.5], [41.5, 4.9], [44.2, 4.4], [46.4, 4.15], [49.6, 3.9], [50.9, 4.4], [51.9, 6.4], [52.6, 8.6, 1],
17
+ [52.7, 9.1, 1], [56.1, 9.4, 1], [56.2, 10, 1], [58.4, 10.3, 1], [60.2, 10.4], [60.8, 9.9, 1],
18
+ ],
19
+ decor: [["mesh", 25.2, 48.6, 8, 5], ["ring", 54.2], ["ring", 56.2]],
20
+ },
21
+ ],
22
+ balls: [{ kind: "basket", cy: 12.7, r: 9.4 }],
23
+ plate: { y0: 53.4, y1: 55.9, face: 0 },
24
+ });
@@ -0,0 +1,2 @@
1
+ /** The Calder Cup of the American Hockey League: a two-handled bowl with a laurel band on a knobbed stem, over a black plinth and two stepped black blocks. */
2
+ export declare const TROPHY_CALDER_CUP: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,38 @@
1
+ // A silver two-handled bowl with a band of laurel leaves round its rim, on a knobbed stem that flares to a bell over a black round plinth, standing on two black blocks of wood, the upper narrower than the lower, each with plates on its faces. Drawn for this package from
2
+ // photographs of the cup (docs/likeness.md): the heights and radii are measured on them, and the plates, the lettering and the laurel's leaves are left plain.
3
+ import { defineLathe } from "../emblem.lathe.js";
4
+ import { LATHE_EXTRAS } from "../lathe.extras.js";
5
+ /** The Calder Cup of the American Hockey League: a two-handled bowl with a laurel band on a knobbed stem, over a black plinth and two stepped black blocks. */
6
+ export const TROPHY_CALDER_CUP = /* @__PURE__ */ defineLathe("trophy:calder-cup", "Calder Cup", "カルダー・カップ", "ours", {
7
+ extras: LATHE_EXTRAS,
8
+ metal: "silver",
9
+ turnBox: "-14.1 -8.7 92.3 92.3",
10
+ tones: { dark: "#08090b", plate: "#9aa1a8" },
11
+ tilt: 9,
12
+ solids: [
13
+ { sides: 4, turn: -45, tone: "dark", at: [16.1, 90], p: [[57.6, 3.9, 1, "dark"], [62.6, 4.1, 1, "dark"]] },
14
+ { sides: 4, turn: -45, tone: "dark", at: [16.1, 270], p: [[57.6, 3.9, 1, "dark"], [62.6, 4.1, 1, "dark"]] },
15
+ {
16
+ sides: 4,
17
+ turn: -45,
18
+ tone: "dark",
19
+ p: [[29.5, 14.5, 1, "dark"], [41.2, 16.1, 1, "dark"], [41.2, 23.8, 1, "dark"], [57.6, 26.4, 1, "dark"]],
20
+ decor: [["panel", 0, 31.7, 39.9, 0.1, 0.47, "plate"], ["panel", 0, 31.7, 39.9, 0.54, 0.92, "plate"], ["panel", 0, 46.6, 56.8, 0.053, 0.31, "plate"], ["panel", 0, 46.6, 56.8, 0.375, 0.625, "plate"], ["panel", 0, 46.6, 56.8, 0.684, 0.94, "plate"], ["panel", 1, 31.7, 39.9, 0.12, 0.46, "plate"], ["panel", 1, 31.7, 39.9, 0.54, 0.88, "plate"], ["panel", 1, 46.6, 56.8, 0.06, 0.32, "plate"], ["panel", 1, 46.6, 56.8, 0.37, 0.63, "plate"], ["panel", 1, 46.6, 56.8, 0.68, 0.94, "plate"], ["panel", 2, 31.7, 39.9, 0.1, 0.47, "plate"], ["panel", 2, 31.7, 39.9, 0.54, 0.92, "plate"], ["panel", 2, 46.6, 56.8, 0.053, 0.31, "plate"], ["panel", 2, 46.6, 56.8, 0.375, 0.625, "plate"], ["panel", 2, 46.6, 56.8, 0.684, 0.94, "plate"], ["panel", 3, 31.7, 39.9, 0.12, 0.46, "plate"], ["panel", 3, 31.7, 39.9, 0.54, 0.88, "plate"], ["panel", 3, 46.6, 56.8, 0.06, 0.32, "plate"], ["panel", 3, 46.6, 56.8, 0.37, 0.63, "plate"], ["panel", 3, 46.6, 56.8, 0.68, 0.94, "plate"]],
21
+ },
22
+ {
23
+ open: true,
24
+ p: [
25
+ [3, 9.5, 1], [3.5, 9.4], [6.2, 9.4, 1], [6.6, 8.9, 1], [7.6, 9.4], [8.5, 9.7], [10.5, 9.5], [12.4, 8.5], [14.1, 6.8], [15.4, 4.7], [16, 3.3, 1],
26
+ [16.9, 3], [17.8, 3.5], [18.8, 4.1], [19.8, 4.1], [20.8, 3.6], [21.6, 2.8], [22.3, 2.7], [22.8, 4.3], [23.3, 4.4], [24.2, 5.6], [25, 6.7], [25.7, 7.3, 1], [25.8, 7.6, 1], [26.4, 7.6, 1],
27
+ [26.5, 7.5, 1, "dark"], [28.5, 7.4, 0, "dark"], [29.8, 7.3, 1, "dark"],
28
+ ],
29
+ decor: [["ring", 3.5], ["ring", 6.2], ["dots", 4.85, 30, 0.45]],
30
+ },
31
+ ],
32
+ handles: [90, -90].map((a) => ({
33
+ a,
34
+ w: 0.8,
35
+ pts: [[4.6, 19.9], [5.4, 19.2], [6, 18], [7.1, 16.9], [9, 16], [11.2, 14.6], [13.1, 12.3], [14, 10.3], [14.5, 8], [14.1, 6], [13.1, 4.8], [11.7, 4.4], [11.1, 5.05], [11.2, 6.6], [11.7, 8.5], [11.1, 9.6], [9.4, 10.05], [8.8, 9.9]],
36
+ })),
37
+ plate: { y0: 46.5, y1: 56.5, face: 0 },
38
+ });
@@ -0,0 +1,2 @@
1
+ /** The College Football Playoff national championship trophy: an upright football on a tall gold column that narrows to a collar, over a black drum. */
2
+ export declare const TROPHY_CFP_TROPHY: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,21 @@
1
+ // An upright dark football with a gilt rim, set on a tall slim column of gold that is widest under the ball and narrows toward a small flared collar, over a black round drum with a plate band. Drawn for this package from photographs
2
+ // of the trophy standing on its base (docs/likeness.md), at a distance, so it is approximate: the ball's laces are the engine's, and the lettering and the marks on the drum and the column are left out.
3
+ import { defineLathe } from "../emblem.lathe.js";
4
+ /** The College Football Playoff national championship trophy: an upright football on a tall gold column that narrows to a collar, over a black drum. */
5
+ export const TROPHY_CFP_TROPHY = /* @__PURE__ */ defineLathe("trophy:cfp-trophy", "CFP Trophy", "CFPトロフィー", "ours", {
6
+ metal: "gold",
7
+ box: "-0.4 0 64.7 64.7",
8
+ turnBox: "-3.1 0 70 70",
9
+ tones: { dark: "#14161b", ball: "#1c2029" },
10
+ tilt: 9,
11
+ solids: [
12
+ {
13
+ p: [
14
+ [18.5, 4.4, 1], [24, 4.1], [32, 3.2], [39.2, 2.4, 1], [40.1, 3.2, 1], [43.4, 4, 1], [43.6, 4.6, 1], [45, 4.6, 1],
15
+ [45.1, 6.2, 1, "dark"], [46, 7, 1, "dark"], [47.5, 7.15, 1, "dark"], [61.7, 7.15, 1, "dark"], [62.2, 6.9, 1, "dark"],
16
+ ],
17
+ },
18
+ ],
19
+ balls: [{ kind: "football", cx: 32, cy: 11.6, r: 6.35, ry: 9.6, tone: "ball" }],
20
+ plate: { y0: 48, y1: 58, face: 0 },
21
+ });
@@ -0,0 +1,2 @@
1
+ /** The Hank Aaron Award: a home-plate block of mahogany with a grey metal face, a bat and two ribbons. */
2
+ export declare const TROPHY_HANK_AARON_AWARD: import("../emblem.core.ts").Emblem<import("../emblem.shapes.ts").FlatModel>;
@@ -0,0 +1,22 @@
1
+ // A mahogany block cut in the shape of home plate, its face a plate of cast grey metal with a bat laid across it from the upper left, and over the bat two ribbons that cross it one above the other, the upper one rising to the right and
2
+ // the lower one falling. Drawn for this package from a photograph of the award held in the hands of the winners (docs/likeness-sources.md); the lettering on the ribbons, the league's mark under them and the engraving are left out.
3
+ import { defineFlat } from "../emblem.shapes.js";
4
+ /** The Hank Aaron Award: a home-plate block of mahogany with a grey metal face, a bat and two ribbons. */
5
+ export const TROPHY_HANK_AARON_AWARD = /* @__PURE__ */ defineFlat("trophy:hank-aaron-award", "Hank Aaron Award", "ハンク・アーロン賞", "ours", {
6
+ metal: "silver",
7
+ ribbon: "#6b2f22",
8
+ front: [
9
+ ["r", "M5.5 5.5H58.5V36.5L32 60L5.5 36.5Z"],
10
+ ["e", "M11 11H53V33.6L32 52.4L11 33.6Z", "1"],
11
+ ["f", "M11.8 11.8H52.2V33.1L32 51.2L11.8 33.1Z", "#474a46"],
12
+ ["s", "M11.8 29.4L32 47.4L52.2 29.4V33.1L32 51.2L11.8 33.1Z"],
13
+ ["l", "M6.8 6.8H57.2V8.6H8.6ZM6.8 6.8L8.6 8.6V35.6L6.8 34.6Z"],
14
+ ["m", "M15.2 12.6L19.6 11.2L47.6 38.4L45.2 41.4Z"],
15
+ ["l", "M17.2 12.6L19.8 11.8L46.6 38L46 39Z"],
16
+ ["m", "M13.4 18C21 16 31 13.4 46 12.6C49 12.4 50.6 12.6 51.6 13.4L49.8 16.6L51.4 20.2C44 21 33 23.4 14 24.8L15.6 21.4Z"],
17
+ ["t", "M15.8 21.4C26 19.4 38 17.4 50 15.8"],
18
+ ["m", "M14 27.6C27 26.4 40 27.4 50.6 24.4L49 28.6L50.8 32.2C40 33.8 27 32.4 14.6 33.6L16.2 30.4Z"],
19
+ ["t", "M16.4 30.4C28 29.8 40 30.2 49.2 28.6"],
20
+ ],
21
+ rim: 3,
22
+ });
@@ -0,0 +1,2 @@
1
+ /** The Kelly Cup of the ECHL: a two-handled silver cup on three black drums with silver-edged bands. */
2
+ export declare const TROPHY_KELLY_CUP: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,32 @@
1
+ // A small two-handled silver cup with a straight-sided bowl, two thin rings under its lip and a short flared foot, standing on a black stack of three drums, each wrapped in a plate band edged with silver, the lowest the widest, on a flat black disc. Drawn for this package
2
+ // from a photograph of the cup on its base (docs/likeness.md): the heights and radii are measured on it, and the plate bands are left plain, for the engraving option.
3
+ import { defineLathe } from "../emblem.lathe.js";
4
+ /** The Kelly Cup of the ECHL: a two-handled silver cup on three black drums with silver-edged bands. */
5
+ export const TROPHY_KELLY_CUP = /* @__PURE__ */ defineLathe("trophy:kelly-cup", "Kelly Cup", "ケリー・カップ", "ours", {
6
+ metal: "silver",
7
+ box: "-1.4 -1 66.9 66.9",
8
+ turnBox: "-12.8 -10.3 89.7 89.7",
9
+ tones: { dark: "#17181c" },
10
+ tilt: 9,
11
+ solids: [
12
+ {
13
+ open: true,
14
+ p: [
15
+ [1.7, 8.4, 1], [2.2, 8.6], [2.6, 8.4, 1], [2.9, 7.4, 1], [3.1, 7.2], [6.5, 7.2], [6.9, 7.6], [7.3, 7.2], [7.7, 7.25], [8.05, 7.6], [8.4, 7.1], [12.7, 6.8], [13.7, 6.5], [14.8, 5.75], [15.6, 4.9], [16.3, 3.7], [16.7, 3.2, 1], [17.1, 3.1],
16
+ [17.8, 2.8], [18, 3.2], [19.05, 4.9], [19.9, 6], [20.3, 6.3], [20.9, 6.4, 1],
17
+ [21.1, 7, 1, "dark"], [21.6, 7.5, 1, "dark"], [21.7, 7.5, 1, "main"], [22, 7.5, 1, "main"], [22.1, 7.5, 1, "dark"], [24.2, 7.5, 1, "dark"], [24.3, 7.5, 1, "main"], [24.6, 7.5, 1, "main"],
18
+ [24.7, 7.8, 1, "dark"], [25.4, 8.2, 1, "dark"], [26.8, 8.6, 1, "dark"], [27.8, 9.5, 1, "dark"], [28.6, 10.6, 1, "dark"],
19
+ [28.7, 11.35, 1, "main"], [29.1, 11.35, 1, "main"], [29.2, 11.35, 1, "dark"], [37.3, 11.4, 1, "dark"], [37.4, 11.4, 1, "main"], [37.8, 11.4, 1, "main"],
20
+ [37.9, 12.2, 1, "dark"], [39.5, 13.6, 1, "dark"], [40.8, 13.7, 1, "dark"], [41.8, 14.6, 1, "dark"], [43.6, 15.4, 1, "dark"],
21
+ [43.7, 15.9, 1, "main"], [44.1, 15.9, 1, "main"], [44.2, 15.9, 1, "dark"], [58.2, 15.9, 1, "dark"], [58.3, 15.9, 1, "main"], [58.7, 15.9, 1, "main"],
22
+ [58.8, 16.2, 1, "dark"], [59.6, 17.2, 1, "dark"], [61.7, 17.5, 1, "dark"],
23
+ ],
24
+ },
25
+ ],
26
+ handles: [90, -90].map((a) => ({
27
+ a,
28
+ w: 0.8,
29
+ pts: [[7.7, 3.9], [8.5, 3.1], [9.5, 2], [10.2, 1.1], [11.3, 1.4], [12, 2.4], [12.5, 3.9], [12.2, 6], [10.9, 8.9], [9.6, 11.1], [8.1, 13.2], [7, 14.5], [7.3, 15]],
30
+ })),
31
+ plate: { y0: 44.2, y1: 58.2 },
32
+ });
@@ -0,0 +1,2 @@
1
+ /** The MLS Cup (the Philip F. Anschutz Trophy): a tall silver goblet with a gilt rim on a flared pedestal, with four blades that sweep out and curl in over the rim. */
2
+ export declare const TROPHY_MLS_CUP: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,24 @@
1
+ // A tall silver goblet with a gilt rim whose bowl narrows steadily to a slim stem and a small knob, on a flared round pedestal with one dark groove, with four fluted blades that sweep up and out from the knob, past the rim, and curl in over it,
2
+ // each a pair of strips, two in front and two behind. Drawn for this package from photographs of the trophy (docs/likeness.md): the blades are tubes, which cannot cross in front of the cup as the real ones do, and the plate on the pedestal and the stars are left out.
3
+ import { defineLathe } from "../emblem.lathe.js";
4
+ const BLADE = [[3.2, 47.4], [7.6, 35.5], [11.6, 24.5], [15.2, 14], [17.8, 5.8], [18.4, 3], [17.3, 1.4], [14.8, 1.6], [12, 3.8], [10.3, 7.2], [9.9, 9.6]];
5
+ const strips = (a) => [-2.6, 2.6].map((d) => ({ a: a + d, w: 2.2, pts: BLADE }));
6
+ /** The MLS Cup (the Philip F. Anschutz Trophy): a tall silver goblet with a gilt rim on a flared pedestal, with four blades that sweep out and curl in over the rim. */
7
+ export const TROPHY_MLS_CUP = /* @__PURE__ */ defineLathe("trophy:mls-cup", "MLS Cup", "MLSカップ", "ours", {
8
+ metal: "silver",
9
+ box: "-1.8 -2 67.6 67.6",
10
+ turnBox: "-14.6 -16.8 93.1 93.1",
11
+ tones: { gilt: "#c9a24a", dark: "#2a2c31" },
12
+ tilt: 9,
13
+ solids: [
14
+ {
15
+ open: true,
16
+ p: [
17
+ [5.5, 9.5, 1, "gilt"], [7.2, 9.1, 1, "gilt"], [7.3, 9.05, 1, "main"], [13.3, 9], [20.3, 7.1], [23.8, 5.7], [27.2, 4.7], [30.7, 3.8], [34.2, 2.9], [37.7, 1.6], [39.8, 1.2, 1], [40.8, 2.6, 1], [41.7, 2.2], [43.8, 5.2], [45, 6.6], [46.7, 5.4, 1],
18
+ [47.6, 10.3, 1], [52.1, 11.7], [52.4, 11.8, 1, "dark"], [53.2, 12, 1, "dark"], [53.3, 12, 1, "main"], [61.2, 13.6, 1], [62, 13.8, 1],
19
+ ],
20
+ },
21
+ ],
22
+ handles: [...strips(62), ...strips(-62), ...strips(118), ...strips(-118)],
23
+ plate: { y0: 55, y1: 60 },
24
+ });
@@ -0,0 +1,2 @@
1
+ /** The Relief Man Award, given from 1976 to 2012 to the best reliever of each league: a silver fire helmet on a chrome column over a walnut block and base. */
2
+ export declare const TROPHY_RELIEF_MAN_AWARD: import("../emblem.core.ts").Emblem<import("../emblem.lathe.ts").LatheModel>;
@@ -0,0 +1,28 @@
1
+ // A silver fire-fighter's helmet, a tall dome with a wide brim that turns up at the edge, seated on a short chrome column with a flared collar, over a square block of walnut on a stepped walnut base. Drawn for this
2
+ // package from a photograph of one of the trophies on its base (docs/likeness-sources.md): the helmet is a third of the height, the brim is as wide as the base, the column is narrow and the block is as tall as the helmet
3
+ // and the column together. The helmet's front shield and ridge, the plate on the block and all the lettering and marks are left out, so the helmet is drawn as a round dome.
4
+ import { defineLathe } from "../emblem.lathe.js";
5
+ import { LATHE_EXTRAS } from "../lathe.extras.js";
6
+ /** The Relief Man Award, given from 1976 to 2012 to the best reliever of each league: a silver fire helmet on a chrome column over a walnut block and base. */
7
+ export const TROPHY_RELIEF_MAN_AWARD = /* @__PURE__ */ defineLathe("trophy:relief-man-award", "Relief Man Award", "リリーフマン賞", "ours", {
8
+ extras: LATHE_EXTRAS,
9
+ metal: "silver",
10
+ tones: { wood: "#4d2b19", brass: "#cfa94a" },
11
+ tilt: 10,
12
+ box: "-0.5 0 64.9 64.9",
13
+ turnBox: "-7.2 0 78.3 78.3",
14
+ solids: [
15
+ { sides: 4, turn: -28, tone: "wood", p: [[55.4, 14.8, 1], [56.4, 16.4, 1], [57.4, 16.8], [60.4, 17.4, 1], [60.9, 17, 1]] },
16
+ { sides: 4, turn: -28, tone: "wood", p: [[31.9, 12.6, 1], [32.3, 13, 1], [55.6, 13.1, 1]], decor: [["panel", 0, 37, 52.5, 0.2, 0.8, "brass"]] },
17
+ {
18
+ p: [
19
+ [3.2, 1.6, 1], [4.2, 3.4], [6, 6.4], [9, 9.2], [12.4, 11], [16, 12], [18.2, 12.4, 1],
20
+ [19.4, 13.6], [20.4, 15.2], [20.9, 16.3, 1], [21.4, 16.2, 1], [21.9, 15.3, 1],
21
+ [22.7, 11], [23.2, 5.2, 1], [23.4, 4.8, 1],
22
+ [30.4, 4.8, 1], [31, 5.7, 1], [32.1, 6.1], [33.2, 6.6, 1],
23
+ ],
24
+ decor: [["ring", 30.8], ["patch", 6.6, 17.2, -48, 48, "brass"], ["mer", 4.2, 15.5, 9, 20]],
25
+ },
26
+ ],
27
+ plate: { y0: 40, y1: 49.5, face: 0, tone: "brass" },
28
+ });
package/dist/index.d.ts CHANGED
@@ -60,6 +60,9 @@ export { TROPHY_COMMISSIONERS_TROPHY } from "./emblems/trophy/commissioners-trop
60
60
  export { TROPHY_GREY_CUP } from "./emblems/trophy/grey-cup.ts";
61
61
  export { TROPHY_CY_YOUNG_AWARD } from "./emblems/trophy/cy-young-award.ts";
62
62
  export { TROPHY_MLB_MVP_AWARD } from "./emblems/trophy/mlb-mvp-award.ts";
63
+ export { TROPHY_RELIEF_MAN_AWARD } from "./emblems/trophy/relief-man-award.ts";
64
+ export { TROPHY_HANK_AARON_AWARD } from "./emblems/trophy/hank-aaron-award.ts";
65
+ export { TROPHY_BILL_RUSSELL_TROPHY } from "./emblems/trophy/bill-russell-trophy.ts";
63
66
  export { TROPHY_WALTER_CUP } from "./emblems/trophy/walter-cup.ts";
64
67
  export { TROPHY_WNBA_CHAMPIONSHIP_TROPHY } from "./emblems/trophy/wnba-championship-trophy.ts";
65
68
  export { TROPHY_LAMAR_HUNT_TROPHY } from "./emblems/trophy/lamar-hunt-trophy.ts";
@@ -72,6 +75,10 @@ export { TROPHY_FIFA_WORLD_CUP } from "./emblems/trophy/fifa-world-cup.ts";
72
75
  export { TROPHY_WOODLAWN_VASE } from "./emblems/trophy/woodlawn-vase.ts";
73
76
  export { TROPHY_DFB_POKAL } from "./emblems/trophy/dfb-pokal.ts";
74
77
  export { TROPHY_CHAMPIONS_LEAGUE_TROPHY } from "./emblems/trophy/champions-league-trophy.ts";
78
+ export { TROPHY_CALDER_CUP } from "./emblems/trophy/calder-cup.ts";
79
+ export { TROPHY_KELLY_CUP } from "./emblems/trophy/kelly-cup.ts";
80
+ export { TROPHY_CFP_TROPHY } from "./emblems/trophy/cfp-trophy.ts";
81
+ export { TROPHY_MLS_CUP } from "./emblems/trophy/mls-cup.ts";
75
82
  export { TROPHY_WEBB_ELLIS_CUP } from "./emblems/trophy/webb-ellis-cup.ts";
76
83
  export { TROPHY_FA_CUP } from "./emblems/trophy/fa-cup.ts";
77
84
  export { TROPHY_CRICKET_WORLD_CUP } from "./emblems/trophy/cricket-world-cup.ts";
@@ -174,6 +181,7 @@ export { BALL_TEQBALL } from "./emblems/ball/ball.teqball.ts";
174
181
  export { BALL_VOLLEYBALL, BALL_VOLLEYBALL_8, BALL_BEACH_VOLLEYBALL } from "./emblems/ball/ball.volleyball.ts";
175
182
  export { BALL_WATER_POLO } from "./emblems/ball/ball.waterpolo.ts";
176
183
  export { GEAR_BADMINTON_RACKET } from "./emblems/gear/gear.badmintonracket.ts";
184
+ export { GEAR_BASEBALL_CAP } from "./emblems/gear/gear.baseballcap.ts";
177
185
  export { GEAR_BASEBALL_GLOVE } from "./emblems/gear/gear.baseballglove.ts";
178
186
  export { GEAR_CRICKET_BAT } from "./emblems/gear/gear.cricketbat.ts";
179
187
  export { GEAR_BASEBALL_BAT, GEAR_BASKETBALL_HOOP, GEAR_VOLLEYBALL_NET, GEAR_GOALPOSTS, GEAR_WICKET, GEAR_ROUNDNET_SET } from "./emblems/gear/gear.field.ts";
package/dist/index.js CHANGED
@@ -61,6 +61,9 @@ export { TROPHY_COMMISSIONERS_TROPHY } from "./emblems/trophy/commissioners-trop
61
61
  export { TROPHY_GREY_CUP } from "./emblems/trophy/grey-cup.js";
62
62
  export { TROPHY_CY_YOUNG_AWARD } from "./emblems/trophy/cy-young-award.js";
63
63
  export { TROPHY_MLB_MVP_AWARD } from "./emblems/trophy/mlb-mvp-award.js";
64
+ export { TROPHY_RELIEF_MAN_AWARD } from "./emblems/trophy/relief-man-award.js";
65
+ export { TROPHY_HANK_AARON_AWARD } from "./emblems/trophy/hank-aaron-award.js";
66
+ export { TROPHY_BILL_RUSSELL_TROPHY } from "./emblems/trophy/bill-russell-trophy.js";
64
67
  export { TROPHY_WALTER_CUP } from "./emblems/trophy/walter-cup.js";
65
68
  export { TROPHY_WNBA_CHAMPIONSHIP_TROPHY } from "./emblems/trophy/wnba-championship-trophy.js";
66
69
  export { TROPHY_LAMAR_HUNT_TROPHY } from "./emblems/trophy/lamar-hunt-trophy.js";
@@ -73,6 +76,10 @@ export { TROPHY_FIFA_WORLD_CUP } from "./emblems/trophy/fifa-world-cup.js";
73
76
  export { TROPHY_WOODLAWN_VASE } from "./emblems/trophy/woodlawn-vase.js";
74
77
  export { TROPHY_DFB_POKAL } from "./emblems/trophy/dfb-pokal.js";
75
78
  export { TROPHY_CHAMPIONS_LEAGUE_TROPHY } from "./emblems/trophy/champions-league-trophy.js";
79
+ export { TROPHY_CALDER_CUP } from "./emblems/trophy/calder-cup.js";
80
+ export { TROPHY_KELLY_CUP } from "./emblems/trophy/kelly-cup.js";
81
+ export { TROPHY_CFP_TROPHY } from "./emblems/trophy/cfp-trophy.js";
82
+ export { TROPHY_MLS_CUP } from "./emblems/trophy/mls-cup.js";
76
83
  export { TROPHY_WEBB_ELLIS_CUP } from "./emblems/trophy/webb-ellis-cup.js";
77
84
  export { TROPHY_FA_CUP } from "./emblems/trophy/fa-cup.js";
78
85
  export { TROPHY_CRICKET_WORLD_CUP } from "./emblems/trophy/cricket-world-cup.js";
@@ -174,6 +181,7 @@ export { BALL_TEQBALL } from "./emblems/ball/ball.teqball.js";
174
181
  export { BALL_VOLLEYBALL, BALL_VOLLEYBALL_8, BALL_BEACH_VOLLEYBALL } from "./emblems/ball/ball.volleyball.js";
175
182
  export { BALL_WATER_POLO } from "./emblems/ball/ball.waterpolo.js";
176
183
  export { GEAR_BADMINTON_RACKET } from "./emblems/gear/gear.badmintonracket.js";
184
+ export { GEAR_BASEBALL_CAP } from "./emblems/gear/gear.baseballcap.js";
177
185
  export { GEAR_BASEBALL_GLOVE } from "./emblems/gear/gear.baseballglove.js";
178
186
  export { GEAR_CRICKET_BAT } from "./emblems/gear/gear.cricketbat.js";
179
187
  export { GEAR_BASEBALL_BAT, GEAR_BASKETBALL_HOOP, GEAR_VOLLEYBALL_NET, GEAR_GOALPOSTS, GEAR_WICKET, GEAR_ROUNDNET_SET } from "./emblems/gear/gear.field.js";
@@ -114,7 +114,8 @@ export declare function wrapAngle(value: number): number;
114
114
  /**
115
115
  * Binds an emblem to an element so that it can be turned: it draws the emblem's `frame` into `container`, and a drag turns it (left and right are yaw, up and down are pitch, and Shift on a ball is roll), the arrow keys turn
116
116
  * it, Home or 0 puts it back, and Space starts and stops an auto-turn. An emblem that cannot turn is drawn as it is, and nothing is listened to. Nothing moves by itself: `autoPlay` is off by default and, under
117
- * `prefers-reduced-motion`, only starts when it is `"force"`. The element gets `touch-action: none`, `user-select: none`, a grab cursor, a tab stop, a role description and a hint; `destroy()` takes them away.
117
+ * `prefers-reduced-motion`, only starts when it is `"force"`. A drag up (and Arrow Up) lifts the FRONT of the emblem toward the eye, as if its near edge were held and raised, so the `pitch` (the tilt toward the eye) goes
118
+ * down; a drag down lowers it. The element gets `touch-action: none`, `user-select: none`, a grab cursor, a tab stop, a role description and a hint; `destroy()` takes them away.
118
119
  *
119
120
  * Pass the emblem itself (`TROPHY_HOCKEY_CUP`, from its own module) and nothing but the turning and that one emblem is in the bundle. Pass an id (`"trophy:hockey-cup"`) and the registry is loaded on
120
121
  * demand: the element is drawn when `ready` resolves, not before. The main entry's `bindTurn` has the registry already and draws an id at once.
@@ -39,7 +39,8 @@ const load = () => {
39
39
  /**
40
40
  * Binds an emblem to an element so that it can be turned: it draws the emblem's `frame` into `container`, and a drag turns it (left and right are yaw, up and down are pitch, and Shift on a ball is roll), the arrow keys turn
41
41
  * it, Home or 0 puts it back, and Space starts and stops an auto-turn. An emblem that cannot turn is drawn as it is, and nothing is listened to. Nothing moves by itself: `autoPlay` is off by default and, under
42
- * `prefers-reduced-motion`, only starts when it is `"force"`. The element gets `touch-action: none`, `user-select: none`, a grab cursor, a tab stop, a role description and a hint; `destroy()` takes them away.
42
+ * `prefers-reduced-motion`, only starts when it is `"force"`. A drag up (and Arrow Up) lifts the FRONT of the emblem toward the eye, as if its near edge were held and raised, so the `pitch` (the tilt toward the eye) goes
43
+ * down; a drag down lowers it. The element gets `touch-action: none`, `user-select: none`, a grab cursor, a tab stop, a role description and a hint; `destroy()` takes them away.
43
44
  *
44
45
  * Pass the emblem itself (`TROPHY_HOCKEY_CUP`, from its own module) and nothing but the turning and that one emblem is in the bundle. Pass an id (`"trophy:hockey-cup"`) and the registry is loaded on
45
46
  * demand: the element is drawn when `ready` resolves, not before. The main entry's `bindTurn` has the registry already and draws an id at once.
@@ -204,9 +205,9 @@ export function bindTurnWith(registry, container, ref, options = {}) {
204
205
  if (dx === 0 && dy === 0)
205
206
  return;
206
207
  if (event.shiftKey === true && drawer?.emblem.kind === "ball")
207
- place({ roll: angles.roll + dx, pitch: angles.pitch - dy });
208
+ place({ roll: angles.roll + dx, pitch: angles.pitch + dy });
208
209
  else
209
- place({ yaw: angles.yaw + dx, pitch: angles.pitch - dy });
210
+ place({ yaw: angles.yaw + dx, pitch: angles.pitch + dy });
210
211
  changed();
211
212
  };
212
213
  const up = (event) => {
@@ -230,10 +231,10 @@ export function bindTurnWith(registry, container, ref, options = {}) {
230
231
  place({ yaw: angles.yaw + step });
231
232
  break;
232
233
  case "ArrowUp":
233
- place({ pitch: angles.pitch + step });
234
+ place({ pitch: angles.pitch - step });
234
235
  break;
235
236
  case "ArrowDown":
236
- place({ pitch: angles.pitch - step });
237
+ place({ pitch: angles.pitch + step });
237
238
  break;
238
239
  case "Home":
239
240
  case "0":
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "0.16.2";
1
+ export declare const VERSION = "0.26.0";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.16.2";
1
+ export const VERSION = "0.26.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnmorrisdotca/dougu-sports",
3
- "version": "0.16.2",
3
+ "version": "0.26.0",
4
4
  "description": "Dougu Sports 道具, sports emblems as SVG strings: trophies, medals, crests, sport icons, and the ball and gear of every sport, in metal, line or flat colour, with optional 3D turning. Light and dark, accessible, tree-shakeable. Zero dependencies.",
5
5
  "keywords": [
6
6
  "sports",