@johnmorrisdotca/dougu-sports 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ All notable changes to this project are written here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.11.0] - 2026-10-19
10
+
11
+ ### Changed
12
+
13
+ - **Era soccer balls get neutral ids and new looks** the ten era balls move from year-and-style ids to neutral ones (`ball:soccer-retro-pentagons`, `-leaves`, `-rosette`, `-pinwheel`, `-kites`, `ball:soccer-14-panel-double-border`, `-8-panel-plain`, `-6-panel-bands`, `-6-panel-diamonds`, `-20-panel-dots`); **the ids published in 0.9.0 and 0.10.0 stay as aliases** (`EMBLEM_ALIASES`), so `ball:soccer-2006-propeller` and the rest still draw the ball that replaced them. The 14-panel ball has a double border (two black lines along each seam, two red inside each propeller), the 8-panel ball has plain white panels, the two 6-panel balls have a series of diamonds at each pole, and the three-colour pinwheel has a solid circle at its centre. Titles and descriptions (English and Japanese) now say what each ball shows.
14
+
15
+ ### Added
16
+
17
+ - `ball:soccer-retro-star`, a second 1980s-style soccer ball with a six-armed teal star on cream hexagons. 274 emblems.
18
+
9
19
  ## [0.10.0] - 2026-10-19
10
20
 
11
21
  ### Added
package/NOTICE.md CHANGED
@@ -27,7 +27,7 @@ Each ball's `size.rule` names the rule; the table gives the document and where i
27
27
 
28
28
  | Balls | Rulebook and rule | Read at |
29
29
  | --- | --- | --- |
30
- | `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:soccer-1960-32-panel-leather`, `ball:soccer-1970-black-white`, `ball:soccer-1978-triad`, `ball:soccer-1986-decorated-triad`, `ball:soccer-1998-coloured-triad`, `ball:soccer-2002-triangle-sweep`, `ball:soccer-2006-propeller`, `ball:soccer-2010-grooved`, `ball:soccer-2014-ribbon`, `ball:soccer-2018-pixel`, `ball:soccer-2022-speed-shell`, `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` | IFAB Laws of the Game, Law 2 The Ball, section 2.1 Qualities and measurements | https://www.theifab.com/laws/latest/the-ball/ |
30
+ | `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:soccer-1960-32-panel-leather`, `ball:soccer-retro-pentagons`, `ball:soccer-retro-leaves`, `ball:soccer-retro-rosette`, `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` | IFAB Laws of the Game, Law 2 The Ball, section 2.1 Qualities and measurements | https://www.theifab.com/laws/latest/the-ball/ |
31
31
  | `ball:futsal` | Futsal Laws of the Game 2025/26, Law 2 The Ball, section 1 Qualities and measurements (circumference 62-64 cm, 400-440 g, 0.6-0.9 atm, bounce 50-65 cm from 2 m) | https://digitalhub.fifa.com/m/20d52e6779b53321/original/FUTSAL-Laws-of-the-Game-2025-2026.pdf |
32
32
  | `ball:beach-soccer` | Beach Soccer Laws of the Game 2024-25, Law 2 The Ball, section 1 Qualities and measurements (circumference 68-70 cm, 400-440 g, 0.4-0.6 atm); the 2021/22 edition has the same figures | https://www.the-aiff.com/media/uploads/2024/11/Beach-Soccer-Laws-of-the-Game-2024-25.pdf |
33
33
  | `ball:soccer-1870-hand-stitched`, `ball:soccer-1900-laced`, `ball:soccer-1930-18-panel`, `ball:soccer-1950-12-panel` | Laws of the Game of the Football Association, revised 1872: a sphere 27 to 28 inches round (no mass given: the early figures could not be confirmed in a primary text); read in Wikipedia's account of the 1872 revision (secondary) | https://en.wikipedia.org/wiki/Ball_(association_football) |
package/README.md CHANGED
@@ -52,7 +52,7 @@ The ball and the gear of every sport, trophies, medals, crests and the icon of e
52
52
  </tr>
53
53
  </table>
54
54
 
55
- > **Status: preview.** 273 emblems: 24 trophies, 6 awards, 6 medals, 4 crests, a pictogram for each of the 38 sports, 116 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.
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.
56
56
 
57
57
  ## In 30 seconds
58
58
 
@@ -80,7 +80,7 @@ Put the string in a page (`element.innerHTML = svg`), write it to a file, or sen
80
80
 
81
81
  ## Features
82
82
 
