@johnmorrisdotca/dougu-sports 0.0.1 → 0.2.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 +61 -1
- package/LICENSES/README.md +4 -3
- package/NOTICE.md +54 -14
- package/README.md +251 -80
- package/dist/emblems/award/badge.d.ts +2 -0
- package/dist/emblems/award/badge.js +14 -0
- package/dist/emblems/award/crown.d.ts +2 -0
- package/dist/emblems/award/crown.js +15 -0
- package/dist/emblems/award/medal.d.ts +1 -1
- package/dist/emblems/award/medal.js +10 -15
- package/dist/emblems/award/shield.d.ts +2 -0
- package/dist/emblems/award/shield.js +11 -0
- package/dist/emblems/award/star.d.ts +2 -0
- package/dist/emblems/award/star.js +11 -0
- package/dist/emblems/ball/ball.afl.d.ts +1 -0
- package/dist/emblems/ball/ball.afl.js +24 -0
- package/dist/emblems/ball/ball.baseball.d.ts +1 -0
- package/dist/emblems/ball/ball.baseball.js +14 -0
- package/dist/emblems/ball/ball.basketball.d.ts +7 -0
- package/dist/emblems/ball/ball.basketball.js +32 -0
- package/dist/emblems/ball/ball.basketball3x3.d.ts +1 -0
- package/dist/emblems/ball/ball.basketball3x3.js +10 -0
- package/dist/emblems/ball/ball.basketball6.d.ts +1 -0
- package/dist/emblems/ball/ball.basketball6.js +10 -0
- package/dist/emblems/ball/ball.core.d.ts +111 -0
- package/dist/emblems/ball/ball.core.js +79 -0
- package/dist/emblems/ball/ball.cricket.d.ts +5 -0
- package/dist/emblems/ball/ball.cricket.js +31 -0
- package/dist/emblems/ball/ball.curlingstone.d.ts +3 -0
- package/dist/emblems/ball/ball.curlingstone.js +46 -0
- package/dist/emblems/ball/ball.discus.d.ts +1 -0
- package/dist/emblems/ball/ball.discus.js +24 -0
- package/dist/emblems/ball/ball.engine.d.ts +114 -0
- package/dist/emblems/ball/ball.engine.js +342 -0
- package/dist/emblems/ball/ball.family.dotted.d.ts +27 -0
- package/dist/emblems/ball/ball.family.dotted.js +20 -0
- package/dist/emblems/ball/ball.family.panelled.d.ts +7 -0
- package/dist/emblems/ball/ball.family.panelled.js +60 -0
- package/dist/emblems/ball/ball.family.prolate.d.ts +16 -0
- package/dist/emblems/ball/ball.family.prolate.js +29 -0
- package/dist/emblems/ball/ball.family.seamed.d.ts +31 -0
- package/dist/emblems/ball/ball.family.seamed.js +26 -0
- package/dist/emblems/ball/ball.fieldhockey.d.ts +1 -0
- package/dist/emblems/ball/ball.fieldhockey.js +15 -0
- package/dist/emblems/ball/ball.football.d.ts +3 -0
- package/dist/emblems/ball/ball.football.js +51 -0
- package/dist/emblems/ball/ball.gaelic.d.ts +2 -0
- package/dist/emblems/ball/ball.gaelic.js +30 -0
- package/dist/emblems/ball/ball.golf.d.ts +1 -0
- package/dist/emblems/ball/ball.golf.js +15 -0
- package/dist/emblems/ball/ball.hammer.d.ts +1 -0
- package/dist/emblems/ball/ball.hammer.js +31 -0
- package/dist/emblems/ball/ball.handball.d.ts +1 -0
- package/dist/emblems/ball/ball.handball.js +25 -0
- package/dist/emblems/ball/ball.index.d.ts +48 -0
- package/dist/emblems/ball/ball.index.js +103 -0
- package/dist/emblems/ball/ball.math.d.ts +38 -0
- package/dist/emblems/ball/ball.math.js +105 -0
- package/dist/emblems/ball/ball.object.d.ts +38 -0
- package/dist/emblems/ball/ball.object.js +20 -0
- package/dist/emblems/ball/ball.padel.d.ts +1 -0
- package/dist/emblems/ball/ball.padel.js +13 -0
- package/dist/emblems/ball/ball.pickleball.d.ts +2 -0
- package/dist/emblems/ball/ball.pickleball.js +26 -0
- package/dist/emblems/ball/ball.polyhedra.d.ts +15 -0
- package/dist/emblems/ball/ball.polyhedra.js +63 -0
- package/dist/emblems/ball/ball.puck.d.ts +3 -0
- package/dist/emblems/ball/ball.puck.js +22 -0
- package/dist/emblems/ball/ball.roundnet.d.ts +1 -0
- package/dist/emblems/ball/ball.roundnet.js +15 -0
- package/dist/emblems/ball/ball.rugby.d.ts +1 -0
- package/dist/emblems/ball/ball.rugby.js +35 -0
- package/dist/emblems/ball/ball.sepaktakraw.d.ts +1 -0
- package/dist/emblems/ball/ball.sepaktakraw.js +48 -0
- package/dist/emblems/ball/ball.shuttlecock.d.ts +6 -0
- package/dist/emblems/ball/ball.shuttlecock.js +93 -0
- package/dist/emblems/ball/ball.sliotar.d.ts +1 -0
- package/dist/emblems/ball/ball.sliotar.js +14 -0
- package/dist/emblems/ball/ball.smooth.d.ts +4 -0
- package/dist/emblems/ball/ball.smooth.js +51 -0
- package/dist/emblems/ball/ball.soccer.d.ts +2 -0
- package/dist/emblems/ball/ball.soccer.js +54 -0
- package/dist/emblems/ball/ball.softball.d.ts +1 -0
- package/dist/emblems/ball/ball.softball.js +14 -0
- package/dist/emblems/ball/ball.squash.d.ts +7 -0
- package/dist/emblems/ball/ball.squash.js +27 -0
- package/dist/emblems/ball/ball.stack.d.ts +48 -0
- package/dist/emblems/ball/ball.stack.js +127 -0
- package/dist/emblems/ball/ball.stitch.d.ts +10 -0
- package/dist/emblems/ball/ball.stitch.js +59 -0
- package/dist/emblems/ball/ball.tennis.d.ts +1 -0
- package/dist/emblems/ball/ball.tennis.js +13 -0
- package/dist/emblems/ball/ball.teqball.d.ts +1 -0
- package/dist/emblems/ball/ball.teqball.js +27 -0
- package/dist/emblems/ball/ball.volleyball.d.ts +3 -0
- package/dist/emblems/ball/ball.volleyball.js +56 -0
- package/dist/emblems/ball/ball.waterpolo.d.ts +1 -0
- package/dist/emblems/ball/ball.waterpolo.js +31 -0
- package/dist/emblems/crest/diamond.d.ts +2 -0
- package/dist/emblems/crest/diamond.js +18 -0
- package/dist/emblems/crest/pennant.d.ts +2 -0
- package/dist/emblems/crest/pennant.js +18 -0
- package/dist/emblems/crest/roundel.d.ts +2 -0
- package/dist/emblems/crest/roundel.js +18 -0
- package/dist/emblems/crest/shield.d.ts +2 -0
- package/dist/emblems/crest/shield.js +17 -0
- package/dist/emblems/emblem.api.d.ts +77 -9
- package/dist/emblems/emblem.api.js +56 -10
- package/dist/emblems/emblem.compose.d.ts +31 -0
- package/dist/emblems/emblem.compose.js +91 -0
- package/dist/emblems/emblem.core.d.ts +89 -7
- package/dist/emblems/emblem.core.js +85 -11
- package/dist/emblems/emblem.descriptions.d.ts +7 -0
- package/dist/emblems/emblem.descriptions.js +60 -0
- package/dist/emblems/emblem.display.d.ts +75 -0
- package/dist/emblems/emblem.display.js +214 -0
- package/dist/emblems/emblem.engrave.d.ts +50 -0
- package/dist/emblems/emblem.engrave.js +145 -0
- package/dist/emblems/emblem.equipment.d.ts +24 -0
- package/dist/emblems/emblem.equipment.js +57 -0
- package/dist/emblems/emblem.flip.d.ts +10 -0
- package/dist/emblems/emblem.flip.js +45 -0
- package/dist/emblems/emblem.ids.d.ts +44 -30
- package/dist/emblems/emblem.ids.js +51 -17
- package/dist/emblems/emblem.lathe.d.ts +62 -0
- package/dist/emblems/emblem.lathe.js +426 -0
- package/dist/emblems/emblem.medal.d.ts +6 -0
- package/dist/emblems/emblem.medal.js +38 -0
- package/dist/emblems/emblem.pennant.d.ts +3 -0
- package/dist/emblems/emblem.pennant.js +79 -0
- package/dist/emblems/emblem.registry.js +162 -4
- package/dist/emblems/emblem.shapes.d.ts +48 -12
- package/dist/emblems/emblem.shapes.js +138 -31
- package/dist/emblems/emblem.sprite.d.ts +38 -0
- package/dist/emblems/emblem.sprite.js +65 -0
- package/dist/emblems/emblem.uri.d.ts +22 -0
- package/dist/emblems/emblem.uri.js +29 -0
- package/dist/emblems/gear/gear.badmintonracket.d.ts +1 -0
- package/dist/emblems/gear/gear.badmintonracket.js +19 -0
- package/dist/emblems/gear/gear.baseballglove.d.ts +1 -0
- package/dist/emblems/gear/gear.baseballglove.js +21 -0
- package/dist/emblems/gear/gear.budo.d.ts +17 -0
- package/dist/emblems/gear/gear.budo.js +60 -0
- package/dist/emblems/gear/gear.core.d.ts +64 -0
- package/dist/emblems/gear/gear.core.js +127 -0
- package/dist/emblems/gear/gear.cricketbat.d.ts +1 -0
- package/dist/emblems/gear/gear.cricketbat.js +17 -0
- package/dist/emblems/gear/gear.field.d.ts +6 -0
- package/dist/emblems/gear/gear.field.js +81 -0
- package/dist/emblems/gear/gear.fieldhockeystick.d.ts +1 -0
- package/dist/emblems/gear/gear.fieldhockeystick.js +16 -0
- package/dist/emblems/gear/gear.footballhelmet.d.ts +1 -0
- package/dist/emblems/gear/gear.footballhelmet.js +16 -0
- package/dist/emblems/gear/gear.goaliemask.d.ts +1 -0
- package/dist/emblems/gear/gear.goaliemask.js +23 -0
- package/dist/emblems/gear/gear.goalnet.d.ts +1 -0
- package/dist/emblems/gear/gear.goalnet.js +25 -0
- package/dist/emblems/gear/gear.hockeystick.d.ts +1 -0
- package/dist/emblems/gear/gear.hockeystick.js +15 -0
- package/dist/emblems/gear/gear.index.d.ts +22 -0
- package/dist/emblems/gear/gear.index.js +49 -0
- package/dist/emblems/gear/gear.kendo.d.ts +2 -0
- package/dist/emblems/gear/gear.kendo.js +41 -0
- package/dist/emblems/gear/gear.kyudo.d.ts +2 -0
- package/dist/emblems/gear/gear.kyudo.js +31 -0
- package/dist/emblems/gear/gear.lacrossestick.d.ts +1 -0
- package/dist/emblems/gear/gear.lacrossestick.js +26 -0
- package/dist/emblems/gear/gear.rackets.d.ts +4 -0
- package/dist/emblems/gear/gear.rackets.js +60 -0
- package/dist/emblems/gear/gear.skates.d.ts +3 -0
- package/dist/emblems/gear/gear.skates.js +39 -0
- package/dist/emblems/gear/gear.sticks.d.ts +3 -0
- package/dist/emblems/gear/gear.sticks.js +34 -0
- package/dist/emblems/gear/gear.sumo.d.ts +2 -0
- package/dist/emblems/gear/gear.sumo.js +43 -0
- package/dist/emblems/gear/gear.tabletennispaddle.d.ts +1 -0
- package/dist/emblems/gear/gear.tabletennispaddle.js +16 -0
- package/dist/emblems/gear/gear.tennisracket.d.ts +1 -0
- package/dist/emblems/gear/gear.tennisracket.js +17 -0
- package/dist/emblems/gear/gear.track.d.ts +4 -0
- package/dist/emblems/gear/gear.track.js +45 -0
- package/dist/emblems/gear/gear.water.d.ts +2 -0
- package/dist/emblems/gear/gear.water.js +25 -0
- package/dist/emblems/medal/bronze.d.ts +2 -0
- package/dist/emblems/medal/bronze.js +4 -0
- package/dist/emblems/medal/gold.d.ts +2 -0
- package/dist/emblems/medal/gold.js +4 -0
- package/dist/emblems/medal/place-1.d.ts +2 -0
- package/dist/emblems/medal/place-1.js +4 -0
- package/dist/emblems/medal/place-2.d.ts +2 -0
- package/dist/emblems/medal/place-2.js +4 -0
- package/dist/emblems/medal/place-3.d.ts +2 -0
- package/dist/emblems/medal/place-3.js +4 -0
- package/dist/emblems/medal/silver.d.ts +2 -0
- package/dist/emblems/medal/silver.js +4 -0
- package/dist/emblems/pennant/championship.d.ts +2 -0
- package/dist/emblems/pennant/championship.js +4 -0
- package/dist/emblems/sport/afl.d.ts +2 -0
- package/dist/emblems/sport/afl.js +12 -0
- package/dist/emblems/sport/artisticswimming.d.ts +2 -0
- package/dist/emblems/sport/artisticswimming.js +16 -0
- package/dist/emblems/sport/athletics.d.ts +2 -0
- package/dist/emblems/sport/athletics.js +12 -0
- package/dist/emblems/sport/badminton.d.ts +2 -0
- package/dist/emblems/sport/badminton.js +13 -0
- package/dist/emblems/sport/cfl.d.ts +2 -0
- package/dist/emblems/sport/cfl.js +5 -0
- package/dist/emblems/sport/cricket.d.ts +2 -0
- package/dist/emblems/sport/cricket.js +14 -0
- package/dist/emblems/sport/curling.d.ts +2 -0
- package/dist/emblems/sport/curling.js +14 -0
- package/dist/emblems/sport/diving.d.ts +2 -0
- package/dist/emblems/sport/diving.js +18 -0
- package/dist/emblems/sport/fieldhockey.d.ts +2 -0
- package/dist/emblems/sport/fieldhockey.js +11 -0
- package/dist/emblems/sport/gaelic.d.ts +2 -0
- package/dist/emblems/sport/gaelic.js +11 -0
- package/dist/emblems/sport/handball.d.ts +2 -0
- package/dist/emblems/sport/handball.js +15 -0
- package/dist/emblems/sport/ifaf.d.ts +2 -0
- package/dist/emblems/sport/ifaf.js +5 -0
- package/dist/emblems/sport/judo.d.ts +2 -0
- package/dist/emblems/sport/judo.js +13 -0
- package/dist/emblems/sport/karate.d.ts +2 -0
- package/dist/emblems/sport/karate.js +13 -0
- package/dist/emblems/sport/kendo.d.ts +2 -0
- package/dist/emblems/sport/kendo.js +14 -0
- package/dist/emblems/sport/kyudo.d.ts +2 -0
- package/dist/emblems/sport/kyudo.js +15 -0
- package/dist/emblems/sport/lacrosse.d.ts +2 -0
- package/dist/emblems/sport/lacrosse.js +13 -0
- package/dist/emblems/sport/mlb.d.ts +2 -0
- package/dist/emblems/sport/mlb.js +28 -0
- package/dist/emblems/sport/nba.d.ts +2 -0
- package/dist/emblems/sport/nba.js +12 -0
- package/dist/emblems/sport/netball.d.ts +2 -0
- package/dist/emblems/sport/netball.js +14 -0
- package/dist/emblems/sport/nfl.d.ts +3 -0
- package/dist/emblems/sport/nfl.js +15 -0
- package/dist/emblems/sport/nhl.d.ts +2 -0
- package/dist/emblems/sport/nhl.js +13 -0
- package/dist/emblems/sport/padel.d.ts +2 -0
- package/dist/emblems/sport/padel.js +14 -0
- package/dist/emblems/sport/pickleball.d.ts +2 -0
- package/dist/emblems/sport/pickleball.js +13 -0
- package/dist/emblems/sport/racquetball.d.ts +2 -0
- package/dist/emblems/sport/racquetball.js +13 -0
- package/dist/emblems/sport/roundnet.d.ts +2 -0
- package/dist/emblems/sport/roundnet.js +15 -0
- package/dist/emblems/sport/rugby.d.ts +2 -0
- package/dist/emblems/sport/rugby.js +12 -0
- package/dist/emblems/sport/sepaktakraw.d.ts +2 -0
- package/dist/emblems/sport/sepaktakraw.js +11 -0
- package/dist/emblems/sport/skating.d.ts +2 -0
- package/dist/emblems/sport/skating.js +14 -0
- package/dist/emblems/sport/soccer.d.ts +2 -0
- package/dist/emblems/sport/soccer.js +31 -0
- package/dist/emblems/sport/squash.d.ts +2 -0
- package/dist/emblems/sport/squash.js +15 -0
- package/dist/emblems/sport/sumo.d.ts +2 -0
- package/dist/emblems/sport/sumo.js +15 -0
- package/dist/emblems/sport/swimming.d.ts +2 -0
- package/dist/emblems/sport/swimming.js +15 -0
- package/dist/emblems/sport/tabletennis.d.ts +2 -0
- package/dist/emblems/sport/tabletennis.js +12 -0
- package/dist/emblems/sport/tennis.d.ts +2 -0
- package/dist/emblems/sport/tennis.js +15 -0
- package/dist/emblems/sport/teqball.d.ts +2 -0
- package/dist/emblems/sport/teqball.js +15 -0
- package/dist/emblems/sport/volleyball.d.ts +2 -0
- package/dist/emblems/sport/volleyball.js +25 -0
- package/dist/emblems/sport/waterpolo.d.ts +2 -0
- package/dist/emblems/sport/waterpolo.js +15 -0
- package/dist/emblems/trophy/banner.d.ts +2 -0
- package/dist/emblems/trophy/banner.js +20 -0
- package/dist/emblems/trophy/baseball.d.ts +2 -0
- package/dist/emblems/trophy/baseball.js +15 -0
- package/dist/emblems/trophy/basketball.d.ts +2 -0
- package/dist/emblems/trophy/basketball.js +17 -0
- package/dist/emblems/trophy/belt.d.ts +2 -0
- package/dist/emblems/trophy/belt.js +17 -0
- package/dist/emblems/trophy/bowl.d.ts +2 -0
- package/dist/emblems/trophy/bowl.js +8 -0
- package/dist/emblems/trophy/canadian-bowl.d.ts +2 -0
- package/dist/emblems/trophy/canadian-bowl.js +23 -0
- package/dist/emblems/trophy/championship-banner.d.ts +2 -0
- package/dist/emblems/trophy/championship-banner.js +67 -0
- package/dist/emblems/trophy/cricket-urn.d.ts +2 -0
- package/dist/emblems/trophy/cricket-urn.js +23 -0
- package/dist/emblems/trophy/cup.d.ts +2 -0
- package/dist/emblems/trophy/cup.js +16 -0
- package/dist/emblems/trophy/football.d.ts +2 -0
- package/dist/emblems/trophy/football.js +11 -0
- package/dist/emblems/trophy/globe.d.ts +2 -0
- package/dist/emblems/trophy/globe.js +9 -0
- package/dist/emblems/trophy/hockey-cup.d.ts +2 -0
- package/dist/emblems/trophy/hockey-cup.js +22 -0
- package/dist/emblems/trophy/laurel.d.ts +2 -0
- package/dist/emblems/trophy/laurel.js +40 -0
- package/dist/emblems/trophy/lidded-cup.d.ts +2 -0
- package/dist/emblems/trophy/lidded-cup.js +21 -0
- package/dist/emblems/trophy/plaque.d.ts +2 -0
- package/dist/emblems/trophy/plaque.js +17 -0
- package/dist/emblems/trophy/ring.d.ts +2 -0
- package/dist/emblems/trophy/ring.js +30 -0
- package/dist/emblems/trophy/rosette.d.ts +2 -0
- package/dist/emblems/trophy/rosette.js +27 -0
- package/dist/emblems/trophy/rugby-cup.d.ts +2 -0
- package/dist/emblems/trophy/rugby-cup.js +23 -0
- package/dist/emblems/trophy/salver.d.ts +2 -0
- package/dist/emblems/trophy/salver.js +9 -0
- package/dist/emblems/trophy/soccer-ball.d.ts +2 -0
- package/dist/emblems/trophy/soccer-ball.js +9 -0
- package/dist/emblems/trophy/soccer-globe.d.ts +2 -0
- package/dist/emblems/trophy/soccer-globe.js +18 -0
- package/dist/emblems/trophy/sumo-cup.d.ts +2 -0
- package/dist/emblems/trophy/sumo-cup.js +28 -0
- package/dist/emblems/trophy/tennis-cup.d.ts +2 -0
- package/dist/emblems/trophy/tennis-cup.js +24 -0
- package/dist/emblems/trophy/tennis-plate.d.ts +2 -0
- package/dist/emblems/trophy/tennis-plate.js +16 -0
- package/dist/emblems-entry.d.ts +20 -7
- package/dist/emblems-entry.js +8 -2
- package/dist/index.d.ts +131 -1
- package/dist/index.js +131 -3
- package/dist/turn-control.d.ts +101 -0
- package/dist/turn-control.js +363 -0
- package/dist/turn-entry.d.ts +2 -0
- package/dist/turn-entry.js +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +33 -7
- package/LICENSES/Apache-2.0.txt +0 -55
- package/LICENSES/CC-BY-3.0.md +0 -15
- package/dist/emblems/ball/soccer.d.ts +0 -2
- package/dist/emblems/ball/soccer.js +0 -9
- package/dist/emblems/emblem.ball.d.ts +0 -28
- package/dist/emblems/emblem.ball.js +0 -70
|
@@ -1,7 +1,165 @@
|
|
|
1
1
|
import { AWARD_MEDAL } from "./award/medal.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { AWARD_BADGE } from "./award/badge.js";
|
|
3
|
+
import { AWARD_CROWN } from "./award/crown.js";
|
|
4
|
+
import { AWARD_STAR } from "./award/star.js";
|
|
5
|
+
import { AWARD_SHIELD } from "./award/shield.js";
|
|
6
|
+
import { TROPHY_CUP } from "./trophy/cup.js";
|
|
7
|
+
import { TROPHY_LIDDED_CUP } from "./trophy/lidded-cup.js";
|
|
8
|
+
import { TROPHY_BOWL } from "./trophy/bowl.js";
|
|
9
|
+
import { TROPHY_SALVER } from "./trophy/salver.js";
|
|
10
|
+
import { TROPHY_GLOBE } from "./trophy/globe.js";
|
|
11
|
+
import { TROPHY_HOCKEY_CUP } from "./trophy/hockey-cup.js";
|
|
12
|
+
import { TROPHY_BASKETBALL } from "./trophy/basketball.js";
|
|
13
|
+
import { TROPHY_BASEBALL } from "./trophy/baseball.js";
|
|
14
|
+
import { TROPHY_FOOTBALL } from "./trophy/football.js";
|
|
15
|
+
import { TROPHY_CANADIAN_BOWL } from "./trophy/canadian-bowl.js";
|
|
16
|
+
import { TROPHY_SOCCER_BALL } from "./trophy/soccer-ball.js";
|
|
17
|
+
import { TROPHY_SOCCER_GLOBE } from "./trophy/soccer-globe.js";
|
|
18
|
+
import { TROPHY_TENNIS_PLATE } from "./trophy/tennis-plate.js";
|
|
19
|
+
import { TROPHY_TENNIS_CUP } from "./trophy/tennis-cup.js";
|
|
20
|
+
import { TROPHY_CRICKET_URN } from "./trophy/cricket-urn.js";
|
|
21
|
+
import { TROPHY_RUGBY_CUP } from "./trophy/rugby-cup.js";
|
|
22
|
+
import { TROPHY_PLAQUE } from "./trophy/plaque.js";
|
|
23
|
+
import { TROPHY_BELT } from "./trophy/belt.js";
|
|
24
|
+
import { TROPHY_LAUREL } from "./trophy/laurel.js";
|
|
25
|
+
import { TROPHY_ROSETTE } from "./trophy/rosette.js";
|
|
26
|
+
import { TROPHY_SUMO_CUP } from "./trophy/sumo-cup.js";
|
|
27
|
+
import { TROPHY_CHAMPIONSHIP_BANNER } from "./trophy/championship-banner.js";
|
|
28
|
+
import { TROPHY_RING } from "./trophy/ring.js";
|
|
29
|
+
import { TROPHY_BANNER } from "./trophy/banner.js";
|
|
30
|
+
import { MEDAL_GOLD } from "./medal/gold.js";
|
|
31
|
+
import { MEDAL_SILVER } from "./medal/silver.js";
|
|
32
|
+
import { MEDAL_BRONZE } from "./medal/bronze.js";
|
|
33
|
+
import { MEDAL_PLACE_1 } from "./medal/place-1.js";
|
|
34
|
+
import { MEDAL_PLACE_2 } from "./medal/place-2.js";
|
|
35
|
+
import { MEDAL_PLACE_3 } from "./medal/place-3.js";
|
|
36
|
+
import { CREST_SHIELD } from "./crest/shield.js";
|
|
37
|
+
import { CREST_ROUNDEL } from "./crest/roundel.js";
|
|
38
|
+
import { CREST_DIAMOND } from "./crest/diamond.js";
|
|
39
|
+
import { CREST_PENNANT } from "./crest/pennant.js";
|
|
40
|
+
import { PENNANT_CHAMPIONSHIP } from "./pennant/championship.js";
|
|
41
|
+
import { BALLS } from "./ball/ball.index.js";
|
|
42
|
+
import { GEARS } from "./gear/gear.index.js";
|
|
43
|
+
import { SPORT_NFL } from "./sport/nfl.js";
|
|
44
|
+
import { SPORT_CFL } from "./sport/cfl.js";
|
|
45
|
+
import { SPORT_IFAF } from "./sport/ifaf.js";
|
|
46
|
+
import { SPORT_NHL } from "./sport/nhl.js";
|
|
47
|
+
import { SPORT_NBA } from "./sport/nba.js";
|
|
48
|
+
import { SPORT_MLB } from "./sport/mlb.js";
|
|
49
|
+
import { SPORT_SOCCER } from "./sport/soccer.js";
|
|
50
|
+
import { SPORT_CURLING } from "./sport/curling.js";
|
|
51
|
+
import { SPORT_TENNIS } from "./sport/tennis.js";
|
|
52
|
+
import { SPORT_VOLLEYBALL } from "./sport/volleyball.js";
|
|
53
|
+
import { SPORT_BADMINTON } from "./sport/badminton.js";
|
|
54
|
+
import { SPORT_PICKLEBALL } from "./sport/pickleball.js";
|
|
55
|
+
import { SPORT_TABLETENNIS } from "./sport/tabletennis.js";
|
|
56
|
+
import { SPORT_PADEL } from "./sport/padel.js";
|
|
57
|
+
import { SPORT_SQUASH } from "./sport/squash.js";
|
|
58
|
+
import { SPORT_RACQUETBALL } from "./sport/racquetball.js";
|
|
59
|
+
import { SPORT_SEPAKTAKRAW } from "./sport/sepaktakraw.js";
|
|
60
|
+
import { SPORT_TEQBALL } from "./sport/teqball.js";
|
|
61
|
+
import { SPORT_ROUNDNET } from "./sport/roundnet.js";
|
|
62
|
+
import { SPORT_NETBALL } from "./sport/netball.js";
|
|
63
|
+
import { SPORT_SWIMMING } from "./sport/swimming.js";
|
|
64
|
+
import { SPORT_WATERPOLO } from "./sport/waterpolo.js";
|
|
65
|
+
import { SPORT_DIVING } from "./sport/diving.js";
|
|
66
|
+
import { SPORT_ARTISTICSWIMMING } from "./sport/artisticswimming.js";
|
|
67
|
+
import { SPORT_LACROSSE } from "./sport/lacrosse.js";
|
|
68
|
+
import { SPORT_RUGBY } from "./sport/rugby.js";
|
|
69
|
+
import { SPORT_AFL } from "./sport/afl.js";
|
|
70
|
+
import { SPORT_GAELIC } from "./sport/gaelic.js";
|
|
71
|
+
import { SPORT_CRICKET } from "./sport/cricket.js";
|
|
72
|
+
import { SPORT_FIELDHOCKEY } from "./sport/fieldhockey.js";
|
|
73
|
+
import { SPORT_HANDBALL } from "./sport/handball.js";
|
|
74
|
+
import { SPORT_ATHLETICS } from "./sport/athletics.js";
|
|
75
|
+
import { SPORT_SKATING } from "./sport/skating.js";
|
|
76
|
+
import { SPORT_SUMO } from "./sport/sumo.js";
|
|
77
|
+
import { SPORT_KENDO } from "./sport/kendo.js";
|
|
78
|
+
import { SPORT_JUDO } from "./sport/judo.js";
|
|
79
|
+
import { SPORT_KYUDO } from "./sport/kyudo.js";
|
|
80
|
+
import { SPORT_KARATE } from "./sport/karate.js";
|
|
81
|
+
/** The balls and the gear are drawn by families, each family in a module of its own, and listed in order by their own indexes. */
|
|
82
|
+
const PIECES = Object.fromEntries([...BALLS, ...GEARS].map((piece) => [piece.id, piece]));
|
|
83
|
+
/** The emblems drawn one to a module: every id but the balls and the gear. A missing or extra entry is a type error. */
|
|
84
|
+
const OWN = {
|
|
5
85
|
"award:medal": AWARD_MEDAL,
|
|
6
|
-
"
|
|
86
|
+
"award:badge": AWARD_BADGE,
|
|
87
|
+
"award:crown": AWARD_CROWN,
|
|
88
|
+
"award:star": AWARD_STAR,
|
|
89
|
+
"award:shield": AWARD_SHIELD,
|
|
90
|
+
"trophy:cup": TROPHY_CUP,
|
|
91
|
+
"trophy:lidded-cup": TROPHY_LIDDED_CUP,
|
|
92
|
+
"trophy:bowl": TROPHY_BOWL,
|
|
93
|
+
"trophy:salver": TROPHY_SALVER,
|
|
94
|
+
"trophy:globe": TROPHY_GLOBE,
|
|
95
|
+
"trophy:hockey-cup": TROPHY_HOCKEY_CUP,
|
|
96
|
+
"trophy:basketball": TROPHY_BASKETBALL,
|
|
97
|
+
"trophy:baseball": TROPHY_BASEBALL,
|
|
98
|
+
"trophy:football": TROPHY_FOOTBALL,
|
|
99
|
+
"trophy:canadian-bowl": TROPHY_CANADIAN_BOWL,
|
|
100
|
+
"trophy:soccer-ball": TROPHY_SOCCER_BALL,
|
|
101
|
+
"trophy:soccer-globe": TROPHY_SOCCER_GLOBE,
|
|
102
|
+
"trophy:tennis-plate": TROPHY_TENNIS_PLATE,
|
|
103
|
+
"trophy:tennis-cup": TROPHY_TENNIS_CUP,
|
|
104
|
+
"trophy:cricket-urn": TROPHY_CRICKET_URN,
|
|
105
|
+
"trophy:rugby-cup": TROPHY_RUGBY_CUP,
|
|
106
|
+
"trophy:plaque": TROPHY_PLAQUE,
|
|
107
|
+
"trophy:belt": TROPHY_BELT,
|
|
108
|
+
"trophy:laurel": TROPHY_LAUREL,
|
|
109
|
+
"trophy:rosette": TROPHY_ROSETTE,
|
|
110
|
+
"trophy:sumo-cup": TROPHY_SUMO_CUP,
|
|
111
|
+
"trophy:championship-banner": TROPHY_CHAMPIONSHIP_BANNER,
|
|
112
|
+
"trophy:ring": TROPHY_RING,
|
|
113
|
+
"trophy:banner": TROPHY_BANNER,
|
|
114
|
+
"medal:gold": MEDAL_GOLD,
|
|
115
|
+
"medal:silver": MEDAL_SILVER,
|
|
116
|
+
"medal:bronze": MEDAL_BRONZE,
|
|
117
|
+
"medal:place-1": MEDAL_PLACE_1,
|
|
118
|
+
"medal:place-2": MEDAL_PLACE_2,
|
|
119
|
+
"medal:place-3": MEDAL_PLACE_3,
|
|
120
|
+
"crest:shield": CREST_SHIELD,
|
|
121
|
+
"crest:roundel": CREST_ROUNDEL,
|
|
122
|
+
"crest:diamond": CREST_DIAMOND,
|
|
123
|
+
"crest:pennant": CREST_PENNANT,
|
|
124
|
+
"pennant:championship": PENNANT_CHAMPIONSHIP,
|
|
125
|
+
"sport:nfl": SPORT_NFL,
|
|
126
|
+
"sport:cfl": SPORT_CFL,
|
|
127
|
+
"sport:ifaf": SPORT_IFAF,
|
|
128
|
+
"sport:nhl": SPORT_NHL,
|
|
129
|
+
"sport:nba": SPORT_NBA,
|
|
130
|
+
"sport:mlb": SPORT_MLB,
|
|
131
|
+
"sport:soccer": SPORT_SOCCER,
|
|
132
|
+
"sport:curling": SPORT_CURLING,
|
|
133
|
+
"sport:tennis": SPORT_TENNIS,
|
|
134
|
+
"sport:volleyball": SPORT_VOLLEYBALL,
|
|
135
|
+
"sport:badminton": SPORT_BADMINTON,
|
|
136
|
+
"sport:pickleball": SPORT_PICKLEBALL,
|
|
137
|
+
"sport:tabletennis": SPORT_TABLETENNIS,
|
|
138
|
+
"sport:padel": SPORT_PADEL,
|
|
139
|
+
"sport:squash": SPORT_SQUASH,
|
|
140
|
+
"sport:racquetball": SPORT_RACQUETBALL,
|
|
141
|
+
"sport:sepaktakraw": SPORT_SEPAKTAKRAW,
|
|
142
|
+
"sport:teqball": SPORT_TEQBALL,
|
|
143
|
+
"sport:roundnet": SPORT_ROUNDNET,
|
|
144
|
+
"sport:netball": SPORT_NETBALL,
|
|
145
|
+
"sport:swimming": SPORT_SWIMMING,
|
|
146
|
+
"sport:waterpolo": SPORT_WATERPOLO,
|
|
147
|
+
"sport:diving": SPORT_DIVING,
|
|
148
|
+
"sport:artisticswimming": SPORT_ARTISTICSWIMMING,
|
|
149
|
+
"sport:lacrosse": SPORT_LACROSSE,
|
|
150
|
+
"sport:rugby": SPORT_RUGBY,
|
|
151
|
+
"sport:afl": SPORT_AFL,
|
|
152
|
+
"sport:gaelic": SPORT_GAELIC,
|
|
153
|
+
"sport:cricket": SPORT_CRICKET,
|
|
154
|
+
"sport:fieldhockey": SPORT_FIELDHOCKEY,
|
|
155
|
+
"sport:handball": SPORT_HANDBALL,
|
|
156
|
+
"sport:athletics": SPORT_ATHLETICS,
|
|
157
|
+
"sport:skating": SPORT_SKATING,
|
|
158
|
+
"sport:sumo": SPORT_SUMO,
|
|
159
|
+
"sport:kendo": SPORT_KENDO,
|
|
160
|
+
"sport:judo": SPORT_JUDO,
|
|
161
|
+
"sport:kyudo": SPORT_KYUDO,
|
|
162
|
+
"sport:karate": SPORT_KARATE,
|
|
7
163
|
};
|
|
164
|
+
/** Every emblem, by id. */
|
|
165
|
+
export const EMBLEM_TABLE = { ...OWN, ...PIECES };
|
|
@@ -1,21 +1,57 @@
|
|
|
1
1
|
import { type Emblem, type EmblemSource, type Metal } from "./emblem.core.ts";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { type Plate } from "./emblem.engrave.ts";
|
|
3
|
+
/**
|
|
4
|
+
* What a shape is for. `m` the main metal, shaded across a sheet; `o` the main metal on a round, lit from a corner; `e` a bevelled ring (a line the width of the third item, bright on one side and dark on
|
|
5
|
+
* the other); `s` its shade; `l` a glint (a fill with no outline, left out of the line style); `r` the second colour (a ribbon, a band: the `accent` option); `f` a fixed colour (the third item); `p` white
|
|
6
|
+
* ink at a tenth; `k` ink; `n` an outline with no fill; `t` a thin line (a detail); `b` a bold line in ink (a limb, a shaft); `d` a bold line in a fixed dark colour (a numeral on a medal).
|
|
7
|
+
*/
|
|
8
|
+
export type Role = DropRole | "m" | "o" | "e" | "s" | "l" | "r" | "f" | "p" | "k" | "n" | "t" | "b" | "d";
|
|
9
|
+
/** A role in capitals is the same shape, left out of a face that is engraved (the star of a medal, the numeral of a place badge, the lines of a plaque). */
|
|
10
|
+
type DropRole = "M" | "D" | "T" | "E";
|
|
11
|
+
/** A path, its role, and for `f` its colour and for `e` its width. */
|
|
12
|
+
export type Shape = readonly [Role, string, string?];
|
|
13
|
+
/** A flat object or an icon. */
|
|
8
14
|
export interface FlatModel {
|
|
15
|
+
/** The view box; "0 0 64 64" unless the drawing came from elsewhere. */
|
|
16
|
+
box?: string;
|
|
9
17
|
metal: Metal;
|
|
10
18
|
front: readonly Shape[];
|
|
11
|
-
back
|
|
19
|
+
/** The back face, for an object that flips; the front's `m`, `o` and `s` shapes with no detail when missing. */
|
|
20
|
+
back?: readonly Shape[];
|
|
21
|
+
/** The main colour of a `flat` object when the caller gives no tint (a crest's blue). */
|
|
22
|
+
color?: string;
|
|
23
|
+
/** The second colour when the caller gives none: a ribbon, a band, a board. */
|
|
24
|
+
ribbon?: string;
|
|
25
|
+
/** The thickness of the rim in the box's units, for an object that flips. */
|
|
26
|
+
rim?: number;
|
|
27
|
+
/** The outline is the page's ink (a pictogram) and not a darker tone of the metal. */
|
|
28
|
+
ink?: boolean;
|
|
29
|
+
/** Shapes drawn when there are no initials, for a crest (and only then). */
|
|
30
|
+
blank?: readonly Shape[];
|
|
31
|
+
/** Where an engraving goes: the plate of the front (and of the year when a plate of its own holds it) and of the back, and the rank the front takes when it is engraved and none is given (a place badge's own place). */
|
|
32
|
+
engrave?: {
|
|
33
|
+
front: Plate;
|
|
34
|
+
year?: Plate;
|
|
35
|
+
back?: Plate;
|
|
36
|
+
rank?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Where a crest's letters go: the centre's x and y, and the size for one letter. */
|
|
39
|
+
letters?: readonly [x: number, y: number, size: number];
|
|
12
40
|
}
|
|
41
|
+
/** A flat object (a medal, a crest, a plaque): drawn as it is by `svg`; turned about its vertical axis it flips like a coin and shows its back, with its rim for a moment edge on. */
|
|
42
|
+
export declare function defineFlat(id: string, en: string, ja: string, source: EmblemSource, model: FlatModel): Emblem<FlatModel>;
|
|
43
|
+
/** An icon: one drawing from shapes. Turned, it is a thin cut-out: it squeezes like a coin, shows its front mirrored and a little darker past a quarter turn, and has a dark rim. */
|
|
44
|
+
export declare function defineIcon(id: string, en: string, ja: string, source: EmblemSource, model: FlatModel): Emblem<FlatModel>;
|
|
13
45
|
/** A circle as a path, so every shape is one kind of thing. */
|
|
14
46
|
export declare const circlePath: (cx: number, cy: number, r: number) => string;
|
|
47
|
+
/** An ellipse as a path. */
|
|
48
|
+
export declare const ellipsePath: (cx: number, cy: number, rx: number, ry: number) => string;
|
|
15
49
|
/** A star as a path, one point up. */
|
|
16
50
|
export declare function starPath(cx: number, cy: number, outer: number, inner: number, points?: number): string;
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
51
|
+
/** A regular polygon of `n` sides with a corner at `deg` degrees (0 is straight up), as a path. */
|
|
52
|
+
export declare function polygon(cx: number, cy: number, r: number, n: number, deg?: number): string;
|
|
53
|
+
/** An ellipse turned `deg` degrees about its centre, as a path. */
|
|
54
|
+
export declare function tiltedEllipse(cx: number, cy: number, rx: number, ry: number, deg: number): string;
|
|
55
|
+
/** A bar with square ends from one point to another, `w` wide, as a path. */
|
|
56
|
+
export declare function bar(x1: number, y1: number, x2: number, y2: number, w: number): string;
|
|
57
|
+
export {};
|
|
@@ -1,7 +1,122 @@
|
|
|
1
|
-
// A flat object: a
|
|
2
|
-
|
|
1
|
+
// A flat object or an icon: a list of shapes, each with a role (the metal, its shade, a glint, a second colour, a fixed colour, ink, a line), drawn with gradients in the metal style, in flat fills in the
|
|
2
|
+
// `color` style and as one outline in the `line` style. A flat object (a medal, a crest, a plaque) also has a back face and a rim, so the turning view flips it like a coin; an icon (a sport's pictogram)
|
|
3
|
+
// is drawn as it is. Imports only the core.
|
|
4
|
+
import { bevelGradient, defsOf, degrees, escape, hexOf, labelled, mainOf, mix, n2, onColour, orbGradient, readColour, resolve, sheetGradient, wrap, } from "./emblem.core.js";
|
|
5
|
+
import { engravingOf, linesOf, plateMarkup } from "./emblem.engrave.js";
|
|
6
|
+
import { flipSvg } from "./emblem.flip.js";
|
|
7
|
+
const use = (ctx, g) => {
|
|
8
|
+
ctx.used.push(g);
|
|
9
|
+
return g.fill;
|
|
10
|
+
};
|
|
11
|
+
/** The attributes of one shape. In the metal style the fills are gradients, in `color` flat colours. */
|
|
12
|
+
function attrs(shape, ctx) {
|
|
13
|
+
const metal = ctx.style === "metal";
|
|
14
|
+
const flatMain = hexOf(ctx.main);
|
|
15
|
+
switch (shape[0]) {
|
|
16
|
+
case "m": return `fill="${metal ? use(ctx, ctx.sheet) : flatMain}"`;
|
|
17
|
+
case "o": return `fill="${metal ? use(ctx, ctx.orb) : flatMain}"`;
|
|
18
|
+
case "e": return `fill="none" stroke="${metal ? use(ctx, ctx.bevel) : mix(ctx.main, 0.4)}" stroke-width="${shape[2] ?? "2"}"`;
|
|
19
|
+
case "s": return `fill="${mix(ctx.main, -0.28)}"`;
|
|
20
|
+
case "l": return `fill="${mix(ctx.main, 0.55)}" fill-opacity="${metal ? ".55" : "1"}" stroke="none"`;
|
|
21
|
+
case "r": return `fill="${ctx.ribbon}"`;
|
|
22
|
+
case "f": return `fill="${shape[2] ?? "#ffffff"}"`;
|
|
23
|
+
case "p": return 'fill="currentColor" fill-opacity=".1"';
|
|
24
|
+
case "k": return 'fill="currentColor"';
|
|
25
|
+
case "t": return 'fill="none" stroke-width="1.5"';
|
|
26
|
+
case "b": return 'fill="none" stroke-width="4.4"';
|
|
27
|
+
case "d": return 'fill="none" stroke="#20262d" stroke-width="4.2"';
|
|
28
|
+
default: return 'fill="none"';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** The shapes as markup: consecutive shapes of one role (and colour) are one path. In the line style everything is one outline (the details a little thinner), and the glints are left out. */
|
|
32
|
+
function shapesMarkup(shapes, ctx) {
|
|
33
|
+
if (ctx.style === "line") {
|
|
34
|
+
const join = (roles) => shapes.filter((s) => roles.includes(s[0])).map((s) => s[1]).join("");
|
|
35
|
+
const main = join("mosrfpkn");
|
|
36
|
+
const thin = join("te");
|
|
37
|
+
const bold = join("bd");
|
|
38
|
+
return (main === "" ? "" : `<path d="${main}"/>`) + (thin === "" ? "" : `<path d="${thin}" stroke-width="2"/>`) + (bold === "" ? "" : `<path d="${bold}"/>`);
|
|
39
|
+
}
|
|
40
|
+
let out = "";
|
|
41
|
+
let i = 0;
|
|
42
|
+
while (i < shapes.length) {
|
|
43
|
+
const [role, , extra] = shapes[i];
|
|
44
|
+
let d = "";
|
|
45
|
+
while (i < shapes.length && shapes[i][0] === role && shapes[i][2] === extra)
|
|
46
|
+
d += shapes[i++][1];
|
|
47
|
+
out += `<path d="${d}" ${attrs([role, d, extra], ctx)}/>`;
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/** The letters of a crest. */
|
|
52
|
+
function letters(model, ctx) {
|
|
53
|
+
if (model.letters === undefined || ctx.initials === "")
|
|
54
|
+
return "";
|
|
55
|
+
const [x, y, size] = model.letters;
|
|
56
|
+
const n = [...ctx.initials].length;
|
|
57
|
+
const fs = n === 1 ? size : n === 2 ? size * 0.82 : size * 0.64;
|
|
58
|
+
return `<text x="${x}" y="${n2(y + fs * 0.36)}" font-size="${n2(fs)}" font-weight="800" font-family="system-ui,sans-serif" text-anchor="middle" fill="${ctx.style === "line" ? "currentColor" : onColour(ctx.main)}" stroke="none">${escape(ctx.initials)}</text>`;
|
|
59
|
+
}
|
|
60
|
+
/** The lines cut into the face on `side`, as markup, or an empty string when there is nothing to cut or nowhere to cut it. */
|
|
61
|
+
function engraved(model, ctx, side) {
|
|
62
|
+
const e = ctx.engrave;
|
|
63
|
+
const plates = model.engrave;
|
|
64
|
+
if (plates === undefined)
|
|
65
|
+
return "";
|
|
66
|
+
if (side === "back")
|
|
67
|
+
return plates.back === undefined || e.back === undefined ? "" : plateMarkup(linesOf({ free: e.back }).main, plates.back, ctx.main, ctx.style);
|
|
68
|
+
if (e.free === undefined && e.label === undefined && e.year === undefined && e.rank === undefined)
|
|
69
|
+
return "";
|
|
70
|
+
const { main, year } = linesOf(e, { rank: plates.rank, yearApart: plates.year !== undefined });
|
|
71
|
+
return plateMarkup(main, plates.front, ctx.main, ctx.style) + (year === undefined || plates.year === undefined ? "" : plateMarkup([[{ text: year, weight: 1 }]], plates.year, ctx.main, ctx.style));
|
|
72
|
+
}
|
|
73
|
+
/** One face of an object as markup: its shapes (the ones an engraving replaces left out when there is one), then the engraving, and a crest's letters. */
|
|
74
|
+
function face(model, shapes, ctx, text = "") {
|
|
75
|
+
const shown = shapes.filter((x) => text === "" || x[0] === x[0].toLowerCase()).map((x) => (x[0] === x[0].toLowerCase() ? x : [x[0].toLowerCase(), x[1], x[2]]));
|
|
76
|
+
const blank = ctx.initials === "" && model.blank !== undefined ? shapesMarkup(model.blank, ctx) : "";
|
|
77
|
+
return shapesMarkup(shown, ctx) + blank + letters(model, ctx) + text;
|
|
78
|
+
}
|
|
79
|
+
function context(model, r) {
|
|
80
|
+
const main = r.tint ?? (model.color === undefined ? mainOf(model.metal, undefined) : readColour(model.color));
|
|
81
|
+
return { main, style: r.style, sheet: sheetGradient(main), orb: orbGradient(main), bevel: bevelGradient(main), ribbon: r.accent ?? model.ribbon ?? "#c0392b", initials: r.initials, engrave: {}, used: [] };
|
|
82
|
+
}
|
|
83
|
+
function document(title, model, r, ctx, body) {
|
|
84
|
+
return wrap({ title, size: r.size, style: r.style, theme: r.theme, defs: r.style === "metal" ? defsOf(ctx.used) : "", body, box: model.box, edge: model.ink === true ? undefined : mix(ctx.main, -0.5), width: model.ink === true ? undefined : 0.8 });
|
|
85
|
+
}
|
|
86
|
+
/** A flat object (a medal, a crest, a plaque): drawn as it is by `svg`; turned about its vertical axis it flips like a coin and shows its back, with its rim for a moment edge on. */
|
|
87
|
+
export function defineFlat(id, en, ja, source, model) {
|
|
88
|
+
const draw = (o, yaw, pitch) => {
|
|
89
|
+
const r = resolve(o);
|
|
90
|
+
const ctx = context(model, r);
|
|
91
|
+
ctx.engrave = engravingOf(o);
|
|
92
|
+
if (yaw === 0 && pitch === 0)
|
|
93
|
+
return document(en, model, r, ctx, face(model, model.front, ctx, engraved(model, ctx, "front")));
|
|
94
|
+
const across = Math.cos((yaw * Math.PI) / 180);
|
|
95
|
+
const tilt = Math.cos((pitch * Math.PI) / 180);
|
|
96
|
+
const shown = across >= 0 ? model.front : (model.back ?? model.front.filter((x) => x[0] === "m" || x[0] === "o" || x[0] === "s"));
|
|
97
|
+
const sx = Math.max(Math.abs(across), 0.02);
|
|
98
|
+
const sy = Math.max(Math.abs(tilt), 0.02);
|
|
99
|
+
const rim = (model.rim ?? 0) * Math.sin((yaw * Math.PI) / 180);
|
|
100
|
+
const [x0, y0, w, h] = (model.box ?? "0 0 64 64").split(" ").map(Number);
|
|
101
|
+
const thick = rim === 0 ? "" : `<g transform="translate(${n2(rim)} 0)">${shapesMarkup(model.front.filter((x) => x[0] === "m" || x[0] === "o").map((x) => ["s", x[1]]), ctx)}</g>`;
|
|
102
|
+
return document(en, model, r, ctx, `<g transform="translate(${n2(x0 + w / 2)} ${n2(y0 + h / 2)}) scale(${n2(sx)} ${n2(sy)}) translate(${n2(-x0 - w / 2)} ${n2(-y0 - h / 2)})">${thick}${face(model, shown, ctx, engraved(model, ctx, across >= 0 ? "front" : "back"))}</g>`);
|
|
103
|
+
};
|
|
104
|
+
return { id, en, ja, source, kind: "flat", model, svg: labelled(en, ja, (o) => draw(o, 0, 0)), frame: labelled(en, ja, (o) => draw(o, degrees(o?.yaw), degrees(o?.pitch))) };
|
|
105
|
+
}
|
|
106
|
+
/** An icon: one drawing from shapes. Turned, it is a thin cut-out: it squeezes like a coin, shows its front mirrored and a little darker past a quarter turn, and has a dark rim. */
|
|
107
|
+
export function defineIcon(id, en, ja, source, model) {
|
|
108
|
+
const svg = labelled(en, ja, (o) => {
|
|
109
|
+
const r = resolve(o);
|
|
110
|
+
const ctx = context(model, r);
|
|
111
|
+
return document(en, model, r, ctx, face(model, model.front, ctx));
|
|
112
|
+
});
|
|
113
|
+
const frame = (o) => flipSvg(svg(o), { yaw: degrees(o?.yaw), pitch: degrees(o?.pitch), line: o?.style === "line", thick: 0.03 });
|
|
114
|
+
return { id, en, ja, source, kind: "icon", model, svg, frame: labelled(en, ja, frame) };
|
|
115
|
+
}
|
|
3
116
|
/** A circle as a path, so every shape is one kind of thing. */
|
|
4
117
|
export const circlePath = (cx, cy, r) => `M${n2(cx - r)} ${n2(cy)}a${n2(r)} ${n2(r)} 0 1 0 ${n2(2 * r)} 0a${n2(r)} ${n2(r)} 0 1 0 ${n2(-2 * r)} 0Z`;
|
|
118
|
+
/** An ellipse as a path. */
|
|
119
|
+
export const ellipsePath = (cx, cy, rx, ry) => `M${n2(cx - rx)} ${n2(cy)}a${n2(rx)} ${n2(ry)} 0 1 0 ${n2(2 * rx)} 0a${n2(rx)} ${n2(ry)} 0 1 0 ${n2(-2 * rx)} 0Z`;
|
|
5
120
|
/** A star as a path, one point up. */
|
|
6
121
|
export function starPath(cx, cy, outer, inner, points = 5) {
|
|
7
122
|
const parts = [];
|
|
@@ -12,34 +127,26 @@ export function starPath(cx, cy, outer, inner, points = 5) {
|
|
|
12
127
|
}
|
|
13
128
|
return `${parts.join("")}Z`;
|
|
14
129
|
}
|
|
15
|
-
|
|
16
|
-
function
|
|
17
|
-
|
|
130
|
+
/** A regular polygon of `n` sides with a corner at `deg` degrees (0 is straight up), as a path. */
|
|
131
|
+
export function polygon(cx, cy, r, n, deg = 0) {
|
|
132
|
+
let d = "";
|
|
133
|
+
for (let i = 0; i < n; i++) {
|
|
134
|
+
const a = ((deg + (360 * i) / n - 90) * Math.PI) / 180;
|
|
135
|
+
d += `${i === 0 ? "M" : "L"}${n2(cx + r * Math.cos(a))} ${n2(cy + r * Math.sin(a))}`;
|
|
136
|
+
}
|
|
137
|
+
return `${d}Z`;
|
|
18
138
|
}
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const turned = yaw === 0 && pitch === 0 ? "" : ` transform="translate(32 32) scale(${n2(sx)} ${n2(sy)}) translate(-32 -32)"`;
|
|
33
|
-
return wrap({ title: en, size: r.size, style: r.style, theme: r.theme, defs: paint.defs, body: `<g${turned}>${drawShapes(shapes, paint)}</g>` });
|
|
34
|
-
};
|
|
35
|
-
return {
|
|
36
|
-
id,
|
|
37
|
-
en,
|
|
38
|
-
ja,
|
|
39
|
-
source,
|
|
40
|
-
kind: "flat",
|
|
41
|
-
model,
|
|
42
|
-
svg: (options) => draw(options, 0, 0),
|
|
43
|
-
frame: (options) => draw(options, degrees(options?.yaw), degrees(options?.pitch)),
|
|
44
|
-
};
|
|
139
|
+
/** An ellipse turned `deg` degrees about its centre, as a path. */
|
|
140
|
+
export function tiltedEllipse(cx, cy, rx, ry, deg) {
|
|
141
|
+
const a = (deg * Math.PI) / 180;
|
|
142
|
+
const x = rx * Math.cos(a);
|
|
143
|
+
const y = rx * Math.sin(a);
|
|
144
|
+
return `M${n2(cx - x)} ${n2(cy - y)}A${n2(rx)} ${n2(ry)} ${deg} 1 1 ${n2(cx + x)} ${n2(cy + y)}A${n2(rx)} ${n2(ry)} ${deg} 1 1 ${n2(cx - x)} ${n2(cy - y)}Z`;
|
|
145
|
+
}
|
|
146
|
+
/** A bar with square ends from one point to another, `w` wide, as a path. */
|
|
147
|
+
export function bar(x1, y1, x2, y2, w) {
|
|
148
|
+
const l = Math.hypot(x2 - x1, y2 - y1) || 1;
|
|
149
|
+
const nx = (-(y2 - y1) / l) * (w / 2);
|
|
150
|
+
const ny = ((x2 - x1) / l) * (w / 2);
|
|
151
|
+
return `M${n2(x1 + nx)} ${n2(y1 + ny)}L${n2(x2 + nx)} ${n2(y2 + ny)}L${n2(x2 - nx)} ${n2(y2 - ny)}L${n2(x1 - nx)} ${n2(y1 - ny)}Z`;
|
|
45
152
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type EmblemLocale, type EmblemOptions } from "./emblem.core.ts";
|
|
2
|
+
import { type EmblemRef } from "./emblem.api.ts";
|
|
3
|
+
/** What `emblemSprite` takes: the options every symbol is drawn with, and the prefix of its ids. */
|
|
4
|
+
export interface SpriteOptions extends EmblemOptions {
|
|
5
|
+
/** The start of every id in the sheet (letters, digits and hyphens, starting with a letter). By default it is made from the emblems and the options, so the same call gives the same sheet. */
|
|
6
|
+
prefix?: string;
|
|
7
|
+
}
|
|
8
|
+
/** What one `<use>` takes. */
|
|
9
|
+
export interface UseOptions {
|
|
10
|
+
/** The width and height in pixels (64 by default). */
|
|
11
|
+
size?: number;
|
|
12
|
+
/** A class for the `<svg>` that holds the `<use>`. */
|
|
13
|
+
class?: string;
|
|
14
|
+
/** The `<title>`: a string writes that title, `false` drops it and hides the drawing from a screen reader. By default it is the emblem's name. */
|
|
15
|
+
title?: string | false;
|
|
16
|
+
/** The language of the default title, `"en"` or `"ja"`. */
|
|
17
|
+
locale?: EmblemLocale;
|
|
18
|
+
}
|
|
19
|
+
/** A sheet of symbols and the snippets that draw them. */
|
|
20
|
+
export interface Sprite {
|
|
21
|
+
/** One hidden `<svg>` of `<symbol>`s; put it once in the page, anywhere in `<body>`. */
|
|
22
|
+
sheet: string;
|
|
23
|
+
/** The markup for one use of a symbol: `<svg><title>…</title><use href="#…"/></svg>`. The emblem must be one the sprite was made with. */
|
|
24
|
+
use: (ref: EmblemRef, options?: UseOptions) => string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A sprite sheet: every emblem in `ids` drawn once as a `<symbol>`, with the gradients and other definitions shared and every id unique across the sheet, and a `use(id, { size, class, title })` that returns the
|
|
28
|
+
* markup for one more of it. Put `sheet` in the page once; a bracket or a table that shows the same ball or medal fifty times then adds a few nodes each time, not the whole drawing. The symbols are drawn without the
|
|
29
|
+
* grain a large ball has by default (pass `grain: true` to keep it). `style`, `tint`, `accent` and `theme` are the sheet's, for every symbol; a different look is another sprite, or an id that names its style (`"medal:gold/line"`).
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { emblemSprite } from "@johnmorrisdotca/dougu-sports/emblems";
|
|
33
|
+
* const sprite = emblemSprite(["ball:soccer", "medal:gold"]);
|
|
34
|
+
* console.log(sprite.use("ball:soccer", { size: 24 }).startsWith("<svg"));
|
|
35
|
+
* // true
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function emblemSprite(ids: readonly EmblemRef[], options?: SpriteOptions): Sprite;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// A sheet of symbols: each emblem drawn once, then used as many times as a page wants it with a `<use>` that costs a few nodes and a few dozen bytes.
|
|
2
|
+
import { EMBLEM_INK, escape, resolve } from "./emblem.core.js";
|
|
3
|
+
import { emblemOf, parseEmblem, renderEmblem } from "./emblem.api.js";
|
|
4
|
+
import { IdSpace, partsOf } from "./emblem.compose.js";
|
|
5
|
+
const hash = (text) => {
|
|
6
|
+
let h = 2166136261;
|
|
7
|
+
for (let i = 0; i < text.length; i++)
|
|
8
|
+
h = Math.imul(h ^ text.charCodeAt(i), 16777619);
|
|
9
|
+
return (h >>> 0).toString(36);
|
|
10
|
+
};
|
|
11
|
+
/** The key a reference goes by in a sprite: the id, and the style when the reference names one. */
|
|
12
|
+
function keyOf(ref) {
|
|
13
|
+
if (typeof ref !== "string")
|
|
14
|
+
return ref.id;
|
|
15
|
+
const parsed = parseEmblem(ref);
|
|
16
|
+
if (parsed === undefined)
|
|
17
|
+
throw new Error(`Unknown emblem "${ref.slice(0, 60)}". Ids look like "ball:soccer" or "medal:gold/line"; see EMBLEM_IDS.`);
|
|
18
|
+
return parsed.style === undefined ? parsed.id : `${parsed.id}/${parsed.style}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A sprite sheet: every emblem in `ids` drawn once as a `<symbol>`, with the gradients and other definitions shared and every id unique across the sheet, and a `use(id, { size, class, title })` that returns the
|
|
22
|
+
* markup for one more of it. Put `sheet` in the page once; a bracket or a table that shows the same ball or medal fifty times then adds a few nodes each time, not the whole drawing. The symbols are drawn without the
|
|
23
|
+
* grain a large ball has by default (pass `grain: true` to keep it). `style`, `tint`, `accent` and `theme` are the sheet's, for every symbol; a different look is another sprite, or an id that names its style (`"medal:gold/line"`).
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { emblemSprite } from "@johnmorrisdotca/dougu-sports/emblems";
|
|
27
|
+
* const sprite = emblemSprite(["ball:soccer", "medal:gold"]);
|
|
28
|
+
* console.log(sprite.use("ball:soccer", { size: 24 }).startsWith("<svg"));
|
|
29
|
+
* // true
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function emblemSprite(ids, options) {
|
|
33
|
+
const keys = [...new Set(ids.map(keyOf))];
|
|
34
|
+
const { prefix: asked, ...drawn } = options ?? {};
|
|
35
|
+
const prefix = typeof asked === "string" && /^[A-Za-z][\w-]{0,31}$/.test(asked) ? asked : `dgs${hash(`${keys.join(",")}|${JSON.stringify(drawn)}`)}`;
|
|
36
|
+
const theme = drawn.theme === "dark" || drawn.theme === "light" || drawn.theme === "auto" ? drawn.theme : "inherit";
|
|
37
|
+
const space = new IdSpace(prefix);
|
|
38
|
+
const symbols = [];
|
|
39
|
+
const symbolOf = new Map();
|
|
40
|
+
for (const key of keys) {
|
|
41
|
+
const svg = renderEmblem(key, { ...drawn, theme: "inherit", title: false, locale: undefined, grain: drawn.grain ?? false });
|
|
42
|
+
const parts = partsOf(svg);
|
|
43
|
+
const name = `${prefix}-${key.replace(/[^a-z0-9]+/gi, "-").toLowerCase()}`;
|
|
44
|
+
symbolOf.set(key, name);
|
|
45
|
+
symbols.push(`<symbol id="${name}" viewBox="${escape(parts.box)}">${space.add(parts)}</symbol>`);
|
|
46
|
+
}
|
|
47
|
+
const rule = theme === "auto" ? `<style>@media(prefers-color-scheme:dark){svg.${prefix}{color:${EMBLEM_INK.dark}}}</style>` : "";
|
|
48
|
+
const sheet = `<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" style="position:absolute;width:0;height:0;overflow:hidden" aria-hidden="true" focusable="false">` +
|
|
49
|
+
`${rule}${space.defs.length === 0 ? "" : `<defs>${space.defs.join("")}</defs>`}${symbols.join("")}</svg>`;
|
|
50
|
+
const color = theme === "dark" ? EMBLEM_INK.dark : theme === "light" ? EMBLEM_INK.light : "";
|
|
51
|
+
const use = (ref, o) => {
|
|
52
|
+
const key = keyOf(ref);
|
|
53
|
+
const symbol = symbolOf.get(key);
|
|
54
|
+
if (symbol === undefined)
|
|
55
|
+
throw new Error(`"${key}" is not in this sprite; it holds ${keys.slice(0, 8).join(", ")}${keys.length > 8 ? ", …" : ""}.`);
|
|
56
|
+
const size = resolve({ size: o?.size }).size;
|
|
57
|
+
const classes = [theme === "auto" ? prefix : "", typeof o?.class === "string" ? o.class.trim() : ""].filter(Boolean).join(" ");
|
|
58
|
+
const { emblem } = emblemOf(ref);
|
|
59
|
+
const title = o?.title === false ? false : typeof o?.title === "string" && o.title.trim() !== "" ? o.title.trim().slice(0, 300) : o?.locale === "ja" ? emblem.ja : emblem.en;
|
|
60
|
+
const lang = o?.locale === "ja" && typeof o?.title !== "string" ? ' lang="ja"' : "";
|
|
61
|
+
return (`<svg width="${size}" height="${size}"${title === false ? ' aria-hidden="true"' : ` role="img"${lang}`}${classes === "" ? "" : ` class="${escape(classes)}"`}${color === "" ? "" : ` color="${color}"`}>` +
|
|
62
|
+
`${title === false ? "" : `<title>${escape(title)}</title>`}<use href="#${symbol}"/></svg>`);
|
|
63
|
+
};
|
|
64
|
+
return { sheet, use };
|
|
65
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type EmblemOptions } from "./emblem.core.ts";
|
|
2
|
+
import { type EmblemRef } from "./emblem.api.ts";
|
|
3
|
+
/** What `emblemDataUri` takes: the emblem's options, and the colour of the line. */
|
|
4
|
+
export interface DataUriOptions extends EmblemOptions {
|
|
5
|
+
/** The colour of the outline and of anything drawn in the ink: `#rgb`, `#rrggbb` or `rgb()`. It wins over `theme`. Anything else is ignored. */
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Text as the body of a data address: every character that could end an attribute, a quoted `url()` or an unquoted one is percent-encoded, and the rest is left alone. */
|
|
9
|
+
export declare function encodeSvg(svg: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* An emblem as a data address, `data:image/svg+xml;utf8,…`, with every character that could break an attribute or a CSS `url()` percent-encoded, so the string goes anywhere: `img.src`, `background-image:
|
|
12
|
+
* url("…")`, `new Image().src` for a canvas. The ink is settled for you, because `currentColor` does not cross an `<img>` boundary: `color` is the line's colour; without it `theme: "dark"` is pale ink, and `"light"`
|
|
13
|
+
* and `"inherit"` (the default) are dark ink. `theme: "auto"` keeps the page's colour scheme (`prefers-color-scheme`) in the image.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { emblemDataUri } from "@johnmorrisdotca/dougu-sports/emblems";
|
|
17
|
+
* const src = emblemDataUri("medal:gold", { size: 48 });
|
|
18
|
+
* console.log(src.startsWith("data:image/svg+xml;utf8,%3Csvg"));
|
|
19
|
+
* // true
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function emblemDataUri(ref: EmblemRef, options?: DataUriOptions): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// An emblem as a data address, for an `<img>`, a CSS background or a canvas. An image cannot inherit its page's text colour, so the colour is settled here: the line style, a pictogram and a Material
|
|
2
|
+
// icon are drawn in `currentColor`, and that becomes a concrete colour.
|
|
3
|
+
import { EMBLEM_INK, hexOf, readColour } from "./emblem.core.js";
|
|
4
|
+
import { renderEmblem } from "./emblem.api.js";
|
|
5
|
+
/** Text as the body of a data address: every character that could end an attribute, a quoted `url()` or an unquoted one is percent-encoded, and the rest is left alone. */
|
|
6
|
+
export function encodeSvg(svg) {
|
|
7
|
+
return encodeURIComponent(svg).replace(/%(3A|2F|2C|3B|3D|40)/g, (_, hex) => String.fromCharCode(parseInt(hex, 16))).replace(/['()*!]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* An emblem as a data address, `data:image/svg+xml;utf8,…`, with every character that could break an attribute or a CSS `url()` percent-encoded, so the string goes anywhere: `img.src`, `background-image:
|
|
11
|
+
* url("…")`, `new Image().src` for a canvas. The ink is settled for you, because `currentColor` does not cross an `<img>` boundary: `color` is the line's colour; without it `theme: "dark"` is pale ink, and `"light"`
|
|
12
|
+
* and `"inherit"` (the default) are dark ink. `theme: "auto"` keeps the page's colour scheme (`prefers-color-scheme`) in the image.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { emblemDataUri } from "@johnmorrisdotca/dougu-sports/emblems";
|
|
16
|
+
* const src = emblemDataUri("medal:gold", { size: 48 });
|
|
17
|
+
* console.log(src.startsWith("data:image/svg+xml;utf8,%3Csvg"));
|
|
18
|
+
* // true
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function emblemDataUri(ref, options) {
|
|
22
|
+
const { color, ...rest } = options ?? {};
|
|
23
|
+
const picked = readColour(color);
|
|
24
|
+
const ink = picked !== undefined ? hexOf(picked) : rest.theme === "dark" ? EMBLEM_INK.dark : rest.theme === "auto" ? undefined : EMBLEM_INK.light;
|
|
25
|
+
let svg = renderEmblem(ref, { ...rest, theme: ink === undefined ? "auto" : "inherit" });
|
|
26
|
+
// `currentColor` becomes the ink. A drawing that asked for `auto` keeps its colour-scheme rule, with the dark ink as its light default.
|
|
27
|
+
svg = ink === undefined ? svg.replace("<style>@media", `<style>svg{color:${EMBLEM_INK.light}}@media`) : svg.replace(/currentColor/g, ink);
|
|
28
|
+
return `data:image/svg+xml;utf8,${encodeSvg(svg)}`;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GEAR_BADMINTON_RACKET: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// A badminton racket and a shuttlecock, drawn for this package: an oval strung head on a slender frame, a T-shaped throat and a grip, and a feathered shuttlecock on its cork.
|
|
2
|
+
import { capsule, drawn, ellipse, seg, strings } from "./gear.core.js";
|
|
3
|
+
const T = "rotate(34 32 32)";
|
|
4
|
+
const S = "translate(50.5 50) rotate(48) scale(.95) translate(-32 -13)";
|
|
5
|
+
export const GEAR_BADMINTON_RACKET = /* @__PURE__ */ drawn("gear:badminton-racket", "Badminton racket", "バドミントンのラケット", {
|
|
6
|
+
main: "#2f8fe0",
|
|
7
|
+
accent: "#2a2f38",
|
|
8
|
+
parts: [
|
|
9
|
+
{ d: strings(32, 15, 10.4, 13.4, 3.1), fill: "none", stroke: "#9aa7b6", w: 0.6, t: T },
|
|
10
|
+
{ d: ellipse(32, 15, 11, 14), fill: "none", stroke: "$main", w: 2.6, t: T },
|
|
11
|
+
{ d: "M24.2 24.6L30.6 36M39.8 24.6L33.4 36", fill: "none", stroke: "$main", w: 2.2, t: T },
|
|
12
|
+
{ d: capsule(32, 34, 32, 50, 2.2), fill: "#aeb6c0", t: T, cyl: 0.9, shade: 0 },
|
|
13
|
+
{ d: capsule(32, 46, 32, 62, 4.4), fill: "$accent", t: T, cyl: 0.8, shade: 0 },
|
|
14
|
+
{ d: seg(30, 52, 34, 52) + seg(30, 56, 34, 56), fill: "none", stroke: "#6a7482", w: 0.7, t: T, line: "none" },
|
|
15
|
+
{ d: "M28.4 20L24 4Q32 1 40 4L35.6 20z", fill: "#f4f6f8", stroke: "#9aa7b6", t: S, shade: 0.8 },
|
|
16
|
+
{ d: "M29.6 19L27 5M32 19.4V3.4M34.4 19L37 5", fill: "none", stroke: "#9aa7b6", w: 0.7, t: S, line: "none" },
|
|
17
|
+
{ d: "M27.6 20h8.8a4.4 4.4 0 0 1-8.8 0z", fill: "#e8cf9a", t: S, shade: 0.9 },
|
|
18
|
+
],
|
|
19
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GEAR_BASEBALL_GLOVE: import("./gear.index.ts").Piece<import("./gear.core.ts").GearSpec>;
|