@johnmorrisdotca/dougu-sports 0.11.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +49 -41
  3. package/dist/emblems/emblem.descriptions.js +47 -0
  4. package/dist/emblems/emblem.figure.d.ts +7 -0
  5. package/dist/emblems/emblem.figure.js +19 -0
  6. package/dist/emblems/emblem.ids.d.ts +2 -2
  7. package/dist/emblems/emblem.ids.js +47 -0
  8. package/dist/emblems/emblem.lathe.d.ts +6 -0
  9. package/dist/emblems/emblem.lathe.js +13 -6
  10. package/dist/emblems/emblem.named.d.ts +25 -0
  11. package/dist/emblems/emblem.named.js +477 -0
  12. package/dist/emblems/emblem.registry.js +94 -0
  13. package/dist/emblems/trophy/americas-cup.d.ts +2 -0
  14. package/dist/emblems/trophy/americas-cup.js +25 -0
  15. package/dist/emblems/trophy/art-ross-trophy.d.ts +2 -0
  16. package/dist/emblems/trophy/art-ross-trophy.js +20 -0
  17. package/dist/emblems/trophy/ashes-urn.d.ts +2 -0
  18. package/dist/emblems/trophy/ashes-urn.js +22 -0
  19. package/dist/emblems/trophy/avco-world-trophy.d.ts +2 -0
  20. package/dist/emblems/trophy/avco-world-trophy.js +24 -0
  21. package/dist/emblems/trophy/ballon-dor.d.ts +2 -0
  22. package/dist/emblems/trophy/ballon-dor.js +14 -0
  23. package/dist/emblems/trophy/borg-warner-trophy.d.ts +2 -0
  24. package/dist/emblems/trophy/borg-warner-trophy.js +23 -0
  25. package/dist/emblems/trophy/calder-trophy.d.ts +2 -0
  26. package/dist/emblems/trophy/calder-trophy.js +30 -0
  27. package/dist/emblems/trophy/campbell-bowl.d.ts +2 -0
  28. package/dist/emblems/trophy/campbell-bowl.js +27 -0
  29. package/dist/emblems/trophy/champions-league-trophy.d.ts +2 -0
  30. package/dist/emblems/trophy/champions-league-trophy.js +18 -0
  31. package/dist/emblems/trophy/commissioners-trophy.d.ts +2 -0
  32. package/dist/emblems/trophy/commissioners-trophy.js +18 -0
  33. package/dist/emblems/trophy/conn-smythe-trophy.d.ts +2 -0
  34. package/dist/emblems/trophy/conn-smythe-trophy.js +26 -0
  35. package/dist/emblems/trophy/cricket-world-cup.d.ts +2 -0
  36. package/dist/emblems/trophy/cricket-world-cup.js +19 -0
  37. package/dist/emblems/trophy/cy-young-award.d.ts +2 -0
  38. package/dist/emblems/trophy/cy-young-award.js +20 -0
  39. package/dist/emblems/trophy/dfb-pokal.d.ts +2 -0
  40. package/dist/emblems/trophy/dfb-pokal.js +21 -0
  41. package/dist/emblems/trophy/fa-cup.d.ts +2 -0
  42. package/dist/emblems/trophy/fa-cup.js +21 -0
  43. package/dist/emblems/trophy/fifa-world-cup.d.ts +2 -0
  44. package/dist/emblems/trophy/fifa-world-cup.js +22 -0
  45. package/dist/emblems/trophy/gold-glove-award.d.ts +2 -0
  46. package/dist/emblems/trophy/gold-glove-award.js +24 -0
  47. package/dist/emblems/trophy/grey-cup.d.ts +2 -0
  48. package/dist/emblems/trophy/grey-cup.js +25 -0
  49. package/dist/emblems/trophy/hart-trophy.d.ts +2 -0
  50. package/dist/emblems/trophy/hart-trophy.js +23 -0
  51. package/dist/emblems/trophy/jack-adams-trophy.d.ts +2 -0
  52. package/dist/emblems/trophy/jack-adams-trophy.js +31 -0
  53. package/dist/emblems/trophy/jennings-trophy.d.ts +2 -0
  54. package/dist/emblems/trophy/jennings-trophy.js +31 -0
  55. package/dist/emblems/trophy/king-clancy-trophy.d.ts +2 -0
  56. package/dist/emblems/trophy/king-clancy-trophy.js +25 -0
  57. package/dist/emblems/trophy/lady-byng-trophy.d.ts +2 -0
  58. package/dist/emblems/trophy/lady-byng-trophy.js +27 -0
  59. package/dist/emblems/trophy/lamar-hunt-trophy.d.ts +2 -0
  60. package/dist/emblems/trophy/lamar-hunt-trophy.js +17 -0
  61. package/dist/emblems/trophy/larry-obrien-trophy.d.ts +2 -0
  62. package/dist/emblems/trophy/larry-obrien-trophy.js +18 -0
  63. package/dist/emblems/trophy/lester-patrick-trophy.d.ts +2 -0
  64. package/dist/emblems/trophy/lester-patrick-trophy.js +24 -0
  65. package/dist/emblems/trophy/lombardi-trophy.d.ts +2 -0
  66. package/dist/emblems/trophy/lombardi-trophy.js +12 -0
  67. package/dist/emblems/trophy/masterton-trophy.d.ts +2 -0
  68. package/dist/emblems/trophy/masterton-trophy.js +37 -0
  69. package/dist/emblems/trophy/mlb-mvp-award.d.ts +2 -0
  70. package/dist/emblems/trophy/mlb-mvp-award.js +19 -0
  71. package/dist/emblems/trophy/norris-trophy.d.ts +2 -0
  72. package/dist/emblems/trophy/norris-trophy.js +23 -0
  73. package/dist/emblems/trophy/obrien-cup.d.ts +2 -0
  74. package/dist/emblems/trophy/obrien-cup.js +32 -0
  75. package/dist/emblems/trophy/paterson-cup.d.ts +2 -0
  76. package/dist/emblems/trophy/paterson-cup.js +30 -0
  77. package/dist/emblems/trophy/presidents-trophy.d.ts +2 -0
  78. package/dist/emblems/trophy/presidents-trophy.js +23 -0
  79. package/dist/emblems/trophy/prince-of-wales-trophy.d.ts +2 -0
  80. package/dist/emblems/trophy/prince-of-wales-trophy.js +29 -0
  81. package/dist/emblems/trophy/rocket-richard-trophy.d.ts +2 -0
  82. package/dist/emblems/trophy/rocket-richard-trophy.js +21 -0
  83. package/dist/emblems/trophy/selke-trophy.d.ts +2 -0
  84. package/dist/emblems/trophy/selke-trophy.js +30 -0
  85. package/dist/emblems/trophy/silver-slugger-award.d.ts +2 -0
  86. package/dist/emblems/trophy/silver-slugger-award.js +19 -0
  87. package/dist/emblems/trophy/stanley-cup.d.ts +2 -0
  88. package/dist/emblems/trophy/stanley-cup.js +24 -0
  89. package/dist/emblems/trophy/ted-lindsay-award.d.ts +2 -0
  90. package/dist/emblems/trophy/ted-lindsay-award.js +22 -0
  91. package/dist/emblems/trophy/venus-rosewater-dish.d.ts +2 -0
  92. package/dist/emblems/trophy/venus-rosewater-dish.js +24 -0
  93. package/dist/emblems/trophy/vezina-trophy.d.ts +2 -0
  94. package/dist/emblems/trophy/vezina-trophy.js +27 -0
  95. package/dist/emblems/trophy/walter-cup.d.ts +2 -0
  96. package/dist/emblems/trophy/walter-cup.js +16 -0
  97. package/dist/emblems/trophy/webb-ellis-cup.d.ts +2 -0
  98. package/dist/emblems/trophy/webb-ellis-cup.js +23 -0
  99. package/dist/emblems/trophy/wimbledon-gentlemens-trophy.d.ts +2 -0
  100. package/dist/emblems/trophy/wimbledon-gentlemens-trophy.js +22 -0
  101. package/dist/emblems/trophy/wnba-championship-trophy.d.ts +2 -0
  102. package/dist/emblems/trophy/wnba-championship-trophy.js +18 -0
  103. package/dist/emblems/trophy/woodlawn-vase.d.ts +2 -0
  104. package/dist/emblems/trophy/woodlawn-vase.js +20 -0
  105. package/dist/emblems/trophy/world-series-mvp-trophy.d.ts +2 -0
  106. package/dist/emblems/trophy/world-series-mvp-trophy.js +18 -0
  107. package/dist/emblems-entry.d.ts +2 -0
  108. package/dist/emblems-entry.js +1 -0
  109. package/dist/index.d.ts +47 -0
  110. package/dist/index.js +47 -0
  111. package/dist/version.d.ts +1 -1
  112. package/dist/version.js +1 -1
  113. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -6,6 +6,38 @@ All notable changes to this project are written here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.12.1] - 2026-10-20
