@autumnsgrove/groveengine 0.7.0 → 0.8.5

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.
Files changed (230) hide show
  1. package/dist/components/OnboardingChecklist.svelte +2 -2
  2. package/dist/components/WispButton.svelte +83 -0
  3. package/dist/components/WispButton.svelte.d.ts +49 -0
  4. package/dist/components/WispPanel.svelte +1093 -0
  5. package/dist/components/WispPanel.svelte.d.ts +49 -0
  6. package/dist/components/custom/TableOfContents.svelte +12 -1
  7. package/dist/components/quota/UpgradePrompt.svelte +1 -0
  8. package/dist/config/wisp.d.ts +145 -0
  9. package/dist/config/wisp.js +175 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.js +3 -0
  12. package/dist/server/inference-client.d.ts +139 -0
  13. package/dist/server/inference-client.js +294 -0
  14. package/dist/ui/components/content/RoadmapPreview.svelte +91 -0
  15. package/dist/ui/components/content/RoadmapPreview.svelte.d.ts +36 -0
  16. package/dist/ui/components/content/index.d.ts +1 -0
  17. package/dist/ui/components/content/index.js +1 -0
  18. package/dist/ui/components/nature/Logo.svelte +260 -0
  19. package/dist/ui/components/nature/Logo.svelte.d.ts +14 -0
  20. package/dist/ui/components/nature/botanical/Acorn.svelte +48 -0
  21. package/dist/ui/components/nature/botanical/Acorn.svelte.d.ts +8 -0
  22. package/dist/ui/components/nature/botanical/Berry.svelte +67 -0
  23. package/dist/ui/components/nature/botanical/Berry.svelte.d.ts +8 -0
  24. package/dist/ui/components/nature/botanical/DandelionPuff.svelte +98 -0
  25. package/dist/ui/components/nature/botanical/DandelionPuff.svelte.d.ts +8 -0
  26. package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte +170 -0
  27. package/dist/ui/components/nature/botanical/FallingLeavesLayer.svelte.d.ts +35 -0
  28. package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte +174 -0
  29. package/dist/ui/components/nature/botanical/FallingPetalsLayer.svelte.d.ts +25 -0
  30. package/dist/ui/components/nature/botanical/Leaf.svelte +77 -0
  31. package/dist/ui/components/nature/botanical/Leaf.svelte.d.ts +10 -0
  32. package/dist/ui/components/nature/botanical/LeafFalling.svelte +186 -0
  33. package/dist/ui/components/nature/botanical/LeafFalling.svelte.d.ts +22 -0
  34. package/dist/ui/components/nature/botanical/PetalFalling.svelte +266 -0
  35. package/dist/ui/components/nature/botanical/PetalFalling.svelte.d.ts +25 -0
  36. package/dist/ui/components/nature/botanical/PineCone.svelte +61 -0
  37. package/dist/ui/components/nature/botanical/PineCone.svelte.d.ts +7 -0
  38. package/dist/ui/components/nature/botanical/Vine.svelte +102 -0
  39. package/dist/ui/components/nature/botanical/Vine.svelte.d.ts +11 -0
  40. package/dist/ui/components/nature/botanical/index.d.ts +10 -0
  41. package/dist/ui/components/nature/botanical/index.js +11 -0
  42. package/dist/ui/components/nature/creatures/Bee.svelte +78 -0
  43. package/dist/ui/components/nature/creatures/Bee.svelte.d.ts +9 -0
  44. package/dist/ui/components/nature/creatures/Bird.svelte +94 -0
  45. package/dist/ui/components/nature/creatures/Bird.svelte.d.ts +11 -0
  46. package/dist/ui/components/nature/creatures/BirdFlying.svelte +83 -0
  47. package/dist/ui/components/nature/creatures/BirdFlying.svelte.d.ts +9 -0
  48. package/dist/ui/components/nature/creatures/Bluebird.svelte +95 -0
  49. package/dist/ui/components/nature/creatures/Bluebird.svelte.d.ts +12 -0
  50. package/dist/ui/components/nature/creatures/Butterfly.svelte +87 -0
  51. package/dist/ui/components/nature/creatures/Butterfly.svelte.d.ts +9 -0
  52. package/dist/ui/components/nature/creatures/Cardinal.svelte +95 -0
  53. package/dist/ui/components/nature/creatures/Cardinal.svelte.d.ts +12 -0
  54. package/dist/ui/components/nature/creatures/Chickadee.svelte +97 -0
  55. package/dist/ui/components/nature/creatures/Chickadee.svelte.d.ts +12 -0
  56. package/dist/ui/components/nature/creatures/Deer.svelte +95 -0
  57. package/dist/ui/components/nature/creatures/Deer.svelte.d.ts +9 -0
  58. package/dist/ui/components/nature/creatures/Firefly.svelte +111 -0
  59. package/dist/ui/components/nature/creatures/Firefly.svelte.d.ts +10 -0
  60. package/dist/ui/components/nature/creatures/Owl.svelte +91 -0
  61. package/dist/ui/components/nature/creatures/Owl.svelte.d.ts +9 -0
  62. package/dist/ui/components/nature/creatures/Rabbit.svelte +90 -0
  63. package/dist/ui/components/nature/creatures/Rabbit.svelte.d.ts +9 -0
  64. package/dist/ui/components/nature/creatures/Robin.svelte +98 -0
  65. package/dist/ui/components/nature/creatures/Robin.svelte.d.ts +12 -0
  66. package/dist/ui/components/nature/creatures/Squirrel.svelte +97 -0
  67. package/dist/ui/components/nature/creatures/Squirrel.svelte.d.ts +9 -0
  68. package/dist/ui/components/nature/creatures/index.d.ts +13 -0
  69. package/dist/ui/components/nature/creatures/index.js +14 -0
  70. package/dist/ui/components/nature/ground/Bush.svelte +57 -0
  71. package/dist/ui/components/nature/ground/Bush.svelte.d.ts +10 -0
  72. package/dist/ui/components/nature/ground/Crocus.svelte +83 -0
  73. package/dist/ui/components/nature/ground/Crocus.svelte.d.ts +12 -0
  74. package/dist/ui/components/nature/ground/Daffodil.svelte +75 -0
  75. package/dist/ui/components/nature/ground/Daffodil.svelte.d.ts +11 -0
  76. package/dist/ui/components/nature/ground/Fern.svelte +72 -0
  77. package/dist/ui/components/nature/ground/Fern.svelte.d.ts +10 -0
  78. package/dist/ui/components/nature/ground/FlowerWild.svelte +60 -0
  79. package/dist/ui/components/nature/ground/FlowerWild.svelte.d.ts +10 -0
  80. package/dist/ui/components/nature/ground/GrassTuft.svelte +49 -0
  81. package/dist/ui/components/nature/ground/GrassTuft.svelte.d.ts +10 -0
  82. package/dist/ui/components/nature/ground/Log.svelte +42 -0
  83. package/dist/ui/components/nature/ground/Log.svelte.d.ts +7 -0
  84. package/dist/ui/components/nature/ground/Mushroom.svelte +48 -0
  85. package/dist/ui/components/nature/ground/Mushroom.svelte.d.ts +9 -0
  86. package/dist/ui/components/nature/ground/MushroomCluster.svelte +41 -0
  87. package/dist/ui/components/nature/ground/MushroomCluster.svelte.d.ts +8 -0
  88. package/dist/ui/components/nature/ground/Rock.svelte +59 -0
  89. package/dist/ui/components/nature/ground/Rock.svelte.d.ts +8 -0
  90. package/dist/ui/components/nature/ground/Stump.svelte +44 -0
  91. package/dist/ui/components/nature/ground/Stump.svelte.d.ts +8 -0
  92. package/dist/ui/components/nature/ground/Tulip.svelte +79 -0
  93. package/dist/ui/components/nature/ground/Tulip.svelte.d.ts +11 -0
  94. package/dist/ui/components/nature/ground/index.d.ts +12 -0
  95. package/dist/ui/components/nature/ground/index.js +13 -0
  96. package/dist/ui/components/nature/index.d.ts +28 -0
  97. package/dist/ui/components/nature/index.js +38 -0
  98. package/dist/ui/components/nature/palette.d.ts +602 -0
  99. package/dist/ui/components/nature/palette.js +472 -0
  100. package/dist/ui/components/nature/sky/Cloud.svelte +122 -0
  101. package/dist/ui/components/nature/sky/Cloud.svelte.d.ts +11 -0
  102. package/dist/ui/components/nature/sky/CloudWispy.svelte +79 -0
  103. package/dist/ui/components/nature/sky/CloudWispy.svelte.d.ts +9 -0
  104. package/dist/ui/components/nature/sky/Moon.svelte +60 -0
  105. package/dist/ui/components/nature/sky/Moon.svelte.d.ts +9 -0
  106. package/dist/ui/components/nature/sky/Rainbow.svelte +101 -0
  107. package/dist/ui/components/nature/sky/Rainbow.svelte.d.ts +8 -0
  108. package/dist/ui/components/nature/sky/Star.svelte +84 -0
  109. package/dist/ui/components/nature/sky/Star.svelte.d.ts +10 -0
  110. package/dist/ui/components/nature/sky/StarCluster.svelte +85 -0
  111. package/dist/ui/components/nature/sky/StarCluster.svelte.d.ts +9 -0
  112. package/dist/ui/components/nature/sky/StarShooting.svelte +90 -0
  113. package/dist/ui/components/nature/sky/StarShooting.svelte.d.ts +9 -0
  114. package/dist/ui/components/nature/sky/Sun.svelte +70 -0
  115. package/dist/ui/components/nature/sky/Sun.svelte.d.ts +9 -0
  116. package/dist/ui/components/nature/sky/index.d.ts +8 -0
  117. package/dist/ui/components/nature/sky/index.js +9 -0
  118. package/dist/ui/components/nature/structural/Birdhouse.svelte +53 -0
  119. package/dist/ui/components/nature/structural/Birdhouse.svelte.d.ts +8 -0
  120. package/dist/ui/components/nature/structural/Bridge.svelte +65 -0
  121. package/dist/ui/components/nature/structural/Bridge.svelte.d.ts +7 -0
  122. package/dist/ui/components/nature/structural/FencePost.svelte +54 -0
  123. package/dist/ui/components/nature/structural/FencePost.svelte.d.ts +8 -0
  124. package/dist/ui/components/nature/structural/GardenGate.svelte +70 -0
  125. package/dist/ui/components/nature/structural/GardenGate.svelte.d.ts +8 -0
  126. package/dist/ui/components/nature/structural/Lantern.svelte +113 -0
  127. package/dist/ui/components/nature/structural/Lantern.svelte.d.ts +10 -0
  128. package/dist/ui/components/nature/structural/Lattice.svelte +89 -0
  129. package/dist/ui/components/nature/structural/Lattice.svelte.d.ts +8 -0
  130. package/dist/ui/components/nature/structural/LatticeWithVine.svelte +89 -0
  131. package/dist/ui/components/nature/structural/LatticeWithVine.svelte.d.ts +11 -0
  132. package/dist/ui/components/nature/structural/StonePath.svelte +48 -0
  133. package/dist/ui/components/nature/structural/StonePath.svelte.d.ts +7 -0
  134. package/dist/ui/components/nature/structural/index.d.ts +8 -0
  135. package/dist/ui/components/nature/structural/index.js +9 -0
  136. package/dist/ui/components/nature/trees/TreeAspen.svelte +163 -0
  137. package/dist/ui/components/nature/trees/TreeAspen.svelte.d.ts +11 -0
  138. package/dist/ui/components/nature/trees/TreeBirch.svelte +186 -0
  139. package/dist/ui/components/nature/trees/TreeBirch.svelte.d.ts +11 -0
  140. package/dist/ui/components/nature/trees/TreeCherry.svelte +108 -0
  141. package/dist/ui/components/nature/trees/TreeCherry.svelte.d.ts +11 -0
  142. package/dist/ui/components/nature/trees/TreePine.svelte +79 -0
  143. package/dist/ui/components/nature/trees/TreePine.svelte.d.ts +11 -0
  144. package/dist/ui/components/nature/trees/index.d.ts +4 -0
  145. package/dist/ui/components/nature/trees/index.js +5 -0
  146. package/dist/ui/components/nature/water/LilyPad.svelte +99 -0
  147. package/dist/ui/components/nature/water/LilyPad.svelte.d.ts +10 -0
  148. package/dist/ui/components/nature/water/Pond.svelte +104 -0
  149. package/dist/ui/components/nature/water/Pond.svelte.d.ts +8 -0
  150. package/dist/ui/components/nature/water/Reeds.svelte +85 -0
  151. package/dist/ui/components/nature/water/Reeds.svelte.d.ts +11 -0
  152. package/dist/ui/components/nature/water/Stream.svelte +98 -0
  153. package/dist/ui/components/nature/water/Stream.svelte.d.ts +8 -0
  154. package/dist/ui/components/nature/water/index.d.ts +4 -0
  155. package/dist/ui/components/nature/water/index.js +5 -0
  156. package/dist/ui/components/nature/weather/SnowfallLayer.svelte +175 -0
  157. package/dist/ui/components/nature/weather/SnowfallLayer.svelte.d.ts +25 -0
  158. package/dist/ui/components/nature/weather/Snowflake.svelte +99 -0
  159. package/dist/ui/components/nature/weather/Snowflake.svelte.d.ts +11 -0
  160. package/dist/ui/components/nature/weather/SnowflakeFalling.svelte +162 -0
  161. package/dist/ui/components/nature/weather/SnowflakeFalling.svelte.d.ts +23 -0
  162. package/dist/ui/components/nature/weather/index.d.ts +3 -0
  163. package/dist/ui/components/nature/weather/index.js +4 -0
  164. package/dist/ui/components/primitives/textarea/textarea.svelte +1 -1
  165. package/dist/ui/components/typography/Alagard.svelte +17 -0
  166. package/dist/ui/components/typography/Alagard.svelte.d.ts +10 -0
  167. package/dist/ui/components/typography/Atkinson.svelte +17 -0
  168. package/dist/ui/components/typography/Atkinson.svelte.d.ts +10 -0
  169. package/dist/ui/components/typography/BodoniModa.svelte +17 -0
  170. package/dist/ui/components/typography/BodoniModa.svelte.d.ts +10 -0
  171. package/dist/ui/components/typography/Calistoga.svelte +17 -0
  172. package/dist/ui/components/typography/Calistoga.svelte.d.ts +10 -0
  173. package/dist/ui/components/typography/Caveat.svelte +17 -0
  174. package/dist/ui/components/typography/Caveat.svelte.d.ts +10 -0
  175. package/dist/ui/components/typography/Cormorant.svelte +17 -0
  176. package/dist/ui/components/typography/Cormorant.svelte.d.ts +10 -0
  177. package/dist/ui/components/typography/Cozette.svelte +17 -0
  178. package/dist/ui/components/typography/Cozette.svelte.d.ts +10 -0
  179. package/dist/ui/components/typography/EBGaramond.svelte +17 -0
  180. package/dist/ui/components/typography/EBGaramond.svelte.d.ts +10 -0
  181. package/dist/ui/components/typography/FontProvider.svelte +98 -0
  182. package/dist/ui/components/typography/FontProvider.svelte.d.ts +17 -0
  183. package/dist/ui/components/typography/Fraunces.svelte +17 -0
  184. package/dist/ui/components/typography/Fraunces.svelte.d.ts +10 -0
  185. package/dist/ui/components/typography/IBMPlexMono.svelte +17 -0
  186. package/dist/ui/components/typography/IBMPlexMono.svelte.d.ts +10 -0
  187. package/dist/ui/components/typography/InstrumentSans.svelte +17 -0
  188. package/dist/ui/components/typography/InstrumentSans.svelte.d.ts +10 -0
  189. package/dist/ui/components/typography/Lexend.svelte +17 -0
  190. package/dist/ui/components/typography/Lexend.svelte.d.ts +10 -0
  191. package/dist/ui/components/typography/Lora.svelte +17 -0
  192. package/dist/ui/components/typography/Lora.svelte.d.ts +10 -0
  193. package/dist/ui/components/typography/Luciole.svelte +17 -0
  194. package/dist/ui/components/typography/Luciole.svelte.d.ts +10 -0
  195. package/dist/ui/components/typography/Manrope.svelte +17 -0
  196. package/dist/ui/components/typography/Manrope.svelte.d.ts +10 -0
  197. package/dist/ui/components/typography/Merriweather.svelte +17 -0
  198. package/dist/ui/components/typography/Merriweather.svelte.d.ts +10 -0
  199. package/dist/ui/components/typography/Nunito.svelte +17 -0
  200. package/dist/ui/components/typography/Nunito.svelte.d.ts +10 -0
  201. package/dist/ui/components/typography/OpenDyslexic.svelte +17 -0
  202. package/dist/ui/components/typography/OpenDyslexic.svelte.d.ts +10 -0
  203. package/dist/ui/components/typography/PlusJakartaSans.svelte +17 -0
  204. package/dist/ui/components/typography/PlusJakartaSans.svelte.d.ts +10 -0
  205. package/dist/ui/components/typography/Quicksand.svelte +17 -0
  206. package/dist/ui/components/typography/Quicksand.svelte.d.ts +10 -0
  207. package/dist/ui/components/typography/README.md +153 -0
  208. package/dist/ui/components/typography/index.d.ts +23 -0
  209. package/dist/ui/components/typography/index.js +42 -0
  210. package/dist/ui/components/ui/GlassCarousel.svelte +446 -0
  211. package/dist/ui/components/ui/GlassCarousel.svelte.d.ts +57 -0
  212. package/dist/ui/components/ui/GlassConfirmDialog.svelte +2 -1
  213. package/dist/ui/components/ui/GlassLogo.svelte +423 -0
  214. package/dist/ui/components/ui/GlassLogo.svelte.d.ts +23 -0
  215. package/dist/ui/components/ui/GlassNavbar.svelte +120 -0
  216. package/dist/ui/components/ui/GlassNavbar.svelte.d.ts +42 -0
  217. package/dist/ui/components/ui/GlassOverlay.svelte +1 -1
  218. package/dist/ui/components/ui/Logo.svelte +47 -52
  219. package/dist/ui/components/ui/Logo.svelte.d.ts +4 -3
  220. package/dist/ui/components/ui/index.d.ts +3 -0
  221. package/dist/ui/components/ui/index.js +3 -0
  222. package/dist/ui/index.d.ts +1 -0
  223. package/dist/ui/index.js +2 -0
  224. package/dist/ui/styles/grove.css +15 -1
  225. package/dist/ui/vineyard/index.d.ts +9 -0
  226. package/dist/ui/vineyard/index.js +8 -0
  227. package/dist/utils/csrf.js +5 -2
  228. package/dist/utils/readability.d.ts +89 -0
  229. package/dist/utils/readability.js +204 -0
  230. package/package.json +27 -1
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ speed?: 'slow' | 'normal' | 'fast';
6
+ }
7
+ declare const CloudWispy: import("svelte").Component<Props, {}, "">;
8
+ type CloudWispy = ReturnType<typeof CloudWispy>;
9
+ export default CloudWispy;
@@ -0,0 +1,60 @@
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
+ interface Props {
8
+ class?: string;
9
+ color?: string;
10
+ phase?: 'full' | 'waning' | 'crescent' | 'new';
11
+ animate?: boolean;
12
+ }
13
+
14
+ let {
15
+ class: className = 'w-10 h-10',
16
+ color = '#fef9c3',
17
+ phase = 'crescent',
18
+ animate = true
19
+ }: Props = $props();
20
+
21
+ const glowColor = '#fef9c3';
22
+ </script>
23
+
24
+ <!-- Moon with phase options -->
25
+ <svg class="{className} {animate ? 'glow' : ''}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
26
+ <!-- Outer glow -->
27
+ <circle fill={glowColor} cx="25" cy="25" r="24" opacity="0.15" />
28
+
29
+ {#if phase === 'full'}
30
+ <!-- Full moon -->
31
+ <circle fill={color} cx="25" cy="25" r="20" />
32
+ <!-- Craters -->
33
+ <circle fill="#e5e5dc" cx="18" cy="20" r="4" opacity="0.3" />
34
+ <circle fill="#e5e5dc" cx="30" cy="28" r="5" opacity="0.25" />
35
+ <circle fill="#e5e5dc" cx="22" cy="32" r="3" opacity="0.2" />
36
+ {:else if phase === 'waning'}
37
+ <!-- Waning gibbous -->
38
+ <circle fill={color} cx="25" cy="25" r="20" />
39
+ <circle fill="#1e293b" cx="35" cy="25" r="15" />
40
+ {:else if phase === 'crescent'}
41
+ <!-- Crescent moon -->
42
+ <circle fill={color} cx="25" cy="25" r="20" />
43
+ <circle fill="#1e293b" cx="32" cy="25" r="17" />
44
+ {:else}
45
+ <!-- New moon (barely visible) -->
46
+ <circle fill={color} cx="25" cy="25" r="20" opacity="0.1" />
47
+ <circle fill={color} cx="22" cy="25" r="18" opacity="0.05" />
48
+ {/if}
49
+ </svg>
50
+
51
+ <style>
52
+ @keyframes glow {
53
+ 0%, 100% { filter: brightness(1) drop-shadow(0 0 5px rgba(254, 249, 195, 0.3)); }
54
+ 50% { filter: brightness(1.1) drop-shadow(0 0 10px rgba(254, 249, 195, 0.5)); }
55
+ }
56
+
57
+ .glow {
58
+ animation: glow 4s ease-in-out infinite;
59
+ }
60
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ phase?: 'full' | 'waning' | 'crescent' | 'new';
5
+ animate?: boolean;
6
+ }
7
+ declare const Moon: import("svelte").Component<Props, {}, "">;
8
+ type Moon = ReturnType<typeof Moon>;
9
+ export default Moon;
@@ -0,0 +1,101 @@
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
+ interface Props {
8
+ class?: string;
9
+ opacity?: number;
10
+ animate?: boolean;
11
+ }
12
+
13
+ let {
14
+ class: className = 'w-32 h-16',
15
+ opacity = 0.6,
16
+ animate = false
17
+ }: Props = $props();
18
+ </script>
19
+
20
+ <!-- Rainbow arc -->
21
+ <svg class="{className} {animate ? 'fade-in' : ''}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100">
22
+ <defs>
23
+ <!-- Rainbow gradient arcs -->
24
+ <linearGradient id="rainbow-red" x1="0%" y1="0%" x2="100%" y2="0%">
25
+ <stop offset="0%" stop-color="#ef4444" stop-opacity="0" />
26
+ <stop offset="20%" stop-color="#ef4444" stop-opacity="1" />
27
+ <stop offset="80%" stop-color="#ef4444" stop-opacity="1" />
28
+ <stop offset="100%" stop-color="#ef4444" stop-opacity="0" />
29
+ </linearGradient>
30
+ </defs>
31
+
32
+ <g opacity={opacity}>
33
+ <!-- Red (outer) -->
34
+ <path
35
+ fill="none"
36
+ stroke="#ef4444"
37
+ stroke-width="8"
38
+ d="M10 100 Q10 20 100 20 Q190 20 190 100"
39
+ opacity="0.8"
40
+ />
41
+ <!-- Orange -->
42
+ <path
43
+ fill="none"
44
+ stroke="#f97316"
45
+ stroke-width="8"
46
+ d="M20 100 Q20 30 100 30 Q180 30 180 100"
47
+ opacity="0.8"
48
+ />
49
+ <!-- Yellow -->
50
+ <path
51
+ fill="none"
52
+ stroke="#eab308"
53
+ stroke-width="8"
54
+ d="M30 100 Q30 40 100 40 Q170 40 170 100"
55
+ opacity="0.8"
56
+ />
57
+ <!-- Green -->
58
+ <path
59
+ fill="none"
60
+ stroke="#22c55e"
61
+ stroke-width="8"
62
+ d="M40 100 Q40 50 100 50 Q160 50 160 100"
63
+ opacity="0.8"
64
+ />
65
+ <!-- Blue -->
66
+ <path
67
+ fill="none"
68
+ stroke="#3b82f6"
69
+ stroke-width="8"
70
+ d="M50 100 Q50 60 100 60 Q150 60 150 100"
71
+ opacity="0.8"
72
+ />
73
+ <!-- Indigo -->
74
+ <path
75
+ fill="none"
76
+ stroke="#6366f1"
77
+ stroke-width="8"
78
+ d="M60 100 Q60 70 100 70 Q140 70 140 100"
79
+ opacity="0.8"
80
+ />
81
+ <!-- Violet (inner) -->
82
+ <path
83
+ fill="none"
84
+ stroke="#a855f7"
85
+ stroke-width="8"
86
+ d="M70 100 Q70 80 100 80 Q130 80 130 100"
87
+ opacity="0.8"
88
+ />
89
+ </g>
90
+ </svg>
91
+
92
+ <style>
93
+ @keyframes fade-in {
94
+ 0% { opacity: 0; }
95
+ 100% { opacity: 1; }
96
+ }
97
+
98
+ .fade-in {
99
+ animation: fade-in 3s ease-out forwards;
100
+ }
101
+ </style>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ class?: string;
3
+ opacity?: number;
4
+ animate?: boolean;
5
+ }
6
+ declare const Rainbow: import("svelte").Component<Props, {}, "">;
7
+ type Rainbow = ReturnType<typeof Rainbow>;
8
+ export default Rainbow;
@@ -0,0 +1,84 @@
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 } from '../palette';
8
+
9
+ interface Props {
10
+ class?: string;
11
+ color?: string;
12
+ animate?: boolean;
13
+ variant?: 'twinkle' | 'point' | 'burst' | 'classic' | 'tiny';
14
+ speed?: 'slow' | 'normal' | 'fast';
15
+ }
16
+
17
+ let {
18
+ class: className = 'w-3 h-3',
19
+ color,
20
+ animate = true,
21
+ variant = 'twinkle',
22
+ speed = 'normal'
23
+ }: Props = $props();
24
+
25
+ const starColor = $derived(color ?? accents.sky.star);
26
+
27
+ const duration = $derived(
28
+ {
29
+ slow: '4s',
30
+ normal: '2s',
31
+ fast: '1s'
32
+ }[speed]
33
+ );
34
+ </script>
35
+
36
+ <!-- Star -->
37
+ <svg
38
+ class="{className} {animate ? 'twinkle' : ''}"
39
+ xmlns="http://www.w3.org/2000/svg"
40
+ viewBox="0 0 20 20"
41
+ style="--twinkle-duration: {duration}"
42
+ >
43
+ {#if variant === 'twinkle'}
44
+ <!-- 4-point twinkle star -->
45
+ <path
46
+ fill={starColor}
47
+ d="M10 0 L11 8 L20 10 L11 12 L10 20 L9 12 L0 10 L9 8 Z"
48
+ />
49
+ {:else if variant === 'point'}
50
+ <!-- Simple point -->
51
+ <circle fill={starColor} cx="10" cy="10" r="3" />
52
+ <!-- Subtle glow -->
53
+ <circle fill={starColor} cx="10" cy="10" r="6" opacity="0.3" />
54
+ {:else if variant === 'burst'}
55
+ <!-- Starburst (8-point) -->
56
+ <path
57
+ fill={starColor}
58
+ d="M10 0 L11 7 L18 4 L13 9 L20 10 L13 11 L18 16 L11 13 L10 20 L9 13 L2 16 L7 11 L0 10 L7 9 L2 4 L9 7 Z"
59
+ />
60
+ {:else if variant === 'classic'}
61
+ <!-- Classic 5-point star -->
62
+ <polygon
63
+ fill={starColor}
64
+ points="10,0 12.5,7.5 20,7.5 14,12 16.5,20 10,15 3.5,20 6,12 0,7.5 7.5,7.5"
65
+ />
66
+ {:else if variant === 'tiny'}
67
+ <!-- Tiny dot star -->
68
+ <circle fill={starColor} cx="10" cy="10" r="2" />
69
+ {/if}
70
+ </svg>
71
+
72
+ <style>
73
+ @keyframes twinkle {
74
+ 0%, 100% { opacity: 1; transform: scale(1); }
75
+ 25% { opacity: 0.7; transform: scale(0.9); }
76
+ 50% { opacity: 0.4; transform: scale(0.75); }
77
+ 75% { opacity: 0.8; transform: scale(0.95); }
78
+ }
79
+
80
+ .twinkle {
81
+ animation: twinkle var(--twinkle-duration, 2s) ease-in-out infinite;
82
+ animation-delay: var(--twinkle-delay, 0s);
83
+ }
84
+ </style>
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ variant?: 'twinkle' | 'point' | 'burst' | 'classic' | 'tiny';
6
+ speed?: 'slow' | 'normal' | 'fast';
7
+ }
8
+ declare const Star: import("svelte").Component<Props, {}, "">;
9
+ type Star = ReturnType<typeof Star>;
10
+ export default Star;
@@ -0,0 +1,85 @@
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 } from '../palette';
8
+
9
+ interface Props {
10
+ class?: string;
11
+ color?: string;
12
+ animate?: boolean;
13
+ density?: 'sparse' | 'normal' | 'dense';
14
+ }
15
+
16
+ let {
17
+ class: className = 'w-16 h-16',
18
+ color,
19
+ animate = true,
20
+ density = 'normal'
21
+ }: Props = $props();
22
+
23
+ const starColor = $derived(color ?? accents.sky.star);
24
+
25
+ // Generate stars based on density
26
+ const starCounts = { sparse: 5, normal: 9, dense: 15 };
27
+ const count = $derived(starCounts[density]);
28
+
29
+ // Deterministic star positions for consistent rendering
30
+ const starPositions = [
31
+ { x: 25, y: 20, size: 3, delay: 0 },
32
+ { x: 60, y: 15, size: 2, delay: 0.5 },
33
+ { x: 80, y: 35, size: 4, delay: 0.2 },
34
+ { x: 15, y: 50, size: 2, delay: 0.8 },
35
+ { x: 45, y: 45, size: 3, delay: 0.3 },
36
+ { x: 70, y: 60, size: 2, delay: 1.1 },
37
+ { x: 30, y: 75, size: 3, delay: 0.6 },
38
+ { x: 55, y: 80, size: 2, delay: 0.9 },
39
+ { x: 85, y: 75, size: 3, delay: 0.4 },
40
+ { x: 10, y: 30, size: 2, delay: 1.3 },
41
+ { x: 40, y: 10, size: 2, delay: 0.7 },
42
+ { x: 90, y: 20, size: 2, delay: 1.0 },
43
+ { x: 50, y: 60, size: 2, delay: 1.2 },
44
+ { x: 20, y: 85, size: 2, delay: 0.1 },
45
+ { x: 75, y: 90, size: 2, delay: 1.4 }
46
+ ];
47
+ const stars = $derived(starPositions.slice(0, count));
48
+ </script>
49
+
50
+ <!-- Cluster of twinkling stars -->
51
+ <svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
52
+ {#each stars as star}
53
+ <g
54
+ class={animate ? 'twinkle' : ''}
55
+ style="--twinkle-delay: {star.delay}s"
56
+ >
57
+ <!-- 4-point star shape -->
58
+ <path
59
+ fill={starColor}
60
+ d="M{star.x} {star.y - star.size}
61
+ L{star.x + star.size * 0.3} {star.y - star.size * 0.3}
62
+ L{star.x + star.size} {star.y}
63
+ L{star.x + star.size * 0.3} {star.y + star.size * 0.3}
64
+ L{star.x} {star.y + star.size}
65
+ L{star.x - star.size * 0.3} {star.y + star.size * 0.3}
66
+ L{star.x - star.size} {star.y}
67
+ L{star.x - star.size * 0.3} {star.y - star.size * 0.3} Z"
68
+ />
69
+ </g>
70
+ {/each}
71
+ </svg>
72
+
73
+ <style>
74
+ @keyframes twinkle {
75
+ 0%, 100% { opacity: 1; transform: scale(1); }
76
+ 25% { opacity: 0.6; transform: scale(0.85); }
77
+ 50% { opacity: 0.3; transform: scale(0.7); }
78
+ 75% { opacity: 0.7; transform: scale(0.9); }
79
+ }
80
+
81
+ .twinkle {
82
+ animation: twinkle 3s ease-in-out infinite;
83
+ animation-delay: var(--twinkle-delay, 0s);
84
+ }
85
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ density?: 'sparse' | 'normal' | 'dense';
6
+ }
7
+ declare const StarCluster: import("svelte").Component<Props, {}, "">;
8
+ type StarCluster = ReturnType<typeof StarCluster>;
9
+ export default StarCluster;
@@ -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 { accents } from '../palette';
8
+
9
+ interface Props {
10
+ class?: string;
11
+ color?: string;
12
+ animate?: boolean;
13
+ direction?: 'left' | 'right';
14
+ }
15
+
16
+ let {
17
+ class: className = 'w-16 h-8',
18
+ color,
19
+ animate = true,
20
+ direction = 'right'
21
+ }: Props = $props();
22
+
23
+ const starColor = $derived(color ?? accents.sky.star);
24
+ const scaleX = $derived(direction === 'left' ? -1 : 1);
25
+ </script>
26
+
27
+ <!-- Shooting star with trail -->
28
+ <svg
29
+ class="{className} {animate ? 'shoot' : ''}"
30
+ xmlns="http://www.w3.org/2000/svg"
31
+ viewBox="0 0 100 40"
32
+ style="transform: scaleX({scaleX})"
33
+ >
34
+ <defs>
35
+ <linearGradient id="trail-gradient" x1="0%" y1="0%" x2="100%" y2="0%">
36
+ <stop offset="0%" stop-color={starColor} stop-opacity="0" />
37
+ <stop offset="70%" stop-color={starColor} stop-opacity="0.5" />
38
+ <stop offset="100%" stop-color={starColor} stop-opacity="1" />
39
+ </linearGradient>
40
+ </defs>
41
+
42
+ <!-- Trail -->
43
+ <path
44
+ fill="url(#trail-gradient)"
45
+ d="M0 20 Q30 15 60 18 L85 17 L85 23 L60 22 Q30 25 0 20 Z"
46
+ class={animate ? 'trail' : ''}
47
+ />
48
+
49
+ <!-- Star head -->
50
+ <g class={animate ? 'star-head' : ''}>
51
+ <!-- Glow -->
52
+ <circle fill={starColor} cx="90" cy="20" r="8" opacity="0.3" />
53
+ <circle fill={starColor} cx="90" cy="20" r="5" opacity="0.5" />
54
+ <!-- Core -->
55
+ <circle fill={starColor} cx="90" cy="20" r="3" />
56
+ </g>
57
+ </svg>
58
+
59
+ <style>
60
+ @keyframes shoot {
61
+ 0% {
62
+ transform: translateX(-100%) translateY(20px);
63
+ opacity: 0;
64
+ }
65
+ 10% {
66
+ opacity: 1;
67
+ }
68
+ 90% {
69
+ opacity: 1;
70
+ }
71
+ 100% {
72
+ transform: translateX(100%) translateY(-20px);
73
+ opacity: 0;
74
+ }
75
+ }
76
+
77
+ @keyframes trail-shimmer {
78
+ 0%, 100% { opacity: 0.8; }
79
+ 50% { opacity: 1; }
80
+ }
81
+
82
+ .shoot {
83
+ animation: shoot 2s ease-in-out infinite;
84
+ animation-delay: var(--shoot-delay, 0s);
85
+ }
86
+
87
+ .trail {
88
+ animation: trail-shimmer 0.3s ease-in-out infinite;
89
+ }
90
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ animate?: boolean;
5
+ direction?: 'left' | 'right';
6
+ }
7
+ declare const StarShooting: import("svelte").Component<Props, {}, "">;
8
+ type StarShooting = ReturnType<typeof StarShooting>;
9
+ export default StarShooting;
@@ -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 { accents } from '../palette';
8
+
9
+ interface Props {
10
+ class?: string;
11
+ color?: string;
12
+ rays?: boolean;
13
+ animate?: boolean;
14
+ }
15
+
16
+ let {
17
+ class: className = 'w-12 h-12',
18
+ color,
19
+ rays = true,
20
+ animate = true
21
+ }: Props = $props();
22
+
23
+ const sunColor = $derived(color ?? accents.flower.yellow);
24
+ </script>
25
+
26
+ <!-- Sun with optional rays -->
27
+ <svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
28
+ {#if rays}
29
+ <!-- Sun rays -->
30
+ <g class={animate ? 'spin' : ''} opacity="0.8">
31
+ <line x1="50" y1="5" x2="50" y2="20" stroke={sunColor} stroke-width="3" stroke-linecap="round" />
32
+ <line x1="50" y1="80" x2="50" y2="95" stroke={sunColor} stroke-width="3" stroke-linecap="round" />
33
+ <line x1="5" y1="50" x2="20" y2="50" stroke={sunColor} stroke-width="3" stroke-linecap="round" />
34
+ <line x1="80" y1="50" x2="95" y2="50" stroke={sunColor} stroke-width="3" stroke-linecap="round" />
35
+ <!-- Diagonal rays -->
36
+ <line x1="18" y1="18" x2="28" y2="28" stroke={sunColor} stroke-width="2.5" stroke-linecap="round" />
37
+ <line x1="72" y1="28" x2="82" y2="18" stroke={sunColor} stroke-width="2.5" stroke-linecap="round" />
38
+ <line x1="18" y1="82" x2="28" y2="72" stroke={sunColor} stroke-width="2.5" stroke-linecap="round" />
39
+ <line x1="72" y1="72" x2="82" y2="82" stroke={sunColor} stroke-width="2.5" stroke-linecap="round" />
40
+ </g>
41
+ {/if}
42
+
43
+ <!-- Sun body -->
44
+ <circle fill={sunColor} cx="50" cy="50" r="25" class={animate ? 'pulse' : ''} />
45
+
46
+ <!-- Inner glow -->
47
+ <circle fill="white" cx="50" cy="50" r="15" opacity="0.3" />
48
+ </svg>
49
+
50
+ <style>
51
+ @keyframes spin {
52
+ 0% { transform: rotate(0deg); }
53
+ 100% { transform: rotate(360deg); }
54
+ }
55
+
56
+ @keyframes pulse {
57
+ 0%, 100% { transform: scale(1); }
58
+ 50% { transform: scale(1.02); }
59
+ }
60
+
61
+ .spin {
62
+ transform-origin: center center;
63
+ animation: spin 60s linear infinite;
64
+ }
65
+
66
+ .pulse {
67
+ transform-origin: center center;
68
+ animation: pulse 4s ease-in-out infinite;
69
+ }
70
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ class?: string;
3
+ color?: string;
4
+ rays?: boolean;
5
+ animate?: boolean;
6
+ }
7
+ declare const Sun: import("svelte").Component<Props, {}, "">;
8
+ type Sun = ReturnType<typeof Sun>;
9
+ export default Sun;
@@ -0,0 +1,8 @@
1
+ export { default as Cloud } from './Cloud.svelte';
2
+ export { default as CloudWispy } from './CloudWispy.svelte';
3
+ export { default as Moon } from './Moon.svelte';
4
+ export { default as Rainbow } from './Rainbow.svelte';
5
+ export { default as Star } from './Star.svelte';
6
+ export { default as StarCluster } from './StarCluster.svelte';
7
+ export { default as StarShooting } from './StarShooting.svelte';
8
+ export { default as Sun } from './Sun.svelte';
@@ -0,0 +1,9 @@
1
+ // Sky components - celestial elements
2
+ export { default as Cloud } from './Cloud.svelte';
3
+ export { default as CloudWispy } from './CloudWispy.svelte';
4
+ export { default as Moon } from './Moon.svelte';
5
+ export { default as Rainbow } from './Rainbow.svelte';
6
+ export { default as Star } from './Star.svelte';
7
+ export { default as StarCluster } from './StarCluster.svelte';
8
+ export { default as StarShooting } from './StarShooting.svelte';
9
+ export { default as Sun } from './Sun.svelte';
@@ -0,0 +1,53 @@
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
+ bodyColor?: string;
12
+ roofColor?: string;
13
+ }
14
+
15
+ let {
16
+ class: className = 'w-8 h-12',
17
+ bodyColor,
18
+ roofColor
19
+ }: Props = $props();
20
+
21
+ const body = $derived(bodyColor ?? earth.sand);
22
+ const roof = $derived(roofColor ?? bark.warmBark);
23
+ const pole = bark.bark;
24
+ const hole = bark.darkBark;
25
+ const perch = bark.lightBark;
26
+ </script>
27
+
28
+ <!-- Birdhouse on pole -->
29
+ <svg class={className} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 80">
30
+ <!-- Pole -->
31
+ <rect fill={pole} x="22" y="50" width="6" height="30" />
32
+
33
+ <!-- House body -->
34
+ <rect fill={body} x="10" y="25" width="30" height="28" rx="2" />
35
+
36
+ <!-- Roof -->
37
+ <polygon fill={roof} points="5,27 25,8 45,27" />
38
+ <!-- Roof overhang shadow -->
39
+ <polygon fill={bark.darkBark} points="8,27 25,12 42,27 40,27 25,14 10,27" opacity="0.3" />
40
+
41
+ <!-- Entrance hole -->
42
+ <circle fill={hole} cx="25" cy="38" r="6" />
43
+
44
+ <!-- Perch -->
45
+ <rect fill={perch} x="22" y="48" width="6" height="3" rx="1" />
46
+ <ellipse fill={perch} cx="25" cy="51" rx="4" ry="2" />
47
+
48
+ <!-- Roof detail lines -->
49
+ <line x1="25" y1="10" x2="25" y2="26" stroke={bark.darkBark} stroke-width="1" opacity="0.3" />
50
+
51
+ <!-- Body highlight -->
52
+ <rect fill="white" x="12" y="27" width="8" height="24" rx="1" opacity="0.1" />
53
+ </svg>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ class?: string;
3
+ bodyColor?: string;
4
+ roofColor?: string;
5
+ }
6
+ declare const Birdhouse: import("svelte").Component<Props, {}, "">;
7
+ type Birdhouse = ReturnType<typeof Birdhouse>;
8
+ export default Birdhouse;