83
- - **Equipment first (道具 is the word for it)**: 116 balls and implements drawn in 3D, from the 32-panel soccer ball to the 26, 18, 14, 12 and 6 panel constructions, vintage leather balls, era-style and shop-wall soccer balls, baseballs of other threads, volleyballs in national colours ([docs/vintage-balls.md](./docs/vintage-balls.md)), futsal, beach soccer and the pucks and stones, each with its official size, 8 printed pucks (a flag, a leaf, stars and stripes, a player's number, a made-up signature, your own picture: [docs/pucks.md](./docs/pucks.md)), and 42 pieces of gear (sticks, rackets, helmets, skates, nets, and the Japanese budo kit) drawn to match; see [docs/gallery.md](./docs/gallery.md).
83
+ - **Equipment first (道具 is the word for it)**: 117 balls and implements drawn in 3D, from the 32-panel soccer ball to the 26, 18, 14, 12 and 6 panel constructions, vintage leather balls, era-style and shop-wall soccer balls, baseballs of other threads, volleyballs in national colours ([docs/vintage-balls.md](./docs/vintage-balls.md)), futsal, beach soccer and the pucks and stones, each with its official size, 8 printed pucks (a flag, a leaf, stars and stripes, a player's number, a made-up signature, your own picture: [docs/pucks.md](./docs/pucks.md)), and 42 pieces of gear (sticks, rackets, helmets, skates, nets, and the Japanese budo kit) drawn to match; see [docs/gallery.md](./docs/gallery.md).
84
84
  - **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
85
  - **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
86
  - **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).
@@ -418,7 +418,7 @@ An emblem is a small object: `id`, `en` and `ja` names, a `source` (who drew it)
418
418
  | `trophy` | Twenty-four trophies: ten that stand for a league's cup in a generic form (a tall banded cup, a ring of pennants round a baseball, a football on a stand, a ball over a net, a wide two-handled bowl, a globe held up by spiral figures, a gilt dish, a lidded cup with a pineapple, an urn, a gilded cup), plain cups, bowls and dishes, a plaque, a belt, a wreath, a rosette, a championship ring, a rafter banner, a phoenix-handled sumo cup and a championship banner | `src/emblems/trophy/` |
419
419
  | `medal` | Gold, silver and bronze medals on a ribbon of five stripes, and a badge for each of the first three places | `src/emblems/medal/` |
420
420
  | `crest` | Four generic crests, tinted by a team's colours, with its letters | `src/emblems/crest/` |
421
- | `ball` | 116 balls and implements, in 3D, each with its official size: soccer (in 32, 26, 18, 14, 12 and 6 panels, in three colourways, with futsal and beach soccer; [docs/soccer-balls.md](./docs/soccer-balls.md); and vintage leather, era-style and patterned balls, [docs/vintage-balls.md](./docs/vintage-balls.md)), basketball, baseball, tennis, rugby, the footballs, golf, the puck, the curling stone and the rest | `src/emblems/ball/` |
421
+ | `ball` | 117 balls and implements, in 3D, each with its official size: soccer (in 32, 26, 18, 14, 12 and 6 panels, in three colourways, with futsal and beach soccer; [docs/soccer-balls.md](./docs/soccer-balls.md); and vintage leather, era-style and patterned balls, [docs/vintage-balls.md](./docs/vintage-balls.md)), basketball, baseball, tennis, rugby, the footballs, golf, the puck, the curling stone and the rest | `src/emblems/ball/` |
422
422
  | `puck` | 8 printed pucks: the same puck with a print on its top face that turns with it (a flag and CANADA, a red leaf, stars and stripes, a player's name and number, a made-up signature, a souvenir), and a `face` option for any picture, emblem or flag code; [docs/pucks.md](./docs/pucks.md) | `src/emblems/ball/ball.puck.print.ts` |
423
423
  | `gear` | 67 pieces of equipment: sticks, rackets, skates, a glove, a helmet, nets and posts, a javelin, starting blocks, and for the Japanese sports a war fan, a sumo belt, a bamboo sword, a kendo helmet, the judo suit (white and blue, laid flat and folded, and from behind with its back number), the belts of every grade (white to red, the red-and-white belt, the women's black belt and the two-colour belts) and the six steps of tying one, a long bow, an arrow and a karate suit | `src/emblems/gear/` |
424
424
  | `sport` | One pictogram for each of the thirty-eight sports | `src/emblems/sport/` |
@@ -637,7 +637,7 @@ Bug reports and ideas go in the [issues](https://github.com/johnmorrisdotca/doug
637
637
 
638
638
  ## Changes
639
639
 
640
- See [CHANGELOG.md](./CHANGELOG.md). 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.
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.
641
641
 
642
642
  ## Credits
643
643
 
@@ -26,7 +26,7 @@ import { BALL_LACROSSE, BALL_RACQUETBALL, BALL_TABLE_TENNIS, BALL_SHOT } from ".
26
26
  import { BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW } from "./ball.soccer.panels.js";
27
27
  import { BALL_FUTSAL, BALL_BEACH_SOCCER } from "./ball.soccer.indoor.js";
28
28
  import { 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 } from "./ball.soccer.vintage.js";
29
- import { BALL_SOCCER_1970_BLACK_WHITE, BALL_SOCCER_1978_TRIAD, BALL_SOCCER_1986_DECORATED_TRIAD, BALL_SOCCER_1998_COLOURED_TRIAD, BALL_SOCCER_2002_TRIANGLE_SWEEP, BALL_SOCCER_2006_PROPELLER, BALL_SOCCER_2010_GROOVED, BALL_SOCCER_2014_RIBBON, BALL_SOCCER_2018_PIXEL, BALL_SOCCER_2022_SPEED_SHELL, BALL_SOCCER_TRAINING_HIGH_VIS } from "./ball.soccer.era.js";
29
+ import { 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 } from "./ball.soccer.era.js";
30
30
  import { 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 } from "./ball.soccer.store.js";
31
31
  import { BALL_BASEBALL_LEMON_PEEL, BALL_BASEBALL_RED_BLUE, BALL_BASEBALL_BLACK_RED, BALL_BASEBALL_VINTAGE_LEATHER, BALL_SOFTBALL_11_OPTIC } from "./ball.baseball.vintage.js";
32
32
  import { 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 } from "./ball.volleyball.flag.js";
@@ -36,7 +36,7 @@ import { BALL_TEQBALL } from "./ball.teqball.js";
36
36
  import { BALL_VOLLEYBALL, BALL_VOLLEYBALL_8, BALL_BEACH_VOLLEYBALL } from "./ball.volleyball.js";
37
37
  import { BALL_WATER_POLO } from "./ball.waterpolo.js";
38
38
  /** Every ball, in the order a gallery shows them. */
39
- export const BALLS = [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_1970_BLACK_WHITE, BALL_SOCCER_1978_TRIAD, BALL_SOCCER_1986_DECORATED_TRIAD, BALL_SOCCER_1998_COLOURED_TRIAD, BALL_SOCCER_2002_TRIANGLE_SWEEP, BALL_SOCCER_2006_PROPELLER, BALL_SOCCER_2010_GROOVED, BALL_SOCCER_2014_RIBBON, BALL_SOCCER_2018_PIXEL, BALL_SOCCER_2022_SPEED_SHELL, 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_DOUBLE_YELLOW, 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];
39
+ export const BALLS = [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_DOUBLE_YELLOW, 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];
40
40
  /** The id of every ball: `"ball:soccer"`, `"ball:cricket-red"`. */
41
41
  export const BALL_IDS = BALLS.map((b) => b.id);
42
42
  const TABLE = new Map([...BALLS, ...PUCKS].map((b) => [b.id, b]));
@@ -1,23 +1,25 @@
1
1
  import { type BallSpec } from "./ball.engine.ts";
2
- /** The 1970s: twelve black pentagons with a white ring round a small boss, and twenty white hexagons that each hold a pale dished hexagon and a dot. */
3
- export declare const BALL_SOCCER_1970_BLACK_WHITE: import("./ball.core.ts").Piece<BallSpec>;
4
- /** The late 1970s: a pinwheel of three bold curved triangles on each of the twenty hexagons, black on white; their points meet round each of the twelve pentagons. */
5
- export declare const BALL_SOCCER_1978_TRIAD: import("./ball.core.ts").Piece<BallSpec>;
6
- /** The 1980s: the same triads in a warm clay, each blade ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
7
- export declare const BALL_SOCCER_1986_DECORATED_TRIAD: import("./ball.core.ts").Piece<BallSpec>;
8
- /** The 1990s: the triads in three colours (blue, red and gold) on a white ground, with deep navy pentagons. */
9
- export declare const BALL_SOCCER_1998_COLOURED_TRIAD: import("./ball.core.ts").Piece<BallSpec>;
10
- /** The early 2000s: long thin triangles that sweep across each hexagon from one side to the next, in graphite and gold, with a red spark, over charcoal pentagons. */
11
- export declare const BALL_SOCCER_2002_TRIANGLE_SWEEP: import("./ball.core.ts").Piece<BallSpec>;
12
- /** The mid 2000s: the 14-panel propeller layout (six propellers and eight triangles), with a fine line following each curved seam inside the panel, and a small ring on each triangle. */
13
- export declare const BALL_SOCCER_2006_PROPELLER: import("./ball.core.ts").Piece<BallSpec>;
14
- /** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with deep grooves for seams and contour lines across each panel: white panels with teal lines and teal panels with white ones. */
15
- export declare const BALL_SOCCER_2010_GROOVED: import("./ball.core.ts").Piece<BallSpec>;
16
- /** The mid 2010s: six twisted panels in white, crossed by wide ribbons that swirl round the ball in teal, orange and violet. */
17
- export declare const BALL_SOCCER_2014_RIBBON: import("./ball.core.ts").Piece<BallSpec>;
18
- /** The late 2010s: six panels covered with square pixel blocks, thick where the ball is dark and thinning out toward the lighter side. */
19
- export declare const BALL_SOCCER_2018_PIXEL: import("./ball.core.ts").Piece<BallSpec>;
20
- /** The early 2020s: twenty triangles (an icosahedron) in three warm tones, each carrying a shell of nested edges and a trail of speed lines. */
21
- export declare const BALL_SOCCER_2022_SPEED_SHELL: import("./ball.core.ts").Piece<BallSpec>;
2
+ /** The 1970s: twelve dark slate pentagons and twenty white hexagons that each hold a pale dished hexagon. */
3
+ export declare const BALL_SOCCER_RETRO_PENTAGONS: import("./ball.core.ts").Piece<BallSpec>;
4
+ /** The late 1970s: a trefoil of three straight leaves on each of the twenty hexagons, navy on white, each pointing at a pentagon. */
5
+ export declare const BALL_SOCCER_RETRO_LEAVES: import("./ball.core.ts").Piece<BallSpec>;
6
+ /** The 1980s: a five-petal rosette on each hexagon in a warm clay, each petal ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
7
+ export declare const BALL_SOCCER_RETRO_ROSETTE: import("./ball.core.ts").Piece<BallSpec>;
8
+ /** The 1980s, second version: a six-armed star on each hexagon in deep teal with a saffron centre, over cream hexagons, with navy pentagons ringed in cream. */
9
+ export declare const BALL_SOCCER_RETRO_STAR: import("./ball.core.ts").Piece<BallSpec>;
10
+ /** The 1990s: a pinwheel of three curved leaves in three colours (green, amber and plum) on a white ground, turning the other way from the 1970s, a solid deep green circle where the three meet, and deep green pentagons. */
11
+ export declare const BALL_SOCCER_RETRO_PINWHEEL: import("./ball.core.ts").Piece<BallSpec>;
12
+ /** The early 2000s: long kites that sweep across each hexagon, in slate blue and silver, over charcoal pentagons. */
13
+ export declare const BALL_SOCCER_RETRO_KITES: import("./ball.core.ts").Piece<BallSpec>;
14
+ /** The mid 2000s: the 14-panel layout (six propellers and eight triangles) with a double border: two parallel black lines along every seam (a thin gap between them), and two parallel red lines inside each propeller; white propellers, dark triangles with a red dot. */
15
+ export declare const BALL_SOCCER_14_PANEL_DOUBLE_BORDER: import("./ball.core.ts").Piece<BallSpec>;
16
+ /** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with plain seams: the white panels are plain, and the slate-blue ones carry three white contour lines. */
17
+ export declare const BALL_SOCCER_8_PANEL_PLAIN: import("./ball.core.ts").Piece<BallSpec>;
18
+ /** The mid 2010s: six twisted panels in white, crossed by straight bands along each panel in blue, amber and magenta, and a series of diamonds at each pole where the seams meet. */
19
+ export declare const BALL_SOCCER_6_PANEL_BANDS: import("./ball.core.ts").Piece<BallSpec>;
20
+ /** The late 2010s: six panels covered with small diamonds, thick on one side and thinning out toward the other, and a series of diamonds at each pole where the seams meet. */
21
+ export declare const BALL_SOCCER_6_PANEL_DIAMONDS: import("./ball.core.ts").Piece<BallSpec>;
22
+ /** The early 2020s: twenty triangles (an icosahedron) in deep blue, cream and sand, each carrying one inner outline and a dot at its middle. */
23
+ export declare const BALL_SOCCER_20_PANEL_DOTS: import("./ball.core.ts").Piece<BallSpec>;
22
24
  /** A modern high-visibility training ball: 32 panels in fluorescent yellow-green, hot pink pentagons ringed in black, and three dark speed marks across each hexagon. */
23
25
  export declare const BALL_SOCCER_TRAINING_HIGH_VIS: import("./ball.core.ts").Piece<BallSpec>;
@@ -35,45 +35,41 @@ function laidTriads(s, t, frames, blades, colours, edge, ew = 0.5) {
35
35
  void t;
36
36
  return out;
37
37
  }
38
- /** The 1970s: twelve black pentagons with a white ring round a small boss, and twenty white hexagons that each hold a pale dished hexagon and a dot. */
39
- export const BALL_SOCCER_1970_BLACK_WHITE = /* @__PURE__ */ ball("ball:soccer-1970-black-white", "Soccer, 1970s black-white", "70年代風・白黒", {
38
+ /** The 1970s: twelve dark slate pentagons and twenty white hexagons that each hold a pale dished hexagon. */
39
+ export const BALL_SOCCER_RETRO_PENTAGONS = /* @__PURE__ */ ball("ball:soccer-retro-pentagons", "Soccer, 1970s black-white", "70年代風・白黒", {
40
40
  view: VIEW,
41
- base: INK,
41
+ base: "#262c3b",
42
42
  ground: WHITE,
43
43
  mat: GLOSS,
44
44
  draw(s, base, accent) {
45
45
  const t = truncatedIcosahedron();
46
46
  let out = "";
47
47
  t.hexagons.forEach((h, i) => {
48
- out += s.panel(shrink(h, t.hexagonCentres[i], 0.5), accent ?? "#e4e5e1", { n: 2 });
48
+ out += s.panel(shrink(h, t.hexagonCentres[i], 0.68), accent ?? "#dfe3ea", { n: 2 });
49
49
  });
50
50
  for (const p of t.pentagons)
51
51
  out += s.panel(p, base, { ink: true });
52
- t.pentagons.forEach((p, i) => {
53
- out += s.strokes([shrink(p, t.pentagonCentres[i], 0.45)], "#fff", 0.5, { closed: true, deco: true, opacity: 0.85 });
54
- });
55
- out += s.dots(t.hexagonCentres, 0.03, base, { light: false });
56
52
  out += s.strokes(t.edges, GREY, 1.15);
57
53
  return out + lit(s, t.edges);
58
54
  },
59
55
  });
60
- /** The late 1970s: a pinwheel of three bold curved triangles on each of the twenty hexagons, black on white; their points meet round each of the twelve pentagons. */
61
- export const BALL_SOCCER_1978_TRIAD = /* @__PURE__ */ ball("ball:soccer-1978-triad", "Soccer, late-1970s triads", "70年代後期風・三つ巴", {
56
+ /** The late 1970s: a trefoil of three straight leaves on each of the twenty hexagons, navy on white, each pointing at a pentagon. */
57
+ export const BALL_SOCCER_RETRO_LEAVES = /* @__PURE__ */ ball("ball:soccer-retro-leaves", "Soccer, late-1970s triads", "70年代後期風・三つ巴", {
62
58
  view: VIEW,
63
- base: INK,
59
+ base: "#243a63",
64
60
  ground: WHITE,
65
61
  mat: GLOSS,
66
62
  draw(s, base) {
67
63
  const t = truncatedIcosahedron();
68
- let out = laidTriads(s, t, hexFrames(t), triad(0.0, 0.32, -0.85, 0.17, 0.3), [base], base, 0.4);
64
+ let out = laidTriads(s, t, hexFrames(t), triad(0.0, 0.34, 0, 0.2, 0), [base], base, 0.4);
69
65
  out += s.strokes(t.edges, mix(base, 0.45), 0.8);
70
66
  return out + lit(s, t.edges, 0.4);
71
67
  },
72
68
  });
73
- /** The 1980s: the same triads in a warm clay, each blade ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
74
- export const BALL_SOCCER_1986_DECORATED_TRIAD = /* @__PURE__ */ ball("ball:soccer-1986-decorated-triad", "Soccer, decorated triads", "80年代風・飾り三つ巴", {
69
+ /** The 1980s: a five-petal rosette on each hexagon in a warm clay, each petal ornamented with a row of white beads along its spine, and gold-ringed dark pentagons. */
70
+ export const BALL_SOCCER_RETRO_ROSETTE = /* @__PURE__ */ ball("ball:soccer-retro-rosette", "Soccer, decorated rosette", "80年代風・飾りロゼット", {
75
71
  view: VIEW,
76
- base: "#c4563a",
72
+ base: "#d1633a",
77
73
  ground: WHITE,
78
74
  mat: GLOSS,
79
75
  draw(s, base, accent) {
@@ -86,19 +82,42 @@ export const BALL_SOCCER_1986_DECORATED_TRIAD = /* @__PURE__ */ ball("ball:socce
86
82
  t.pentagons.forEach((p, i) => {
87
83
  out += s.strokes([shrink(p, t.pentagonCentres[i], 0.4)], gold, 0.6, { closed: true, deco: true });
88
84
  });
89
- out += laidTriads(s, t, hf, triad(0.0, 0.31, -0.85, 0.16, 0.3), [base], mix(base, -0.45), 0.5);
85
+ const petals = [0, 1, 2, 3, 4].map((k) => tongue(spiral(0.03, 0.27, (2 * Math.PI * k) / 5, 0), (u) => 0.1 * Math.min(1, u * 5) * (1 - u) ** 0.7, 3));
86
+ out += laidTriads(s, t, hf, petals, [base], mix(base, -0.45), 0.5);
90
87
  const spines = [];
91
88
  for (const f of hf)
92
- for (let k = 0; k < 3; k++)
93
- spines.push(Array.from({ length: 6 }, (_, j) => f(...spiral(0.06, 0.26, 0.3 + (2 * Math.PI * k) / 3, -0.85)(j / 5))));
89
+ for (let k = 0; k < 5; k++)
90
+ spines.push(Array.from({ length: 2 }, (_, j) => f(...spiral(0.07, 0.24, (2 * Math.PI * k) / 5, 0)(j))));
94
91
  out += s.strokes(spines, "#fff7e6", 1.1, { dash: "0 2.3", deco: true });
95
92
  return out + s.strokes(t.edges, mix(base, -0.5), 1);
96
93
  },
97
94
  });
98
- /** The 1990s: the triads in three colours (blue, red and gold) on a white ground, with deep navy pentagons. */
99
- export const BALL_SOCCER_1998_COLOURED_TRIAD = /* @__PURE__ */ ball("ball:soccer-1998-coloured-triad", "Soccer, coloured triads", "90年代風・色つき三つ巴", {
95
+ /** The 1980s, second version: a six-armed star on each hexagon in deep teal with a saffron centre, over cream hexagons, with navy pentagons ringed in cream. */
96
+ export const BALL_SOCCER_RETRO_STAR = /* @__PURE__ */ ball("ball:soccer-retro-star", "Soccer, 1980s star", "80年代風・星形", {
97
+ view: VIEW,
98
+ base: "#1f7f86",
99
+ ground: "#f6f0e2",
100
+ mat: GLOSS,
101
+ draw(s, base, accent) {
102
+ const t = truncatedIcosahedron();
103
+ const hf = hexFrames(t);
104
+ let out = "";
105
+ for (const p of t.pentagons)
106
+ out += s.panel(p, "#1d2b45", { ink: true });
107
+ t.pentagons.forEach((p, i) => {
108
+ out += s.strokes([shrink(p, t.pentagonCentres[i], 0.4)], "#f6f0e2", 0.6, { closed: true, deco: true });
109
+ });
110
+ const ray = [[0.3, 0], [0.11, 0.075], [0.03, 0], [0.11, -0.075]];
111
+ out += s.panels(hf.flatMap((f) => [0, 1, 2, 3, 4, 5].map((k) => place(f, turned(ray, (Math.PI * k) / 3)))), base, { n: 1 });
112
+ out += s.dots(t.hexagonCentres, 0.05, accent ?? "#e9a92b", { light: false });
113
+ out += s.strokes(t.edges, mix(base, -0.5), 1);
114
+ return out + lit(s, t.edges, 0.4);
115
+ },
116
+ });
117
+ /** The 1990s: a pinwheel of three curved leaves in three colours (green, amber and plum) on a white ground, turning the other way from the 1970s, a solid deep green circle where the three meet, and deep green pentagons. */
118
+ export const BALL_SOCCER_RETRO_PINWHEEL = /* @__PURE__ */ ball("ball:soccer-retro-pinwheel", "Soccer, coloured triads", "90年代風・色つき三つ巴", {
100
119
  view: VIEW,
101
- base: "#1e56b8",
120
+ base: "#2f9e63",
102
121
  ground: WHITE,
103
122
  mat: GLOSS,
104
123
  draw(s, base, accent) {
@@ -106,81 +125,86 @@ export const BALL_SOCCER_1998_COLOURED_TRIAD = /* @__PURE__ */ ball("ball:soccer
106
125
  let out = "";
107
126
  for (const p of t.pentagons)
108
127
  out += s.panel(p, mix(base, -0.55), { ink: true });
109
- out += laidTriads(s, t, hexFrames(t), triad(0.0, 0.31, 0.9, 0.16, 0.2), [base, "#d8322f", accent ?? "#f2bf1b"], "#ffffff", 0.35);
128
+ out += laidTriads(s, t, hexFrames(t), triad(0.0, 0.31, 0.9, 0.2, 0.2), [base, "#e08a2e", accent ?? "#7d3c98"], "#ffffff", 0.35);
129
+ // A solid circle where the three colours meet, in the pentagons' deep green.
130
+ out += s.dots(t.hexagonCentres, 0.052, mix(base, -0.55), { light: false });
110
131
  out += s.strokes(t.edges, GREY, 0.9);
111
132
  return out + lit(s, t.edges, 0.4);
112
133
  },
113
134
  });
114
- /** The early 2000s: long thin triangles that sweep across each hexagon from one side to the next, in graphite and gold, with a red spark, over charcoal pentagons. */
115
- export const BALL_SOCCER_2002_TRIANGLE_SWEEP = /* @__PURE__ */ ball("ball:soccer-2002-triangle-sweep", "Soccer, triangle sweep", "00年代風・三角の流れ", {
135
+ /** The early 2000s: long kites that sweep across each hexagon, in slate blue and silver, over charcoal pentagons. */
136
+ export const BALL_SOCCER_RETRO_KITES = /* @__PURE__ */ ball("ball:soccer-retro-kites", "Soccer, kite sweep", "2000年代風・凧の流れ", {
116
137
  view: VIEW,
117
- base: "#4a4f5c",
138
+ base: "#3d5a80",
118
139
  ground: "#f3efe4",
119
140
  mat: GLOSS,
120
141
  draw(s, base, accent) {
121
142
  const t = truncatedIcosahedron();
122
- const gold = accent ?? "#d9a420";
143
+ const gold = accent ?? "#cfd6df";
123
144
  let out = "";
124
145
  for (const p of t.pentagons)
125
146
  out += s.panel(p, mix(base, -0.45), { ink: true });
126
- const big = [[0.3, -0.03], [0.02, 0.2], [-0.05, 0.04]];
127
- const small = [[0.27, 0.035], [0.12, 0.16], [0.1, 0.07]];
147
+ const big = [[0.31, 0], [0.15, 0.11], [-0.03, 0], [0.15, -0.11]];
148
+ const small = [[0.25, 0], [0.15, 0.055], [0.06, 0], [0.15, -0.055]];
128
149
  const frames = hexFrames(t);
129
150
  const turns = [0, 1, 2].map((k) => (2 * Math.PI * k) / 3);
130
151
  out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(big, a)))), base, { n: 1 });
131
- out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(small, a + 0.1)))), gold, { n: 1 });
152
+ out += s.panels(frames.flatMap((f) => turns.map((a) => place(f, turned(small, a)))), gold, { n: 1 });
132
153
  out += s.strokes(t.edges, GREY, 0.9);
133
154
  return out + lit(s, t.edges, 0.4);
134
155
  },
135
156
  });
136
- /** The mid 2000s: the 14-panel propeller layout (six propellers and eight triangles), with a fine line following each curved seam inside the panel, and a small ring on each triangle. */
137
- export const BALL_SOCCER_2006_PROPELLER = /* @__PURE__ */ ball("ball:soccer-2006-propeller", "Soccer, 14-panel propeller", "14枚貼り・プロペラ形", {
157
+ /** The mid 2000s: the 14-panel layout (six propellers and eight triangles) with a double border: two parallel black lines along every seam (a thin gap between them), and two parallel red lines inside each propeller; white propellers, dark triangles with a red dot. */
158
+ export const BALL_SOCCER_14_PANEL_DOUBLE_BORDER = /* @__PURE__ */ ball("ball:soccer-14-panel-double-border", "Soccer, 14-panel borders", "14枚貼り・二重縁取り", {
138
159
  view: { yaw: 40, pitch: 36, roll: 0 },
139
- base: "#1f232b",
160
+ base: "#23282f",
140
161
  ground: "#f4f2ea",
141
162
  mat: GLOSS,
142
163
  draw(s, base, accent) {
143
164
  const g = propellers14();
144
- const gold = accent ?? "#c9962b";
165
+ const red = accent ?? "#c8302f";
166
+ const ring = (p, c, k) => shrink(p, c, k).filter((_, j) => j % 3 === 0);
145
167
  let out = "";
146
168
  for (const p of g.triangles)
147
169
  out += s.panel(p, base, { n: 6, ink: true });
148
- g.triangles.forEach((p, i) => {
149
- out += s.panel(shrink(p, g.triangleCentres[i], 0.55), gold, { n: 4 });
150
- });
151
- // A line a little inside each propeller, following its seam.
170
+ out += s.dots(g.triangleCentres, 0.05, red, { light: false });
171
+ // The double red border inside each propeller, two parallel lines following its seam.
152
172
  g.propellers.forEach((p, i) => {
153
- out += s.strokes([shrink(p, g.propellerCentres[i], 0.16).filter((_, j) => j % 2 === 0)], gold, 0.55, { closed: true, deco: true, opacity: 0.95 });
173
+ for (const k of [0.2, 0.3])
174
+ out += s.strokes([ring(p, g.propellerCentres[i], k)], red, 0.7, { closed: true, deco: true, opacity: 0.95 });
154
175
  });
155
- out += s.strokes(g.seams, "#3a3f4a", 1.4);
176
+ // The double black border on every seam: two black lines with a thin gap of ground between them.
177
+ out += s.strokes(g.seams, "#16181c", 2.7);
178
+ out += s.strokes(g.seams, "#f4f2ea", 0.8);
156
179
  return out + lit(s, g.seams);
157
180
  },
158
181
  });
159
- /** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with deep grooves for seams and contour lines across each panel: white panels with teal lines and teal panels with white ones. */
160
- export const BALL_SOCCER_2010_GROOVED = /* @__PURE__ */ ball("ball:soccer-2010-grooved", "Soccer, 8-panel grooved", "8枚貼り・溝つき", {
182
+ /** The early 2010s: the 8-panel layout, an octahedron whose edges are bent into S curves, with plain seams: the white panels are plain, and the slate-blue ones carry three white contour lines. */
183
+ export const BALL_SOCCER_8_PANEL_PLAIN = /* @__PURE__ */ ball("ball:soccer-8-panel-plain", "Soccer, 8-panel plain", "8枚貼り・無地と等高線", {
161
184
  view: { yaw: 32, pitch: 26, roll: 0 },
162
185
  base: "#f6f8f8",
163
186
  ground: "#f6f8f8",
164
187
  mat: { gloss: 0.7, shade: "#1f3340", grain: { f: 1.6, a: 0.2 } },
165
188
  draw(s, base, accent) {
166
189
  const g = octahedron8();
167
- const tone = [base, accent ?? "#0f9b8e"];
190
+ const tone = [base, accent ?? "#5f86c0"];
168
191
  let out = "";
169
192
  g.panels.forEach((p, i) => {
170
193
  if (g.parity[i] === 1)
171
194
  out += s.panel(p, tone[1], { n: 1 });
172
195
  });
173
- // Contour lines: two rings in each panel, in the other panel colour's dark or light so that they show on both.
196
+ // Contour lines on the blue panels only; the white ones stay plain.
174
197
  const groove = "#16262f";
175
198
  g.panels.forEach((p, i) => {
176
- const onAccent = g.parity[i] === 1;
177
- const ink = onAccent ? "#ffffff" : mix(tone[1], -0.35);
178
- for (const [k, w] of [[0.62, 0.9], [0.3, 0.8]])
179
- out += s.strokes([shrink(p, g.centres[i], k).filter((_, j) => j % 2 === 0)], ink, w, { closed: true, deco: true, opacity: 0.95 });
199
+ if (g.parity[i] !== 1)
200
+ return;
201
+ const ink = "#ffffff";
202
+ for (const [k, w] of [[0.72, 0.8], [0.48, 0.8], [0.24, 0.8]])
203
+ out += s.strokes([shrink(p, g.centres[i], k).filter((_, j) => j % 3 === 0)], ink, w, { closed: true, deco: true, opacity: 0.95 });
180
204
  });
181
205
  // The grooves: a wide dark channel with a lit lip beside it.
182
- out += s.strokes(g.seams, groove, 3.2);
183
- out += s.strokes(g.seams, "#fff", 0.8, { deco: true, opacity: 0.7, dx: 0.8, dy: 0.85 });
206
+ out += s.strokes(g.seams, groove, 1.3);
207
+ out += s.strokes(g.seams, "#fff", 0.5, { deco: true, opacity: 0.6, dx: 0.4, dy: 0.45 });
184
208
  return out;
185
209
  },
186
210
  });
@@ -196,16 +220,28 @@ function sixGores(s, tilt, tone, twist = 180) {
196
220
  }
197
221
  return { g, out };
198
222
  }
199
- /** The mid 2010s: six twisted panels in white, crossed by wide ribbons that swirl round the ball in teal, orange and violet. */
200
- export const BALL_SOCCER_2014_RIBBON = /* @__PURE__ */ ball("ball:soccer-2014-ribbon", "Soccer, 6-panel ribbons", "6枚貼り・リボン柄", {
223
+ /** A series of diamonds at the two poles of a six-gore ball, where all the seams meet: three nested diamonds, outer to inner in `cols`. */
224
+ function poleDiamonds(s, at, cols) {
225
+ const diamond = (k) => [[0.32 * k, 0], [0, 0.19 * k], [-0.32 * k, 0], [0, -0.19 * k]];
226
+ let out = "";
227
+ for (const pole of [1, -1]) {
228
+ const f = frameAt(at(0, 0, pole), at(0, 0.5, pole * 0.8));
229
+ [1, 0.62, 0.26].forEach((k, j) => {
230
+ out += s.panel(place(f, diamond(k)), cols[j], { n: 1 });
231
+ });
232
+ }
233
+ return out;
234
+ }
235
+ /** The mid 2010s: six twisted panels in white, crossed by straight bands along each panel in blue, amber and magenta, and a series of diamonds at each pole where the seams meet. */
236
+ export const BALL_SOCCER_6_PANEL_BANDS = /* @__PURE__ */ ball("ball:soccer-6-panel-bands", "Soccer, 6-panel bands", "6枚貼り・帯柄", {
201
237
  view: { yaw: 20, pitch: 22, roll: 0 },
202
- base: "#14a7a0",
238
+ base: "#3b6fb6",
203
239
  ground: "#f5f5f1",
204
240
  mat: { gloss: 0.9, shade: "#2a3450", grain: { f: 0.7, a: 0.07 } },
205
241
  draw(s, base, accent) {
206
242
  const { g, out: panels } = sixGores(s, [0, 0, 28], "#ebebe5");
207
243
  const at = gorePoint(6, 180, [0, 0, 28]);
208
- const cols = [base, accent ?? "#f08a24", "#7a4bc2"];
244
+ const cols = [base, accent ?? "#e8b22e", "#c2386a"];
209
245
  let out = panels;
210
246
  // Three ribbons on a gore, spiralling: each is a leaf whose spine follows a curve across the gore.
211
247
  for (let i = 0; i < 6; i++) {
@@ -216,8 +252,8 @@ export const BALL_SOCCER_2014_RIBBON = /* @__PURE__ */ ball("ball:soccer-2014-ri
216
252
  const s0 = -0.75 + k * 0.7 + (i % 2) * 0.12;
217
253
  for (let j = 0; j <= 10; j++) {
218
254
  const u = j / 10;
219
- const lat = s0 + 0.5 * u;
220
- const w = 0.1 + 0.16 * Math.sin(Math.PI * u) ** 0.8;
255
+ const lat = s0;
256
+ const w = 0.16;
221
257
  left.push(at(i, 0.12 + 0.76 * u, lat));
222
258
  right.push(at(i, 0.12 + 0.76 * u, lat + w));
223
259
  }
@@ -225,18 +261,19 @@ export const BALL_SOCCER_2014_RIBBON = /* @__PURE__ */ ball("ball:soccer-2014-ri
225
261
  }
226
262
  }
227
263
  out += s.strokes(g.seams, GREY, 0.85);
264
+ out += poleDiamonds(s, at, [cols[0], "#f5f5f1", cols[1]]);
228
265
  return out + lit(s, g.seams, 0.5);
229
266
  },
230
267
  });
231
- /** The late 2010s: six panels covered with square pixel blocks, thick where the ball is dark and thinning out toward the lighter side. */
232
- export const BALL_SOCCER_2018_PIXEL = /* @__PURE__ */ ball("ball:soccer-2018-pixel", "Soccer, pixel blocks", "ピクセル柄", {
268
+ /** The late 2010s: six panels covered with small diamonds, thick on one side and thinning out toward the other, and a series of diamonds at each pole where the seams meet. */
269
+ export const BALL_SOCCER_6_PANEL_DIAMONDS = /* @__PURE__ */ ball("ball:soccer-6-panel-diamonds", "Soccer, 6-panel diamonds", "6枚貼り・ひし形柄", {
233
270
  view: { yaw: 20, pitch: 22, roll: 0 },
234
271
  base: "#2a2f3a",
235
272
  ground: "#f2f2ee",
236
273
  mat: { gloss: 0.9, shade: "#2a3450", grain: { f: 0.7, a: 0.07 } },
237
274
  draw(s, base, accent) {
238
275
  const { g, out: panels } = sixGores(s, [0, 0, 28], "#e7e7e1", 90);
239
- const pal = [base, mix(base, 0.4), accent ?? "#d4472f", "#e6b53a", mix(base, 0.4)];
276
+ const pal = [base, mix(base, 0.4), accent ?? "#1fa39a", "#e6b53a", mix(base, 0.4)];
240
277
  let out = panels;
241
278
  const groups = pal.map(() => []);
242
279
  const rows = 17, cols = 34;
@@ -251,25 +288,26 @@ export const BALL_SOCCER_2018_PIXEL = /* @__PURE__ */ ball("ball:soccer-2018-pix
251
288
  const d = (Math.PI / cols) * 1.7, e = (Math.PI / rows) * 0.85;
252
289
  const corner = (a, b) => [Math.sin(lon + a) * Math.cos(lat + b), Math.sin(lat + b), Math.cos(lon + a) * Math.cos(lat + b)];
253
290
  const k = Math.floor(noise(c, r + 50) * pal.length);
254
- groups[k].push([corner(0, 0), corner(d, 0), corner(d, e), corner(0, e)]);
291
+ groups[k].push([corner(d / 2, 0), corner(d, e / 2), corner(d / 2, e), corner(0, e / 2)]);
255
292
  }
256
293
  }
257
294
  pal.forEach((c, k) => {
258
295
  out += s.panels(groups[k], c, { n: 1, ink: k === 0 });
259
296
  });
260
297
  out += s.strokes(g.seams, GREY, 0.85);
298
+ out += poleDiamonds(s, gorePoint(6, 90, [0, 0, 28]), [base, "#e7e7e1", pal[2]]);
261
299
  return out + lit(s, g.seams, 0.5);
262
300
  },
263
301
  });
264
- /** The early 2020s: twenty triangles (an icosahedron) in three warm tones, each carrying a shell of nested edges and a trail of speed lines. */
265
- export const BALL_SOCCER_2022_SPEED_SHELL = /* @__PURE__ */ ball("ball:soccer-2022-speed-shell", "Soccer, 20-panel shell", "20枚貼り・貝殻柄", {
302
+ /** The early 2020s: twenty triangles (an icosahedron) in deep blue, cream and sand, each carrying one inner outline and a dot at its middle. */
303
+ export const BALL_SOCCER_20_PANEL_DOTS = /* @__PURE__ */ ball("ball:soccer-20-panel-dots", "Soccer, 20-panel dots", "20枚貼り・点と輪郭", {
266
304
  view: { yaw: 30, pitch: 24, roll: 8 },
267
- base: "#8c1d3b",
305
+ base: "#1f4f7d",
268
306
  ground: "#f1ece0",
269
307
  mat: GLOSS,
270
308
  draw(s, base, accent) {
271
309
  const g = icosahedron();
272
- const gold = accent ?? "#d9a93a";
310
+ const gold = accent ?? "#e4b04a";
273
311
  const fill = [mix(base, 0.0), "#f1ece0", gold, mix(base, 0.35)];
274
312
  let out = "";
275
313
  fill.forEach((c, k) => {
@@ -277,9 +315,10 @@ export const BALL_SOCCER_2022_SPEED_SHELL = /* @__PURE__ */ ball("ball:soccer-20
277
315
  });
278
316
  g.panels.forEach((p, i) => {
279
317
  const inner = g.colour[i] === 0 ? "#f1ece0" : base;
280
- for (const k of [0.3, 0.58])
318
+ for (const k of [0.55])
281
319
  out += s.strokes([shrink(p, g.centres[i], k)], inner, 0.45, { closed: true, deco: true, opacity: 0.85 });
282
320
  });
321
+ out += s.dots(g.centres, 0.02, base, { light: false });
283
322
  out += s.strokes(g.seams, mix(base, -0.5), 1.1);
284
323
  return out + lit(s, g.seams);
285
324
  },
@@ -123,16 +123,17 @@ export const EMBLEM_DESCRIPTIONS = {
123
123
  "ball:soccer-1930-18-panel": { en: "1930s: 18 strips of chestnut and tan leather, six panels of three, the seams stitched", ja: "1930年代の18枚貼り。栗色と薄茶色の革の帯状パネル18枚(3枚ずつ6組)を使い、継ぎ目を縫い合わせたもの" },
124
124
  "ball:soccer-1950-12-panel": { en: "1950s: 12 pentagons of chestnut leather in four tones, so that no two that touch match, the seams stitched", ja: "1950年代の12枚貼り。栗色の革の五角形12枚を4種類の色合いにして、隣り合うパネルが同じ色合いにならないようにし、継ぎ目を縫い合わせたもの" },
125
125
  "ball:soccer-1960-32-panel-leather": { en: "1960s: the 32 panels (12 pentagons and 20 hexagons) in leather, chestnut pentagons on tan hexagons, stitched along the seams", ja: "1960年代の32枚貼りの革ボール。五角形12枚と六角形20枚を使い、薄茶色の六角形に栗色の五角形を配して、継ぎ目を縫い合わせたもの" },
126
- "ball:soccer-1970-black-white": { en: "In the style of the early-1970s match balls: 32 panels, black pentagons with a white ring and white hexagons with a pale dished centre and a dot", ja: "1970年代前半の試合球風。32枚貼りで、白い輪のある黒い五角形と、中央に淡いくぼみと点のある白い六角形" },
127
- "ball:soccer-1978-triad": { en: "In the style of the late-1970s match balls: 32 panels, each hexagon carrying three bold curved triangles in a pinwheel, their points meeting round each pentagon", ja: "1970年代後半の試合球風。32枚貼りで、六角形ごとに太い曲線の三角形を3枚、風車のように配し、その先端が五角形のまわりに集まる" },
128
- "ball:soccer-1986-decorated-triad": { en: "In the style of the 1980s match balls: the triads in clay red, each blade ornamented with a row of white beads, and dark pentagons ringed in gold", ja: "1980年代の試合球風。素焼きのような赤の三つ巴で、羽根ごとに白い珠の列を飾り、五角形は金の輪をあしらった暗い色にしたもの" },
129
- "ball:soccer-1998-coloured-triad": { en: "In the style of the 1990s match balls: the triads in blue, red and gold on white hexagons, with deep navy pentagons", ja: "1990年代の試合球風。白い六角形に青、赤、金の三つ巴を配し、五角形は深い紺色にしたもの" },
130
- "ball:soccer-2002-triangle-sweep": { en: "In the style of the early-2000s match balls: long thin triangles that sweep across each hexagon in graphite, with gold sparks, over charcoal pentagons", ja: "2000年代前半の試合球風。六角形ごとに細長い三角形が黒鉛色で流れるように並び、金色の小さな三角形が添えられ、五角形は炭色" },
131
- "ball:soccer-2006-propeller": { en: "In the style of the mid-2000s match balls: 14 panels (6 propellers and 8 triangles), a fine gold line inside each propeller and a gold mark on each dark triangle", ja: "2000年代半ばの試合球風。14枚貼り(プロペラ形6枚、三角形8枚)で、各プロペラの内側に細い金の線、暗い色の三角形に金の印が入る" },
132
- "ball:soccer-2010-grooved": { en: "In the style of the early-2010s match balls: 8 panels (an octahedron whose edges are bent into S curves) in white and teal, with deep dark grooves for seams and contour lines across each panel, dark teal on the white panels and white on the teal ones", ja: "2010年代前半の試合球風。8枚貼り(辺をS字に曲げた正八面体)で、白とティールのパネル。継ぎ目は深く暗い溝で、各パネルに等高線のような線が入り、白いパネルには濃いティール、ティールのパネルには白の線が走る" },
133
- "ball:soccer-2014-ribbon": { en: "In the style of the mid-2010s match balls: 6 twisted panels in white, crossed by wide ribbons in teal, orange and violet", ja: "2010年代半ばの試合球風。ねじれた6枚貼りの白いボールに、ティール、オレンジ、紫の幅広いリボンが交差する" },
134
- "ball:soccer-2018-pixel": { en: "In the style of the late-2010s match balls: 6 panels covered with square pixel blocks in graphite, grey, red and gold, thick on one side and thinning out", ja: "2010年代後半の試合球風。6枚貼りで、黒鉛色、灰色、赤、金の四角いピクセルが一方に密集し、反対側へまばらになっていく" },
135
- "ball:soccer-2022-speed-shell": { en: "In the style of the early-2020s match balls: 20 triangular panels (an icosahedron) in burgundy, cream and gold, each carrying nested outlines like a shell", ja: "2020年代前半の試合球風。20枚貼り(正二十面体)で、えんじ、クリーム、金の三角形のパネルそれぞれに、貝殻のように重なる輪郭線が入る" },
126
+ "ball:soccer-retro-pentagons": { en: "A 1970s-style ball: 32 panels, black pentagons with a white ring and white hexagons with a pale dished centre and a dot", ja: "1970年代風。32枚貼りで、白い輪のある黒い五角形と、中央が淡くくぼんだように描かれ点のある白い六角形" },
127
+ "ball:soccer-retro-leaves": { en: "A late-1970s-style ball: 32 panels, each hexagon carrying three bold straight leaves in navy, each pointing at a pentagon", ja: "1970年代後半風。32枚貼りで、六角形ごとに太くまっすぐな紺色の葉を3枚ずつ配し、それぞれの先端が五角形のほうを向く" },
128
+ "ball:soccer-retro-rosette": { en: "A 1980s-style ball: a five-petal rosette in clay red on each hexagon, each petal ornamented with a row of white beads, and dark pentagons ringed in gold", ja: "1980年代風。六角形ごとに素焼きのような赤の5枚花びらのロゼットを置き、花びらごとに白い珠の列を飾り、五角形は金の輪をあしらった暗い色" },
129
+ "ball:soccer-retro-star": { en: "A second 1980s-style ball: a six-armed deep-teal star with a saffron dot at the middle of each cream hexagon, and navy pentagons ringed in cream", ja: "1980年代風の別版。クリーム色の六角形ごとに、濃いティールの6つの先端を持つ星と中央のサフラン色の点を配し、五角形はクリーム色の輪をあしらった紺色" },
130
+ "ball:soccer-retro-pinwheel": { en: "A 1990s-style ball: a pinwheel of three curved leaves in green, amber and plum on each white hexagon, a solid deep green circle where the three colours meet, and deep green pentagons", ja: "1990年代風。白い六角形ごとに緑、琥珀色、すもも色の曲線の葉3枚を風車のように配し、3色が出会う中心に濃い緑の円を置き、五角形は濃い緑" },
131
+ "ball:soccer-retro-kites": { en: "An early-2000s-style ball: long thin kites that sweep across each hexagon in slate blue with silver sparks, over charcoal pentagons", ja: "2000年代前半風。六角形ごとに細長い凧形がスレートブルーで流れるように並び、銀色の小さな凧形が添えられ、五角形はチャコールグレー" },
132
+ "ball:soccer-14-panel-double-border": { en: "A mid-2000s-style 14-panel ball (6 propellers and 8 triangles) with a double border: two parallel black lines along each seam, two parallel red lines inside each white propeller, and a red dot on each dark triangle", ja: "2000年代半ば風の14枚貼り(プロペラ形6枚、三角形8枚)。二重の縁取りが特徴で、継ぎ目に沿って黒い平行線が2本、白いプロペラの内側に赤い平行線が2本入り、暗い三角形には赤い点が入る" },
133
+ "ball:soccer-8-panel-plain": { en: "An early-2010s-style 8-panel ball (an octahedron whose edges are bent into S curves): plain white panels and slate-blue panels with three white contour lines, divided by deep dark grooves", ja: "2010年代前半風の8枚貼り(辺をS字に曲げた正八面体)。何も描かれていない白いパネルと、白い等高線が3本入ったスレートブルーのパネルが、深く暗い溝で区切られる" },
134
+ "ball:soccer-6-panel-bands": { en: "A mid-2010s-style 6-panel ball: twisted white panels crossed by bands in blue, amber and magenta, and a series of three nested diamonds at each pole where the seams meet", ja: "2010年代半ば風の6枚貼り。ねじれた白いパネルを青、琥珀色、マゼンタの帯が横切り、継ぎ目が集まる両極には、入れ子になった3つのひし形が並ぶ" },
135
+ "ball:soccer-6-panel-diamonds": { en: "A late-2010s-style 6-panel ball covered with small diamonds in graphite, grey, teal and gold, thick on one side and thinning out, and a series of three nested diamonds at each pole where the seams meet", ja: "2010年代後半風の6枚貼り。グラファイト、灰色、ティール、金の小さなひし形が一方に密集し、反対側へ向かってまばらになり、継ぎ目が集まる両極には、入れ子になった3つのひし形が並ぶ" },
136
+ "ball:soccer-20-panel-dots": { en: "An early-2020s-style 20-panel ball (an icosahedron) in deep blue, cream and sand triangles, each carrying one nested outline and a dot at its middle", ja: "2020年代前半風の20枚貼り(正二十面体)。濃い青、クリーム色、砂色の三角形のパネルそれぞれに、入れ子の輪郭線が1本と、中央の点が入る" },
136
137
  "ball:soccer-training-high-vis": { en: "A modern high-visibility training ball: 32 panels in fluorescent yellow-green with hot pink pentagons ringed in black and three dark speed marks on each hexagon", ja: "現代の高視認性トレーニングボール。蛍光の黄緑色の32枚貼りで、黒い輪をあしらった濃いピンクの五角形と、六角形ごとに3本の黒い速度線が入る" },
137
138
  "ball:soccer-stars-blue": { en: "A shop-wall pattern: a five-pointed star on every panel; the blue colourway", ja: "店頭によくある柄:すべてのパネルに角が5つの星。配色は青" },
138
139
  "ball:soccer-stars-red": { en: "A shop-wall pattern: a five-pointed star on every panel; the red colourway", ja: "店頭によくある柄:すべてのパネルに角が5つの星。配色は赤" },
@@ -18,7 +18,7 @@ export type CrestShape = (typeof CREST_SHAPES)[number];
18
18
  export declare const CREST_IDS: readonly ["crest:shield", "crest:roundel", "crest:diamond", "crest:pennant"];
19
19
  export type CrestId = (typeof CREST_IDS)[number];
20
20
  /** The balls: one for each ball and implement the sports use, in 3D, with the official size it comes from. The balls of one family (the three crickets, the five squash balls) share a module. */
21
- export declare const BALL_IDS: 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-1970-black-white", "ball:soccer-1978-triad", "ball:soccer-1986-decorated-triad", "ball:soccer-1998-coloured-triad", "ball:soccer-2002-triangle-sweep", "ball:soccer-2006-propeller", "ball:soccer-2010-grooved", "ball:soccer-2014-ribbon", "ball:soccer-2018-pixel", "ball:soccer-2022-speed-shell", "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"];
21
+ export declare const BALL_IDS: 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"];
22
22
  export type BallId = (typeof BALL_IDS)[number];
23
23
  /** The printed pucks: the same puck as `ball:puck` with a print on its top face (a flag, a leaf, stars and stripes, a player's name and number, a made-up signature, a souvenir's ring of words). All drawn here, none a team's or a league's own. */
24
24
  export declare const PUCK_IDS: readonly ["puck:canada", "puck:canada-red", "puck:canada-white", "puck:usa", "puck:usa-navy", "puck:player", "puck:signed", "puck:souvenir"];
@@ -43,7 +43,7 @@ export declare const EMBLEM_GROUPS: {
43
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"];
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
- 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-1970-black-white", "ball:soccer-1978-triad", "ball:soccer-1986-decorated-triad", "ball:soccer-1998-coloured-triad", "ball:soccer-2002-triangle-sweep", "ball:soccer-2006-propeller", "ball:soccer-2010-grooved", "ball:soccer-2014-ribbon", "ball:soccer-2018-pixel", "ball:soccer-2022-speed-shell", "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"];
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"];
47
47
  readonly puck: readonly ["puck:canada", "puck:canada-red", "puck:canada-white", "puck:usa", "puck:usa-navy", "puck:player", "puck:signed", "puck:souvenir"];
48
48
  readonly gear: readonly ["gear:hockey-stick", "gear:goalie-stick", "gear:hockey-skate", "gear:goalie-mask", "gear:goal-net", "gear:field-hockey-stick", "gear:lacrosse-stick", "gear:cricket-bat", "gear:wicket", "gear:table-tennis-paddle", "gear:badminton-racket", "gear:tennis-racket", "gear:squash-racket", "gear:racquetball-racket", "gear:padel-racket", "gear:pickleball-paddle", "gear:roundnet-set", "gear:takraw-net", "gear:netball-post", "gear:teqball-table", "gear:volleyball-net", "gear:basketball-hoop", "gear:baseball-bat", "gear:baseball-glove", "gear:football-helmet", "gear:goalposts", "gear:hurley", "gear:curling-broom", "gear:figure-skate", "gear:speed-skate", "gear:diving-board", "gear:swim-goggles", "gear:starting-blocks", "gear:relay-baton", "gear:javelin", "gear:hurdles", "gear:gunbai", "gear:mawashi", "gear:shinai", "gear:kendo-men", "gear:judogi", "gear:judogi-blue", "gear:judogi-folded", "gear:judogi-blue-folded", "gear:judogi-back", "gear:judogi-blue-back", "gear:obi", "gear:obi-white", "gear:obi-yellow", "gear:obi-orange", "gear:obi-green", "gear:obi-blue", "gear:obi-brown", "gear:obi-kohaku", "gear:obi-red", "gear:obi-women", "gear:obi-white-yellow", "gear:obi-yellow-orange", "gear:obi-orange-green", "gear:obi-green-blue", "gear:obi-blue-brown", "gear:obi-step-1", "gear:obi-step-2", "gear:obi-step-3", "gear:obi-step-4", "gear:obi-step-5", "gear:obi-step-6", "gear:yumi", "gear:ya", "gear:karate-gi"];
49
49
  readonly sport: readonly ("sport:sumo" | "sport:kendo" | "sport:judo" | "sport:kyudo" | "sport:karate" | "sport:nfl" | "sport:cfl" | "sport:ifaf" | "sport:nhl" | "sport:nba" | "sport:mlb" | "sport:soccer" | "sport:curling" | "sport:tennis" | "sport:volleyball" | "sport:badminton" | "sport:pickleball" | "sport:tabletennis" | "sport:padel" | "sport:squash" | "sport:racquetball" | "sport:sepaktakraw" | "sport:teqball" | "sport:roundnet" | "sport:netball" | "sport:swimming" | "sport:waterpolo" | "sport:diving" | "sport:artisticswimming" | "sport:lacrosse" | "sport:rugby" | "sport:afl" | "sport:gaelic" | "sport:cricket" | "sport:fieldhockey" | "sport:handball" | "sport:athletics" | "sport:skating")[];
@@ -64,5 +64,5 @@ export declare const EMBLEM_FOLDERS: {
64
64
  readonly sport: "sport";
65
65
  readonly pennant: "pennant";
66
66
  };
67
- /** The short names of the trophies and awards that stand for a full id: `"cup"` is `"trophy:cup"` and `"crown"` is `"award:crown"`. */
67
+ /** The short names of the trophies and awards that stand for a full id (`"cup"` is `"trophy:cup"`, `"crown"` is `"award:crown"`), and the old ids of the era balls that were renamed. */
68
68
  export declare const EMBLEM_ALIASES: Readonly<Record<string, EmblemId>>;
@@ -25,7 +25,7 @@ export const CREST_IDS = ["crest:shield", "crest:roundel", "crest:diamond", "cre
25
25
  /** The balls: one for each ball and implement the sports use, in 3D, with the official size it comes from. The balls of one family (the three crickets, the five squash balls) share a module. */
26
26
  export const BALL_IDS = [
27
27
  "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",
28
- "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-1970-black-white", "ball:soccer-1978-triad", "ball:soccer-1986-decorated-triad", "ball:soccer-1998-coloured-triad", "ball:soccer-2002-triangle-sweep", "ball:soccer-2006-propeller", "ball:soccer-2010-grooved", "ball:soccer-2014-ribbon", "ball:soccer-2018-pixel", "ball:soccer-2022-speed-shell", "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",
28
+ "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",
29
29
  "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",
30
30
  "ball:football-ifaf", "ball:rugby", "ball:afl", "ball:gaelic-football", "ball:netball", "ball:pickleball-outdoor", "ball:pickleball-indoor", "ball:squash", "ball:squash-yellow",
31
31
  "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",
@@ -72,5 +72,18 @@ export const EMBLEM_GROUPS = {
72
72
  export const EMBLEM_IDS = Object.values(EMBLEM_GROUPS).flat();
73
73
  /** The folder under `src/emblems/` that holds a group's art, one module per item named by the id's last part: `trophy:hockey-cup` is `trophy/hockey-cup.ts`, `ball:soccer` is `ball/soccer.ts`. Each group has a folder of its own, so no two ids share a file name. */
74
74
  export const EMBLEM_FOLDERS = { award: "award", trophy: "trophy", medal: "medal", crest: "crest", ball: "ball", puck: "ball", gear: "gear", sport: "sport", pennant: "pennant" };
75
- /** The short names of the trophies and awards that stand for a full id: `"cup"` is `"trophy:cup"` and `"crown"` is `"award:crown"`. */
76
- export const EMBLEM_ALIASES = Object.fromEntries([...TROPHY_IDS, ...AWARD_IDS].map((id) => [id.slice(id.indexOf(":") + 1), id]));
75
+ /** The ids that early versions published for era balls, now under neutral names: each still reads as the ball that replaced it. */
76
+ const RENAMED_BALLS = {
77
+ "ball:soccer-1970-black-white": "ball:soccer-retro-pentagons",
78
+ "ball:soccer-1978-triad": "ball:soccer-retro-leaves",
79
+ "ball:soccer-1986-decorated-triad": "ball:soccer-retro-rosette",
80
+ "ball:soccer-1998-coloured-triad": "ball:soccer-retro-pinwheel",
81
+ "ball:soccer-2002-triangle-sweep": "ball:soccer-retro-kites",
82
+ "ball:soccer-2006-propeller": "ball:soccer-14-panel-double-border",
83
+ "ball:soccer-2010-grooved": "ball:soccer-8-panel-plain",
84
+ "ball:soccer-2014-ribbon": "ball:soccer-6-panel-bands",
85
+ "ball:soccer-2018-pixel": "ball:soccer-6-panel-diamonds",
86
+ "ball:soccer-2022-speed-shell": "ball:soccer-20-panel-dots",
87
+ };
88
+ /** The short names of the trophies and awards that stand for a full id (`"cup"` is `"trophy:cup"`, `"crown"` is `"award:crown"`), and the old ids of the era balls that were renamed. */
89
+ export const EMBLEM_ALIASES = { ...Object.fromEntries([...TROPHY_IDS, ...AWARD_IDS].map((id) => [id.slice(id.indexOf(":") + 1), id])), ...RENAMED_BALLS };
package/dist/index.d.ts CHANGED
@@ -111,7 +111,7 @@ export { BALL_LACROSSE, BALL_RACQUETBALL, BALL_TABLE_TENNIS, BALL_SHOT } from ".
111
111
  export { BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW } from "./emblems/ball/ball.soccer.panels.ts";
112
112
  export { BALL_FUTSAL, BALL_BEACH_SOCCER } from "./emblems/ball/ball.soccer.indoor.ts";
113
113
  export { 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 } from "./emblems/ball/ball.soccer.vintage.ts";
114
- export { BALL_SOCCER_1970_BLACK_WHITE, BALL_SOCCER_1978_TRIAD, BALL_SOCCER_1986_DECORATED_TRIAD, BALL_SOCCER_1998_COLOURED_TRIAD, BALL_SOCCER_2002_TRIANGLE_SWEEP, BALL_SOCCER_2006_PROPELLER, BALL_SOCCER_2010_GROOVED, BALL_SOCCER_2014_RIBBON, BALL_SOCCER_2018_PIXEL, BALL_SOCCER_2022_SPEED_SHELL, BALL_SOCCER_TRAINING_HIGH_VIS } from "./emblems/ball/ball.soccer.era.ts";
114
+ export { 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 } from "./emblems/ball/ball.soccer.era.ts";
115
115
  export { 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 } from "./emblems/ball/ball.soccer.store.ts";
116
116
  export { BALL_BASEBALL_LEMON_PEEL, BALL_BASEBALL_RED_BLUE, BALL_BASEBALL_BLACK_RED, BALL_BASEBALL_VINTAGE_LEATHER, BALL_SOFTBALL_11_OPTIC } from "./emblems/ball/ball.baseball.vintage.ts";
117
117
  export { 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 } from "./emblems/ball/ball.volleyball.flag.ts";
package/dist/index.js CHANGED
@@ -111,7 +111,7 @@ export { BALL_LACROSSE, BALL_RACQUETBALL, BALL_TABLE_TENNIS, BALL_SHOT } from ".
111
111
  export { BALL_SOCCER_26, BALL_SOCCER_18, BALL_SOCCER_14, BALL_SOCCER_12, BALL_SOCCER_6, BALL_SOCCER_26_ORANGE, BALL_SOCCER_18_ORANGE, BALL_SOCCER_14_ORANGE, BALL_SOCCER_12_ORANGE, BALL_SOCCER_6_ORANGE, BALL_SOCCER_26_YELLOW, BALL_SOCCER_18_YELLOW, BALL_SOCCER_14_YELLOW, BALL_SOCCER_12_YELLOW, BALL_SOCCER_6_YELLOW } from "./emblems/ball/ball.soccer.panels.js";
112
112
  export { BALL_FUTSAL, BALL_BEACH_SOCCER } from "./emblems/ball/ball.soccer.indoor.js";
113
113
  export { 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 } from "./emblems/ball/ball.soccer.vintage.js";
114
- export { BALL_SOCCER_1970_BLACK_WHITE, BALL_SOCCER_1978_TRIAD, BALL_SOCCER_1986_DECORATED_TRIAD, BALL_SOCCER_1998_COLOURED_TRIAD, BALL_SOCCER_2002_TRIANGLE_SWEEP, BALL_SOCCER_2006_PROPELLER, BALL_SOCCER_2010_GROOVED, BALL_SOCCER_2014_RIBBON, BALL_SOCCER_2018_PIXEL, BALL_SOCCER_2022_SPEED_SHELL, BALL_SOCCER_TRAINING_HIGH_VIS } from "./emblems/ball/ball.soccer.era.js";
114
+ export { 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 } from "./emblems/ball/ball.soccer.era.js";
115
115
  export { 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 } from "./emblems/ball/ball.soccer.store.js";
116
116
  export { BALL_BASEBALL_LEMON_PEEL, BALL_BASEBALL_RED_BLUE, BALL_BASEBALL_BLACK_RED, BALL_BASEBALL_VINTAGE_LEATHER, BALL_SOFTBALL_11_OPTIC } from "./emblems/ball/ball.baseball.vintage.js";
117
117
  export { 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 } from "./emblems/ball/ball.volleyball.flag.js";
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "0.10.0";
1
+ export declare const VERSION = "0.11.0";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "0.10.0";
1
+ export const VERSION = "0.11.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnmorrisdotca/dougu-sports",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Dougu Sports 道具, sports emblems as SVG strings: trophies, medals, crests, sport icons, and the ball and gear of every sport, in metal, line or flat colour, with optional 3D turning. Light and dark, accessible, tree-shakeable. Zero dependencies.",
5
5
  "keywords": [
6
6
  "sports",