10
+
11
+ The npm page and the demo open on a trophy that turns. No change to the package's code beyond its version.
12
+
13
+ ### Changed
14
+
15
+ - **README: the first thing is a turning trophy.** Five famous trophies turning in 3D (the Stanley Cup first), seven balls rolling, and a medal, a banner, a crest, a skate and a glove flipping like coins, each an animated webp in a light and a dark twin (`docs/images/trophies-turn-*.webp`, `balls-turn-*.webp`, `flips-turn-*.webp`, each under 1 MB), then "The best of it": the 47 famous trophies, the 117 balls and implements, the trophies, medals and crests, and the 70 pieces of gear, a picture each. The vintage balls picture moved to `docs/vintage-balls.md`, the turned-emblems strip to `docs/turning.md`, and the engraving examples to a new `docs/engraving.md` (nothing removed); the README is not longer than before.
16
+ - **The pictures are made by a script from the demo:** `pnpm animations` (`scripts/animations.ts`) takes one frame per angle with Playwright and joins them with `img2webp`.
17
+ - **Demo: it opens on the Stanley Cup turning by itself**, with quick picks (cups, balls, a medal, a banner, a skate) and its controls (Stop, speed, the turn slider) under it, the stage pinned in view while the options scroll past, on a phone and on a desk. Changing the emblem, the style or the tint while it turns leaves the turn going from where it was. The address holds `turn=0` once it is paused (an address with an angle opens still); a reader who prefers reduced motion gets it still. The trophy case turns by itself too.
18
+
19
+ ### Fixed
20
+
21
+ - The shared background module in `scripts/` (tooling for the demo and the README pictures; the package ships none of it) is now the family's version 1.0.1: the `id` it is given is made safe (letters, digits, `_` and `-`; `bg-` in front of one that does not start with a letter) before it is written into element ids and `url(#...)`. `test/family-backgrounds.test.ts` draws every preset with hostile ids.
22
+
23
+ ## [0.12.0] - 2026-10-19
24
+
25
+ ### Changed
26
+
27
+ - **The README and the docs show the famous trophies.** A new picture of thirty-six named trophies with their names, a new page, `docs/famous-trophies.md` (what it is, a short example, what is drawn), the vintage balls picture remade for the era balls of 0.11.0, and a release-checklist line in `CONTRIBUTING.md` for a release that adds something to look at. `ONLY=<name> node scripts/screenshots.ts` takes one picture.
28
+ - **A trophy that stands for one real trophy is drawn as a very close likeness of it, and may carry its name.** The rule, the method and the tools are in `docs/likeness.md`: photographs are the reference, the proportions are measured on them and checked side by side at the same height, the drawing is our own vector and never a trace, and no drawing carries lettering, a logo, a league, team or sponsor mark or a real engraving. This replaces the earlier rule that no id or title may be a real trophy's name (`CONTRIBUTING.md`, `docs/references.md`, `test/emblem.test.ts`); the generic trophies (`trophy:hockey-cup` and the rest) stay as they are.
29
+
30
+ ### Added
31
+
32
+ - **`trophy:paterson-cup`**, the cup of the Pacific Coast Hockey Association (1912): a wide silver bowl with a straight band at the rim, two scrolled ear handles and a dark wooden base, measured on a 1912 photograph. 275 emblems.
33
+ - **Nineteen NHL trophies**, each a close likeness measured on a photograph (references and licences in `docs/likeness-sources.md`): `trophy:stanley-cup`, `trophy:hart-trophy`, `trophy:vezina-trophy`, `trophy:norris-trophy`, `trophy:calder-trophy`, `trophy:art-ross-trophy`, `trophy:conn-smythe-trophy`, `trophy:lady-byng-trophy`, `trophy:selke-trophy`, `trophy:jennings-trophy`, `trophy:masterton-trophy`, `trophy:king-clancy-trophy`, `trophy:jack-adams-trophy`, `trophy:presidents-trophy`, `trophy:prince-of-wales-trophy`, `trophy:campbell-bowl`, `trophy:rocket-richard-trophy`, `trophy:ted-lindsay-award` and `trophy:lester-patrick-trophy`. 294 emblems. Still to draw, for lack of a photograph: the Mark Messier Leadership Award, the Willie O'Ree Community Hero Award, the NHL Foundation Player Award and the General Manager of the Year award.
34
+ - **Fourteen more named trophies, from the trophy audit** (`docs/trophy-audit.md` lists every award spxn holds with its emblem and what is still missing): `trophy:lombardi-trophy`, `trophy:larry-obrien-trophy`, `trophy:commissioners-trophy`, `trophy:grey-cup`, `trophy:cy-young-award`, `trophy:mlb-mvp-award`, `trophy:gold-glove-award`, `trophy:silver-slugger-award`, `trophy:world-series-mvp-trophy`, `trophy:walter-cup`, `trophy:wnba-championship-trophy`, `trophy:lamar-hunt-trophy`, `trophy:avco-world-trophy` and `trophy:obrien-cup`. 308 emblems.
35
+ - **Thirteen of the world's most famous trophies**, each a likeness measured on a photograph: `trophy:fifa-world-cup`, `trophy:woodlawn-vase`, `trophy:borg-warner-trophy`, `trophy:fa-cup`, `trophy:americas-cup`, `trophy:cricket-world-cup`, `trophy:wimbledon-gentlemens-trophy`, `trophy:venus-rosewater-dish`, `trophy:ballon-dor`, `trophy:dfb-pokal`, `trophy:ashes-urn`, `trophy:webb-ellis-cup` and `trophy:champions-league-trophy`. 321 emblems. The Africa Cup of Nations and Ryder Cup trophies wait for a usable photograph (`docs/trophy-audit.md`).
36
+ - **A ring of poles can lie on a tilted ring** (`Poles.tilted`), as the poles of the Commissioner's Trophy do.
37
+ - **The lathe can stand a solid off the axis** (`Solid.at`: the distance from the axis and the angle): it goes round the axis with the turn, behind the body or in front of it (the two goblets of `trophy:masterton-trophy`, the legs of a figure), and **`Solid.turn`** turns a body with flat sides about its axis (a square base shows a flat face at -45). `src/emblems/emblem.figure.ts` builds the simplified skater of three trophies.
38
+ - **`NAMED_TROPHIES` and `namedTrophy(id)`** (`./emblems`): the facts of each trophy drawn as a likeness (name, sport, competition, what it honours, first awarded, what the drawing was measured on), with `docs/likeness-sources.md`.
39
+ - **`scripts/likeness.ts`**, for drawing a likeness: a labelled grid over a photograph, the half widths of its silhouette, and the photograph and the drawing side by side at one height.
40
+
9
41
  ## [0.11.0] - 2026-10-19
10
42
 
11
43
  ### Changed
package/README.md CHANGED
@@ -11,22 +11,51 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
11
11
  <img alt="TypeScript" src="https://img.shields.io/badge/types-TypeScript-3178c6">
12
12
  </p>
