@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 +10 -0
- package/NOTICE.md +1 -1
- package/README.md +4 -4
- package/dist/emblems/ball/ball.index.js +2 -2
- package/dist/emblems/ball/ball.soccer.era.d.ts +22 -20
- package/dist/emblems/ball/ball.soccer.era.js +103 -64
- package/dist/emblems/emblem.descriptions.js +11 -10
- package/dist/emblems/emblem.ids.d.ts +3 -3
- package/dist/emblems/emblem.ids.js +16 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
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-
|
|
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.**
|
|
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)**:
|
|
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` |
|
|
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 {
|
|
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,
|
|
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
|
|
3
|
-
export declare const
|
|
4
|
-
/** The late 1970s: a
|
|
5
|
-
export declare const
|
|
6
|
-
/** The 1980s:
|
|
7
|
-
export declare const
|
|
8
|
-
/** The
|
|
9
|
-
export declare const
|
|
10
|
-
/** The
|
|
11
|
-
export declare const
|
|
12
|
-
/** The
|
|
13
|
-
export declare const
|
|
14
|
-
/** The
|
|
15
|
-
export declare const
|
|
16
|
-
/** The
|
|
17
|
-
export declare const
|
|
18
|
-
/** The
|
|
19
|
-
export declare const
|
|
20
|
-
/** The
|
|
21
|
-
export declare const
|
|
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
|
|
39
|
-
export const
|
|
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:
|
|
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.
|
|
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
|
|
61
|
-
export const
|
|
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:
|
|
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.
|
|
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:
|
|
74
|
-
export const
|
|
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: "#
|
|
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
|
-
|
|
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 <
|
|
93
|
-
spines.push(Array.from({ length:
|
|
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
|
|
99
|
-
export const
|
|
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: "#
|
|
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.
|
|
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
|
|
115
|
-
export const
|
|
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: "#
|
|
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 ?? "#
|
|
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.
|
|
127
|
-
const small = [[0.
|
|
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
|
|
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
|
|
137
|
-
export const
|
|
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: "#
|
|
160
|
+
base: "#23282f",
|
|
140
161
|
ground: "#f4f2ea",
|
|
141
162
|
mat: GLOSS,
|
|
142
163
|
draw(s, base, accent) {
|
|
143
164
|
const g = propellers14();
|
|
144
|
-
const
|
|
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.
|
|
149
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
160
|
-
export const
|
|
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 ?? "#
|
|
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
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
|
183
|
-
out += s.strokes(g.seams, "#fff", 0.
|
|
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
|
-
/**
|
|
200
|
-
|
|
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: "#
|
|
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 ?? "#
|
|
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
|
|
220
|
-
const w = 0.
|
|
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
|
|
232
|
-
export const
|
|
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 ?? "#
|
|
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(
|
|
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
|
|
265
|
-
export const
|
|
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: "#
|
|
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 ?? "#
|
|
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.
|
|
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-
|
|
127
|
-
"ball:soccer-
|
|
128
|
-
"ball:soccer-
|
|
129
|
-
"ball:soccer-
|
|
130
|
-
"ball:soccer-
|
|
131
|
-
"ball:soccer-
|
|
132
|
-
"ball:soccer-
|
|
133
|
-
"ball:soccer-
|
|
134
|
-
"ball:soccer-
|
|
135
|
-
"ball:soccer-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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
|
|
76
|
-
|
|
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 {
|
|
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 {
|
|
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.
|
|
1
|
+
export declare const VERSION = "0.11.0";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = "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.
|
|
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",
|