managarten/packages/shared-theme-ui
Till-JS f436fbb99d feat(theme): migrate theme emojis to Phosphor icons and integrate theme system into Zitare
- Replace emoji with Phosphor icon components in ThemeCard
- Add icon property to ThemeVariantDefinition type
- Add theme icon SVG paths to PillDropdown (sparkle, leaf, hexagon, waves)
- Update all app layouts to use icon instead of emoji for theme variants
- Integrate shared-theme system into Zitare web app
- Migrate Zitare from Tailwind v3 to v4
- Add themes page to Zitare
- Update Zitare settings page with icon-based theme display
- Add missing shared-icons dependency to Presi and Zitare

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 09:24:32 +01:00
..
src feat(theme): migrate theme emojis to Phosphor icons and integrate theme system into Zitare 2025-11-29 09:24:32 +01:00
package.json feat(theme): add ThemePage components and distinct background colors 2025-11-29 09:03:20 +01:00
README.md style: auto-format codebase with Prettier 2025-11-27 18:33:16 +01:00
tsconfig.json style: auto-format codebase with Prettier 2025-11-27 18:33:16 +01:00

@manacore/shared-theme-ui

Svelte UI components for theme switching. Works with @manacore/shared-theme.

Features

  • ThemeToggle: Simple light/dark mode toggle button
  • ThemeSelector: Visual selector for theme variants
  • ThemeModeSelector: Segmented control for light/dark/system

Installation

pnpm add @manacore/shared-theme-ui

Prerequisites

  • @manacore/shared-theme - Theme store
  • @manacore/shared-icons - Icon components

Components

ThemeToggle

A simple button that toggles between light and dark mode.

<script lang="ts">
	import { theme } from '$lib/stores/theme';
	import { ThemeToggle } from '@manacore/shared-theme-ui';
</script>

<ThemeToggle {theme} />

<!-- With options -->
<ThemeToggle {theme} size={24} showTooltip={true} class="my-custom-class" />

Props

Prop Type Default Description
theme ThemeStore required Theme store instance
size number 20 Icon size in pixels
showTooltip boolean false Show tooltip on hover
class string '' Additional CSS classes

ThemeSelector

A visual selector showing all theme variants with color dots.

<script lang="ts">
	import { theme } from '$lib/stores/theme';
	import { ThemeSelector } from '@manacore/shared-theme-ui';
</script>

<ThemeSelector {theme} />

<!-- With options -->
<ThemeSelector {theme} showLabels={true} showEmoji={true} compact={false} class="my-custom-class" />

Props

Prop Type Default Description
theme ThemeStore required Theme store instance
showLabels boolean true Show variant labels
showEmoji boolean true Show variant emojis
compact boolean false Compact mode (smaller buttons)
class string '' Additional CSS classes

ThemeModeSelector

A segmented control for selecting light, dark, or system mode.

<script lang="ts">
	import { theme } from '$lib/stores/theme';
	import { ThemeModeSelector } from '@manacore/shared-theme-ui';
</script>

<ThemeModeSelector {theme} />

<!-- With options -->
<ThemeModeSelector {theme} class="my-custom-class" />

Props

Prop Type Default Description
theme ThemeStore required Theme store instance
class string '' Additional CSS classes

Complete Example

<script lang="ts">
	import { theme } from '$lib/stores/theme';
	import { ThemeToggle, ThemeSelector, ThemeModeSelector } from '@manacore/shared-theme-ui';
</script>

<div class="settings-panel">
	<h3>Appearance</h3>

	<!-- Quick toggle in header -->
	<div class="header">
		<ThemeToggle {theme} showTooltip />
	</div>

	<!-- Mode selection -->
	<section>
		<label>Mode</label>
		<ThemeModeSelector {theme} />
	</section>

	<!-- Variant selection -->
	<section>
		<label>Color Theme</label>
		<ThemeSelector {theme} />
	</section>
</div>

Styling

All components use CSS variables from @manacore/shared-tailwind/themes.css and are fully theme-aware. They automatically adapt to the current theme variant and mode.

Custom Styling

You can override styles using the class prop or by targeting the component classes:

/* Custom toggle button */
.theme-toggle {
	background-color: var(--my-custom-bg);
}

/* Custom selector buttons */
.variant-button.active {
	box-shadow: 0 0 0 2px var(--my-custom-ring);
}
  • @manacore/shared-theme - Theme store and utilities
  • @manacore/shared-tailwind - Tailwind preset with theme CSS
  • @manacore/shared-icons - Icon components