13
13
 
14
- <p align="center"><a href="https://johnmorrisdotca.github.io/dougu-sports/"><strong>Open the demo →</strong></a> · <a href="https://johnmorrisdotca.github.io/dougu-sports/gallery.html">Gallery</a> · <a href="./docs/gallery.md">Every id</a> · <a href="./docs/turning.md">Turning</a> · <a href="./docs/layout.md">Layout</a> · <a href="./docs/japanese-sports.md">Japanese sports</a></p>
14
+ <p align="center"><a href="https://johnmorrisdotca.github.io/dougu-sports/"><strong>Open the demo →</strong></a> · <a href="https://johnmorrisdotca.github.io/dougu-sports/gallery.html">Gallery</a> · <a href="./docs/gallery.md">Every id</a> · <a href="./docs/turning.md">Turning</a> · <a href="./docs/engraving.md">Engraving</a> · <a href="./docs/layout.md">Layout</a> · <a href="./docs/japanese-sports.md">Japanese sports</a></p>
15
15
 
16
16
  <p align="center">
17
17
  <picture>
18
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-desk-dark.webp">
19
- <img alt="Thirty-six balls and pucks drawn in 3D under floodlights, in four rows of nine: soccer balls of several constructions and colours, then basketball, the 3x3 ball, baseball, softball, a football, a rugby ball, an Australian football and two volleyballs, then tennis, padel, pickleball with its holes, squash with its two dots, racquetball, golf, red and pink cricket and water polo, and last sepak takraw, a shuttlecock, a puck, a curling stone, lacrosse, handball, table tennis, a sliotar and a roundnet ball." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-desk-light.webp" width="760">
18
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/trophies-turn-dark.webp">
19
+ <img alt="Five famous trophies turning in 3D on royal purple, each a little behind the one before: the Stanley Cup first, then the FIFA World Cup, the Lombardi Trophy, the Larry O'Brien trophy and the Webb Ellis Cup. Each keeps its outline while its light and its handles move." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/trophies-turn-light.webp" width="760">
20
20
  </picture>
21
21
  </p>
22
22
 
23
23
  <p align="center">
24
24
  <picture>
25
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/vintage-desk-dark.webp">
26
- <img alt="Eighteen more balls on a warm sunburst, in two rows of nine: five vintage leather soccer balls (hand-stitched, laced, 18 strips, 12 panels, 32 panels), a lemon-peel baseball, two baseballs stitched in two colours and an aged baseball, then nine soccer balls in the style of an era, from the late 1970s to the early 2020s." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/vintage-desk-light.webp" width="760">
25
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-turn-dark.webp">
26
+ <img alt="Seven balls rolling under floodlights: a soccer ball, a basketball, a baseball, a rugby ball, a volleyball, a tennis ball and a golf ball, each turned a little differently so that the seams and panels travel across them." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-turn-light.webp" width="760">
27
+ </picture>
28
+ </p>
29
+
30
+ <p align="center">
31
+ <picture>
32
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/flips-turn-dark.webp">
33
+ <img alt="A gold and a silver medal, a championship banner, a crest, a hockey skate and a baseball glove flipping like coins on royal purple: each shows its face, then its edge, then its plain back." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/flips-turn-light.webp" width="760">
34
+ </picture>
35
+ </p>
36
+
37
+ ## The best of it
38
+
39
+ - **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)).
40
+
41
+ <p align="center">
42
+ <picture>
43
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/famous-desk-dark.webp">
44
+ <img alt="Thirty-six famous trophies on royal purple, each with its name under it: the FIFA World Cup, the Stanley Cup, the Lombardi Trophy, the Larry O'Brien trophy, the Grey Cup, the FA Cup, the America's Cup, the Ashes urn and the Webb Ellis Cup among them, then the baseball awards and the NHL's Hart, Vezina, Norris and Calder trophies." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/famous-desk-light.webp" width="760">
45
+ </picture>
46
+ </p>
47
+
48
+ - **117 balls and implements in 3D**, from the 32-panel soccer ball to the pucks and the curling stone, that roll as they turn ([gallery](./docs/gallery.md), [vintage and era-style balls](./docs/vintage-balls.md)).
49
+
50
+ <p align="center">
51
+ <picture>
52
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-desk-dark.webp">
53
+ <img alt="Thirty-six balls and pucks drawn in 3D under floodlights, in four rows of nine: soccer balls of several constructions and colours, then basketball, the 3x3 ball, baseball, softball, a football, a rugby ball, an Australian football and two volleyballs, then tennis, padel, pickleball with its holes, squash with its two dots, racquetball, golf, red and pink cricket and water polo, and last sepak takraw, a shuttlecock, a puck, a curling stone, lacrosse, handball, table tennis, a sliotar and a roundnet ball." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/balls-desk-light.webp" width="760">
27
54
  </picture>
28
55
  </p>
29
56
 
57
+ - **Trophies, medals, crests and the icon of every sport**, in metal, one line or flat colour, light and dark.
58
+
30
59
  <p align="center">
31
60
  <picture>
32
61
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/hero-desk-dark.webp">
@@ -34,6 +63,8 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
34
63
  </picture>
35
64
  </p>
36
65
 
66
+ - **70 pieces of gear**, among them the Japanese sports and budo ([Japanese sports](./docs/japanese-sports.md)).
67
+
37
68
  <p align="center">
38
69
  <picture>
39
70
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/gear-desk-dark.webp">
@@ -41,18 +72,15 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
41
72
  </picture>
42
73
  </p>
43
74
 
44
- <table align="center">
45
- <tr>
46
- <td align="center" valign="top">
47
- <img alt="A two-handled cup, a medal, a soccer ball and a championship banner each turned through seven angles: the cup keeps its outline and moves its light and handles, the medal and the banner flip like a coin to show their plain backs, and the ball rolls." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/turn-desk.webp" width="470"><br><em>Turned: a ball rolls, a medal flips</em>
48
- </td>
49
- <td align="center" valign="top">
50
- <img alt="Cups, a medal, balls and gear on a phone, three to a row." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/phone-light.webp" width="200"><br><em>On a phone</em>
51
- </td>
52
- </tr>
53
- </table>
75
+ - **On a phone**, and **turned by hand**: drag, arrow keys or the automatic turn ([turning](./docs/turning.md)).
76
+
77
+ <p align="center">
78
+ <picture>
79
+ <img alt="Cups, a medal, balls and gear on a phone, three to a row." src="https://raw.githubusercontent.com/johnmorrisdotca/dougu-sports/main/docs/images/phone-light.webp" width="200">
80
+ </picture>
81
+ </p>
54
82
 
55
- > **Status: preview.** 274 emblems: 24 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 38 sports, 117 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.
83
+ > **Status: preview.** 321 emblems: 71 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 38 sports, 117 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.
56
84
 
57
85
  ## In 30 seconds
58
86
 
