@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,54 @@
|
|
|
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 } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
variant?: 'pointed' | 'flat' | 'round';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
class: className = 'w-4 h-12',
|
|
17
|
+
color,
|
|
18
|
+
variant = 'pointed'
|
|
19
|
+
}: Props = $props();
|
|
20
|
+
|
|
21
|
+
const postColor = $derived(color ?? bark.warmBark);
|
|
22
|
+
const shadowColor = $derived(bark.darkBark);
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<!-- Fence post -->
|
|
26
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 70">
|
|
27
|
+
{#if variant === 'pointed'}
|
|
28
|
+
<!-- Pointed top post -->
|
|
29
|
+
<polygon fill={postColor} points="5,15 12.5,0 20,15" />
|
|
30
|
+
<rect fill={postColor} x="5" y="15" width="15" height="55" />
|
|
31
|
+
<!-- Shadow -->
|
|
32
|
+
<rect fill={shadowColor} x="17" y="15" width="3" height="55" opacity="0.2" />
|
|
33
|
+
<polygon fill={shadowColor} points="12.5,0 20,15 17,15 12.5,5" opacity="0.2" />
|
|
34
|
+
{:else if variant === 'flat'}
|
|
35
|
+
<!-- Flat top post -->
|
|
36
|
+
<rect fill={postColor} x="5" y="5" width="15" height="65" rx="1" />
|
|
37
|
+
<!-- Cap -->
|
|
38
|
+
<rect fill={postColor} x="3" y="5" width="19" height="4" rx="1" />
|
|
39
|
+
<!-- Shadow -->
|
|
40
|
+
<rect fill={shadowColor} x="17" y="9" width="3" height="61" opacity="0.2" />
|
|
41
|
+
{:else}
|
|
42
|
+
<!-- Round top post -->
|
|
43
|
+
<rect fill={postColor} x="5" y="12" width="15" height="58" />
|
|
44
|
+
<ellipse fill={postColor} cx="12.5" cy="12" rx="7.5" ry="5" />
|
|
45
|
+
<!-- Highlight on round top -->
|
|
46
|
+
<ellipse fill="white" cx="10" cy="10" rx="3" ry="2" opacity="0.15" />
|
|
47
|
+
<!-- Shadow -->
|
|
48
|
+
<rect fill={shadowColor} x="17" y="12" width="3" height="58" opacity="0.2" />
|
|
49
|
+
{/if}
|
|
50
|
+
|
|
51
|
+
<!-- Wood grain lines -->
|
|
52
|
+
<line x1="8" y1="20" x2="8" y2="65" stroke={shadowColor} stroke-width="0.5" opacity="0.3" />
|
|
53
|
+
<line x1="17" y1="25" x2="17" y2="60" stroke={shadowColor} stroke-width="0.5" opacity="0.2" />
|
|
54
|
+
</svg>
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
color?: string;
|
|
12
|
+
open?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
class: className = 'w-16 h-16',
|
|
17
|
+
color,
|
|
18
|
+
open = false
|
|
19
|
+
}: Props = $props();
|
|
20
|
+
|
|
21
|
+
const gateColor = $derived(color ?? bark.warmBark);
|
|
22
|
+
const postColor = $derived(bark.bark);
|
|
23
|
+
const hingeColor = $derived(earth.stone);
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<!-- Garden gate with posts -->
|
|
27
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
28
|
+
<!-- Left post -->
|
|
29
|
+
<rect fill={postColor} x="5" y="10" width="10" height="90" />
|
|
30
|
+
<rect fill={bark.darkBark} x="5" y="10" width="10" height="5" />
|
|
31
|
+
<!-- Post cap -->
|
|
32
|
+
<polygon fill={postColor} points="0,15 10,5 20,15" />
|
|
33
|
+
|
|
34
|
+
<!-- Right post -->
|
|
35
|
+
<rect fill={postColor} x="85" y="10" width="10" height="90" />
|
|
36
|
+
<rect fill={bark.darkBark} x="85" y="10" width="10" height="5" />
|
|
37
|
+
<!-- Post cap -->
|
|
38
|
+
<polygon fill={postColor} points="80,15 90,5 100,15" />
|
|
39
|
+
|
|
40
|
+
<!-- Gate -->
|
|
41
|
+
<g transform={open ? 'rotate(-30 15 50)' : ''}>
|
|
42
|
+
<!-- Gate frame -->
|
|
43
|
+
<rect fill={gateColor} x="15" y="25" width="70" height="70" rx="2" />
|
|
44
|
+
<!-- Inner cutout (transparent) -->
|
|
45
|
+
<rect fill="#e0f2fe" x="20" y="30" width="60" height="60" rx="1" opacity="0.3" />
|
|
46
|
+
|
|
47
|
+
<!-- Lattice pattern on gate -->
|
|
48
|
+
<line x1="20" y1="30" x2="80" y2="90" stroke={gateColor} stroke-width="3" />
|
|
49
|
+
<line x1="80" y1="30" x2="20" y2="90" stroke={gateColor} stroke-width="3" />
|
|
50
|
+
<line x1="50" y1="30" x2="50" y2="90" stroke={gateColor} stroke-width="2" />
|
|
51
|
+
<line x1="20" y1="60" x2="80" y2="60" stroke={gateColor} stroke-width="2" />
|
|
52
|
+
|
|
53
|
+
<!-- Gate arch top -->
|
|
54
|
+
<path
|
|
55
|
+
fill={gateColor}
|
|
56
|
+
d="M15 25 L15 20 Q50 5 85 20 L85 25 Q50 12 15 25"
|
|
57
|
+
/>
|
|
58
|
+
|
|
59
|
+
<!-- Hinges -->
|
|
60
|
+
<rect fill={hingeColor} x="13" y="35" width="8" height="6" rx="1" />
|
|
61
|
+
<rect fill={hingeColor} x="13" y="75" width="8" height="6" rx="1" />
|
|
62
|
+
|
|
63
|
+
<!-- Handle -->
|
|
64
|
+
<circle fill={hingeColor} cx="75" cy="60" r="4" />
|
|
65
|
+
<circle fill={bark.darkBark} cx="75" cy="60" r="2" />
|
|
66
|
+
</g>
|
|
67
|
+
|
|
68
|
+
<!-- Ground line -->
|
|
69
|
+
<line x1="0" y1="100" x2="100" y2="100" stroke={earth.mud} stroke-width="2" />
|
|
70
|
+
</svg>
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
frameColor?: string;
|
|
12
|
+
lit?: boolean;
|
|
13
|
+
animate?: boolean;
|
|
14
|
+
variant?: 'hanging' | 'standing' | 'post';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
class: className = 'w-6 h-10',
|
|
19
|
+
frameColor,
|
|
20
|
+
lit = true,
|
|
21
|
+
animate = true,
|
|
22
|
+
variant = 'hanging'
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
const frame = $derived(frameColor ?? bark.darkBark);
|
|
26
|
+
const glowColor = $derived(accents.firefly.glow);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<!-- Lantern -->
|
|
30
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 60">
|
|
31
|
+
{#if variant === 'hanging'}
|
|
32
|
+
<!-- Top finial (attachment point) -->
|
|
33
|
+
<circle fill={frame} cx="20" cy="3" r="2.5" />
|
|
34
|
+
|
|
35
|
+
<!-- Hanging arms connecting finial to lantern roof -->
|
|
36
|
+
<path fill="none" stroke={frame} stroke-width="2" d="M17.5 3.5 Q12 7 12 12" />
|
|
37
|
+
<path fill="none" stroke={frame} stroke-width="2" d="M22.5 3.5 Q28 7 28 12" />
|
|
38
|
+
|
|
39
|
+
<!-- Lantern top cap -->
|
|
40
|
+
<polygon fill={frame} points="10,12 20,6 30,12" />
|
|
41
|
+
|
|
42
|
+
<!-- Small decorative cap finial connecting to arms -->
|
|
43
|
+
<circle fill={frame} cx="20" cy="6" r="1.5" />
|
|
44
|
+
{:else if variant === 'post'}
|
|
45
|
+
<!-- Post -->
|
|
46
|
+
<rect fill={frame} x="17" y="40" width="6" height="20" />
|
|
47
|
+
<!-- Top finial -->
|
|
48
|
+
<circle fill={frame} cx="20" cy="9" r="2" />
|
|
49
|
+
<!-- Lantern top -->
|
|
50
|
+
<polygon fill={frame} points="10,18 20,11 30,18" />
|
|
51
|
+
{:else}
|
|
52
|
+
<!-- Standing base -->
|
|
53
|
+
<rect fill={frame} x="12" y="52" width="16" height="4" rx="1" />
|
|
54
|
+
<rect fill={frame} x="17" y="48" width="6" height="6" />
|
|
55
|
+
<!-- Top finial -->
|
|
56
|
+
<circle fill={frame} cx="20" cy="9" r="2" />
|
|
57
|
+
<!-- Lantern top -->
|
|
58
|
+
<polygon fill={frame} points="10,18 20,11 30,18" />
|
|
59
|
+
{/if}
|
|
60
|
+
|
|
61
|
+
<!-- Lantern body frame -->
|
|
62
|
+
<rect fill={frame} x="10" y="18" width="20" height="30" rx="1" />
|
|
63
|
+
|
|
64
|
+
<!-- Glass panels (with glow if lit) -->
|
|
65
|
+
{#if lit}
|
|
66
|
+
<!-- Glow effect -->
|
|
67
|
+
<rect fill={glowColor} x="12" y="20" width="16" height="26" opacity="0.3" class={animate ? 'flicker' : ''} />
|
|
68
|
+
<rect fill={glowColor} x="14" y="22" width="12" height="22" opacity="0.5" class={animate ? 'flicker-inner' : ''} />
|
|
69
|
+
<!-- Outer glow -->
|
|
70
|
+
<ellipse fill={glowColor} cx="20" cy="33" rx="18" ry="20" opacity="0.15" class={animate ? 'flicker-outer' : ''} />
|
|
71
|
+
{:else}
|
|
72
|
+
<rect fill="#cbd5e1" x="12" y="20" width="16" height="26" opacity="0.3" />
|
|
73
|
+
{/if}
|
|
74
|
+
|
|
75
|
+
<!-- Frame details -->
|
|
76
|
+
<rect fill={frame} x="10" y="32" width="20" height="2" />
|
|
77
|
+
<rect fill={frame} x="19" y="20" width="2" height="26" />
|
|
78
|
+
|
|
79
|
+
<!-- Bottom cap -->
|
|
80
|
+
<rect fill={frame} x="8" y="48" width="24" height="3" rx="1" />
|
|
81
|
+
</svg>
|
|
82
|
+
|
|
83
|
+
<style>
|
|
84
|
+
@keyframes flicker {
|
|
85
|
+
0%, 100% { opacity: 0.5; }
|
|
86
|
+
50% { opacity: 0.6; }
|
|
87
|
+
75% { opacity: 0.45; }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@keyframes flicker-inner {
|
|
91
|
+
0%, 100% { opacity: 0.7; }
|
|
92
|
+
30% { opacity: 0.75; }
|
|
93
|
+
60% { opacity: 0.65; }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@keyframes flicker-outer {
|
|
97
|
+
0%, 100% { opacity: 0.15; }
|
|
98
|
+
50% { opacity: 0.2; }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.flicker {
|
|
102
|
+
animation: flicker 2s ease-in-out infinite;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.flicker-inner {
|
|
106
|
+
animation: flicker-inner 1.5s ease-in-out infinite;
|
|
107
|
+
animation-delay: 0.2s;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.flicker-outer {
|
|
111
|
+
animation: flicker-outer 3s ease-in-out infinite;
|
|
112
|
+
}
|
|
113
|
+
</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
class?: string;
|
|
3
|
+
frameColor?: string;
|
|
4
|
+
lit?: boolean;
|
|
5
|
+
animate?: boolean;
|
|
6
|
+
variant?: 'hanging' | 'standing' | 'post';
|
|
7
|
+
}
|
|
8
|
+
declare const Lantern: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Lantern = ReturnType<typeof Lantern>;
|
|
10
|
+
export default Lantern;
|
|
@@ -0,0 +1,89 @@
|
|
|
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, natural } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
variant?: 'trellis' | 'fence' | 'archway';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
class: className = 'w-12 h-16',
|
|
17
|
+
color,
|
|
18
|
+
variant = 'trellis'
|
|
19
|
+
}: Props = $props();
|
|
20
|
+
|
|
21
|
+
const woodColor = $derived(color ?? bark.warmBark);
|
|
22
|
+
const shadowColor = $derived(bark.darkBark);
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<!-- Lattice/Trellis structure - ties into "Lattice" brand name -->
|
|
26
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 100">
|
|
27
|
+
{#if variant === 'trellis'}
|
|
28
|
+
<!-- Classic garden trellis -->
|
|
29
|
+
<!-- Vertical posts -->
|
|
30
|
+
<rect fill={woodColor} x="5" y="0" width="6" height="100" rx="1" />
|
|
31
|
+
<rect fill={woodColor} x="69" y="0" width="6" height="100" rx="1" />
|
|
32
|
+
|
|
33
|
+
<!-- Horizontal bars -->
|
|
34
|
+
<rect fill={woodColor} x="5" y="5" width="70" height="4" rx="1" />
|
|
35
|
+
<rect fill={woodColor} x="5" y="95" width="70" height="4" rx="1" />
|
|
36
|
+
|
|
37
|
+
<!-- Diagonal lattice pattern -->
|
|
38
|
+
<g opacity="0.9">
|
|
39
|
+
<!-- Left-leaning diagonals -->
|
|
40
|
+
<line x1="11" y1="9" x2="69" y2="50" stroke={woodColor} stroke-width="3" />
|
|
41
|
+
<line x1="11" y1="30" x2="69" y2="71" stroke={woodColor} stroke-width="3" />
|
|
42
|
+
<line x1="11" y1="51" x2="69" y2="92" stroke={woodColor} stroke-width="3" />
|
|
43
|
+
<line x1="11" y1="72" x2="48" y2="95" stroke={woodColor} stroke-width="3" />
|
|
44
|
+
<line x1="32" y1="9" x2="69" y2="30" stroke={woodColor} stroke-width="3" />
|
|
45
|
+
|
|
46
|
+
<!-- Right-leaning diagonals -->
|
|
47
|
+
<line x1="69" y1="9" x2="11" y2="50" stroke={woodColor} stroke-width="3" />
|
|
48
|
+
<line x1="69" y1="30" x2="11" y2="71" stroke={woodColor} stroke-width="3" />
|
|
49
|
+
<line x1="69" y1="51" x2="11" y2="92" stroke={woodColor} stroke-width="3" />
|
|
50
|
+
<line x1="69" y1="72" x2="32" y2="95" stroke={woodColor} stroke-width="3" />
|
|
51
|
+
<line x1="48" y1="9" x2="11" y2="30" stroke={woodColor} stroke-width="3" />
|
|
52
|
+
</g>
|
|
53
|
+
|
|
54
|
+
<!-- Post shadows -->
|
|
55
|
+
<rect fill={shadowColor} x="9" y="0" width="2" height="100" opacity="0.2" />
|
|
56
|
+
<rect fill={shadowColor} x="73" y="0" width="2" height="100" opacity="0.2" />
|
|
57
|
+
{:else if variant === 'fence'}
|
|
58
|
+
<!-- Fence section -->
|
|
59
|
+
<rect fill={woodColor} x="5" y="20" width="70" height="6" rx="1" />
|
|
60
|
+
<rect fill={woodColor} x="5" y="70" width="70" height="6" rx="1" />
|
|
61
|
+
|
|
62
|
+
<!-- Vertical slats -->
|
|
63
|
+
<rect fill={woodColor} x="8" y="10" width="8" height="90" rx="1" />
|
|
64
|
+
<rect fill={woodColor} x="24" y="10" width="8" height="90" rx="1" />
|
|
65
|
+
<rect fill={woodColor} x="40" y="5" width="8" height="95" rx="1" />
|
|
66
|
+
<rect fill={woodColor} x="56" y="10" width="8" height="90" rx="1" />
|
|
67
|
+
<rect fill={woodColor} x="72" y="10" width="6" height="90" rx="1" />
|
|
68
|
+
|
|
69
|
+
<!-- Pointed tops -->
|
|
70
|
+
<polygon fill={woodColor} points="8,10 12,0 16,10" />
|
|
71
|
+
<polygon fill={woodColor} points="24,10 28,0 32,10" />
|
|
72
|
+
<polygon fill={woodColor} points="40,5 44,-5 48,5" />
|
|
73
|
+
<polygon fill={woodColor} points="56,10 60,0 64,10" />
|
|
74
|
+
{:else}
|
|
75
|
+
<!-- Archway trellis -->
|
|
76
|
+
<path
|
|
77
|
+
fill="none"
|
|
78
|
+
stroke={woodColor}
|
|
79
|
+
stroke-width="6"
|
|
80
|
+
d="M10 100 L10 40 Q10 10 40 10 Q70 10 70 40 L70 100"
|
|
81
|
+
/>
|
|
82
|
+
<!-- Cross beams on arch -->
|
|
83
|
+
<line x1="10" y1="60" x2="70" y2="60" stroke={woodColor} stroke-width="4" />
|
|
84
|
+
<line x1="10" y1="80" x2="70" y2="80" stroke={woodColor} stroke-width="4" />
|
|
85
|
+
<!-- Arch lattice -->
|
|
86
|
+
<path fill="none" stroke={woodColor} stroke-width="2" d="M15 100 L15 45 Q15 20 40 20 Q65 20 65 45 L65 100" />
|
|
87
|
+
<path fill="none" stroke={woodColor} stroke-width="2" d="M20 100 L20 48 Q20 28 40 28 Q60 28 60 48 L60 100" />
|
|
88
|
+
{/if}
|
|
89
|
+
</svg>
|
|
@@ -0,0 +1,89 @@
|
|
|
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 type { Season } from '../palette';
|
|
8
|
+
import { bark, greens, autumn, accents } from '../palette';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
class?: string;
|
|
12
|
+
woodColor?: string;
|
|
13
|
+
vineColor?: string;
|
|
14
|
+
season?: Season;
|
|
15
|
+
hasFlowers?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let {
|
|
19
|
+
class: className = 'w-12 h-16',
|
|
20
|
+
woodColor,
|
|
21
|
+
vineColor,
|
|
22
|
+
season = 'summer',
|
|
23
|
+
hasFlowers = true
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
|
|
26
|
+
const wood = $derived(woodColor ?? bark.warmBark);
|
|
27
|
+
const defaultVineColor = $derived(season === 'autumn' ? autumn.rust : greens.grove);
|
|
28
|
+
const vine = $derived(vineColor ?? defaultVineColor);
|
|
29
|
+
const leafColor = $derived(season === 'autumn' ? autumn.amber : greens.meadow);
|
|
30
|
+
const flowerColor = $derived(accents.flower.purple);
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<!-- Lattice with climbing vine -->
|
|
34
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 100">
|
|
35
|
+
<!-- Trellis structure (behind vine) -->
|
|
36
|
+
<rect fill={wood} x="5" y="0" width="5" height="100" rx="1" />
|
|
37
|
+
<rect fill={wood} x="70" y="0" width="5" height="100" rx="1" />
|
|
38
|
+
<rect fill={wood} x="5" y="5" width="70" height="3" rx="1" />
|
|
39
|
+
<rect fill={wood} x="5" y="92" width="70" height="3" rx="1" />
|
|
40
|
+
|
|
41
|
+
<!-- Lattice pattern -->
|
|
42
|
+
<g opacity="0.8">
|
|
43
|
+
<line x1="10" y1="8" x2="70" y2="50" stroke={wood} stroke-width="2.5" />
|
|
44
|
+
<line x1="10" y1="35" x2="70" y2="77" stroke={wood} stroke-width="2.5" />
|
|
45
|
+
<line x1="10" y1="62" x2="55" y2="92" stroke={wood} stroke-width="2.5" />
|
|
46
|
+
<line x1="70" y1="8" x2="10" y2="50" stroke={wood} stroke-width="2.5" />
|
|
47
|
+
<line x1="70" y1="35" x2="10" y2="77" stroke={wood} stroke-width="2.5" />
|
|
48
|
+
<line x1="70" y1="62" x2="25" y2="92" stroke={wood} stroke-width="2.5" />
|
|
49
|
+
</g>
|
|
50
|
+
|
|
51
|
+
<!-- Climbing vine -->
|
|
52
|
+
<path
|
|
53
|
+
fill="none"
|
|
54
|
+
stroke={vine}
|
|
55
|
+
stroke-width="3"
|
|
56
|
+
d="M40 100 Q35 85 42 75 Q50 65 38 55 Q25 45 40 35 Q55 25 45 15 Q35 5 50 0"
|
|
57
|
+
stroke-linecap="round"
|
|
58
|
+
/>
|
|
59
|
+
|
|
60
|
+
<!-- Secondary vine -->
|
|
61
|
+
<path
|
|
62
|
+
fill="none"
|
|
63
|
+
stroke={vine}
|
|
64
|
+
stroke-width="2"
|
|
65
|
+
d="M38 80 Q25 70 30 60 Q35 50 20 45"
|
|
66
|
+
stroke-linecap="round"
|
|
67
|
+
opacity="0.8"
|
|
68
|
+
/>
|
|
69
|
+
|
|
70
|
+
<!-- Leaves along vine -->
|
|
71
|
+
<ellipse fill={leafColor} cx="35" cy="78" rx="6" ry="4" transform="rotate(-25 35 78)" />
|
|
72
|
+
<ellipse fill={leafColor} cx="48" cy="62" rx="6" ry="4" transform="rotate(20 48 62)" />
|
|
73
|
+
<ellipse fill={leafColor} cx="30" cy="48" rx="5" ry="3" transform="rotate(-30 30 48)" />
|
|
74
|
+
<ellipse fill={leafColor} cx="52" cy="32" rx="5" ry="3" transform="rotate(25 52 32)" />
|
|
75
|
+
<ellipse fill={leafColor} cx="38" cy="20" rx="5" ry="3" transform="rotate(-15 38 20)" />
|
|
76
|
+
<ellipse fill={leafColor} cx="22" cy="58" rx="4" ry="3" transform="rotate(-20 22 58)" />
|
|
77
|
+
|
|
78
|
+
{#if hasFlowers && season !== 'autumn'}
|
|
79
|
+
<!-- Small flowers -->
|
|
80
|
+
<circle fill={flowerColor} cx="42" cy="70" r="4" />
|
|
81
|
+
<circle fill="#fbbf24" cx="42" cy="70" r="1.5" />
|
|
82
|
+
|
|
83
|
+
<circle fill={flowerColor} cx="35" cy="42" r="3.5" />
|
|
84
|
+
<circle fill="#fbbf24" cx="35" cy="42" r="1.2" />
|
|
85
|
+
|
|
86
|
+
<circle fill={flowerColor} cx="48" cy="25" r="3" />
|
|
87
|
+
<circle fill="#fbbf24" cx="48" cy="25" r="1" />
|
|
88
|
+
{/if}
|
|
89
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Season } from '../palette';
|
|
2
|
+
interface Props {
|
|
3
|
+
class?: string;
|
|
4
|
+
woodColor?: string;
|
|
5
|
+
vineColor?: string;
|
|
6
|
+
season?: Season;
|
|
7
|
+
hasFlowers?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const LatticeWithVine: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type LatticeWithVine = ReturnType<typeof LatticeWithVine>;
|
|
11
|
+
export default LatticeWithVine;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 } from '../palette';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
stoneColor?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
class: className = 'w-16 h-8',
|
|
16
|
+
stoneColor
|
|
17
|
+
}: Props = $props();
|
|
18
|
+
|
|
19
|
+
const stone = $derived(stoneColor ?? earth.stone);
|
|
20
|
+
const highlight = $derived(earth.pebble);
|
|
21
|
+
const shadow = $derived(earth.slate);
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<!-- Stepping stones path -->
|
|
25
|
+
<svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 40">
|
|
26
|
+
<!-- Stone 1 (left) -->
|
|
27
|
+
<ellipse fill={stone} cx="18" cy="22" rx="16" ry="10" />
|
|
28
|
+
<ellipse fill={highlight} cx="14" cy="19" rx="6" ry="4" opacity="0.2" />
|
|
29
|
+
<ellipse fill={shadow} cx="22" cy="26" rx="8" ry="4" opacity="0.15" />
|
|
30
|
+
|
|
31
|
+
<!-- Stone 2 (center-left) -->
|
|
32
|
+
<ellipse fill={stone} cx="42" cy="18" rx="14" ry="9" />
|
|
33
|
+
<ellipse fill={highlight} cx="38" cy="15" rx="5" ry="3" opacity="0.2" />
|
|
34
|
+
|
|
35
|
+
<!-- Stone 3 (center) -->
|
|
36
|
+
<ellipse fill={stone} cx="62" cy="24" rx="13" ry="8" />
|
|
37
|
+
<ellipse fill={highlight} cx="58" cy="21" rx="5" ry="3" opacity="0.2" />
|
|
38
|
+
<ellipse fill={shadow} cx="66" cy="27" rx="6" ry="3" opacity="0.15" />
|
|
39
|
+
|
|
40
|
+
<!-- Stone 4 (right) -->
|
|
41
|
+
<ellipse fill={stone} cx="85" cy="20" rx="12" ry="9" />
|
|
42
|
+
<ellipse fill={highlight} cx="82" cy="17" rx="4" ry="3" opacity="0.2" />
|
|
43
|
+
|
|
44
|
+
<!-- Small pebbles between -->
|
|
45
|
+
<circle fill={earth.pebble} cx="30" cy="28" r="3" opacity="0.6" />
|
|
46
|
+
<circle fill={earth.pebble} cx="52" cy="32" r="2" opacity="0.5" />
|
|
47
|
+
<circle fill={earth.pebble} cx="74" cy="30" r="2.5" opacity="0.5" />
|
|
48
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as Birdhouse } from './Birdhouse.svelte';
|
|
2
|
+
export { default as Bridge } from './Bridge.svelte';
|
|
3
|
+
export { default as FencePost } from './FencePost.svelte';
|
|
4
|
+
export { default as GardenGate } from './GardenGate.svelte';
|
|
5
|
+
export { default as Lantern } from './Lantern.svelte';
|
|
6
|
+
export { default as Lattice } from './Lattice.svelte';
|
|
7
|
+
export { default as LatticeWithVine } from './LatticeWithVine.svelte';
|
|
8
|
+
export { default as StonePath } from './StonePath.svelte';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Structural components - garden structures and paths
|
|
2
|
+
export { default as Birdhouse } from './Birdhouse.svelte';
|
|
3
|
+
export { default as Bridge } from './Bridge.svelte';
|
|
4
|
+
export { default as FencePost } from './FencePost.svelte';
|
|
5
|
+
export { default as GardenGate } from './GardenGate.svelte';
|
|
6
|
+
export { default as Lantern } from './Lantern.svelte';
|
|
7
|
+
export { default as Lattice } from './Lattice.svelte';
|
|
8
|
+
export { default as LatticeWithVine } from './LatticeWithVine.svelte';
|
|
9
|
+
export { default as StonePath } from './StonePath.svelte';
|