@johnmorrisdotca/dougu-sports 0.1.0 → 0.2.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 (192) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/NOTICE.md +9 -58
  3. package/README.md +174 -37
  4. package/dist/emblems/award/badge.d.ts +2 -2
  5. package/dist/emblems/award/badge.js +14 -5
  6. package/dist/emblems/award/crown.d.ts +1 -1
  7. package/dist/emblems/award/crown.js +14 -4
  8. package/dist/emblems/award/medal.d.ts +2 -2
  9. package/dist/emblems/award/medal.js +14 -5
  10. package/dist/emblems/award/shield.d.ts +1 -1
  11. package/dist/emblems/award/shield.js +10 -4
  12. package/dist/emblems/award/star.d.ts +1 -1
  13. package/dist/emblems/award/star.js +10 -4
  14. package/dist/emblems/ball/ball.afl.js +3 -2
  15. package/dist/emblems/ball/ball.basketball6.js +1 -1
  16. package/dist/emblems/ball/ball.core.d.ts +9 -3
  17. package/dist/emblems/ball/ball.core.js +13 -0
  18. package/dist/emblems/ball/ball.cricket.js +1 -1
  19. package/dist/emblems/ball/ball.curlingstone.d.ts +2 -0
  20. package/dist/emblems/ball/ball.curlingstone.js +11 -7
  21. package/dist/emblems/ball/ball.discus.js +1 -1
  22. package/dist/emblems/ball/ball.engine.js +3 -3
  23. package/dist/emblems/ball/ball.football.js +9 -7
  24. package/dist/emblems/ball/ball.gaelic.js +1 -1
  25. package/dist/emblems/ball/ball.object.d.ts +5 -2
  26. package/dist/emblems/ball/ball.object.js +3 -2
  27. package/dist/emblems/ball/ball.puck.d.ts +2 -0
  28. package/dist/emblems/ball/ball.puck.js +2 -2
  29. package/dist/emblems/ball/ball.rugby.js +3 -2
  30. package/dist/emblems/ball/ball.shuttlecock.d.ts +4 -0
  31. package/dist/emblems/ball/ball.shuttlecock.js +6 -5
  32. package/dist/emblems/ball/ball.squash.js +5 -5
  33. package/dist/emblems/emblem.api.d.ts +39 -1
  34. package/dist/emblems/emblem.api.js +20 -2
  35. package/dist/emblems/emblem.compose.d.ts +31 -0
  36. package/dist/emblems/emblem.compose.js +91 -0
  37. package/dist/emblems/emblem.core.d.ts +48 -2
  38. package/dist/emblems/emblem.core.js +30 -0
  39. package/dist/emblems/emblem.descriptions.d.ts +7 -0
  40. package/dist/emblems/emblem.descriptions.js +60 -0
  41. package/dist/emblems/emblem.display.d.ts +75 -0
  42. package/dist/emblems/emblem.display.js +214 -0
  43. package/dist/emblems/emblem.engrave.d.ts +50 -0
  44. package/dist/emblems/emblem.engrave.js +145 -0
  45. package/dist/emblems/emblem.equipment.d.ts +24 -0
  46. package/dist/emblems/emblem.equipment.js +57 -0
  47. package/dist/emblems/emblem.flip.d.ts +10 -0
  48. package/dist/emblems/emblem.flip.js +46 -0
  49. package/dist/emblems/emblem.ids.d.ts +19 -11
  50. package/dist/emblems/emblem.ids.js +21 -6
  51. package/dist/emblems/emblem.lathe.d.ts +3 -0
  52. package/dist/emblems/emblem.lathe.js +26 -4
  53. package/dist/emblems/emblem.medal.js +4 -4
  54. package/dist/emblems/emblem.pennant.d.ts +3 -0
  55. package/dist/emblems/emblem.pennant.js +79 -0
  56. package/dist/emblems/emblem.registry.js +20 -0
  57. package/dist/emblems/emblem.shapes.d.ts +19 -2
  58. package/dist/emblems/emblem.shapes.js +55 -13
  59. package/dist/emblems/emblem.sprite.d.ts +38 -0
  60. package/dist/emblems/emblem.sprite.js +65 -0
  61. package/dist/emblems/emblem.uri.d.ts +22 -0
  62. package/dist/emblems/emblem.uri.js +29 -0
  63. package/dist/emblems/gear/gear.badmintonracket.d.ts +1 -1
  64. package/dist/emblems/gear/gear.badmintonracket.js +18 -14
  65. package/dist/emblems/gear/gear.baseballglove.d.ts +1 -1
  66. package/dist/emblems/gear/gear.baseballglove.js +20 -14
  67. package/dist/emblems/gear/gear.budo.d.ts +17 -0
  68. package/dist/emblems/gear/gear.budo.js +60 -0
  69. package/dist/emblems/gear/gear.core.d.ts +12 -31
  70. package/dist/emblems/gear/gear.core.js +61 -54
  71. package/dist/emblems/gear/gear.cricketbat.d.ts +1 -1
  72. package/dist/emblems/gear/gear.cricketbat.js +16 -14
  73. package/dist/emblems/gear/gear.fieldhockeystick.d.ts +1 -1
  74. package/dist/emblems/gear/gear.fieldhockeystick.js +15 -14
  75. package/dist/emblems/gear/gear.footballhelmet.d.ts +1 -1
  76. package/dist/emblems/gear/gear.footballhelmet.js +15 -14
  77. package/dist/emblems/gear/gear.goaliemask.d.ts +1 -1
  78. package/dist/emblems/gear/gear.goaliemask.js +22 -16
  79. package/dist/emblems/gear/gear.goalnet.d.ts +1 -1
  80. package/dist/emblems/gear/gear.goalnet.js +24 -14
  81. package/dist/emblems/gear/gear.hockeystick.d.ts +1 -1
  82. package/dist/emblems/gear/gear.hockeystick.js +14 -14
  83. package/dist/emblems/gear/gear.index.js +5 -1
  84. package/dist/emblems/gear/gear.kendo.d.ts +2 -0
  85. package/dist/emblems/gear/gear.kendo.js +41 -0
  86. package/dist/emblems/gear/gear.kyudo.d.ts +2 -0
  87. package/dist/emblems/gear/gear.kyudo.js +31 -0
  88. package/dist/emblems/gear/gear.lacrossestick.d.ts +1 -1
  89. package/dist/emblems/gear/gear.lacrossestick.js +25 -14
  90. package/dist/emblems/gear/gear.skates.js +1 -1
  91. package/dist/emblems/gear/gear.sticks.js +2 -2
  92. package/dist/emblems/gear/gear.sumo.d.ts +2 -0
  93. package/dist/emblems/gear/gear.sumo.js +43 -0
  94. package/dist/emblems/gear/gear.tabletennispaddle.d.ts +1 -1
  95. package/dist/emblems/gear/gear.tabletennispaddle.js +15 -14
  96. package/dist/emblems/gear/gear.tennisracket.d.ts +1 -1
  97. package/dist/emblems/gear/gear.tennisracket.js +16 -14
  98. package/dist/emblems/pennant/championship.d.ts +2 -0
  99. package/dist/emblems/pennant/championship.js +4 -0
  100. package/dist/emblems/sport/afl.js +1 -1
  101. package/dist/emblems/sport/artisticswimming.js +1 -1
  102. package/dist/emblems/sport/cfl.d.ts +1 -1
  103. package/dist/emblems/sport/cfl.js +4 -4
  104. package/dist/emblems/sport/cricket.d.ts +1 -1
  105. package/dist/emblems/sport/cricket.js +13 -4
  106. package/dist/emblems/sport/fieldhockey.js +1 -1
  107. package/dist/emblems/sport/gaelic.js +1 -1
  108. package/dist/emblems/sport/handball.d.ts +1 -1
  109. package/dist/emblems/sport/handball.js +14 -4
  110. package/dist/emblems/sport/ifaf.d.ts +1 -1
  111. package/dist/emblems/sport/ifaf.js +4 -4
  112. package/dist/emblems/sport/judo.d.ts +2 -0
  113. package/dist/emblems/sport/judo.js +13 -0
  114. package/dist/emblems/sport/karate.d.ts +2 -0
  115. package/dist/emblems/sport/karate.js +13 -0
  116. package/dist/emblems/sport/kendo.d.ts +2 -0
  117. package/dist/emblems/sport/kendo.js +14 -0
  118. package/dist/emblems/sport/kyudo.d.ts +2 -0
  119. package/dist/emblems/sport/kyudo.js +15 -0
  120. package/dist/emblems/sport/mlb.d.ts +1 -1
  121. package/dist/emblems/sport/mlb.js +27 -4
  122. package/dist/emblems/sport/nba.d.ts +1 -1
  123. package/dist/emblems/sport/nba.js +11 -4
  124. package/dist/emblems/sport/netball.js +1 -1
  125. package/dist/emblems/sport/nfl.d.ts +2 -1
  126. package/dist/emblems/sport/nfl.js +14 -4
  127. package/dist/emblems/sport/nhl.d.ts +1 -1
  128. package/dist/emblems/sport/nhl.js +12 -4
  129. package/dist/emblems/sport/pickleball.js +1 -1
  130. package/dist/emblems/sport/racquetball.js +1 -1
  131. package/dist/emblems/sport/roundnet.js +1 -1
  132. package/dist/emblems/sport/rugby.d.ts +1 -1
  133. package/dist/emblems/sport/rugby.js +11 -4
  134. package/dist/emblems/sport/sepaktakraw.js +1 -1
  135. package/dist/emblems/sport/soccer.d.ts +1 -1
  136. package/dist/emblems/sport/soccer.js +30 -4
  137. package/dist/emblems/sport/squash.js +1 -1
  138. package/dist/emblems/sport/sumo.d.ts +2 -0
  139. package/dist/emblems/sport/sumo.js +15 -0
  140. package/dist/emblems/sport/tabletennis.js +1 -1
  141. package/dist/emblems/sport/tennis.d.ts +1 -1
  142. package/dist/emblems/sport/tennis.js +14 -4
  143. package/dist/emblems/sport/teqball.js +1 -1
  144. package/dist/emblems/sport/volleyball.d.ts +1 -1
  145. package/dist/emblems/sport/volleyball.js +24 -4
  146. package/dist/emblems/trophy/banner.d.ts +2 -0
  147. package/dist/emblems/trophy/banner.js +20 -0
  148. package/dist/emblems/trophy/baseball.js +1 -0
  149. package/dist/emblems/trophy/basketball.js +1 -0
  150. package/dist/emblems/trophy/belt.js +2 -1
  151. package/dist/emblems/trophy/bowl.js +1 -0
  152. package/dist/emblems/trophy/canadian-bowl.js +1 -0
  153. package/dist/emblems/trophy/championship-banner.d.ts +2 -0
  154. package/dist/emblems/trophy/championship-banner.js +67 -0
  155. package/dist/emblems/trophy/cricket-urn.js +1 -0
  156. package/dist/emblems/trophy/cup.d.ts +1 -1
  157. package/dist/emblems/trophy/cup.js +15 -4
  158. package/dist/emblems/trophy/football.js +2 -1
  159. package/dist/emblems/trophy/globe.js +1 -0
  160. package/dist/emblems/trophy/hockey-cup.js +2 -1
  161. package/dist/emblems/trophy/lidded-cup.js +1 -0
  162. package/dist/emblems/trophy/plaque.js +2 -1
  163. package/dist/emblems/trophy/ring.d.ts +2 -0
  164. package/dist/emblems/trophy/ring.js +30 -0
  165. package/dist/emblems/trophy/rugby-cup.js +1 -0
  166. package/dist/emblems/trophy/salver.js +1 -0
  167. package/dist/emblems/trophy/soccer-ball.js +2 -1
  168. package/dist/emblems/trophy/soccer-globe.js +1 -0
  169. package/dist/emblems/trophy/sumo-cup.d.ts +2 -0
  170. package/dist/emblems/trophy/sumo-cup.js +28 -0
  171. package/dist/emblems/trophy/tennis-cup.js +2 -1
  172. package/dist/emblems/trophy/tennis-plate.js +1 -0
  173. package/dist/emblems-entry.d.ts +15 -6
  174. package/dist/emblems-entry.js +7 -2
  175. package/dist/index.d.ts +17 -0
  176. package/dist/index.js +15 -0
  177. package/dist/turn-control.d.ts +101 -0
  178. package/dist/turn-control.js +363 -0
  179. package/dist/turn-entry.d.ts +2 -0
  180. package/dist/turn-entry.js +1 -0
  181. package/dist/version.d.ts +1 -1
  182. package/dist/version.js +1 -1
  183. package/package.json +7 -1
  184. package/LICENSES/Apache-2.0.txt +0 -202
  185. package/LICENSES/CC-BY-3.0.txt +0 -319
  186. package/LICENSES/upstream/game-icons.license.txt +0 -45
  187. package/LICENSES/upstream/noto-emoji-2D-svg.LICENSE +0 -13
  188. package/LICENSES/upstream/pictogrammers-mdi.LICENSE +0 -20
  189. package/dist/emblems/emblem.material.d.ts +0 -9
  190. package/dist/emblems/emblem.material.data.d.ts +0 -34
  191. package/dist/emblems/emblem.material.data.js +0 -85
  192. package/dist/emblems/emblem.material.js +0 -23