@@ -84,12 +112,13 @@ Put the string in a page (`element.innerHTML = svg`), write it to a file, or sen
84
112
  - **Three styles** for every emblem: `metal` (polished metal: a gradient, a highlight and a soft rim of reflected light, edged in a darker tone of its own metal, with no heavy outline), `line` (one clean outline in the page's text colour, made to read at 14 pixels) and `color` (flat fills); see [Theming](#theming).
85
113
  - **Size, tint, accent and theme** as options: a tint recolours the main part (a medal's metal, a crest's colour, a ball's patches), an accent the second colour (a ribbon, a crest's band, the pennants), a theme sets the ink for light, dark or either.
86
114
  - **Turning**: `emblemFrame` and `ballFrame` return the emblem at an angle, in plain SVG: every emblem turns, a ball rolls, a cup keeps its outline and moves its light, and everything flat (gear, a bat, a crown, a sport's icon) flips like a coin; `bindTurn` lets a drag, the arrow keys or an auto-turn do the turning in a page; see [docs/turning.md](./docs/turning.md).
87
- - **Engraving**: text cut into a medal, a plaque, the belt, a ring, a banner, a pennant and the plinth of a cup, from `label`, `year` and `rank` or one `engrave` string, in the ink that reads at 4.5 to 1 on the metal, and it turns with the emblem; see [Engrave an emblem](#engrave-an-emblem).
115
+ - **Engraving**: text cut into a medal, a plaque, the belt, a ring, a banner, a pennant and the plinth of a cup, from `label`, `year` and `rank` or one `engrave` string, in the ink that reads at 4.5 to 1 on the metal, and it turns with the emblem; see [engraving](./docs/engraving.md).
88
116
  - **Custom balls**: a baseball, a softball and the classic soccer balls take `paint` (a solid colour, or two: along the seam or in halves, with stitches that still show), `decal` (your own SVG or image as a logo, wrapped onto the sphere so that it turns with the ball), `stamp` (condensed bold text between small stars, with an optional made-up signature), `script` (an original cursive word) and `mark` (a letter in a circle, or an SVG of your own); see [docs/custom-balls.md](./docs/custom-balls.md). The package carries no logo of anyone's: a logo or a mark is the one you pass.
89
117
  - **Labels in two languages**: the `<title>` is English or Japanese (`locale`), your own words (`title: "…"`), or left out for an emblem that sits beside text that says the same (`title: false`).
90
118
  - **As an image, a sprite, a podium or a case**: `emblemDataUri` for an `<img>`, a CSS background or a canvas, `emblemSprite` to draw one emblem fifty times cheaply, `sportEquipment` for what a sport is played with, and `podium` and `awardCase` for results and trophy shelves; see [docs/compose.md](./docs/compose.md).
91
119
  - **One module per item**, so a bundler takes only what is imported; see [Use it in your project](#use-it-in-your-project).
92
120
  - **Short names and helpers**: `"cup"` is `"trophy:cup"`, `"trophy:cup/line"` is the line style, and `crest`, `medal`, `sportIcon` and `pennant` draw a team's crest, a medal, a sport's icon and a championship pennant.
121
+ - **Named trophies**: a trophy that stands for one real trophy is drawn as a very close likeness of it, from photographs that were measured and never copied, and carries its name in its id (`trophy:paterson-cup`); `NAMED_TROPHIES` and `namedTrophy(id)` give what it honours, when it was first given and what the drawing was measured on, and no drawing carries lettering, a logo or a mark; see [famous trophies](./docs/famous-trophies.md) and [docs/likeness.md](./docs/likeness.md).
93
122
  - **Typed ids**: `EmblemId` is a union of `award:*`, `trophy:*`, `medal:*`, `crest:*`, `ball:*`, `gear:*`, `sport:*` and `pennant:*` ids.
94
123
  - **Japanese sports and budō** (道具 is the name): a sumo cup, a championship banner, and the war fan, belt, bamboo sword, kendo helmet, judo and karate suits, the white and blue judo suit flat, folded and seen from behind with its back number ([docs/judogi-back.md](./docs/judogi-back.md)), the belts of every grade and six pictures of how the belt is tied ([docs/obi-steps.md](./docs/obi-steps.md)), long bow and arrow, with Japanese names that are the governing bodies' words; see [docs/japanese-sports.md](./docs/japanese-sports.md).
95
124
  - **Made-up logos, experimental** (`@johnmorrisdotca/dougu-sports/brands`; a draft, the designs will change and it is not a supported feature yet): twelve fictional makers of balls and gear and ten fictional teams, each a bold geometric mark that stands alone (the name is optional), in colour or one colour, light and dark, with a note on the real brand it is nearest to and how it differs; a maker's mark prints on a baseball, a softball or a classic soccer ball, and a group places any logo inside your own drawing; see [docs/brands.md](./docs/brands.md).
@@ -251,28 +280,7 @@ More in [docs/turning.md](./docs/turning.md).
251
280
 
252
281
  ### Engrave an emblem
253
282
 
254
- ```js
255
- import { renderEmblem } from "@johnmorrisdotca/dougu-sports/emblems";
256
-
257
- const medal = renderEmblem("medal:gold", { engrave: "MVP 2026" });
258
- console.log(medal.includes(">MVP<") && medal.includes(">2026<")); // true
259
- const plaque = renderEmblem("trophy:plaque", { label: "Champions", year: 2026 });
260
- console.log(plaque.includes(">Champions<") && plaque.includes(">2026<")); // true
261
- const cup = renderEmblem("trophy:hockey-cup", { engrave: "優勝 2026" });
262
- console.log(cup.includes(">優<")); // true
263
- console.log(renderEmblem("medal:gold").includes("<text")); // false
264
- ```
265
-
266
- A medal, a place badge, the plaque, the belt, a ring (the team up one shoulder and the year down the other), a banner and a pennant take an engraving, and so does the plinth of every cup that stands on one. Give one string (`engrave`, any text, Japanese included, up to three lines of 24 letters), or a `label`, a `year` and a `rank`: the rank is the biggest line, the year the smallest. The text is escaped, fitted to its face (a longer word is set smaller, and a space is a place to break the line when that makes bigger letters) and cut in the ink that reads at 4.5 to 1 on the metal, a tone of the metal, black or white, in the line style the page's ink.
267
-
268
- ```js
269
- import { emblemFrame } from "@johnmorrisdotca/dougu-sports/turn";
270
-
271
- const at = (yaw) => emblemFrame("medal:gold", { engrave: "MVP", engraveBack: "2026", yaw });
272
- console.log(at(0).includes(">MVP<"), at(180).includes(">MVP<"), at(180).includes(">2026<")); // true false true
273
- ```
274
-
275
- Turned, the engraving goes with its face: squeezed with a medal, hidden on its back (which has an engraving of its own when `engraveBack` is given), and on a cup set letter by letter round the plinth, so it foreshortens, slides behind the edge and comes round again. A drawn numeral or star that an engraving replaces is left out.
283
+ `engrave` (one string, any text, Japanese included), or `label`, `year` and `rank`, cuts text into a medal, a place badge, the plaque, the belt, a ring, a banner, a pennant and the plinth of every cup that stands on one, in the ink that reads on the metal, and it turns with the emblem. Every option, the back of a medal (`engraveBack`) and every example: [engraving](./docs/engraving.md).
276
284
 
277
285
  ### Draw a championship pennant
278
286
 
@@ -476,7 +484,7 @@ The thirty-eight sports the ball, gear and sport emblems are made for are `SPORT
476
484
  | `initials` | Up to three letters (a crest, or the championship banner) | none: the crest has a star, the banner a ring and a star |
477
485
  | `theme` | `"inherit"`, `"auto"`, `"light"`, `"dark"` | `"inherit"` |
478
486
  | `grain` | `true` or `false` (a ball only) | on for a ball of 48 pixels or more that is not turning |
479
- | `engrave` | Any text, up to three lines of 24 letters, Japanese included: cut into the face (see [Engrave an emblem](#engrave-an-emblem)) | none |
487
+ | `engrave` | Any text, up to three lines of 24 letters, Japanese included: cut into the face (see [engraving](./docs/engraving.md)) | none |
480
488
  | `label`, `year`, `rank` | The words, the year (smaller, under them) and the number (the biggest line) to engrave when `engrave` is not given | none (a place badge's rank is its place) |
481
489
  | `engraveBack` | The text of a medal's, ring's or banner's back, shown when it is turned over | a plain back |
482
490
  | `backnumber` | `{ name, code, band }` for `gear:judogi-back` and `gear:judogi-blue-back`: the family name in capitals, the three letters of the National Olympic Committee, and `"blue"`, `"gold"` or `"red"` for the band ([docs/judogi-back.md](./docs/judogi-back.md)) | `TANAKA`, `JPN`, blue |
@@ -637,7 +645,7 @@ Bug reports and ideas go in the [issues](https://github.com/johnmorrisdotca/doug
637
645
 
638
646
  ## Changes
639
647
 
640
- See [CHANGELOG.md](./CHANGELOG.md). 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.
648
+ See [CHANGELOG.md](./CHANGELOG.md). 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.
641
649
 
642
650
  ## Credits
643
651
 
@@ -70,6 +70,53 @@ export const EMBLEM_DESCRIPTIONS = {
70
70
  "gear:football-helmet": { en: "Football helmet", ja: "アメリカンフットボールのヘルメット" },
71
71
  "gear:hurley": { en: "Hurley", ja: "ハーリー(ハーリングのスティック)" },
72
72
  "trophy:sumo-cup": { en: "A tall silver cup on a tall stepped stand, with an ornate phoenix-crested handle on each side", ja: "段のある高い台に載った、背の高い銀の杯。両側の取っ手に鳳凰の飾りが付く" },
73
+ "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年から、パシフィック・コースト・ホッケー協会の優勝チームに贈られました。" },
74
+ "trophy:stanley-cup": { en: "The Stanley Cup: a wide fluted bowl with a smooth band at the rim, a beaded neck, three narrow rings that step out and a barrel of five bands on a black base.", ja: "縁に滑らかな帯がある縦溝入りの広いボウル、玉飾りのある首、段状に広がる細い三つの輪、黒い台座にのった五段の帯の胴を描いています。ナショナル・ホッケー・リーグのプレーオフの優勝チームに贈られます(初授与は1893年)。" },
75
+ "trophy:hart-trophy": { en: "The Hart Memorial Trophy: a gilt flame-shaped bulb on a long tapering silver stem, over a domed bell and a dark octagonal base.", ja: "金色の炎形の球が、長く先細りになる銀の軸の上にのり、その下にドーム形の鐘形と暗い色の八角形の台座が付いた姿を描いています。チームにとって最も価値の高い選手と評価された選手に贈られます。" },
76
+ "trophy:vezina-trophy": { en: "The Vezina Trophy: a silver pavilion of four columns under a dome and a dark ball, on a flared bell and a stepped base of dark red wood.", ja: "四本の柱を持つ銀の東屋が、ドームと暗い色の球の下にあり、広がった鐘形と、暗い赤色の木の段付きの台座にのっている姿を描いています。最も優れたゴールキーパーと評価された選手に贈られます。" },
77
+ "trophy:norris-trophy": { en: "The James Norris Memorial Trophy: a silver lidded bowl with an acorn finial on a knopped stem and a domed foot, over a two-tiered octagonal base of pale wood.", ja: "ふた付きの銀のボウルの上にどんぐり形の飾りがあり、節のある脚とドーム形の足の下に、明るい色の木の二段の八角形の台座がある姿を描いています。総合的に最も優れた能力を示したディフェンスマンに贈られます。" },
78
+ "trophy:calder-trophy": { en: "The Calder Memorial Trophy: a tall two-handled silver cup with looped handles and a knotted stem, on two stacked blocks of dark wood with copper trim.", ja: "輪状の取っ手が二つ付き、結び目のある脚を持つ背の高い銀のカップが、銅の縁取りのある暗い色の木のブロック二つの上にのっている姿を描いています。最も優れた新人選手に贈られます。" },
79
+ "trophy:art-ross-trophy": { en: "The Art Ross Trophy: a wide silver bowl on a small footed cup, on a tall square pyramid of red-brown wood that widens a long way toward its foot.", ja: "小さな脚付きのカップにのった広い銀のボウルが、赤茶色の木の背の高い四角錐の台座にのっている姿を描いています。台座は足元に向かって大きく広がっています。リーグのポイント首位の選手に贈られます。" },
80
+ "trophy:conn-smythe-trophy": { en: "The Conn Smythe Trophy: a fan of silver maple leaves rising from a silver building, on tiers of honey-brown wood that widen to a moulded foot.", ja: "銀の建物から銀のカエデの葉が扇状に立ち上がり、蜂蜜色の木の段が刳り形のある足元に向かって広がっている姿を描いています。プレーオフで最も価値の高かった選手に贈られます。" },
81
+ "trophy:lady-byng-trophy": { en: "The Lady Byng Memorial Trophy: a silver lidded cup with two flat ear handles, a knopped stem and a spreading foot, on a block of honey-brown wood.", ja: "ふた付きの銀のカップに平らな耳形の取っ手が二つあり、節のある脚と広がった足を持ち、蜂蜜色の木のブロックにのっている姿を描いています。高い水準のプレーとともに最もスポーツマンシップに優れた選手に贈られます。" },
82
+ "trophy:selke-trophy": { en: "The Frank J. Selke Trophy: a crowned silver bowl with garlands and ring handles on a flared foot, over a dark hexagonal base.", ja: "王冠をのせた銀のボウルに花飾りと輪形の取っ手があり、広がった足の下に暗い色の六角形の台座がある姿を描いています。守備プレーが最も優れたフォワードに贈られます。" },
83
+ "trophy:jennings-trophy": { en: "The William M. Jennings Trophy: a wide silver bowl on a stepped foot over three tiers of dark red wood.", ja: "広い銀のボウルが段付きの足にのり、その下に暗い赤色の木の三段の台座がある姿を描いています。最も失点の少なかったチームのゴールキーパーに贈られます(複数人の場合もあります)。" },
84
+ "trophy:masterton-trophy": { en: "The Bill Masterton Memorial Trophy: two tall silver cones with gilt flames on a round dish, over an octagonal base of honey-coloured wood.", ja: "金色の炎をいただく背の高い銀の円錐が二つ、丸い皿にのり、その下に蜂蜜色の木の八角形の台座がある姿を描いています。粘り強さ、スポーツマンシップ、ホッケーへの献身を最もよく示した選手に贈られます。" },
85
+ "trophy:king-clancy-trophy": { en: "The King Clancy Memorial Trophy: a tall lidded two-handled silver cup on a knopped stem, over a round base of honey-brown wood in two tiers.", ja: "ふた付きで取っ手が二つある背の高い銀のカップが、節のある脚の上にあり、蜂蜜色の木の二段の丸い台座にのっている姿を描いています。氷上でも氷上以外でも最もリーダーシップを発揮し、人道的な貢献をした選手に贈られます。" },
86
+ "trophy:jack-adams-trophy": { en: "The Jack Adams Award: a flared silver urn with scroll handles under a framed portrait, on a block with a large plate and wide stepped tiers of wood.", ja: "額に入った肖像の下に、渦巻き形の取っ手が付いた広がった形の銀の壺があり、大きなプレートのあるブロックと、幅の広い段状の木の台座にのっている姿を描いています。チームの成功に最も貢献したと評価されたヘッドコーチに贈られます。" },
87
+ "trophy:presidents-trophy": { en: "The Presidents' Trophy: a wide shallow silver dish with two crossed hockey sticks over it, on three slender columns, a dark cap and a dark plinth.", ja: "幅の広い浅い銀の皿の上にホッケースティックが二本交差して置かれ、細い三本の柱、暗い色のキャップ、暗い色の台座にのっている姿を描いています。レギュラーシーズンで最も成績の良かったチームに贈られます。" },
88
+ "trophy:prince-of-wales-trophy": { en: "The Prince of Wales Trophy: a tall flared silver vase under a broad lid and a feathered finial, held by three stick-shaped legs round a clear crystal, on a dark octagonal base.", ja: "背の高い広がった形の銀の花瓶に幅広のふたと羽根飾りのつまみがあり、スティック形の三本の脚が透明なクリスタルを囲んで支え、暗い色の八角形の台座にのっている姿を描いています。イースタン・カンファレンスの優勝チームに贈られます。" },
89
+ "trophy:campbell-bowl": { en: "The Clarence S. Campbell Bowl: a lidded two-handled silver bowl with large scrolling handles, on a dark hexagonal base.", ja: "ふた付きで取っ手が二つある銀のボウルに大きな渦巻き形の取っ手があり、暗い色の六角形の台座にのっている姿を描いています。ウェスタン・カンファレンスの優勝チームに贈られます。" },
90
+ "trophy:rocket-richard-trophy": { en: "The Maurice Richard Trophy: a gilt skater in a wide flared funnel of clear amber, on a dark tapering base with a silver collar.", ja: "透き通った琥珀色の幅広く広がった漏斗の中に金色のスケーターが立ち、銀の環の付いた暗い色の先細りの台座にのっている姿を描いています。レギュラーシーズンで最も多くのゴールを決めた選手に贈られます。" },
91
+ "trophy:ted-lindsay-award": { en: "The Ted Lindsay Award: a bronze skater with a stick on a pin, over a tall black hexagonal pillar and a flared silver base.", ja: "スティックを持つ青銅のスケーターがピンの上に立ち、その下に背の高い黒い六角形の柱と、広がった銀の台座がある姿を描いています。選手たちの投票で選ばれる、最も傑出した選手に贈られます。" },
92
+ "trophy:lester-patrick-trophy": { en: "The Lester Patrick Trophy: a bronze figure of a man standing at ease on a tall square pedestal of reddish wood.", ja: "青銅の男性像が、赤みがかった木の背の高い四角い台座の上に、くつろいだ姿勢で立っている姿を描いています。アメリカでのホッケーに対する傑出した貢献をした人々に贈られます。" },
93
+ "trophy:lombardi-trophy": { en: "The Vince Lombardi Trophy: a silver football tilted over a tall three-sided pylon that widens to its foot.", ja: "ロンバルディ・トロフィーは、銀色のフットボールが、足元に向かって広がる背の高い三角柱の台の上に斜めに載った姿を描いています。NFLの優勝決定戦、スーパーボウルの優勝チームに贈られます。" },
94
+ "trophy:larry-obrien-trophy": { en: "The Larry O'Brien Championship Trophy: a gold basketball over a hoop and a tapering net-shaped body on a round foot.", ja: "ラリー・オブライエン・トロフィーは、金色のバスケットボールが、リングと下に向かってすぼまるネット状の本体の上に載り、丸い台に立つ姿を描いています。NBAファイナルの優勝チームに贈られます。" },
95
+ "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本の細い支柱が、それぞれ金色のペナントを付けて輪になり、輪の上端は後ろが高く手前が低く、幅広い丸い銀色の台の上に立つ姿を描いています。ワールドシリーズの優勝チームに贈られます。" },
96
+ "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面の背の高い広がる円錐形の台の上に載った姿を描いています。カナディアン・フットボール・リーグの優勝決定戦に勝ったチームに贈られます。" },
97
+ "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字、銘板の上で野球のボールを握る手をあしらった姿を描いています。各リーグの最優秀投手に贈られます。" },
98
+ "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本のバットを配した、暗い色の八角形の飾り板を描いています。各リーグの最優秀選手に贈られます。" },
99
+ "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)の優勝チームに贈られます。" },
100
+ "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ファイナルの優勝チームに贈られます。" },
101
+ "trophy:lamar-hunt-trophy": { en: "The Lamar Hunt Trophy: a clear football-shaped ring on a round silver base over a flat black slab.", ja: "ラマー・ハント・トロフィーは、透明なフットボール形の輪が、丸い銀色の台に載り、平らな黒い板の上に立つ姿を描いています。アメリカン・フットボール・カンファレンス(AFC)の優勝チームに贈られます。" },
102
+ "trophy:silver-slugger-award": { en: "The Silver Slugger Award: a silver bat across a tall black board with an oval badge and a plate.", ja: "シルバースラッガー賞は、背の高い黒い板を銀色のバットが横切り、楕円のバッジと銘板が付いた姿を描いています。各リーグの各ポジションで最も優れた打者に贈られます。" },
103
+ "trophy:world-series-mvp-trophy": { en: "The World Series MVP trophy: a twisted silver flame on a wide round base with a dark band.", ja: "ワールドシリーズMVP賞は、ねじれた銀色の炎が、暗い帯の入った幅広い丸い台の上に立つ姿を描いています。ワールドシリーズで最も活躍した選手に贈られます。" },
104
+ "trophy:avco-world-trophy": { en: "The Avco World Trophy: a wide silver bowl on a stem over a glass cylinder with a silver ball in it, a ringed collar, a tall black drum with silver plates and a wide silver foot.", ja: "アブコ・ワールド・トロフィー。銀の玉が入ったガラスの筒の上に、脚付きの広い銀のボウルをのせ、輪のついた首の部分、銀の板をはめた背の高い黒い筒、広い銀の台座を描いています。ワールド・ホッケー・アソシエーション(WHA)の優勝チームに贈られます。" },
105
+ "trophy:obrien-cup": { en: "The O'Brien Cup: a wide shallow gilt bowl with wire handles on a dark block between two bronze skaters, on a long dark base.", ja: "長い暗色の台の上に、暗色のブロックにのせた針金の取っ手つきの浅く広い金色のボウルと、その両脇に立つブロンズのスケート選手二人を描いています。ナショナル・ホッケー・アソシエーション(NHA)と、のちに発足当初のナショナル・ホッケー・リーグ(NHL)の優勝チームに贈られます。" },
106
+ "trophy:gold-glove-award": { en: "The Gold Glove Award: a gilt fielder's glove between two gilt baseballs on a pedestal over a wooden base.", ja: "木の土台の上の台座に、金色の野球のグラブと、その両脇に金色の野球ボール二つを描いています。MLBで、各リーグのポジションごとに最も守備の優れた選手に贈られます。" },
107
+ "trophy:fifa-world-cup": { en: "The FIFA World Cup: a gilt globe held up by two spiral figures, over a base of malachite green bands and a gilt band.", ja: "金色の地球を、らせん状にのびる2人の人物が掲げる姿を、マラカイトグリーンの帯と金色の帯の台座の上に描いています。男子のFIFAワールドカップの優勝チームに贈られます。" },
108
+ "trophy:woodlawn-vase": { en: "The Woodlawn Vase: a very tall tiered silver vase with a wide chased bowl and two scrolled handles, on a waisted stem and a round base.", ja: "非常に背の高い、段のある銀の花瓶を描いています。幅広い胴には彫金の装飾があり、渦巻き形の取っ手が二つ付いて、くびれた軸と丸い台座の上に立っています。米国三冠の第2戦、プリークネスステークスの優勝馬に贈られます。" },
109
+ "trophy:borg-warner-trophy": { en: "The Borg-Warner Trophy: a very tall tapering silver body of relief faces under a figure with a chequered flag, on a drum base.", ja: "ボルグ・ワーナー・トロフィー。先細りの非常に背の高い銀の本体に顔のレリーフが並び、頂にチェッカーフラッグを持つ人物が立つ姿を、ドラム形の台座の上に描いています。インディ500の優勝者に贈られます。" },
110
+ "trophy:fa-cup": { en: "The FA Cup: a tall lidded silver cup with scrolled ear handles, a rounded belly and a wide foot.", ja: "ふた付きの背の高い銀のカップを描いています。耳形の渦巻きの取っ手、丸い胴、広い台座があります。イングランド最古のカップ戦、FAカップの優勝クラブに贈られます。" },
111
+ "trophy:americas-cup": { en: "The America's Cup: a tall silver ewer with a spout, a broad rounded belly and a great spiral handle, on a stepped foot.", ja: "注ぎ口の付いた背の高い銀の水差しを描いています。幅広く丸い胴と大きならせん形の取っ手があり、段になった台座の上に載っています。ヨットレースのアメリカズカップの優勝チームに贈られます。" },
112
+ "trophy:cricket-world-cup": { en: "The Cricket World Cup: a gilt globe in a silver ring on four swept silver bands, over a black dome with silver discs.", ja: "クリケット・ワールドカップ。銀の輪に収まった金色の地球を、弧を描く4本の銀の帯が支え、その下に銀の円盤をちりばめた黒いドームがある姿を描いています。男子のクリケット・ワールドカップの優勝チームに贈られます。" },
113
+ "trophy:wimbledon-gentlemens-trophy": { en: "The Wimbledon Gentlemen's Singles Trophy: a gilt lidded two-handled cup with a pineapple finial, on a tall round plinth.", ja: "ウィンブルドン男子シングルス優勝杯。パイナップルの飾りが付いた、金色のふた付きカップを描いています。取っ手が二つあり、背の高い丸い台座に載っています。ウィンブルドン選手権の男子シングルスの優勝者に贈られます。" },
114
+ "trophy:venus-rosewater-dish": { en: "The Venus Rosewater Dish: a broad round silver dish seen face on, with rings of ornament and a central boss.", ja: "ヴィーナス・ローズウォーター・ディッシュ。正面から見た、幅広い丸い銀の大皿を描いています。何重もの輪の装飾と、中央の丸い飾り(ボス)があります。ウィンブルドン選手権の女子シングルスの優勝者に贈られます。" },
115
+ "trophy:ballon-dor": { en: "The Ballon d'Or: a gilt soccer ball on a black domed base.", ja: "黒いドーム形の台座に載った金色のサッカーボールを描いています。年間で最も優れたサッカー選手に贈られます。" },
116
+ "trophy:dfb-pokal": { en: "The DFB-Pokal: a tall gilt cup with a band round its bowl, a slim waist and a ringed foot.", ja: "帯が胴を一周する背の高い金色のカップを描いています。細くくびれた軸と、輪の装飾がある台座があります。ドイツのカップ戦、DFBポカールの優勝クラブに贈られます。" },
117
+ "trophy:ashes-urn": { en: "The Ashes urn: a small terracotta urn with square handles on a turned wooden base.", ja: "テラコッタの小さな壺を描いています。四角い取っ手が付き、旋盤で削り出した木の台に載っています。イングランドとオーストラリアが戦うアッシズ・シリーズの象徴として、ローズ・クリケット・グラウンドに保管されています。" },
118
+ "trophy:webb-ellis-cup": { en: "The Webb Ellis Cup: a gilt lidded two-handled cup with a pineapple finial on a round plinth.", ja: "金色のふた付きカップを描いています。取っ手が二つあり、ふたの上にパイナップル形の飾りが付いて、丸い台座に載っています。男子のラグビーワールドカップの優勝チームに贈られます。" },
119
+ "trophy:champions-league-trophy": { en: "The UEFA Champions League trophy: a tall silver urn with two long looping handles.", ja: "UEFAチャンピオンズリーグ・トロフィー。長い取っ手が二つ輪を描く、背の高い銀の壺を描いています。UEFAチャンピオンズリーグの優勝クラブに贈られます。" },
73
120
  "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: "金の先端飾りの付いた竿に掛けた、刺繍の縁と房の付いた旗。文字は指定したときだけ入る" },
74
121
  "sport:sumo": { en: "Two wrestlers in the crouch they face each other in at the start of a bout, with their belts", ja: "仕切りの姿勢で向かい合う、廻しを締めた二人の力士" },
75
122
  "sport:handball": { en: "A hand throwing the ball, with lines of speed", ja: "ボールを投げる手と、速さを表す線" },
@@ -0,0 +1,7 @@
1
+ import type { Ball, Handle, Solid } from "./emblem.lathe.ts";
2
+ /** The parts of a skater that stands from `top` to `foot` (heights in the 64 unit box), in the tones `body` and `skin` (names of the model's `tones`), `wide` times as wide as usual, with a stick unless `stick` is false (a figure standing at ease). */
3
+ export declare function skater(top: number, foot: number, body: string, skin: string, wide?: number, stick?: boolean): {
4
+ solids: Solid[];
5
+ handles: Handle[];
6
+ balls: Ball[];
7
+ };
@@ -0,0 +1,19 @@
1
+ /** The parts of a skater that stands from `top` to `foot` (heights in the 64 unit box), in the tones `body` and `skin` (names of the model's `tones`), `wide` times as wide as usual, with a stick unless `stick` is false (a figure standing at ease). */
2
+ export function skater(top, foot, body, skin, wide = 1, stick = true) {
3
+ const h = foot - top;
4
+ const round = (n) => Math.round(n * 10) / 10;
5
+ const y = (t) => round(top + t * h);
6
+ const w = (t) => round(t * h * 0.01 * wide);
7
+ const torso = { p: [[y(0.17), w(8), 1, body], [y(0.22), w(17)], [y(0.35), w(19)], [y(0.5), w(16)], [y(0.62), w(13)], [y(0.7), w(12), 1, body]] };
8
+ const leg = (at) => ({ at, p: [[y(0.66), w(6.5), 1, body], [y(0.8), w(5.4)], [y(0.92), w(5)], [y(1), w(7.5), 1, "dark"]] });
9
+ return {
10
+ solids: [torso, leg([w(7), -90]), leg([w(7), 90])],
11
+ handles: stick
12
+ ? [
13
+ { a: 90, w: w(4), tone: body, pts: [[w(14), y(0.3)], [-w(3), y(0.45)], [-w(10), y(0.5)]] },
14
+ { a: 90, w: w(3), tone: "dark", pts: [[-w(30), y(1)], [-w(8), y(0.62)], [w(14), y(0.34)]] },
15
+ ]
16
+ : [],
17
+ balls: [{ kind: "plain", cy: y(0.09), r: w(9), tone: skin }],
18
+ };
19
+ }
@@ -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"];
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"];
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"];
@@ -40,7 +40,7 @@ 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"];
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"];
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: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"];
@@ -15,6 +15,53 @@ export const TROPHY_IDS = [
15
15
  "trophy:tennis-plate", "trophy:tennis-cup", "trophy:cricket-urn", "trophy:rugby-cup",
16
16
  "trophy:plaque", "trophy:belt", "trophy:laurel", "trophy:rosette", "trophy:ring", "trophy:banner",
17
17
  "trophy:sumo-cup", "trophy:championship-banner",
18
+ "trophy:paterson-cup",
19
+ "trophy:stanley-cup",
20
+ "trophy:hart-trophy",
21
+ "trophy:vezina-trophy",
22
+ "trophy:norris-trophy",
23
+ "trophy:calder-trophy",
24
+ "trophy:presidents-trophy",
25
+ "trophy:art-ross-trophy",
26
+ "trophy:lady-byng-trophy",
27
+ "trophy:jennings-trophy",
28
+ "trophy:selke-trophy",
29
+ "trophy:king-clancy-trophy",
30
+ "trophy:masterton-trophy",
31
+ "trophy:jack-adams-trophy",
32
+ "trophy:prince-of-wales-trophy",
33
+ "trophy:campbell-bowl",
34
+ "trophy:rocket-richard-trophy",
35
+ "trophy:conn-smythe-trophy",
36
+ "trophy:ted-lindsay-award",
37
+ "trophy:lester-patrick-trophy",
38
+ "trophy:lombardi-trophy",
39
+ "trophy:larry-obrien-trophy",
40
+ "trophy:commissioners-trophy",
41
+ "trophy:grey-cup",
42
+ "trophy:cy-young-award",
43
+ "trophy:mlb-mvp-award",
44
+ "trophy:walter-cup",
45
+ "trophy:wnba-championship-trophy",
46
+ "trophy:lamar-hunt-trophy",
47
+ "trophy:silver-slugger-award",
48
+ "trophy:world-series-mvp-trophy",
49
+ "trophy:avco-world-trophy",
50
+ "trophy:obrien-cup",
51
+ "trophy:gold-glove-award",
52
+ "trophy:fifa-world-cup",
53
+ "trophy:woodlawn-vase",
54
+ "trophy:dfb-pokal",
55
+ "trophy:champions-league-trophy",
56
+ "trophy:webb-ellis-cup",
57
+ "trophy:fa-cup",
58
+ "trophy:cricket-world-cup",
59
+ "trophy:wimbledon-gentlemens-trophy",
60
+ "trophy:venus-rosewater-dish",
61
+ "trophy:ballon-dor",
62
+ "trophy:ashes-urn",
63
+ "trophy:borg-warner-trophy",
64
+ "trophy:americas-cup",
18
65
  ];
19
66
  /** The medals on a ribbon, and the badges for the first three places. */
20
67
  export const MEDAL_KINDS = ["gold", "silver", "bronze"];
@@ -9,6 +9,10 @@ export interface Solid {
9
9
  p: readonly Pt[];
10
10
  open?: boolean;
11
11
  sides?: number;
12
+ /** The angle in degrees that a body with flat sides is turned about its axis at rest: -45 on a square body shows a flat face to the eye, and 0 a corner. */
13
+ turn?: number;
14
+ /** Stands off the axis: at the distance `r` from it, at the angle `deg` (90 is the right side, 0 faces the eye), and turns round the axis with the rest. Its own profile is about its own axis. */
15
+ at?: readonly [r: number, deg: number];
12
16
  tone?: string;
13
17
  decor?: readonly Decor[];
14
18
  }
@@ -39,6 +43,8 @@ export interface Poles {
39
43
  top1: number;
40
44
  top2: number;
41
45
  size: number;
46
+ /** The tops lie on a tilted ring, not a spiral: `top1` at the pole that faces the eye at rest, `top2` at the one opposite, and the sides between. */
47
+ tilted?: boolean;
42
48
  }
43
49
  /** What a body of revolution is made of. All of it is in the 64 by 64 box with the axis at x = 32. */
44
50
  export interface LatheModel {
@@ -95,6 +95,7 @@ function draw(model, r, o, yaw, pitch) {
95
95
  const at = (R, y, deg) => [CX + R * Math.sin(deg * RAD), y + s * R * Math.cos(deg * RAD), Math.cos(deg * RAD)];
96
96
  const where = (R, y, deg) => pt(...at(R, y, deg).slice(0, 2));
97
97
  for (const solid of model.solids) {
98
+ const mark = mid.length;
98
99
  const p = solid.p;
99
100
  const list = piecesOf(p);
100
101
  const base = tone(solid.tone);
@@ -133,8 +134,8 @@ function draw(model, r, o, yaw, pitch) {
133
134
  // A body with flat faces: each face that looks toward the eye is a quadrilateral, lit by which way it faces.
134
135
  const n = solid.sides;
135
136
  for (let face = 0; face < n; face++) {
136
- const a0 = (360 * face) / n + yaw;
137
- const a1 = (360 * (face + 1)) / n + yaw;
137
+ const a0 = (360 * face) / n + yaw + (solid.turn ?? 0);
138
+ const a1 = (360 * (face + 1)) / n + yaw + (solid.turn ?? 0);
138
139
  const m = (a0 + a1) / 2;
139
140
  if (Math.cos(m * RAD) <= 0)
140
141
  continue;
@@ -147,7 +148,7 @@ function draw(model, r, o, yaw, pitch) {
147
148
  const above = k > 0 ? p[list[k - 1][list[k - 1].length - 1]] : undefined;
148
149
  if (!line && ((above === undefined && solid.open !== true && a[1] > 1) || (above !== undefined && a[1] > above[1] + 0.3))) {
149
150
  const sides = solid.sides;
150
- mid.push(sides === undefined ? ellipse(CX, a[0], a[1], a[1] * s, t.light) : `<path d="M${Array.from({ length: sides }, (_, i) => where(a[1], a[0], (360 * i) / sides + yaw)).join("L")}z" fill="${t.light}"${own(t)}/>`);
151
+ mid.push(sides === undefined ? ellipse(CX, a[0], a[1], a[1] * s, t.light) : `<path d="M${Array.from({ length: sides }, (_, i) => where(a[1], a[0], (360 * i) / sides + yaw + (solid.turn ?? 0))).join("L")}z" fill="${t.light}"${own(t)}/>`);
151
152
  }
152
153
  }
153
154
  if (solid.open === true) {
@@ -242,6 +243,12 @@ function draw(model, r, o, yaw, pitch) {
242
243
  mid.push(`<path d="${m}" stroke-width="${width}" stroke="${t.edge}"/><path d="${m}" stroke-width="${width - 0.9}" stroke="${t.light}"/>`);
243
244
  }
244
245
  }
246
+ // 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
+ if (solid.at !== undefined) {
248
+ const deg = solid.at[1] + yaw;
249
+ const piece = mid.splice(mark);
250
+ (Math.cos(deg * RAD) >= 0 ? front : back).push(`<g transform="translate(${f(solid.at[0] * Math.sin(deg * RAD))} ${f(s * solid.at[0] * Math.cos(deg * RAD))})">${piece.join("")}</g>`);
251
+ }
245
252
  }
246
253
  // Handles: a tube through the points of its plane, behind the body when it is on the far side.
247
254
  for (const h of model.handles ?? []) {
@@ -274,7 +281,7 @@ function draw(model, r, o, yaw, pitch) {
274
281
  for (let i = 0; i < o.n; i++) {
275
282
  const deg = yaw + (360 * i) / o.n;
276
283
  const near = Math.cos(deg * RAD) >= 0 ? "front" : "back";
277
- const topY = o.top1 + ((o.top2 - o.top1) * i) / o.n;
284
+ const topY = o.tilted === true ? o.top1 + ((o.top2 - o.top1) * (1 - Math.cos((2 * Math.PI * i) / o.n))) / 2 : o.top1 + ((o.top2 - o.top1) * i) / o.n;
278
285
  const [x0, y0] = at(o.r0, o.y0, deg);
279
286
  const [x1, y1] = at(o.r1, topY, deg);
280
287
  lines[near] += `M${pt(x0, y0)}L${pt(x1, y1)}`;
@@ -398,8 +405,8 @@ function draw(model, r, o, yaw, pitch) {
398
405
  else {
399
406
  const n = solid.sides;
400
407
  const k = plate.face ?? 0;
401
- const a0 = (360 * k) / n + yaw;
402
- const a1 = (360 * (k + 1)) / n + yaw;
408
+ const a0 = (360 * k) / n + yaw + (solid.turn ?? 0);
409
+ const a1 = (360 * (k + 1)) / n + yaw + (solid.turn ?? 0);
403
410
  const [ax, ay] = at(radius, y, a0);
404
411
  const [bx, by] = at(radius, y, a1);
405
412
  mid.push(sideText(words, 2 * radius * Math.sin(Math.PI / n), plate.y1 - plate.y0, ink, [ax, ay], [bx, by], Math.cos(((a0 + a1) / 2) * RAD)));
@@ -0,0 +1,25 @@
1
+ import type { TrophyId } from "./emblem.ids.ts";
2
+ /** What a named trophy is given for: the winner of a competition, a player, a coach or manager, a team, an executive, or something else. */
3
+ export type NamedKind = "champion" | "player" | "coach" | "team" | "executive" | "other";
4
+ /** One real trophy that an emblem is a likeness of. */
5
+ export interface NamedTrophy {
6
+ /** The emblem that draws it. */
7
+ readonly id: TrophyId;
8
+ /** The trophy's own name, in English, as it is usually written. */
9
+ readonly name: string;
10
+ /** The sport, in lower case: `hockey`, `basketball`, `baseball`, `football`, `soccer`... */
11
+ readonly sport: string;
12
+ /** The competition or league that gives it, as plain words, and no mark or logo. */
13
+ readonly competition: string;
14
+ readonly kind: NamedKind;
15
+ /** What it honours, in a sentence. */
16
+ readonly honours: string;
17
+ /** When it was first awarded: a year, or a season (`1917-18`). */
18
+ readonly first: string;
19
+ /** What the drawing was measured on: a photograph (or a few) looked at and never copied, with its licence status. */
20
+ readonly reference: string;
21
+ }
22
+ /** Every named trophy, in the order they were drawn. */
23
+ export declare const NAMED_TROPHIES: readonly NamedTrophy[];
24
+ /** The facts of a named trophy by its emblem id, or `undefined` for a generic trophy. */
25
+ export declare function namedTrophy(id: string): NamedTrophy | undefined;