@autumnsgrove/groveengine 0.7.0 → 0.8.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/dist/ui/components/content/RoadmapPreview.svelte +91 -0
- package/dist/ui/components/content/RoadmapPreview.svelte.d.ts +36 -0
- package/dist/ui/components/content/index.d.ts +1 -0
- package/dist/ui/components/content/index.js +1 -0
- package/dist/ui/components/nature/Logo.svelte +224 -0
- package/dist/ui/components/nature/Logo.svelte.d.ts +14 -0
- package/dist/ui/components/nature/botanical/Acorn.svelte +48 -0
- package/dist/ui/components/nature/botanical/Acorn.svelte.d.ts +8 -0
- package/dist/ui/components/nature/botanical/Berry.svelte +67 -0
- package/dist/ui/components/nature/botanical/Berry.svelte.d.ts +8 -0
- package/dist/ui/components/nature/botanical/DandelionPuff.svelte +98 -0
- package/dist/ui/components/nature/botanical/DandelionPuff.svelte.d.ts +8 -0
- package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte +170 -0
- package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte.d.ts +35 -0
- package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte +174 -0
- package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte.d.ts +25 -0
- package/dist/ui/components/nature/botanical/Leaf.svelte +77 -0
- package/dist/ui/components/nature/botanical/Leaf.svelte.d.ts +10 -0
- package/dist/ui/components/nature/botanical/LeafFalling.svelte +186 -0
- package/dist/ui/components/nature/botanical/LeafFalling.svelte.d.ts +22 -0
- package/dist/ui/components/nature/botanical/PetalFalling.svelte +266 -0
- package/dist/ui/components/nature/botanical/PetalFalling.svelte.d.ts +25 -0
- package/dist/ui/components/nature/botanical/PineCone.svelte +61 -0
- package/dist/ui/components/nature/botanical/PineCone.svelte.d.ts +7 -0
- package/dist/ui/components/nature/botanical/Vine.svelte +102 -0
- package/dist/ui/components/nature/botanical/Vine.svelte.d.ts +11 -0
- package/dist/ui/components/nature/botanical/index.d.ts +10 -0
- package/dist/ui/components/nature/botanical/index.js +11 -0
- package/dist/ui/components/nature/creatures/Bee.svelte +78 -0
- package/dist/ui/components/nature/creatures/Bee.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Bird.svelte +94 -0
- package/dist/ui/components/nature/creatures/Bird.svelte.d.ts +11 -0
- package/dist/ui/components/nature/creatures/BirdFlying.svelte +83 -0
- package/dist/ui/components/nature/creatures/BirdFlying.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Bluebird.svelte +95 -0
- package/dist/ui/components/nature/creatures/Bluebird.svelte.d.ts +12 -0
- package/dist/ui/components/nature/creatures/Butterfly.svelte +87 -0
- package/dist/ui/components/nature/creatures/Butterfly.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Cardinal.svelte +95 -0
- package/dist/ui/components/nature/creatures/Cardinal.svelte.d.ts +12 -0
- package/dist/ui/components/nature/creatures/Chickadee.svelte +97 -0
- package/dist/ui/components/nature/creatures/Chickadee.svelte.d.ts +12 -0
- package/dist/ui/components/nature/creatures/Deer.svelte +95 -0
- package/dist/ui/components/nature/creatures/Deer.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Firefly.svelte +111 -0
- package/dist/ui/components/nature/creatures/Firefly.svelte.d.ts +10 -0
- package/dist/ui/components/nature/creatures/Owl.svelte +91 -0
- package/dist/ui/components/nature/creatures/Owl.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Rabbit.svelte +90 -0
- package/dist/ui/components/nature/creatures/Rabbit.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/Robin.svelte +98 -0
- package/dist/ui/components/nature/creatures/Robin.svelte.d.ts +12 -0
- package/dist/ui/components/nature/creatures/Squirrel.svelte +97 -0
- package/dist/ui/components/nature/creatures/Squirrel.svelte.d.ts +9 -0
- package/dist/ui/components/nature/creatures/index.d.ts +13 -0
- package/dist/ui/components/nature/creatures/index.js +14 -0
- package/dist/ui/components/nature/ground/Bush.svelte +57 -0
- package/dist/ui/components/nature/ground/Bush.svelte.d.ts +10 -0
- package/dist/ui/components/nature/ground/Crocus.svelte +83 -0
- package/dist/ui/components/nature/ground/Crocus.svelte.d.ts +12 -0
- package/dist/ui/components/nature/ground/Daffodil.svelte +75 -0
- package/dist/ui/components/nature/ground/Daffodil.svelte.d.ts +11 -0
- package/dist/ui/components/nature/ground/Fern.svelte +72 -0
- package/dist/ui/components/nature/ground/Fern.svelte.d.ts +10 -0
- package/dist/ui/components/nature/ground/FlowerWild.svelte +60 -0
- package/dist/ui/components/nature/ground/FlowerWild.svelte.d.ts +10 -0
- package/dist/ui/components/nature/ground/GrassTuft.svelte +49 -0
- package/dist/ui/components/nature/ground/GrassTuft.svelte.d.ts +10 -0
- package/dist/ui/components/nature/ground/Log.svelte +42 -0
- package/dist/ui/components/nature/ground/Log.svelte.d.ts +7 -0
- package/dist/ui/components/nature/ground/Mushroom.svelte +48 -0
- package/dist/ui/components/nature/ground/Mushroom.svelte.d.ts +9 -0
- package/dist/ui/components/nature/ground/MushroomCluster.svelte +41 -0
- package/dist/ui/components/nature/ground/MushroomCluster.svelte.d.ts +8 -0
- package/dist/ui/components/nature/ground/Rock.svelte +59 -0
- package/dist/ui/components/nature/ground/Rock.svelte.d.ts +8 -0
- package/dist/ui/components/nature/ground/Stump.svelte +44 -0
- package/dist/ui/components/nature/ground/Stump.svelte.d.ts +8 -0
- package/dist/ui/components/nature/ground/Tulip.svelte +79 -0
- package/dist/ui/components/nature/ground/Tulip.svelte.d.ts +11 -0
- package/dist/ui/components/nature/ground/index.d.ts +12 -0
- package/dist/ui/components/nature/ground/index.js +13 -0
- package/dist/ui/components/nature/index.d.ts +28 -0
- package/dist/ui/components/nature/index.js +38 -0
- package/dist/ui/components/nature/palette.d.ts +491 -0
- package/dist/ui/components/nature/palette.js +384 -0
- package/dist/ui/components/nature/sky/Cloud.svelte +122 -0
- package/dist/ui/components/nature/sky/Cloud.svelte.d.ts +11 -0
- package/dist/ui/components/nature/sky/CloudWispy.svelte +79 -0
- package/dist/ui/components/nature/sky/CloudWispy.svelte.d.ts +9 -0
- package/dist/ui/components/nature/sky/Moon.svelte +60 -0
- package/dist/ui/components/nature/sky/Moon.svelte.d.ts +9 -0
- package/dist/ui/components/nature/sky/Rainbow.svelte +101 -0
- package/dist/ui/components/nature/sky/Rainbow.svelte.d.ts +8 -0
- package/dist/ui/components/nature/sky/Star.svelte +84 -0
- package/dist/ui/components/nature/sky/Star.svelte.d.ts +10 -0
- package/dist/ui/components/nature/sky/StarCluster.svelte +85 -0
- package/dist/ui/components/nature/sky/StarCluster.svelte.d.ts +9 -0
- package/dist/ui/components/nature/sky/StarShooting.svelte +90 -0
- package/dist/ui/components/nature/sky/StarShooting.svelte.d.ts +9 -0
- package/dist/ui/components/nature/sky/Sun.svelte +70 -0
- package/dist/ui/components/nature/sky/Sun.svelte.d.ts +9 -0
- package/dist/ui/components/nature/sky/index.d.ts +8 -0
- package/dist/ui/components/nature/sky/index.js +9 -0
- package/dist/ui/components/nature/structural/Birdhouse.svelte +53 -0
- package/dist/ui/components/nature/structural/Birdhouse.svelte.d.ts +8 -0
- package/dist/ui/components/nature/structural/Bridge.svelte +65 -0
- package/dist/ui/components/nature/structural/Bridge.svelte.d.ts +7 -0
- package/dist/ui/components/nature/structural/FencePost.svelte +54 -0
- package/dist/ui/components/nature/structural/FencePost.svelte.d.ts +8 -0
- package/dist/ui/components/nature/structural/GardenGate.svelte +70 -0
- package/dist/ui/components/nature/structural/GardenGate.svelte.d.ts +8 -0
- package/dist/ui/components/nature/structural/Lantern.svelte +113 -0
- package/dist/ui/components/nature/structural/Lantern.svelte.d.ts +10 -0
- package/dist/ui/components/nature/structural/Lattice.svelte +89 -0
- package/dist/ui/components/nature/structural/Lattice.svelte.d.ts +8 -0
- package/dist/ui/components/nature/structural/LatticeWithVine.svelte +89 -0
- package/dist/ui/components/nature/structural/LatticeWithVine.svelte.d.ts +11 -0
- package/dist/ui/components/nature/structural/StonePath.svelte +48 -0
- package/dist/ui/components/nature/structural/StonePath.svelte.d.ts +7 -0
- package/dist/ui/components/nature/structural/index.d.ts +8 -0
- package/dist/ui/components/nature/structural/index.js +9 -0
- package/dist/ui/components/nature/trees/TreeAspen.svelte +163 -0
- package/dist/ui/components/nature/trees/TreeAspen.svelte.d.ts +11 -0
- package/dist/ui/components/nature/trees/TreeBirch.svelte +186 -0
- package/dist/ui/components/nature/trees/TreeBirch.svelte.d.ts +11 -0
- package/dist/ui/components/nature/trees/TreeCherry.svelte +108 -0
- package/dist/ui/components/nature/trees/TreeCherry.svelte.d.ts +11 -0
- package/dist/ui/components/nature/trees/TreePine.svelte +79 -0
- package/dist/ui/components/nature/trees/TreePine.svelte.d.ts +11 -0
- package/dist/ui/components/nature/trees/index.d.ts +4 -0
- package/dist/ui/components/nature/trees/index.js +5 -0
- package/dist/ui/components/nature/water/LilyPad.svelte +99 -0
- package/dist/ui/components/nature/water/LilyPad.svelte.d.ts +10 -0
- package/dist/ui/components/nature/water/Pond.svelte +104 -0
- package/dist/ui/components/nature/water/Pond.svelte.d.ts +8 -0
- package/dist/ui/components/nature/water/Reeds.svelte +85 -0
- package/dist/ui/components/nature/water/Reeds.svelte.d.ts +11 -0
- package/dist/ui/components/nature/water/Stream.svelte +98 -0
- package/dist/ui/components/nature/water/Stream.svelte.d.ts +8 -0
- package/dist/ui/components/nature/water/index.d.ts +4 -0
- package/dist/ui/components/nature/water/index.js +5 -0
- package/dist/ui/components/nature/weather/SnowfallLayer.svelte +175 -0
- package/dist/ui/components/nature/weather/SnowfallLayer.svelte.d.ts +25 -0
- package/dist/ui/components/nature/weather/Snowflake.svelte +99 -0
- package/dist/ui/components/nature/weather/Snowflake.svelte.d.ts +11 -0
- package/dist/ui/components/nature/weather/SnowflakeFalling.svelte +162 -0
- package/dist/ui/components/nature/weather/SnowflakeFalling.svelte.d.ts +23 -0
- package/dist/ui/components/nature/weather/index.d.ts +3 -0
- package/dist/ui/components/nature/weather/index.js +4 -0
- package/dist/ui/components/ui/GlassLogo.svelte +422 -0
- package/dist/ui/components/ui/GlassLogo.svelte.d.ts +23 -0
- package/dist/ui/components/ui/GlassNavbar.svelte +120 -0
- package/dist/ui/components/ui/GlassNavbar.svelte.d.ts +42 -0
- package/dist/ui/components/ui/Logo.svelte +47 -52
- package/dist/ui/components/ui/Logo.svelte.d.ts +4 -3
- package/dist/ui/components/ui/index.d.ts +2 -0
- package/dist/ui/components/ui/index.js +2 -0
- package/dist/ui/styles/grove.css +15 -1
- package/package.json +11 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { earth, bark, natural } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
furColor?: string;
|
|
12
|
+
animate?: boolean;
|
|
13
|
+
facing?: 'left' | 'right';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
class: className = 'w-12 h-12',
|
|
18
|
+
furColor,
|
|
19
|
+
animate = true,
|
|
20
|
+
facing = 'right'
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
|
|
23
|
+
const fur = $derived(furColor ?? earth.clay);
|
|
24
|
+
const darkFur = $derived(bark.bark);
|
|
25
|
+
const lightFur = $derived(natural.cream);
|
|
26
|
+
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<!-- Standing deer -->
|
|
30
|
+
<svg
|
|
31
|
+
class={className}
|
|
32
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
33
|
+
viewBox="0 0 80 100"
|
|
34
|
+
style="transform: scaleX({scaleX})"
|
|
35
|
+
>
|
|
36
|
+
<!-- Back legs -->
|
|
37
|
+
<path fill={fur} d="M20 65 L18 95 L24 95 L26 70 Q23 67 20 65" />
|
|
38
|
+
<path fill={fur} d="M30 68 L28 95 L34 95 L36 72 Q33 69 30 68" />
|
|
39
|
+
|
|
40
|
+
<!-- Body -->
|
|
41
|
+
<ellipse fill={fur} cx="35" cy="55" rx="22" ry="16" />
|
|
42
|
+
|
|
43
|
+
<!-- Front legs -->
|
|
44
|
+
<path fill={fur} d="M48 65 L46 95 L52 95 L54 68 Q51 65 48 65" />
|
|
45
|
+
<path fill={fur} d="M55 62 L55 95 L61 95 L61 65 Q58 62 55 62" />
|
|
46
|
+
|
|
47
|
+
<!-- Chest -->
|
|
48
|
+
<ellipse fill={lightFur} cx="52" cy="58" rx="8" ry="10" opacity="0.6" />
|
|
49
|
+
|
|
50
|
+
<!-- Neck -->
|
|
51
|
+
<path fill={fur} d="M50 50 Q55 35 52 25 Q60 30 65 45 Q58 52 50 50" />
|
|
52
|
+
|
|
53
|
+
<!-- Head -->
|
|
54
|
+
<ellipse fill={fur} cx="52" cy="22" rx="12" ry="10" />
|
|
55
|
+
|
|
56
|
+
<!-- Snout -->
|
|
57
|
+
<ellipse fill={darkFur} cx="62" cy="25" rx="6" ry="5" />
|
|
58
|
+
<ellipse fill="#1a1a1a" cx="66" cy="24" rx="1.5" ry="1" />
|
|
59
|
+
|
|
60
|
+
<!-- Ears -->
|
|
61
|
+
<g class={animate ? 'ear-flick' : ''}>
|
|
62
|
+
<ellipse fill={fur} cx="45" cy="12" rx="5" ry="8" transform="rotate(-30 45 12)" />
|
|
63
|
+
<ellipse fill={lightFur} cx="45" cy="12" rx="2.5" ry="5" transform="rotate(-30 45 12)" />
|
|
64
|
+
</g>
|
|
65
|
+
<ellipse fill={fur} cx="55" cy="10" rx="5" ry="8" transform="rotate(10 55 10)" />
|
|
66
|
+
<ellipse fill={lightFur} cx="55" cy="10" rx="2.5" ry="5" transform="rotate(10 55 10)" />
|
|
67
|
+
|
|
68
|
+
<!-- Eye -->
|
|
69
|
+
<circle fill="#1a1a1a" cx="55" cy="20" r="2" />
|
|
70
|
+
<circle fill="white" cx="55.5" cy="19.5" r="0.8" />
|
|
71
|
+
|
|
72
|
+
<!-- Spots (fawn pattern) -->
|
|
73
|
+
<circle fill={lightFur} cx="25" cy="52" r="2" opacity="0.4" />
|
|
74
|
+
<circle fill={lightFur} cx="32" cy="48" r="1.5" opacity="0.4" />
|
|
75
|
+
<circle fill={lightFur} cx="40" cy="55" r="2" opacity="0.4" />
|
|
76
|
+
<circle fill={lightFur} cx="35" cy="60" r="1.5" opacity="0.4" />
|
|
77
|
+
|
|
78
|
+
<!-- Tail -->
|
|
79
|
+
<ellipse fill={fur} cx="13" cy="52" rx="4" ry="6" />
|
|
80
|
+
<ellipse fill={lightFur} cx="12" cy="53" rx="2" ry="4" />
|
|
81
|
+
</svg>
|
|
82
|
+
|
|
83
|
+
<style>
|
|
84
|
+
@keyframes ear-flick {
|
|
85
|
+
0%, 85%, 100% { transform: rotate(-30deg); }
|
|
86
|
+
88% { transform: rotate(-20deg); }
|
|
87
|
+
91% { transform: rotate(-35deg); }
|
|
88
|
+
94% { transform: rotate(-28deg); }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ear-flick {
|
|
92
|
+
transform-origin: center bottom;
|
|
93
|
+
animation: ear-flick 5s ease-in-out infinite;
|
|
94
|
+
}
|
|
95
|
+
</style>
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { accents, greens } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
glowColor?: string;
|
|
12
|
+
bodyColor?: string;
|
|
13
|
+
animate?: boolean;
|
|
14
|
+
intensity?: 'subtle' | 'normal' | 'bright';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
class: className = 'w-3 h-3',
|
|
19
|
+
glowColor,
|
|
20
|
+
bodyColor,
|
|
21
|
+
animate = true,
|
|
22
|
+
intensity = 'normal'
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
const glow = $derived(glowColor ?? accents.firefly.glow);
|
|
26
|
+
const body = $derived(bodyColor ?? accents.firefly.body);
|
|
27
|
+
|
|
28
|
+
const glowOpacity = $derived({
|
|
29
|
+
subtle: 0.4,
|
|
30
|
+
normal: 0.6,
|
|
31
|
+
bright: 0.8
|
|
32
|
+
}[intensity]);
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<!-- Firefly with glowing abdomen -->
|
|
36
|
+
<svg class="{className} {animate ? 'float' : ''}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
|
|
37
|
+
<!-- Outer glow -->
|
|
38
|
+
<circle
|
|
39
|
+
fill={glow}
|
|
40
|
+
cx="15"
|
|
41
|
+
cy="18"
|
|
42
|
+
r="12"
|
|
43
|
+
opacity={glowOpacity}
|
|
44
|
+
class={animate ? 'pulse' : ''}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
<!-- Inner glow -->
|
|
48
|
+
<circle
|
|
49
|
+
fill={glow}
|
|
50
|
+
cx="15"
|
|
51
|
+
cy="18"
|
|
52
|
+
r="7"
|
|
53
|
+
opacity={glowOpacity + 0.2}
|
|
54
|
+
class={animate ? 'pulse-inner' : ''}
|
|
55
|
+
/>
|
|
56
|
+
|
|
57
|
+
<!-- Body -->
|
|
58
|
+
<ellipse fill={body} cx="15" cy="12" rx="3" ry="4" />
|
|
59
|
+
|
|
60
|
+
<!-- Glowing abdomen -->
|
|
61
|
+
<ellipse fill={glow} cx="15" cy="18" rx="4" ry="5" class={animate ? 'glow' : ''} />
|
|
62
|
+
|
|
63
|
+
<!-- Wings (subtle) -->
|
|
64
|
+
<ellipse fill={greens.pale} cx="11" cy="10" rx="4" ry="2" opacity="0.3" transform="rotate(-20 11 10)" />
|
|
65
|
+
<ellipse fill={greens.pale} cx="19" cy="10" rx="4" ry="2" opacity="0.3" transform="rotate(20 19 10)" />
|
|
66
|
+
|
|
67
|
+
<!-- Antennae -->
|
|
68
|
+
<path fill="none" stroke={body} stroke-width="0.5" d="M13 8 Q11 4 10 3" />
|
|
69
|
+
<path fill="none" stroke={body} stroke-width="0.5" d="M17 8 Q19 4 20 3" />
|
|
70
|
+
</svg>
|
|
71
|
+
|
|
72
|
+
<style>
|
|
73
|
+
@keyframes float {
|
|
74
|
+
0%, 100% { transform: translateY(0) translateX(0); }
|
|
75
|
+
25% { transform: translateY(-3px) translateX(2px); }
|
|
76
|
+
50% { transform: translateY(-1px) translateX(-1px); }
|
|
77
|
+
75% { transform: translateY(-4px) translateX(1px); }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@keyframes pulse {
|
|
81
|
+
0%, 100% { opacity: 0.4; }
|
|
82
|
+
50% { opacity: 0.7; }
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@keyframes pulse-inner {
|
|
86
|
+
0%, 100% { opacity: 0.6; }
|
|
87
|
+
50% { opacity: 0.9; }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@keyframes glow {
|
|
91
|
+
0%, 100% { filter: brightness(1); }
|
|
92
|
+
50% { filter: brightness(1.3); }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.float {
|
|
96
|
+
animation: float 4s ease-in-out infinite;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.pulse {
|
|
100
|
+
animation: pulse 2s ease-in-out infinite;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.pulse-inner {
|
|
104
|
+
animation: pulse-inner 2s ease-in-out infinite;
|
|
105
|
+
animation-delay: 0.2s;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.glow {
|
|
109
|
+
animation: glow 2s ease-in-out infinite;
|
|
110
|
+
}
|
|
111
|
+
</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
class?: string;
|
|
3
|
+
glowColor?: string;
|
|
4
|
+
bodyColor?: string;
|
|
5
|
+
animate?: boolean;
|
|
6
|
+
intensity?: 'subtle' | 'normal' | 'bright';
|
|
7
|
+
}
|
|
8
|
+
declare const Firefly: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Firefly = ReturnType<typeof Firefly>;
|
|
10
|
+
export default Firefly;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { bark, earth, accents } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
featherColor?: string;
|
|
12
|
+
animate?: boolean;
|
|
13
|
+
facing?: 'left' | 'right';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
class: className = 'w-8 h-10',
|
|
18
|
+
featherColor,
|
|
19
|
+
animate = true,
|
|
20
|
+
facing = 'right'
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
|
|
23
|
+
const feathers = $derived(featherColor ?? bark.bark);
|
|
24
|
+
const lightFeathers = $derived(earth.clay);
|
|
25
|
+
const eyeColor = $derived(accents.flower.yellow);
|
|
26
|
+
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<!-- Perched owl -->
|
|
30
|
+
<svg
|
|
31
|
+
class={className}
|
|
32
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
33
|
+
viewBox="0 0 50 70"
|
|
34
|
+
style="transform: scaleX({scaleX})"
|
|
35
|
+
>
|
|
36
|
+
<!-- Body -->
|
|
37
|
+
<ellipse fill={feathers} cx="25" cy="45" rx="18" ry="20" />
|
|
38
|
+
|
|
39
|
+
<!-- Chest pattern -->
|
|
40
|
+
<ellipse fill={lightFeathers} cx="25" cy="48" rx="12" ry="15" />
|
|
41
|
+
<!-- Chest feather lines -->
|
|
42
|
+
<path fill="none" stroke={feathers} stroke-width="0.5" d="M18 40 Q25 42 32 40" opacity="0.5" />
|
|
43
|
+
<path fill="none" stroke={feathers} stroke-width="0.5" d="M16 46 Q25 48 34 46" opacity="0.5" />
|
|
44
|
+
<path fill="none" stroke={feathers} stroke-width="0.5" d="M17 52 Q25 54 33 52" opacity="0.5" />
|
|
45
|
+
<path fill="none" stroke={feathers} stroke-width="0.5" d="M18 58 Q25 60 32 58" opacity="0.5" />
|
|
46
|
+
|
|
47
|
+
<!-- Head -->
|
|
48
|
+
<circle fill={feathers} cx="25" cy="20" r="16" />
|
|
49
|
+
|
|
50
|
+
<!-- Ear tufts -->
|
|
51
|
+
<path fill={feathers} d="M12 10 Q8 2 12 0 Q14 5 16 10" />
|
|
52
|
+
<path fill={feathers} d="M38 10 Q42 2 38 0 Q36 5 34 10" />
|
|
53
|
+
|
|
54
|
+
<!-- Facial disc -->
|
|
55
|
+
<circle fill={lightFeathers} cx="25" cy="22" r="12" />
|
|
56
|
+
|
|
57
|
+
<!-- Eyes -->
|
|
58
|
+
<g class={animate ? 'blink' : ''}>
|
|
59
|
+
<circle fill={eyeColor} cx="18" cy="20" r="5" />
|
|
60
|
+
<circle fill="#1a1a1a" cx="18" cy="20" r="3" />
|
|
61
|
+
<circle fill="white" cx="19" cy="19" r="1" />
|
|
62
|
+
|
|
63
|
+
<circle fill={eyeColor} cx="32" cy="20" r="5" />
|
|
64
|
+
<circle fill="#1a1a1a" cx="32" cy="20" r="3" />
|
|
65
|
+
<circle fill="white" cx="33" cy="19" r="1" />
|
|
66
|
+
</g>
|
|
67
|
+
|
|
68
|
+
<!-- Beak -->
|
|
69
|
+
<path fill={bark.warmBark} d="M25 24 L22 28 L25 32 L28 28 Z" />
|
|
70
|
+
|
|
71
|
+
<!-- Feet -->
|
|
72
|
+
<path fill={bark.warmBark} d="M18 64 L15 70 M18 64 L18 70 M18 64 L21 70" stroke={bark.warmBark} stroke-width="1.5" />
|
|
73
|
+
<path fill={bark.warmBark} d="M32 64 L29 70 M32 64 L32 70 M32 64 L35 70" stroke={bark.warmBark} stroke-width="1.5" />
|
|
74
|
+
|
|
75
|
+
<!-- Wing hints -->
|
|
76
|
+
<path fill={feathers} d="M8 35 Q5 45 8 55 Q12 50 12 40 Q10 35 8 35" opacity="0.7" />
|
|
77
|
+
<path fill={feathers} d="M42 35 Q45 45 42 55 Q38 50 38 40 Q40 35 42 35" opacity="0.7" />
|
|
78
|
+
</svg>
|
|
79
|
+
|
|
80
|
+
<style>
|
|
81
|
+
@keyframes blink {
|
|
82
|
+
0%, 94%, 100% { transform: scaleY(1); }
|
|
83
|
+
96% { transform: scaleY(0.1); }
|
|
84
|
+
98% { transform: scaleY(1); }
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.blink {
|
|
88
|
+
transform-origin: center center;
|
|
89
|
+
animation: blink 4s ease-in-out infinite;
|
|
90
|
+
}
|
|
91
|
+
</style>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { earth, natural } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
furColor?: string;
|
|
12
|
+
animate?: boolean;
|
|
13
|
+
facing?: 'left' | 'right';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
class: className = 'w-8 h-8',
|
|
18
|
+
furColor,
|
|
19
|
+
animate = true,
|
|
20
|
+
facing = 'right'
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
|
|
23
|
+
const fur = $derived(furColor ?? earth.clay);
|
|
24
|
+
const innerEar = $derived(natural.cream);
|
|
25
|
+
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<!-- Sitting rabbit -->
|
|
29
|
+
<svg
|
|
30
|
+
class={className}
|
|
31
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
32
|
+
viewBox="0 0 50 60"
|
|
33
|
+
style="transform: scaleX({scaleX})"
|
|
34
|
+
>
|
|
35
|
+
<!-- Back leg -->
|
|
36
|
+
<ellipse fill={fur} cx="15" cy="50" rx="10" ry="8" />
|
|
37
|
+
|
|
38
|
+
<!-- Body -->
|
|
39
|
+
<ellipse fill={fur} cx="22" cy="42" rx="14" ry="12" />
|
|
40
|
+
|
|
41
|
+
<!-- Front leg -->
|
|
42
|
+
<ellipse fill={fur} cx="32" cy="52" rx="5" ry="7" />
|
|
43
|
+
|
|
44
|
+
<!-- Head -->
|
|
45
|
+
<circle fill={fur} cx="35" cy="28" r="12" />
|
|
46
|
+
|
|
47
|
+
<!-- Ears -->
|
|
48
|
+
<g class={animate ? 'ear-twitch' : ''}>
|
|
49
|
+
<ellipse fill={fur} cx="30" cy="10" rx="4" ry="12" />
|
|
50
|
+
<ellipse fill={innerEar} cx="30" cy="10" rx="2" ry="8" />
|
|
51
|
+
</g>
|
|
52
|
+
<g class={animate ? 'ear-twitch-delay' : ''}>
|
|
53
|
+
<ellipse fill={fur} cx="40" cy="8" rx="4" ry="12" transform="rotate(15 40 8)" />
|
|
54
|
+
<ellipse fill={innerEar} cx="40" cy="8" rx="2" ry="8" transform="rotate(15 40 8)" />
|
|
55
|
+
</g>
|
|
56
|
+
|
|
57
|
+
<!-- Eye -->
|
|
58
|
+
<circle fill="#1a1a1a" cx="40" cy="26" r="2.5" />
|
|
59
|
+
<circle fill="white" cx="41" cy="25" r="1" />
|
|
60
|
+
|
|
61
|
+
<!-- Nose -->
|
|
62
|
+
<ellipse fill={innerEar} cx="46" cy="30" rx="2" ry="1.5" />
|
|
63
|
+
|
|
64
|
+
<!-- Whiskers -->
|
|
65
|
+
<path fill="none" stroke={earth.stone} stroke-width="0.5" d="M46 30 L54 28" opacity="0.5" />
|
|
66
|
+
<path fill="none" stroke={earth.stone} stroke-width="0.5" d="M46 31 L54 31" opacity="0.5" />
|
|
67
|
+
<path fill="none" stroke={earth.stone} stroke-width="0.5" d="M46 32 L54 34" opacity="0.5" />
|
|
68
|
+
|
|
69
|
+
<!-- Tail -->
|
|
70
|
+
<circle fill={natural.cream} cx="8" cy="40" r="5" />
|
|
71
|
+
</svg>
|
|
72
|
+
|
|
73
|
+
<style>
|
|
74
|
+
@keyframes ear-twitch {
|
|
75
|
+
0%, 90%, 100% { transform: rotate(0deg); }
|
|
76
|
+
93% { transform: rotate(-5deg); }
|
|
77
|
+
96% { transform: rotate(3deg); }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.ear-twitch {
|
|
81
|
+
transform-origin: center bottom;
|
|
82
|
+
animation: ear-twitch 4s ease-in-out infinite;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.ear-twitch-delay {
|
|
86
|
+
transform-origin: center bottom;
|
|
87
|
+
animation: ear-twitch 4s ease-in-out infinite;
|
|
88
|
+
animation-delay: 0.1s;
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { bark, accents } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
style?: string;
|
|
12
|
+
bodyColor?: string;
|
|
13
|
+
breastColor?: string;
|
|
14
|
+
beakColor?: string;
|
|
15
|
+
animate?: boolean;
|
|
16
|
+
facing?: 'left' | 'right';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
class: className = 'w-6 h-6',
|
|
21
|
+
style,
|
|
22
|
+
bodyColor,
|
|
23
|
+
breastColor,
|
|
24
|
+
beakColor,
|
|
25
|
+
animate = true,
|
|
26
|
+
facing = 'right'
|
|
27
|
+
}: Props = $props();
|
|
28
|
+
|
|
29
|
+
// American Robin colors - from palette
|
|
30
|
+
const body = $derived(bodyColor ?? accents.bird.robinBody);
|
|
31
|
+
const wing = $derived(accents.bird.robinWing);
|
|
32
|
+
const wingDark = $derived(accents.bird.robinWingDark);
|
|
33
|
+
const breast = $derived(breastColor ?? accents.bird.robinBreast);
|
|
34
|
+
const breastLight = $derived(accents.bird.robinBreastLight);
|
|
35
|
+
const beak = $derived(beakColor ?? accents.bird.robinBeak);
|
|
36
|
+
const legColor = $derived(bark.darkBark);
|
|
37
|
+
|
|
38
|
+
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<!-- American Robin - herald of spring! -->
|
|
42
|
+
<svg
|
|
43
|
+
class="{className} {animate ? 'hop' : ''}"
|
|
44
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
45
|
+
viewBox="0 0 50 60"
|
|
46
|
+
style="transform: scaleX({scaleX}); {style ?? ''}"
|
|
47
|
+
>
|
|
48
|
+
<!-- Tail feathers - dark gray-brown -->
|
|
49
|
+
<path fill={body} d="M5 32 Q2 38 4 46 Q10 44 14 38 Q15 34 11 31 Q7 30 5 32" />
|
|
50
|
+
<path fill={wing} d="M6 34 Q4 40 5 44 Q9 42 11 38" opacity="0.5" />
|
|
51
|
+
|
|
52
|
+
<!-- Body - dark gray-brown upper -->
|
|
53
|
+
<ellipse fill={body} cx="22" cy="30" rx="14" ry="11" />
|
|
54
|
+
|
|
55
|
+
<!-- Wing - slightly darker with feather details -->
|
|
56
|
+
<path fill={wing} d="M9 26 Q5 32 8 40 Q15 38 19 32 Q17 25 9 26" />
|
|
57
|
+
<path fill={wingDark} d="M11 30 Q9 34 11 38 Q14 36 15 33 Q13 30 11 30" opacity="0.5" />
|
|
58
|
+
|
|
59
|
+
<!-- Breast - iconic orange-red -->
|
|
60
|
+
<ellipse fill={breast} cx="30" cy="34" rx="9" ry="10" />
|
|
61
|
+
<!-- Breast highlight -->
|
|
62
|
+
<ellipse fill={breastLight} cx="32" cy="32" rx="5" ry="6" opacity="0.4" />
|
|
63
|
+
|
|
64
|
+
<!-- Head - dark gray -->
|
|
65
|
+
<circle fill={body} cx="36" cy="18" r="9" />
|
|
66
|
+
|
|
67
|
+
<!-- White eye ring - Robin's distinctive feature -->
|
|
68
|
+
<circle fill="white" cx="40" cy="17" r="4" opacity="0.3" />
|
|
69
|
+
|
|
70
|
+
<!-- Eye -->
|
|
71
|
+
<circle fill="#1a1a1a" cx="40" cy="17" r="2.5" />
|
|
72
|
+
<!-- Eye highlight -->
|
|
73
|
+
<circle fill="white" cx="41" cy="16" r="0.8" />
|
|
74
|
+
|
|
75
|
+
<!-- Beak - yellow-orange, pointed -->
|
|
76
|
+
<path fill={beak} d="M44 18 L52 19 L44 22 Q43 20 44 18" />
|
|
77
|
+
<!-- Beak detail -->
|
|
78
|
+
<path fill="#d97706" d="M45 19 Q48 19 50 19.5" stroke="#b45309" stroke-width="0.3" />
|
|
79
|
+
|
|
80
|
+
<!-- Legs - dark -->
|
|
81
|
+
<g fill="none" stroke={legColor} stroke-width="1.5">
|
|
82
|
+
<path d="M22 41 L22 52 M20 50 L24 50" />
|
|
83
|
+
<path d="M28 41 L28 52 M26 50 L30 50" />
|
|
84
|
+
</g>
|
|
85
|
+
</svg>
|
|
86
|
+
|
|
87
|
+
<style>
|
|
88
|
+
@keyframes hop {
|
|
89
|
+
0%, 100% { transform: translateY(0); }
|
|
90
|
+
25% { transform: translateY(-3px); }
|
|
91
|
+
50% { transform: translateY(0); }
|
|
92
|
+
75% { transform: translateY(-2px); }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.hop {
|
|
96
|
+
animation: hop 1.8s ease-in-out infinite;
|
|
97
|
+
}
|
|
98
|
+
</style>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
class?: string;
|
|
3
|
+
style?: string;
|
|
4
|
+
bodyColor?: string;
|
|
5
|
+
breastColor?: string;
|
|
6
|
+
beakColor?: string;
|
|
7
|
+
animate?: boolean;
|
|
8
|
+
facing?: 'left' | 'right';
|
|
9
|
+
}
|
|
10
|
+
declare const Robin: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type Robin = ReturnType<typeof Robin>;
|
|
12
|
+
export default Robin;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Grove — A place to Be
|
|
3
|
+
Copyright (c) 2025 Autumn Brown
|
|
4
|
+
Licensed under AGPL-3.0
|
|
5
|
+
-->
|
|
6
|
+
<script lang="ts">
|
|
7
|
+
import { bark, earth } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
furColor?: string;
|
|
12
|
+
animate?: boolean;
|
|
13
|
+
facing?: 'left' | 'right';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
class: className = 'w-8 h-8',
|
|
18
|
+
furColor,
|
|
19
|
+
animate = true,
|
|
20
|
+
facing = 'right'
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
|
|
23
|
+
const fur = $derived(furColor ?? bark.warmBark);
|
|
24
|
+
const lightFur = $derived(earth.sand);
|
|
25
|
+
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<!-- Sitting squirrel -->
|
|
29
|
+
<svg
|
|
30
|
+
class={className}
|
|
31
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
32
|
+
viewBox="0 0 60 70"
|
|
33
|
+
style="transform: scaleX({scaleX})"
|
|
34
|
+
>
|
|
35
|
+
<!-- Tail (fluffy!) -->
|
|
36
|
+
<g class={animate ? 'tail-flick' : ''}>
|
|
37
|
+
<path
|
|
38
|
+
fill={fur}
|
|
39
|
+
d="M5 35 Q0 20 10 10 Q20 5 25 15 Q28 25 20 35 Q15 40 10 38 Q5 40 5 35"
|
|
40
|
+
/>
|
|
41
|
+
<path
|
|
42
|
+
fill={lightFur}
|
|
43
|
+
d="M10 30 Q8 22 15 15 Q20 12 22 18 Q23 24 18 30"
|
|
44
|
+
opacity="0.5"
|
|
45
|
+
/>
|
|
46
|
+
</g>
|
|
47
|
+
|
|
48
|
+
<!-- Back leg -->
|
|
49
|
+
<ellipse fill={fur} cx="25" cy="58" rx="10" ry="8" />
|
|
50
|
+
|
|
51
|
+
<!-- Body -->
|
|
52
|
+
<ellipse fill={fur} cx="32" cy="45" rx="14" ry="16" />
|
|
53
|
+
|
|
54
|
+
<!-- Belly -->
|
|
55
|
+
<ellipse fill={lightFur} cx="35" cy="48" rx="8" ry="10" />
|
|
56
|
+
|
|
57
|
+
<!-- Front paws (holding something) -->
|
|
58
|
+
<ellipse fill={fur} cx="42" cy="52" rx="4" ry="6" />
|
|
59
|
+
<ellipse fill={fur} cx="48" cy="50" rx="4" ry="5" />
|
|
60
|
+
|
|
61
|
+
<!-- Head -->
|
|
62
|
+
<circle fill={fur} cx="48" cy="32" r="12" />
|
|
63
|
+
|
|
64
|
+
<!-- Cheek -->
|
|
65
|
+
<ellipse fill={lightFur} cx="52" cy="36" rx="6" ry="5" />
|
|
66
|
+
|
|
67
|
+
<!-- Ears -->
|
|
68
|
+
<ellipse fill={fur} cx="42" cy="20" rx="4" ry="6" />
|
|
69
|
+
<ellipse fill={lightFur} cx="42" cy="20" rx="2" ry="4" />
|
|
70
|
+
<ellipse fill={fur} cx="52" cy="18" rx="4" ry="6" />
|
|
71
|
+
<ellipse fill={lightFur} cx="52" cy="18" rx="2" ry="4" />
|
|
72
|
+
|
|
73
|
+
<!-- Eye -->
|
|
74
|
+
<circle fill="#1a1a1a" cx="52" cy="30" r="3" />
|
|
75
|
+
<circle fill="white" cx="53" cy="29" r="1" />
|
|
76
|
+
|
|
77
|
+
<!-- Nose -->
|
|
78
|
+
<circle fill="#1a1a1a" cx="58" cy="34" r="2" />
|
|
79
|
+
|
|
80
|
+
<!-- Acorn (optional detail) -->
|
|
81
|
+
<ellipse fill={bark.bark} cx="45" cy="56" rx="3" ry="4" />
|
|
82
|
+
<path fill={bark.darkBark} d="M42 53 Q45 51 48 53 L48 54 Q45 52 42 54 Z" />
|
|
83
|
+
</svg>
|
|
84
|
+
|
|
85
|
+
<style>
|
|
86
|
+
@keyframes tail-flick {
|
|
87
|
+
0%, 80%, 100% { transform: rotate(0deg); }
|
|
88
|
+
85% { transform: rotate(5deg); }
|
|
89
|
+
90% { transform: rotate(-3deg); }
|
|
90
|
+
95% { transform: rotate(2deg); }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.tail-flick {
|
|
94
|
+
transform-origin: bottom right;
|
|
95
|
+
animation: tail-flick 3s ease-in-out infinite;
|
|
96
|
+
}
|
|
97
|
+
</style>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { default as Bee } from './Bee.svelte';
|
|
2
|
+
export { default as Bird } from './Bird.svelte';
|
|
3
|
+
export { default as BirdFlying } from './BirdFlying.svelte';
|
|
4
|
+
export { default as Bluebird } from './Bluebird.svelte';
|
|
5
|
+
export { default as Butterfly } from './Butterfly.svelte';
|
|
6
|
+
export { default as Cardinal } from './Cardinal.svelte';
|
|
7
|
+
export { default as Chickadee } from './Chickadee.svelte';
|
|
8
|
+
export { default as Deer } from './Deer.svelte';
|
|
9
|
+
export { default as Firefly } from './Firefly.svelte';
|
|
10
|
+
export { default as Owl } from './Owl.svelte';
|
|
11
|
+
export { default as Rabbit } from './Rabbit.svelte';
|
|
12
|
+
export { default as Robin } from './Robin.svelte';
|
|
13
|
+
export { default as Squirrel } from './Squirrel.svelte';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Creature components - animals and insects that bring the forest to life
|
|
2
|
+
export { default as Bee } from './Bee.svelte';
|
|
3
|
+
export { default as Bird } from './Bird.svelte';
|
|
4
|
+
export { default as BirdFlying } from './BirdFlying.svelte';
|
|
5
|
+
export { default as Bluebird } from './Bluebird.svelte';
|
|
6
|
+
export { default as Butterfly } from './Butterfly.svelte';
|
|
7
|
+
export { default as Cardinal } from './Cardinal.svelte';
|
|
8
|
+
export { default as Chickadee } from './Chickadee.svelte';
|
|
9
|
+
export { default as Deer } from './Deer.svelte';
|
|
10
|
+
export { default as Firefly } from './Firefly.svelte';
|
|
11
|
+
export { default as Owl } from './Owl.svelte';
|
|
12
|
+
export { default as Rabbit } from './Rabbit.svelte';
|
|
13
|
+
export { default as Robin } from './Robin.svelte';
|
|
14
|
+
export { default as Squirrel } from './Squirrel.svelte';
|