@autumnsgrove/groveengine 0.9.3 → 0.9.4
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/components/admin/GutterManager.svelte +314 -35
- package/dist/components/admin/MarkdownEditor.svelte +105 -40
- package/dist/components/admin/MarkdownEditor.svelte.d.ts +2 -0
- package/dist/components/custom/ContentWithGutter.svelte +12 -2
- package/dist/components/custom/GutterItem.svelte +122 -47
- package/dist/components/custom/TableOfContents.svelte +36 -3
- package/dist/components/quota/UpgradePrompt.svelte +12 -16
- package/dist/config/index.d.ts +4 -3
- package/dist/config/index.js +4 -3
- package/dist/config/tiers.d.ts +134 -0
- package/dist/config/tiers.js +402 -0
- package/dist/groveauth/types.d.ts +4 -1
- package/dist/groveauth/types.js +9 -13
- package/dist/payments/shop.d.ts +3 -3
- package/dist/payments/shop.js +271 -95
- package/dist/server/billing.d.ts +29 -0
- package/dist/server/billing.js +80 -0
- package/dist/server/env-validation.d.ts +68 -0
- package/dist/server/env-validation.js +95 -0
- package/dist/server/rate-limits/config.d.ts +24 -96
- package/dist/server/rate-limits/config.js +35 -59
- package/dist/server/rate-limits/tenant.d.ts +1 -69
- package/dist/server/services/database.d.ts +1 -1
- package/dist/server/services/database.js +69 -59
- package/dist/server/services/storage.d.ts +2 -1
- package/dist/server/services/storage.js +115 -91
- package/dist/server/tier-features.d.ts +56 -0
- package/dist/server/tier-features.js +79 -0
- package/dist/ui/components/chrome/Footer.svelte +16 -2
- package/dist/ui/components/chrome/Header.svelte +15 -19
- package/dist/ui/components/chrome/Header.svelte.d.ts +2 -2
- package/dist/ui/components/chrome/ThemeToggle.svelte +86 -27
- package/dist/ui/components/icons/index.d.ts +3 -3
- package/dist/ui/components/icons/index.js +6 -6
- package/dist/ui/components/icons/lucide.d.ts +15 -2
- package/dist/ui/components/icons/lucide.js +15 -3
- package/dist/ui/components/nature/GroveDivider.svelte +24 -28
- package/dist/ui/components/nature/GroveDivider.svelte.d.ts +5 -7
- package/dist/ui/components/nature/{Logo.svelte.d.ts → LogoArchive.svelte.d.ts} +3 -3
- package/dist/ui/components/nature/creatures/Bee.svelte +2 -2
- package/dist/ui/components/nature/creatures/Butterfly.svelte +3 -3
- package/dist/ui/components/nature/creatures/Owl.svelte +2 -2
- package/dist/ui/components/nature/ground/FlowerWild.svelte +3 -3
- package/dist/ui/components/nature/index.d.ts +12 -11
- package/dist/ui/components/nature/index.js +14 -12
- package/dist/ui/components/nature/palette.d.ts +106 -10
- package/dist/ui/components/nature/palette.js +211 -147
- package/dist/ui/components/nature/sky/Sun.svelte +2 -2
- package/dist/ui/components/nature/structural/LatticeWithVine.svelte +2 -2
- package/dist/ui/components/nature/water/LilyPad.svelte +2 -2
- package/dist/ui/components/ui/GlassLogo.svelte +354 -300
- package/dist/ui/components/ui/GlassLogo.svelte.d.ts +76 -13
- package/dist/ui/components/ui/GlassLogoArchive.svelte +415 -0
- package/dist/ui/components/ui/GlassLogoArchive.svelte.d.ts +23 -0
- package/dist/ui/components/ui/Logo.svelte +269 -169
- package/dist/ui/components/ui/Logo.svelte.d.ts +93 -14
- package/dist/ui/components/ui/LogoArchive.svelte +220 -0
- package/dist/ui/components/ui/LogoArchive.svelte.d.ts +20 -0
- package/dist/ui/components/ui/LogoLoader.svelte +1 -1
- package/dist/ui/components/ui/index.d.ts +30 -28
- package/dist/ui/components/ui/index.js +31 -29
- package/dist/ui/stores/season.d.ts +12 -2
- package/dist/ui/stores/season.js +101 -18
- package/dist/ui/types/index.d.ts +6 -0
- package/dist/ui/types/index.js +7 -0
- package/dist/ui/types/season.d.ts +36 -0
- package/dist/ui/types/season.js +86 -0
- package/dist/ui/utils/color.d.ts +69 -0
- package/dist/ui/utils/color.js +155 -0
- package/dist/ui/utils/index.d.ts +2 -1
- package/dist/ui/utils/index.js +5 -2
- package/package.json +22 -20
- package/static/favicon.png +0 -0
- package/static/favicon.svg +6 -0
- package/static/fonts/alagard.ttf +0 -0
- package/LICENSE +0 -378
- /package/dist/ui/components/nature/{Logo.svelte → LogoArchive.svelte} +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { page } from '$app/stores';
|
|
3
|
-
import { Logo } from '../
|
|
3
|
+
import { Logo } from '../ui';
|
|
4
4
|
import ThemeToggle from './ThemeToggle.svelte';
|
|
5
5
|
import MobileMenu from './MobileMenu.svelte';
|
|
6
6
|
import { seasonStore } from '../../stores/season';
|
|
7
|
+
import { themeStore } from '../../stores/theme';
|
|
7
8
|
import { Menu } from 'lucide-svelte';
|
|
8
|
-
import type { NavItem, MaxWidth
|
|
9
|
+
import type { NavItem, MaxWidth } from './types';
|
|
10
|
+
import type { Season } from '../../types/season';
|
|
9
11
|
import { isActivePath } from './types';
|
|
10
12
|
import { DEFAULT_NAV_ITEMS } from './defaults';
|
|
11
13
|
|
|
@@ -17,15 +19,13 @@
|
|
|
17
19
|
maxWidth?: MaxWidth;
|
|
18
20
|
brandTitle?: string;
|
|
19
21
|
season?: Season;
|
|
20
|
-
onSeasonChange?: () => void;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
let {
|
|
24
25
|
navItems,
|
|
25
26
|
maxWidth = 'default',
|
|
26
27
|
brandTitle,
|
|
27
|
-
season
|
|
28
|
-
onSeasonChange
|
|
28
|
+
season
|
|
29
29
|
}: Props = $props();
|
|
30
30
|
|
|
31
31
|
const maxWidthClass = {
|
|
@@ -37,13 +37,9 @@
|
|
|
37
37
|
// Mobile menu state
|
|
38
38
|
let mobileMenuOpen = $state(false);
|
|
39
39
|
|
|
40
|
-
// Toggle
|
|
40
|
+
// Toggle dark/light mode on logo click
|
|
41
41
|
function handleLogoClick() {
|
|
42
|
-
|
|
43
|
-
onSeasonChange();
|
|
44
|
-
} else {
|
|
45
|
-
seasonStore.cycle();
|
|
46
|
-
}
|
|
42
|
+
themeStore.toggle();
|
|
47
43
|
}
|
|
48
44
|
|
|
49
45
|
const items = navItems || DEFAULT_NAV_ITEMS;
|
|
@@ -53,15 +49,15 @@
|
|
|
53
49
|
<div class="{maxWidthClass[maxWidth]} mx-auto flex items-center justify-between">
|
|
54
50
|
<!-- Logo area -->
|
|
55
51
|
<div class="flex items-center gap-2">
|
|
56
|
-
<!-- Logo icon - clickable to toggle
|
|
57
|
-
<
|
|
52
|
+
<!-- Logo icon - clickable to toggle dark/light mode -->
|
|
53
|
+
<Logo
|
|
54
|
+
class="w-6 h-6"
|
|
55
|
+
season={season || $seasonStore}
|
|
56
|
+
interactive
|
|
58
57
|
onclick={handleLogoClick}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
>
|
|
63
|
-
<Logo class="w-6 h-6" season={season || $seasonStore} />
|
|
64
|
-
</button>
|
|
58
|
+
title="Toggle dark/light mode"
|
|
59
|
+
ariaLabel="Toggle dark or light theme"
|
|
60
|
+
/>
|
|
65
61
|
|
|
66
62
|
<!-- Brand title or "Grove" text - home link, hidden on mobile -->
|
|
67
63
|
{#if brandTitle}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { NavItem, MaxWidth
|
|
1
|
+
import type { NavItem, MaxWidth } from './types';
|
|
2
|
+
import type { Season } from '../../types/season';
|
|
2
3
|
interface Props {
|
|
3
4
|
navItems?: NavItem[];
|
|
4
5
|
maxWidth?: MaxWidth;
|
|
5
6
|
brandTitle?: string;
|
|
6
7
|
season?: Season;
|
|
7
|
-
onSeasonChange?: () => void;
|
|
8
8
|
}
|
|
9
9
|
declare const Header: import("svelte").Component<Props, {}, "">;
|
|
10
10
|
type Header = ReturnType<typeof Header>;
|
|
@@ -1,34 +1,93 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Season Indicator — Footer Easter Egg
|
|
4
|
+
*
|
|
5
|
+
* Displays the current season and acts as the gateway to Midnight mode.
|
|
6
|
+
* - Shows current season icon + label
|
|
7
|
+
* - Tap to activate Midnight (the queer fifth season)
|
|
8
|
+
* - In midnight mode, tap again to return to previous season
|
|
9
|
+
*
|
|
10
|
+
* The header logo cycles through 4 regular seasons.
|
|
11
|
+
* This indicator is the only way to enter midnight mode.
|
|
12
|
+
*/
|
|
3
13
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
14
|
+
import { seasonStore } from "../../stores/season";
|
|
15
|
+
import { SEASON_LABELS, type Season } from "../../types/season";
|
|
16
|
+
import { seasonIcons } from "../icons/lucide";
|
|
17
|
+
|
|
18
|
+
// Current season from store
|
|
19
|
+
let currentSeason: Season = $derived($seasonStore);
|
|
20
|
+
let isMidnight = $derived(currentSeason === "midnight");
|
|
21
|
+
|
|
22
|
+
// Get display info for current season
|
|
23
|
+
let label = $derived(SEASON_LABELS[currentSeason]);
|
|
24
|
+
let IconComponent = $derived(seasonIcons[currentSeason]);
|
|
25
|
+
|
|
26
|
+
// Handle click - toggle midnight mode (easter egg!)
|
|
27
|
+
function handleClick() {
|
|
28
|
+
seasonStore.toggleMidnight();
|
|
29
|
+
}
|
|
7
30
|
</script>
|
|
8
31
|
|
|
9
32
|
<button
|
|
10
|
-
onclick={
|
|
11
|
-
class="
|
|
12
|
-
|
|
13
|
-
|
|
33
|
+
onclick={handleClick}
|
|
34
|
+
class="relative group flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg transition-all duration-300
|
|
35
|
+
{isMidnight
|
|
36
|
+
? 'text-purple-300 bg-purple-950/60 hover:bg-purple-900/60 ring-1 ring-purple-500/40 shadow-lg shadow-purple-500/20'
|
|
37
|
+
: 'text-foreground-subtle hover:text-foreground hover:bg-surface/80'}"
|
|
38
|
+
aria-label={isMidnight
|
|
39
|
+
? "Exit midnight mode"
|
|
40
|
+
: `Current season: ${label}. Tap for midnight mode.`}
|
|
41
|
+
title={isMidnight ? "Return to daylight" : `${label} — tap for something special`}
|
|
14
42
|
>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
43
|
+
<!-- Season icon with bloom animation on midnight -->
|
|
44
|
+
<span
|
|
45
|
+
class="transition-transform duration-500 ease-out
|
|
46
|
+
{isMidnight ? 'scale-110' : 'group-hover:scale-110'}"
|
|
47
|
+
>
|
|
48
|
+
<svelte:component
|
|
49
|
+
this={IconComponent}
|
|
50
|
+
class="w-4 h-4 {isMidnight ? 'animate-pulse' : ''}"
|
|
51
|
+
strokeWidth={2}
|
|
52
|
+
/>
|
|
53
|
+
</span>
|
|
54
|
+
|
|
55
|
+
<!-- Season label - compact display -->
|
|
56
|
+
<span
|
|
57
|
+
class="text-xs font-medium tracking-wide transition-colors duration-300
|
|
58
|
+
{isMidnight
|
|
59
|
+
? 'text-purple-200'
|
|
60
|
+
: 'text-foreground-muted group-hover:text-foreground-subtle'}"
|
|
61
|
+
>
|
|
62
|
+
{label}
|
|
63
|
+
</span>
|
|
64
|
+
|
|
65
|
+
<!-- Subtle glow ring when in midnight (easter egg active indicator) -->
|
|
66
|
+
{#if isMidnight}
|
|
67
|
+
<span
|
|
68
|
+
class="absolute inset-0 rounded-lg ring-2 ring-purple-400/20 animate-pulse pointer-events-none"
|
|
69
|
+
></span>
|
|
33
70
|
{/if}
|
|
34
|
-
</button>
|
|
71
|
+
</button>
|
|
72
|
+
|
|
73
|
+
<style>
|
|
74
|
+
/* Bloom animation for entering midnight */
|
|
75
|
+
@keyframes bloom {
|
|
76
|
+
0% {
|
|
77
|
+
transform: scale(1);
|
|
78
|
+
filter: brightness(1);
|
|
79
|
+
}
|
|
80
|
+
50% {
|
|
81
|
+
transform: scale(1.15);
|
|
82
|
+
filter: brightness(1.2);
|
|
83
|
+
}
|
|
84
|
+
100% {
|
|
85
|
+
transform: scale(1.1);
|
|
86
|
+
filter: brightness(1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
button:active span:first-child {
|
|
91
|
+
animation: bloom 0.3s ease-out;
|
|
92
|
+
}
|
|
93
|
+
</style>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as Icons } from
|
|
2
|
-
export { default as IconLegend } from
|
|
3
|
-
export { navIcons, stateIcons, pricingIcons, featureIcons, growthIcons, phaseIcons, actionIcons, metricsIcons, allIcons, type IconKey, getIcon, getIconFromAll, Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Clock, TrendingUp, Users, Activity, Plus, Copy, Trash2, RefreshCw, Fingerprint, Key, Link2, authIcons, } from
|
|
1
|
+
export { default as Icons } from "./Icons.svelte";
|
|
2
|
+
export { default as IconLegend } from "./IconLegend.svelte";
|
|
3
|
+
export { navIcons, stateIcons, pricingIcons, featureIcons, growthIcons, phaseIcons, seasonIcons, actionIcons, metricsIcons, allIcons, type IconKey, getIcon, getIconFromAll, Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Moon, Sun, Snowflake, Clock, TrendingUp, Users, Activity, Plus, Copy, Trash2, RefreshCw, Fingerprint, Key, Link2, authIcons, } from "./lucide";
|
|
4
4
|
export declare const ICONS_VERSION = "0.3.0";
|
|
@@ -7,20 +7,20 @@
|
|
|
7
7
|
// import { Icons, IconLegend } from '@autumnsgrove/groveengine/ui/icons';
|
|
8
8
|
// import { stateIcons, pricingIcons, Check } from '@autumnsgrove/groveengine/ui/icons';
|
|
9
9
|
// Custom SVG components
|
|
10
|
-
export { default as Icons } from
|
|
11
|
-
export { default as IconLegend } from
|
|
10
|
+
export { default as Icons } from "./Icons.svelte";
|
|
11
|
+
export { default as IconLegend } from "./IconLegend.svelte";
|
|
12
12
|
// Lucide icon registries and utilities
|
|
13
13
|
export {
|
|
14
14
|
// Icon maps (semantic groupings)
|
|
15
|
-
navIcons, stateIcons, pricingIcons, featureIcons, growthIcons, phaseIcons, actionIcons, metricsIcons, allIcons,
|
|
15
|
+
navIcons, stateIcons, pricingIcons, featureIcons, growthIcons, phaseIcons, seasonIcons, actionIcons, metricsIcons, allIcons,
|
|
16
16
|
// Utilities
|
|
17
17
|
getIcon, getIconFromAll,
|
|
18
18
|
// Direct icon exports (commonly used)
|
|
19
|
-
Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Clock, TrendingUp, Users, Activity,
|
|
19
|
+
Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Moon, Sun, Snowflake, Clock, TrendingUp, Users, Activity,
|
|
20
20
|
// Actions
|
|
21
21
|
Plus, Copy, Trash2, RefreshCw,
|
|
22
22
|
// Authentication
|
|
23
23
|
Fingerprint, Key, Link2,
|
|
24
24
|
// Also export the authIcons map
|
|
25
|
-
authIcons, } from
|
|
26
|
-
export const ICONS_VERSION =
|
|
25
|
+
authIcons, } from "./lucide";
|
|
26
|
+
export const ICONS_VERSION = "0.3.0";
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* <svelte:component this={stateIcons.check} class="w-5 h-5" />
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
import { Home, Info, Telescope, MapPin, HandCoins, BookOpen, Trees, PenLine, ArrowRight, ArrowLeft, ChevronRight, ChevronLeft, ChevronDown, ExternalLink, LogIn, Mail, HardDrive, Palette, ShieldCheck, Shield, Cloud, SearchCode, Archive, Upload, MessagesSquare, MessageCircle, FileText, Tag, Rss, Eye, Github, Layers, Sprout, Heart, Leaf, Flower2, TreeDeciduous, Crown, Check, CheckCircle, X, Loader2, AlertTriangle, HelpCircle, Circle, Lock, Gem, Sparkles, Star, Moon, Sun, Compass, Megaphone, Lightbulb, Download, Settings, Menu, Plus, Copy, Trash2, RefreshCw, Clock, TrendingUp, TrendingDown, Activity, Users, ShieldUser, BarChart3, Globe, CalendarDays, LifeBuoy, Fingerprint, Key, Link2 } from "lucide-svelte";
|
|
15
|
+
import { Home, Info, Telescope, MapPin, HandCoins, BookOpen, Trees, PenLine, ArrowRight, ArrowLeft, ChevronRight, ChevronLeft, ChevronDown, ExternalLink, LogIn, Mail, HardDrive, Palette, ShieldCheck, Shield, Cloud, SearchCode, Archive, Upload, MessagesSquare, MessageCircle, FileText, Tag, Rss, Eye, Github, Layers, Sprout, Heart, Leaf, Flower2, TreeDeciduous, Crown, Check, CheckCircle, X, Loader2, AlertTriangle, HelpCircle, Circle, Lock, Gem, Sparkles, Star, Moon, Sun, Snowflake, Compass, Megaphone, Lightbulb, Download, Settings, Menu, Plus, Copy, Trash2, RefreshCw, Clock, TrendingUp, TrendingDown, Activity, Users, ShieldUser, BarChart3, Globe, CalendarDays, LifeBuoy, Fingerprint, Key, Link2 } from "lucide-svelte";
|
|
16
16
|
/** Icons for main navigation items */
|
|
17
17
|
export declare const navIcons: {
|
|
18
18
|
readonly home: typeof Home;
|
|
@@ -102,6 +102,14 @@ export declare const phaseIcons: {
|
|
|
102
102
|
readonly sun: typeof Sun;
|
|
103
103
|
readonly sprout: typeof Sprout;
|
|
104
104
|
};
|
|
105
|
+
/** Icons for Grove's seasonal theming system */
|
|
106
|
+
export declare const seasonIcons: {
|
|
107
|
+
readonly spring: typeof Flower2;
|
|
108
|
+
readonly summer: typeof Sun;
|
|
109
|
+
readonly autumn: typeof Leaf;
|
|
110
|
+
readonly winter: typeof Snowflake;
|
|
111
|
+
readonly midnight: typeof Moon;
|
|
112
|
+
};
|
|
105
113
|
/** Icons for user actions and processes */
|
|
106
114
|
export declare const actionIcons: {
|
|
107
115
|
readonly compass: typeof Compass;
|
|
@@ -167,6 +175,11 @@ export declare const allIcons: {
|
|
|
167
175
|
readonly copy: typeof Copy;
|
|
168
176
|
readonly trash: typeof Trash2;
|
|
169
177
|
readonly refresh: typeof RefreshCw;
|
|
178
|
+
readonly spring: typeof Flower2;
|
|
179
|
+
readonly summer: typeof Sun;
|
|
180
|
+
readonly autumn: typeof Leaf;
|
|
181
|
+
readonly winter: typeof Snowflake;
|
|
182
|
+
readonly midnight: typeof Moon;
|
|
170
183
|
readonly gem: typeof Gem;
|
|
171
184
|
readonly sparkles: typeof Sparkles;
|
|
172
185
|
readonly star: typeof Star;
|
|
@@ -232,4 +245,4 @@ export declare function getIcon<T extends Record<string, any>>(map: T, key: keyo
|
|
|
232
245
|
* ```
|
|
233
246
|
*/
|
|
234
247
|
export declare function getIconFromAll(key: string): any;
|
|
235
|
-
export { Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Layers, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Clock, TrendingUp, Users, Activity, Plus, Copy, Trash2, RefreshCw, Fingerprint, Key, Link2, };
|
|
248
|
+
export { Check, CheckCircle, X, ArrowRight, ArrowLeft, MapPin, Sprout, Trees, TreeDeciduous, Crown, Flower2, Leaf, Heart, Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github, Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Layers, Loader2, AlertTriangle, HelpCircle, Lock, Sparkles, Moon, Sun, Snowflake, Clock, TrendingUp, Users, Activity, Plus, Copy, Trash2, RefreshCw, Fingerprint, Key, Link2, };
|
|
@@ -22,7 +22,7 @@ Sprout, Heart, Leaf, Flower2, TreeDeciduous, Crown,
|
|
|
22
22
|
// States & Feedback
|
|
23
23
|
Check, CheckCircle, X, Loader2, AlertTriangle, HelpCircle, Info as InfoIcon, Circle, Lock,
|
|
24
24
|
// Phases & Special
|
|
25
|
-
Gem, Sparkles, Star, Moon, Sun,
|
|
25
|
+
Gem, Sparkles, Star, Moon, Sun, Snowflake,
|
|
26
26
|
// Actions
|
|
27
27
|
Compass, Megaphone, Lightbulb, Download, Settings, Menu, Plus, Copy, Trash2, RefreshCw,
|
|
28
28
|
// Metrics
|
|
@@ -142,6 +142,17 @@ export const phaseIcons = {
|
|
|
142
142
|
sprout: Sprout,
|
|
143
143
|
};
|
|
144
144
|
// ============================================================================
|
|
145
|
+
// SEASON ICONS
|
|
146
|
+
// ============================================================================
|
|
147
|
+
/** Icons for Grove's seasonal theming system */
|
|
148
|
+
export const seasonIcons = {
|
|
149
|
+
spring: Flower2,
|
|
150
|
+
summer: Sun,
|
|
151
|
+
autumn: Leaf,
|
|
152
|
+
winter: Snowflake,
|
|
153
|
+
midnight: Moon,
|
|
154
|
+
};
|
|
155
|
+
// ============================================================================
|
|
145
156
|
// ACTION ICONS
|
|
146
157
|
// ============================================================================
|
|
147
158
|
/** Icons for user actions and processes */
|
|
@@ -197,6 +208,7 @@ export const allIcons = {
|
|
|
197
208
|
...featureIcons,
|
|
198
209
|
...growthIcons,
|
|
199
210
|
...phaseIcons,
|
|
211
|
+
...seasonIcons,
|
|
200
212
|
...actionIcons,
|
|
201
213
|
...authIcons,
|
|
202
214
|
...metricsIcons,
|
|
@@ -239,8 +251,8 @@ Home, Menu, Settings, ExternalLink, ChevronDown, LogIn, Github,
|
|
|
239
251
|
Mail, HardDrive, Palette, Shield, Download, Rss, Eye, MessageCircle, Layers,
|
|
240
252
|
// States
|
|
241
253
|
Loader2, AlertTriangle, HelpCircle, Lock,
|
|
242
|
-
// Phase/Special
|
|
243
|
-
Sparkles,
|
|
254
|
+
// Phase/Special & Seasons
|
|
255
|
+
Sparkles, Moon, Sun, Snowflake,
|
|
244
256
|
// Metrics
|
|
245
257
|
Clock, TrendingUp, Users, Activity,
|
|
246
258
|
// Actions
|
|
@@ -6,25 +6,24 @@
|
|
|
6
6
|
GroveDivider - A decorative divider featuring alternating Grove logos
|
|
7
7
|
|
|
8
8
|
Props:
|
|
9
|
-
count
|
|
10
|
-
size
|
|
11
|
-
glass
|
|
12
|
-
variant
|
|
13
|
-
vertical
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class - Additional CSS classes
|
|
9
|
+
count - Number of logos (default: 7)
|
|
10
|
+
size - 'xs' | 'sm' | 'md' | 'lg' (default: 'sm')
|
|
11
|
+
glass - Use GlassLogo instead of regular Logo
|
|
12
|
+
variant - Glass variant: 'default' | 'accent' | 'frosted' | 'dark' | 'ethereal'
|
|
13
|
+
vertical - Display vertically instead of horizontally
|
|
14
|
+
monochromeTrunk - Trunk matches foliage color
|
|
15
|
+
monochromeColor - Custom color override (applies to all tiers)
|
|
16
|
+
season - Override season (uses seasonStore by default)
|
|
17
|
+
gap - Tailwind gap class (default: 'gap-1.5')
|
|
18
|
+
spacing - Gap in pixels or rem (overrides gap if provided)
|
|
19
|
+
rotation - Logo rotation mode: 'default' | 'left-right' | 'up-down' (default: auto based on orientation)
|
|
20
|
+
class - Additional CSS classes
|
|
22
21
|
-->
|
|
23
22
|
<script lang="ts">
|
|
24
|
-
import Logo from '
|
|
23
|
+
import Logo from '../ui/Logo.svelte';
|
|
25
24
|
import GlassLogo from '../ui/GlassLogo.svelte';
|
|
26
25
|
import type { GlassVariant } from '../ui/types';
|
|
27
|
-
import type { Season } from '
|
|
26
|
+
import type { Season } from '../../types/season';
|
|
28
27
|
import { seasonStore } from '../../stores/season';
|
|
29
28
|
|
|
30
29
|
type RotationMode = 'default' | 'left-right' | 'up-down';
|
|
@@ -48,12 +47,10 @@
|
|
|
48
47
|
glass?: boolean;
|
|
49
48
|
/** Glass variant (only applies when glass=true) */
|
|
50
49
|
variant?: GlassVariant;
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
/** Custom color override (for regular Logo) */
|
|
56
|
-
color?: string;
|
|
50
|
+
/** Make trunk match foliage colors */
|
|
51
|
+
monochromeTrunk?: boolean;
|
|
52
|
+
/** Custom color override (applies to all tiers) */
|
|
53
|
+
monochromeColor?: string;
|
|
57
54
|
/** Display vertically instead of horizontally */
|
|
58
55
|
vertical?: boolean;
|
|
59
56
|
}
|
|
@@ -68,9 +65,8 @@
|
|
|
68
65
|
rotation = 'default',
|
|
69
66
|
glass = false,
|
|
70
67
|
variant = 'default',
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
color,
|
|
68
|
+
monochromeTrunk = false,
|
|
69
|
+
monochromeColor,
|
|
74
70
|
vertical = false
|
|
75
71
|
}: Props = $props();
|
|
76
72
|
|
|
@@ -121,15 +117,15 @@
|
|
|
121
117
|
class={sizeClasses[size]}
|
|
122
118
|
season={activeSeason}
|
|
123
119
|
{variant}
|
|
124
|
-
{
|
|
125
|
-
{
|
|
120
|
+
accentColor={monochromeColor}
|
|
121
|
+
{monochromeTrunk}
|
|
126
122
|
/>
|
|
127
123
|
{:else}
|
|
128
124
|
<Logo
|
|
129
125
|
class={sizeClasses[size]}
|
|
130
126
|
season={activeSeason}
|
|
131
|
-
{
|
|
132
|
-
|
|
127
|
+
{monochromeColor}
|
|
128
|
+
{monochromeTrunk}
|
|
133
129
|
/>
|
|
134
130
|
{/if}
|
|
135
131
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { GlassVariant } from '../ui/types';
|
|
2
|
-
import type { Season } from '
|
|
2
|
+
import type { Season } from '../../types/season';
|
|
3
3
|
type RotationMode = 'default' | 'left-right' | 'up-down';
|
|
4
4
|
interface Props {
|
|
5
5
|
/** Number of logos to display (default: 7) */
|
|
@@ -20,12 +20,10 @@ interface Props {
|
|
|
20
20
|
glass?: boolean;
|
|
21
21
|
/** Glass variant (only applies when glass=true) */
|
|
22
22
|
variant?: GlassVariant;
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/** Custom color override (for regular Logo) */
|
|
28
|
-
color?: string;
|
|
23
|
+
/** Make trunk match foliage colors */
|
|
24
|
+
monochromeTrunk?: boolean;
|
|
25
|
+
/** Custom color override (applies to all tiers) */
|
|
26
|
+
monochromeColor?: string;
|
|
29
27
|
/** Display vertically instead of horizontally */
|
|
30
28
|
vertical?: boolean;
|
|
31
29
|
}
|
|
@@ -9,6 +9,6 @@ interface Props {
|
|
|
9
9
|
/** Add breathing animation (subtle pulse for loading states) */
|
|
10
10
|
breathing?: boolean;
|
|
11
11
|
}
|
|
12
|
-
declare const
|
|
13
|
-
type
|
|
14
|
-
export default
|
|
12
|
+
declare const LogoArchive: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type LogoArchive = ReturnType<typeof LogoArchive>;
|
|
14
|
+
export default LogoArchive;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Licensed under AGPL-3.0
|
|
5
5
|
-->
|
|
6
6
|
<script lang="ts">
|
|
7
|
-
import {
|
|
7
|
+
import { flowers, bark } from '../palette';
|
|
8
8
|
|
|
9
9
|
interface Props {
|
|
10
10
|
class?: string;
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
animate = true
|
|
21
21
|
}: Props = $props();
|
|
22
22
|
|
|
23
|
-
const body = $derived(bodyColor ??
|
|
23
|
+
const body = $derived(bodyColor ?? flowers.wildflower.buttercup);
|
|
24
24
|
const stripes = $derived(stripeColor ?? bark.darkBark);
|
|
25
25
|
const wingColor = $derived('#e0f2fe'); // Light blue-ish transparent
|
|
26
26
|
</script>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Licensed under AGPL-3.0
|
|
5
5
|
-->
|
|
6
6
|
<script lang="ts">
|
|
7
|
-
import {
|
|
7
|
+
import { flowers, bark } from '../palette';
|
|
8
8
|
|
|
9
9
|
interface Props {
|
|
10
10
|
class?: string;
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
animate = true
|
|
21
21
|
}: Props = $props();
|
|
22
22
|
|
|
23
|
-
const wing = $derived(wingColor ??
|
|
24
|
-
const accent = $derived(accentColor ??
|
|
23
|
+
const wing = $derived(wingColor ?? flowers.wildflower.purple);
|
|
24
|
+
const accent = $derived(accentColor ?? flowers.wildflower.buttercup);
|
|
25
25
|
const bodyColor = $derived(bark.darkBark);
|
|
26
26
|
</script>
|
|
27
27
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Licensed under AGPL-3.0
|
|
5
5
|
-->
|
|
6
6
|
<script lang="ts">
|
|
7
|
-
import { bark, earth,
|
|
7
|
+
import { bark, earth, flowers } from '../palette';
|
|
8
8
|
|
|
9
9
|
interface Props {
|
|
10
10
|
class?: string;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
const feathers = $derived(featherColor ?? bark.bark);
|
|
24
24
|
const lightFeathers = $derived(earth.clay);
|
|
25
|
-
const eyeColor = $derived(
|
|
25
|
+
const eyeColor = $derived(flowers.wildflower.buttercup);
|
|
26
26
|
const scaleX = $derived(facing === 'left' ? -1 : 1);
|
|
27
27
|
</script>
|
|
28
28
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Licensed under AGPL-3.0
|
|
5
5
|
-->
|
|
6
6
|
<script lang="ts">
|
|
7
|
-
import {
|
|
7
|
+
import { flowers, greens } from '../palette';
|
|
8
8
|
|
|
9
9
|
interface Props {
|
|
10
10
|
class?: string;
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
animate = true
|
|
23
23
|
}: Props = $props();
|
|
24
24
|
|
|
25
|
-
const petals = $derived(petalColor ??
|
|
26
|
-
const center = $derived(centerColor ??
|
|
25
|
+
const petals = $derived(petalColor ?? flowers.wildflower.purple);
|
|
26
|
+
const center = $derived(centerColor ?? flowers.wildflower.buttercup);
|
|
27
27
|
const stem = $derived(stemColor ?? greens.deepGreen);
|
|
28
28
|
</script>
|
|
29
29
|
|
|
@@ -16,14 +16,15 @@
|
|
|
16
16
|
* <Cardinal />
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
export {
|
|
20
|
-
export { default as
|
|
21
|
-
export
|
|
22
|
-
export * from
|
|
23
|
-
export * from
|
|
24
|
-
export * from
|
|
25
|
-
export * from
|
|
26
|
-
export * from
|
|
27
|
-
export * from
|
|
28
|
-
export * from
|
|
29
|
-
export * from
|
|
19
|
+
export { Logo } from "../ui";
|
|
20
|
+
export { default as LogoArchive } from "./LogoArchive.svelte";
|
|
21
|
+
export { default as GroveDivider } from "./GroveDivider.svelte";
|
|
22
|
+
export * from "./palette";
|
|
23
|
+
export * from "./trees";
|
|
24
|
+
export * from "./botanical";
|
|
25
|
+
export * from "./creatures";
|
|
26
|
+
export * from "./ground";
|
|
27
|
+
export * from "./sky";
|
|
28
|
+
export * from "./structural";
|
|
29
|
+
export * from "./water";
|
|
30
|
+
export * from "./weather";
|
|
@@ -16,25 +16,27 @@
|
|
|
16
16
|
* <Cardinal />
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
// Logo -
|
|
20
|
-
export {
|
|
19
|
+
// Logo - Re-export from ui module (new tree design)
|
|
20
|
+
export { Logo } from "../ui";
|
|
21
|
+
// LogoArchive - Original asterisk logo with nature animations (deprecated)
|
|
22
|
+
export { default as LogoArchive } from "./LogoArchive.svelte";
|
|
21
23
|
// GroveDivider - Decorative divider with alternating logos
|
|
22
|
-
export { default as GroveDivider } from
|
|
24
|
+
export { default as GroveDivider } from "./GroveDivider.svelte";
|
|
23
25
|
// Palette - Seasonal color system
|
|
24
|
-
export * from
|
|
26
|
+
export * from "./palette";
|
|
25
27
|
// Trees
|
|
26
|
-
export * from
|
|
28
|
+
export * from "./trees";
|
|
27
29
|
// Botanical elements
|
|
28
|
-
export * from
|
|
30
|
+
export * from "./botanical";
|
|
29
31
|
// Creatures
|
|
30
|
-
export * from
|
|
32
|
+
export * from "./creatures";
|
|
31
33
|
// Ground elements
|
|
32
|
-
export * from
|
|
34
|
+
export * from "./ground";
|
|
33
35
|
// Sky elements
|
|
34
|
-
export * from
|
|
36
|
+
export * from "./sky";
|
|
35
37
|
// Structural elements
|
|
36
|
-
export * from
|
|
38
|
+
export * from "./structural";
|
|
37
39
|
// Water elements
|
|
38
|
-
export * from
|
|
40
|
+
export * from "./water";
|
|
39
41
|
// Weather effects
|
|
40
|
-
export * from
|
|
42
|
+
export * from "./weather";
|