package/CHANGELOG.md CHANGED
@@ -6,6 +6,56 @@ All notable changes to this project are written here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.2.1] - 2026-10-14
10
+
11
+ Eleven balls and implements drawn to the rulebook's proportions, flat emblems turning with the hand, and the gallery as one page per language.
12
+
13
+ ### Fixed
14
+
15
+ - **Eleven balls and implements were drawn out of proportion to the rulebook, the puck by half.** The puck was drawn 1 : 6 (thickness to diameter) where IIHF Rule 13 makes it 1 : 3, because the half thickness was divided by two twice; the curling stone's body was 0.200 of its diameter where the rules (a 914 mm circumference, a height of at least 114 mm) make it 0.392, and its handle now stands on the taller body; the feather shuttlecocks' feathers were 50 mm long where the Law gives 62 to 70 mm (now 66 mm); the discus was 2.2% too thin; the American, Canadian and IFAF footballs were 9% too slim and the rugby ball 6% too slim, with their outlines 4 to 7% too short; the Australian football was 12% too fat. The footballs and the rugby ball now take their width from the girth (the circumference over pi) and their `point` from the long girth, and the Australian football is an ellipsoid of its two girths. Nothing in the `size` metadata changed. A new test, `test/proportions.test.ts`, draws every ball and implement edge-on, measures the drawing itself (not the constants it was made from) and holds its ratio, size and, for the pointed balls, outline to the figures in `size` within 2%; it also checks that only a ball or an implement claims a real size, and that `lineup` at the true scale gives every piece the same pixels per millimetre. The ball contact sheets in `docs/pieces` are redrawn.
16
+
17
+ - **A flat thing turned the other way from a ball and a cup.** A ball rolls and a cup slides its light so that a positive yaw carries the front toward the right (and a drag to the right, or the Right arrow, is a positive yaw), but the coin turn of a medal, a crest, a pictogram, a piece of gear and a pennant showed its rim on the right, as if the front went left, so that dragging a medal to the right turned it against the hand. The rim is now on the left for a positive yaw (and on the right for a negative one), the edge that comes toward the eye, in the still and the line style alike. Only the side of the rim changes: the squeeze, the back and every angle are as before, `yaw` and `setAngles` mean the same, and `bindTurn` keeps its signs (right is more yaw, up is more pitch). A unit test holds the rim's side for every flat emblem and the ball's roll, and the demo's tests drag a ball, a cup and a medal to the right and measure which way each goes.
18
+
19
+ ### Changed
20
+
21
+ - **The gallery is two pages, one language each.** `docs/gallery.md` (English) and `docs/gallery.ja.md` (日本語) are both written by `scripts/make-gallery.mjs`, linked to each other at the top, with the columns Id, name, kind, source and description. The Constant and Import columns are gone (the long paths made GitHub squeeze the Japanese column to one character wide, so the names stacked): each page states once that the constant is the id in capitals (`trophy:lidded-cup` becomes `TROPHY_LIDDED_CUP`) and that it is imported from `@johnmorrisdotca/dougu-sports/trophy/lidded-cup`, and the generator stops if the rule fails for any emblem. `pnpm test:readme` checks both pages and accepts the rule as naming each emblem's constant.
22
+
23
+ ## [0.2.0] - 2026-10-14
24
+
25
+ The package is now 167 emblems (24 trophies, 5 awards, 6 medals, 4 crests, 38 sports, 47 balls, 42 gear and a pennant) and every one is its own drawing: the copied art and its licences are gone, the five Japanese sports and budo (sumo, kendo, judo, kyudo, karate) are in, text can be engraved on medals, plaques, cups, a ring, a banner and a pennant, every emblem turns through one coin-flip turn, and there are labels in two languages, data addresses, sprites, a podium, an award case, `sportEquipment` for all 38 sports and `bindTurn` to turn an emblem with a drag, the keys or a clock.
26
+
27
+ ### Added
28
+
29
+ - **Japanese sports and budō** ([docs/japanese-sports.md](docs/japanese-sports.md)), all original drawings with generic ids and no real trophy's name: `trophy:sumo-cup` (a tall silver cup on a tall stepped stand with phoenix-crested handles, a body of revolution), `trophy:championship-banner` (a fringed banner on a pole with a gilt finial and an embroidered border, no lettering unless `initials` gives up to three letters; `tint` is the cloth, `accent` the trim), and the gear `gear:gunbai` (the referee's war fan with its tassel), `gear:mawashi`, `gear:shinai`, `gear:kendo-men`, `gear:judogi`, `gear:obi` (with `OBI_RANKS`, white to black, and `obi(rank, options)`), `gear:yumi`, `gear:ya` and `gear:karate-gi`. Five sports are added to `SPORT_NAMES` (now 38) with a pictogram each: `sumo`, `kendo`, `judo`, `kyudo`, `karate`. `JAPANESE_IDS` lists the 16 together, and the gallery page shows them in a section of their own.
30
+ - **Japanese names are first-class**, read by a reviewer and using the governing bodies' words (柔道衣, 空手衣, 廻し, 軍配, 竹刀, 剣道の面, 優勝旗, 弓, 矢); `emblemInfo(id).description` and `EMBLEM_DESCRIPTIONS` hold a longer description in English and Japanese for the docs and the gallery.
31
+ - Gear has the `color` style (flat fills) as well as `metal` and `line`, and a part can be shaded across its width (`cyl`) as a round shaft is.
32
+ - **Labels.** `EmblemOptions` takes `locale` (`"en"` or `"ja"`: the `<title>` is the emblem's Japanese name, with `lang="ja"` on the drawing) and `title` (a string is written, escaped; `false` drops the `<title>` and marks the drawing `aria-hidden="true"`). Both work for every emblem in every style, still and turned, and in `crest()` and `medal()`.
33
+ - **`emblemDataUri(ref, options)`**: a percent-encoded `data:image/svg+xml;utf8,…` address for an `<img>`, a CSS background or a canvas, with `currentColor` made a concrete colour (`color` for the line, else the theme's ink; the default is dark ink), and a browser test that loads it in an `<img>` and on a canvas.
34
+ - **`emblemSprite(ids, options)`**: one hidden `<svg>` of `<symbol>`s with the definitions shared and every id unique across the sheet, and `use(id, { size, class, title })` for the markup of each use. Sixty-four soccer balls are 2,304 nodes and 530 kB inline and 228 nodes and 15 kB from a sheet; sixty-four medals 1,792 nodes and 115 kB against 220 and 8.7 kB.
35
+ - **`sportEquipment(sport)`**: `{ sport, ball?, gear[], trophy, medal? }` for each of the 38 sports (the five Japanese ones with their gear and `trophy:sumo-cup`), typed, with every id an id of the registry, and a test that every id exists and every sport is covered.
36
+ - **`podium(places, options)`** and **`awardCase(items, options)`**: a podium of first, second and third on tiered steps, with medals or trophies, names, flags (SVG markup or a URL, drawn as an inert image) and lines of text; and a team's trophies on a shelf or in a row with `×N` badges, wrapping into rows. Both are one SVG string in the page's text colour, light and dark, with `role="img"`, a title and a description, in English and Japanese.
37
+ - **`bindTurn(element, ref, options)`** in the `./turn` entry, in a module of its own: a drag, the arrow keys, Home and Space turn an emblem drawn with `emblemFrame`, with `sensitivity`, `pitchRange`, `keyStep` and `onTurn`; a controller with `angles`, `setAngles`, `update` and `destroy`. An emblem that cannot turn (read from the registry's frames, or one that says `turnable: false`) is drawn as it is; every emblem of the package turns, so only a custom one is. An auto-turn (`autoPlay`, `speed`, `pauseOnInteract`, `onPlayChange`, `play`, `pause`, `togglePlay`, `playing`) runs on `requestAnimationFrame` with a clamped time step, stops while the page is hidden, and only starts when asked: under `prefers-reduced-motion` `autoPlay: true` starts paused unless it is `"force"`.
38
+ - The demo's playground turns its emblem with `bindTurn`, synced with the yaw, tilt and roll sliders, with an auto-turn button and speed choice and a hint in English and Japanese, and has a trophy case of turnable emblems; a new compose page draws the podium, the award case, a sprite sheet, a data address and a sport's equipment, each with a copy button.
39
+ - `docs/compose.md`, a `bindTurn` section in `docs/turning.md`, README examples, and tests (`test/api.test.ts`, `test/turn-control.test.ts`, `e2e/turn.demo.mjs`, `e2e/compose.demo.mjs`).
40
+ - **Engraving.** Text cut into a face, from `engrave` (one string, up to three lines of 24 letters, Japanese included) or `label`, `year` and `rank`, with `engraveBack` for a back: on the medals and place badges (replacing the star or the numeral), `trophy:plaque` (the words on the plate, the year on the nameplate), `trophy:belt`, `trophy:ring`, `trophy:banner`, `pennant:championship`, and the plinth of each of the 16 cups and stands that are bodies of revolution. The lines are fitted to the plate (the biggest size that fits, a space may break a line), escaped, and cut in the ink that reads at 4.5 to 1 on the metal (a tone of it, black or white; the page's ink in the line style). Turned, the text goes with its face: squeezed on a medal, hidden on its back or another text there, and set letter by letter round a plinth so that it foreshortens and goes behind the edge.
41
+ - **`pennant()` and `pennant:championship`**: a felt championship pennant on a dowel with a stitched edge, lettered with its words and its year, in metal (felt fibres), color and line; its back is plain felt with the dowel on the other side. The new group `pennant`, and the `./pennant/*` export.
42
+ - **`trophy:ring`** (a championship ring: a band, a wide faceted head with a gem, the team and the year on its shoulders) and **`trophy:banner`** (a rafter banner on a rod, in the tint and accent, with its words and year). With the sumo cup and the championship banner the `trophy` group has 24 emblems.
43
+ - **Every emblem turns, through one turn.** Gear, the awards and the sport pictograms flip like a coin (`src/emblems/emblem.flip.ts`, the only turn of flat drawings: it takes any finished drawing, squeezes it by the cosine, shows it mirrored and a little darker on the back, and gives it a thin rim that is widest edge on). The Japanese gear and pictograms use it too, so there is no second turn for gear. `test/turn.test.ts` holds every id to a finite, well-formed frame at every yaw and pitch, and every flat one to a turn that differs, repeats at 360 and has a back.
44
+ - **Two pictograms redrawn to read at 16 pixels.** `sport:sumo` is two rikishi in the shikiri crouch (the stance before the charge), belts on, facing each other on the edge of the ring (it was a war fan that read as a frying pan; the fan is `gear:gunbai`), and `sport:handball` is a hand throwing the ball, with lines of speed (it was a goal and a ball that read as basketball).
45
+ - Options `engrave`, `label`, `year`, `rank`, `engraveBack`, `numberColor` (a pennant's lettering) and `view`; the playground has an Engrave field, and the gallery shows an engraved example, turned and from behind, for each emblem that takes one.
46
+
47
+ ### Changed
48
+
49
+ - **No third-party art is left.** The 11 gear pieces that were copied (`gear:hockey-stick`, `field-hockey-stick`, `lacrosse-stick`, `cricket-bat`, `table-tennis-paddle`, `badminton-racket`, `tennis-racket`, `goal-net`, `football-helmet`, `goalie-mask`, `baseball-glove`; from Noto Emoji, Wikimedia Commons and game-icons.net) and the 18 Material Symbols items (`trophy:cup`, the five `award:*` and the twelve pictograms `sport:nfl`, `cfl`, `ifaf`, `nhl`, `nba`, `mlb`, `soccer`, `tennis`, `volleyball`, `cricket`, `rugby`, `handball`) are redrawn as clean vector geometry in the package's own style (metal, color and line, light and dark), and the third-party art is removed with the scripts that only served it (`scripts/fetch-material-symbols.mjs`, `scripts/dougu/fetch-gear.mjs`, `build-gear.mjs`, `svgmin.mjs`, `gear-assets.json`), `LICENSES/Apache-2.0.txt`, `LICENSES/CC-BY-3.0.txt`, `LICENSES/upstream/` and every NOTICE entry for them. `NOTICE.md` keeps the rulebook table the balls' sizes come from; `LICENSES/` holds the MIT text. The `material`, `noto`, `mdi`, `commons` and `gameicons` values of `EmblemSource` and `PieceSource` are gone (every emblem is `ours`, `generated` or `drawn`), and so is the `MaterialModel` type.
50
+ - **Sizes.** The 11 gear pieces are 7.5 kB gzipped in the metal style and 4.4 kB as lines, from 28.2 kB and 17.0 kB (27% and 26%), and their modules 14.5 kB from 82.8 kB (4.3 kB from 29.2 kB gzipped). The 18 Material items are 8.5 kB in metal (from 7.5 kB, because they now have bevels, glints and a second colour) and 5.8 kB as lines (from 7.8 kB), and their sources 12.8 kB from 23.1 kB (3.7 kB from 6.5 kB gzipped). The built `dist` is 137 kB gzipped as a tarball, from 158 kB, with 16 emblems more.
51
+ - **Every emblem has a short accessible name** (the `<title>`): English 26 characters at most and Japanese 12 or a little over where the established word is longer (`ダブルイエロー`, `バスケットボールのトロフィー`); the longer text moved to the descriptions. 41 names were shortened, among them `trophy:tennis-cup` (`Pineapple cup`), `trophy:hockey-cup`, `sport:ifaf`, the squash balls, `gear:badminton-racket`, `gear:hurley` (`ハーリングのスティック`). Football in Japanese is `アメフト…` for American football and bare `ホッケー` means field hockey (ice hockey is always `アイスホッケー`).
52
+ - **Gaelic football is spelled `ゲーリックフットボール`** on both `sport:gaelic` and `ball:gaelic-football` (the pictogram had a middle dot).
53
+ - The rugby, volleyball, baseball, basketball, soccer, tennis, cricket and handball pictograms now show the equipment, with a grey sheet in the metal style like the other pictograms, instead of a solid glyph.
54
+ - `playwright.config.mjs` takes `TEST_PORT` (default 7201), so a worktree can test on its own port.
55
+ - The demo's playground keeps the turn when the emblem, style, tint or look changes, instead of putting the emblem back at rest.
56
+ - The playground and the gallery turn every emblem (the gear and the icons had no turn controls).
57
+ - Item sizes grew with the new code (gzipped, one item bundled by itself): a medal 3.2 to 4.5 kB, a flat emblem 3.0 to 4.3 kB, a cup 5.6 to 6.9 kB, a pictogram or an award 1.8 to 3.7 kB (the sumo and handball outlines 4.1 and 3.8 kB), a piece of gear 2.6 to 3.7 kB, the pennant 3.3 kB; the limits in `test/size.test.ts` are 4.6, 7.1 and 4.3 kB for a flat emblem, a cup and an icon. The engraving code is left out of a bundle that does not draw a medal, a plaque or a cup, and the turn code is the only addition to an icon's.
58
+
9
59
  ## [0.1.0] - 2026-10-14
10
60
 
11
61
  The art arrives: 148 emblems (the trophies, awards, medals, crests, the pictogram of each of the 33 sports, the balls and the gear), moved here from Kyogijo Stadiums and, for the trophies, medals and crests, redrawn.
@@ -39,6 +89,8 @@ First preview: the name, the API and two sample emblems. The full set of trophie
39
89
  - Tests for the drawing, the ids, the turns and the bundle size of one item; a package check that installs the packed tarball and bundles one item from it.
40
90
  - The demo (a playground with a turn slider, and a gallery page), `docs/layout.md`, `docs/turning.md`, `docs/gallery.md`, the family header and footer, the CI, Pages and Release workflows, and `LICENSES/` and `NOTICE.md` ready for third-party art.
41
91
 
42
- [Unreleased]: https://github.com/johnmorrisdotca/dougu-sports/compare/v0.1.0...HEAD
92
+ [Unreleased]: https://github.com/johnmorrisdotca/dougu-sports/compare/v0.2.1...HEAD
93
+ [0.2.1]: https://github.com/johnmorrisdotca/dougu-sports/compare/v0.2.0...v0.2.1
94
+ [0.2.0]: https://github.com/johnmorrisdotca/dougu-sports/compare/v0.1.0...v0.2.0
43
95
  [0.1.0]: https://github.com/johnmorrisdotca/dougu-sports/compare/v0.0.1...v0.1.0
44
96
  [0.0.1]: https://github.com/johnmorrisdotca/dougu-sports/releases/tag/v0.0.1
package/NOTICE.md CHANGED
@@ -1,68 +1,19 @@
1
1
  # Notice: where the art comes from
2
2
 
3
- The code of this package is under the MIT licence (see [LICENSE](LICENSE) and [LICENSES/MIT.txt](LICENSES/MIT.txt)). Every emblem is either drawn for this package (`source: "ours"`, `"generated"` or `"drawn"` in `emblemInfo`) or made from one of the sources below, and each emblem made from a source has a row in the second table. The licence text of each source is in [LICENSES/](LICENSES/).
3
+ The code of this package is under the MIT licence (see [LICENSE](LICENSE) and [LICENSES/MIT.txt](LICENSES/MIT.txt)). **Every emblem is drawn for this package** (`source: "ours"`, `"generated"` or `"drawn"` in `emblemInfo`) or made by its own code, and so is under the same MIT licence. Nothing is copied from another project: no icon set, no emoji font, no clip art and no photograph is in the package, so there is no third-party licence to carry and none is shipped (`LICENSES/` holds the MIT text and nothing else).
4
4
 
5
- No emblem carries the name, mark or logo of a league, a team, a federation or an event: the trophies, crests and balls are descriptive and generic.
5
+ No emblem carries the name, mark or logo of a league, a team, a federation or an event: the trophies, crests, balls and gear are descriptive and generic. That includes the Japanese items (`trophy:sumo-cup`, `trophy:championship-banner` and the `gear:*` of sumo, kendo, judo, kyudo and karate): they are original drawings of what such an object looks like, with generic ids, and carry no trophy's name, no federation's mark and no lettering unless the caller gives some.
6
6
 
7
- ## The sources the art may come from
7
+ ## How the art is made
8
8
 
9
- | Source | What it is | Licence | Text kept in | Credit it asks for |
10
- | --- | --- | --- | --- | --- |
11
- | Material Symbols, Google (https://fonts.google.com/icons) | Icons as paths | Apache License 2.0 | [LICENSES/Apache-2.0.txt](LICENSES/Apache-2.0.txt) | None required; named here |
12
- | Noto Emoji and Noto Color Emoji, Google (https://github.com/googlefonts/noto-emoji) | Emoji drawings | Apache License 2.0 (the emoji; the fonts are under the SIL OFL 1.1, and none is used) | [LICENSES/Apache-2.0.txt](LICENSES/Apache-2.0.txt) | None required; named here |
13
- | Material Design Icons, Pictogrammers (https://pictogrammers.com/library/mdi/) | Icons as paths | Apache License 2.0 | [LICENSES/Apache-2.0.txt](LICENSES/Apache-2.0.txt) | None required; named here |
14
- | game-icons.net (https://game-icons.net/) | Icons by many authors | Creative Commons Attribution 3.0 | [LICENSES/CC-BY-3.0.txt](LICENSES/CC-BY-3.0.txt) | The author of each icon, with a link to the licence, and a note that it was changed |
15
- | Drawn for this package | Everything marked `ours` | MIT | [LICENSES/MIT.txt](LICENSES/MIT.txt) | None |
9
+ - The trophies, medals, crests, awards and sport pictograms are drawn in SVG by hand in a simplified, generic form. No real trophy, medal, logo, mark or engraving was copied or traced, and no photograph was traced (photographs were looked at, never copied).
10
+ - The balls (`src/emblems/ball/`) are drawn by this package's own code: a rotation, a projection and our own geometry (a seam curve, the truncated icosahedron, a layout of curved panels, a fitted basketball channel).
11
+ - The gear (`src/emblems/gear/`) is drawn by us from a list of parts (a path, a colour, how it reads as a line); the bow, the arrow and the other tapering shapes are made by a small function of ours (`swell`), and the rest are paths written for this package.
12
+ - The Japanese words for the Japanese items are the ones the sports' governing bodies use in their own rules and equipment lists (kendo, judo, kyudo and karate federations and the sumo association); the bodies' names and marks are not used in any id, title or drawing.
16
13
 
17
- ## The emblems made from a source
14
+ ## The balls' sizes
18
15
 
19
- Sixteen emblems are Material Symbols (Google, Apache License 2.0), fetched at a pinned commit by `scripts/fetch-material-symbols.mjs` (`src/emblems/emblem.material.data.ts` is its output) and not changed, except that the metal style paints the filled symbol with a gradient and a darker edge, and the line style draws the outlined symbol. The package has no runtime dependency on them. Copyright Google LLC; the licence text is [LICENSES/Apache-2.0.txt](LICENSES/Apache-2.0.txt).
20
-
21
- | Emblem | Made from | Author | How it was changed | Licence |
22
- | --- | --- | --- | --- | --- |
23
- | `trophy:cup` | Material Symbols `emoji_events` | Google | Painted by the metal style | Apache-2.0 |
24
- | `award:medal` | Material Symbols `military_tech` | Google | Painted by the metal style | Apache-2.0 |
25
- | `award:badge` | Material Symbols `workspace_premium` | Google | Painted by the metal style | Apache-2.0 |
26
- | `award:crown` | Material Symbols `crown` | Google | Painted by the metal style | Apache-2.0 |
27
- | `award:star` | Material Symbols `star` | Google | Painted by the metal style | Apache-2.0 |
28
- | `award:shield` | Material Symbols `shield` | Google | Painted by the metal style | Apache-2.0 |
29
- | `sport:nfl`, `sport:cfl`, `sport:ifaf` | Material Symbols `sports_football` | Google | Drawn in the page's ink | Apache-2.0 |
30
- | `sport:nhl` | Material Symbols `sports_hockey` | Google | Drawn in the page's ink | Apache-2.0 |
31
- | `sport:nba` | Material Symbols `sports_basketball` | Google | Drawn in the page's ink | Apache-2.0 |
32
- | `sport:mlb` | Material Symbols `sports_baseball` | Google | Drawn in the page's ink | Apache-2.0 |
33
- | `sport:soccer` | Material Symbols `sports_soccer` | Google | Drawn in the page's ink | Apache-2.0 |
34
- | `sport:tennis` | Material Symbols `sports_tennis` | Google | Drawn in the page's ink | Apache-2.0 |
35
- | `sport:volleyball` | Material Symbols `sports_volleyball` | Google | Drawn in the page's ink | Apache-2.0 |
36
- | `sport:cricket` | Material Symbols `sports_cricket` | Google | Drawn in the page's ink | Apache-2.0 |
37
- | `sport:rugby` | Material Symbols `sports_rugby` | Google | Drawn in the page's ink | Apache-2.0 |
38
- | `sport:handball` | Material Symbols `sports_handball` | Google | Drawn in the page's ink | Apache-2.0 |
39
-
40
- The other trophies, the medals, the place badges, the crests, the other sport pictograms and every ball are drawn for this package, under its MIT licence. The trophies are drawn in SVG by hand in a simplified, generic form; no real trophy, medal, logo, mark or engraving was copied or traced, and no photograph was traced (photographs were looked at, never copied).
41
-
42
- ## The balls and the gear
43
-
44
- The balls (`src/emblems/ball/`) are drawn by this package's own code: a rotation, a projection and our own geometry (a seam curve, the truncated icosahedron, a layout of curved panels, a fitted basketball channel). No picture is copied for them. The sizes they carry (`size` on each ball: the diameter or length, the circumference and the mass, with the rule they come from) are facts read from the rulebooks listed below; no text, table or drawing of a rulebook is copied.
45
-
46
- Some of the gear (`src/emblems/gear/`) is drawn by us (22 pieces: rackets, sticks, skates, the athletics and pool gear, the nets and posts: `source: "drawn"`). The rest is copied, with changes, from the open artwork below, each module naming its source, its pinned version and the SHA-256 of the file as published in its header, and each drawing carrying its credit in a `<desc>`. The changes are the ones the Apache-2.0 licence asks to have marked: the editors' wrappers and metadata removed, the coordinates written absolute and rounded, the ids renamed; for the glove, the black background square left out and the shape filled with leather and shaded; for the goalie mask, a pale face laid under the ink. `scripts/dougu/fetch-gear.mjs` fetches the files again from the pinned versions and checks their hashes; `scripts/dougu/build-gear.mjs` writes the modules from them. The full licence texts are in [LICENSES/](LICENSES/): [Apache-2.0](LICENSES/Apache-2.0.txt), [MIT](LICENSES/MIT.txt) (this package) and [CC BY 3.0](LICENSES/CC-BY-3.0.txt), and each upstream's own licence file as found in [LICENSES/upstream/](LICENSES/upstream/).
47
-
48
- | Gear | Artwork | Licence | Copyright or credit, as read | Line style from |
49
- | --- | --- | --- | --- | --- |
50
- | `gear:hockey-stick` | Noto Emoji: [`2D/svg/emoji_u1f3d2.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3d2.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Pictogrammers MDI `svg/hockey-sticks.svg` (Apache-2.0, icon by Google) |
51
- | `gear:field-hockey-stick` | Noto Emoji: [`2D/svg/emoji_u1f3d1.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3d1.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Commons `Field_hockey_stick_with_ball_Pinhead_icon.svg` (CC0) |
52
- | `gear:lacrosse-stick` | Noto Emoji: [`2D/svg/emoji_u1f94d.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f94d.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | worked out from the colour artwork |
53
- | `gear:cricket-bat` | Noto Emoji: [`2D/svg/emoji_u1f3cf.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3cf.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Pictogrammers MDI `svg/cricket.svg` (Apache-2.0, icon by Google) |
54
- | `gear:table-tennis-paddle` | Noto Emoji: [`2D/svg/emoji_u1f3d3.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3d3.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Pictogrammers MDI `svg/table-tennis.svg` (Apache-2.0, icon by Google) |
55
- | `gear:badminton-racket` | Noto Emoji: [`2D/svg/emoji_u1f3f8.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3f8.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Pictogrammers MDI `svg/badminton.svg` (Apache-2.0, icon by Nick) |
56
- | `gear:tennis-racket` | Noto Emoji: [`2D/svg/emoji_u1f3be.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f3be.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | Pictogrammers MDI `svg/tennis.svg` (Apache-2.0, icon by Google) |
57
- | `gear:goal-net` | Noto Emoji: [`2D/svg/emoji_u1f945.svg`](https://github.com/googlefonts/noto-emoji/blob/e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e/2D/svg/emoji_u1f945.svg) | Apache-2.0 | Copyright 2013 Google, Inc. All Rights Reserved. | worked out from the colour artwork |
58
- | `gear:football-helmet` | Wikimedia Commons: [`FootballHelmet.svg`](https://commons.wikimedia.org/wiki/File:FootballHelmet.svg) | CC0 | Author: Simanek / Credit: https://openclipart.org/detail/86827/football-helmet | Pictogrammers MDI `svg/football-helmet.svg` (Apache-2.0, icon by Austin Andrews) |
59
- | `gear:goalie-mask` | Wikimedia Commons: [`Hockey Mask (188584) - The Noun Project.svg`](https://commons.wikimedia.org/wiki/File:Hockey_Mask_(188584)_-_The_Noun_Project.svg) | CC0 | Author: Philippe Tardif / Credit: Noun Project - https://thenounproject.com/icon/188584 | worked out from the colour artwork |
60
- | `gear:baseball-glove` | game-icons.net: [`delapouite/baseball-glove.svg`](https://game-icons.net/1x1/delapouite/baseball-glove.html) | CC BY 3.0 | Baseball glove icon by Delapouite under CC BY 3.0 | the same artwork as ink |
61
-
62
- - **Noto Emoji** ([googlefonts/noto-emoji](https://github.com/googlefonts/noto-emoji), read at commit `e20cbc2bbec1926686be9f9bee7d1d2cfa1fea0e`): the files under `2D/svg/` only. Their licence is `2D/svg/LICENSE`, the Apache License 2.0, whose copyright line reads "Copyright 2013 Google, Inc. All Rights Reserved." The repository's root `LICENSE` is the SIL Open Font License 1.1 ("Copyright 2013 Google LLC") and governs the fonts, not these images; `2D/fonts/LICENSE` is also the OFL and has no copyright line. None of the fonts is used.
63
- - **Pictogrammers Material Design Icons** ([Templarian/MaterialDesign-SVG](https://github.com/Templarian/MaterialDesign-SVG), read at commit `9e04201d4557e729822fb57f62a316c3dea1d4a8`): used only for the one-path line versions. The repository's `LICENSE` is the "Pictogrammers Free License", which has no copyright line and says the icons are redistributed under the Apache License 2.0 or their respective licences; the repository's `package.json` names Austin Andrews as author and Apache-2.0 as the licence, and each icon's author is in its `meta.json` (Google, Nick, Austin Andrews). Treated as Apache-2.0, with the icon's author credited.
64
- - **Wikimedia Commons**: only files whose own file page says CC0 or Public domain, read on 2026-10-14 with the MediaWiki API and the page itself: `FootballHelmet.svg` (CC0, Simanek, via Openclipart), `Field hockey stick with ball Pinhead icon.svg` (CC0, Quincy Morgan and the Temaki contributors, Pinhead v12.0.0) and `Hockey Mask (188584) - The Noun Project.svg` (CC0, Philippe Tardif). The revisions are in `scripts/dougu/gear-assets.json`.
65
- - **game-icons.net** ([game-icons/icons](https://github.com/game-icons/icons), read at commit `82d948812bfe3f269ef8f731dcdb07b08160edc4`): "Baseball glove icon by Delapouite under CC BY 3.0" (https://delapouite.com; licence https://creativecommons.org/licenses/by/3.0/). The repository has no `LICENSE`; its `license.txt` says "Icons provided under the Creative Commons 3.0 BY or CC0 if mentioned below" and asks for a mention such as "Icons made by {author}"; the credit is in the drawing's `<desc>` and here: Icons made by Delapouite. Available on https://game-icons.net.
16
+ The sizes the balls carry (`size` on each ball: the diameter or length, the circumference and the mass, with the rule they come from) are facts read from the rulebooks listed below; no text, table or drawing of a rulebook is copied.
66
17
 
67
18
  ### The rulebooks the balls' sizes are read from
68
19