62317f2ad7
Mise en place du Design System ManageMate Group v0.2 — refonte du
système de tokens (préfixe --mmg-color-*), 9 presets accent
user-themable validés WCAG AA, overlays Radix UI + Floating UI,
Storybook 8 + Vitest + axe-core en CI, doc Astro Starlight,
DESIGN.md (format google-labs-code) et exports tokens DTCG/CSS/
TS/Figma/Tailwind v3 et v4.
- 4 packages monorepo pnpm : @managemate/{tokens,css,react,icons}
- 62 composants React headless-first (Sheet, HoverCard, ContextMenu,
Slider, ToggleGroup, AvatarGroup, UserCard, ProfileHeader,
MetricCard, PricingCard, FeatureCard, Text/Display/Eyebrow/Lead…)
- Lint contraste WCAG : 37/37 paires AA, branché CI
- Toast pile Sonner-style avec ResizeObserver
- Theming user (9 presets) sans casser sémantique fixe
- Identité Synapse (rose #D12B6A) préservée
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import type { Meta, StoryObj } from "@storybook/react";
|
|
import { ThemePicker, Button, Card } from "@managemate/react";
|
|
|
|
const meta = {
|
|
title: "Theming/ThemePicker",
|
|
component: ThemePicker,
|
|
tags: ["autodocs"],
|
|
parameters: {
|
|
docs: {
|
|
description: {
|
|
component:
|
|
"Sélecteur de couleur d'accent utilisateur. Pattern radiogroup avec navigation flèches, persistance localStorage. 9 presets validés AA.",
|
|
},
|
|
},
|
|
},
|
|
} satisfies Meta<typeof ThemePicker>;
|
|
|
|
export default meta;
|
|
type Story = StoryObj<typeof meta>;
|
|
|
|
export const Default: Story = {
|
|
render: () => <ThemePicker />,
|
|
};
|
|
|
|
export const InCard: Story = {
|
|
render: () => (
|
|
<Card style={{ maxWidth: 420 }}>
|
|
<h3>Préférences d'apparence</h3>
|
|
<p style={{ color: "var(--mmg-color-text-tertiary)", fontSize: "var(--mmg-font-size-sm)", marginBottom: 16 }}>
|
|
Choisissez la couleur d'accent qui vous convient. Cette préférence est sauvegardée localement.
|
|
</p>
|
|
<ThemePicker legend="Couleur d'accent" />
|
|
<div style={{ marginTop: 24, display: "flex", gap: 8 }}>
|
|
<Button variant="primary">Bouton primary</Button>
|
|
<Button variant="tonal">Bouton tonal</Button>
|
|
</div>
|
|
</Card>
|
|
),
|
|
};
|
|
|
|
export const HiddenReset: Story = {
|
|
render: () => <ThemePicker hideReset />,
|
|
};
|