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>
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import type { Meta, StoryObj } from "@storybook/react";
|
|
import { useState } from "react";
|
|
import { Dialog, ConfirmDialog, Button } from "@managemate/react";
|
|
|
|
const meta = {
|
|
title: "Overlays/Dialog",
|
|
component: Dialog,
|
|
tags: ["autodocs"],
|
|
} satisfies Meta<typeof Dialog>;
|
|
|
|
export default meta;
|
|
type Story = StoryObj<typeof meta>;
|
|
|
|
export const Default: Story = {
|
|
render: () => {
|
|
const [open, setOpen] = useState(false);
|
|
return (
|
|
<>
|
|
<Button onClick={() => setOpen(true)}>Ouvrir le dialog</Button>
|
|
<Dialog
|
|
open={open}
|
|
onOpenChange={setOpen}
|
|
title="Modifier l'utilisateur"
|
|
description="Mettez à jour les informations de cet utilisateur. Les changements sont sauvegardés immédiatement."
|
|
footer={
|
|
<div style={{ display: "flex", gap: 8, justifyContent: "flex-end" }}>
|
|
<Button variant="ghost" onClick={() => setOpen(false)}>
|
|
Annuler
|
|
</Button>
|
|
<Button variant="primary" onClick={() => setOpen(false)}>
|
|
Sauvegarder
|
|
</Button>
|
|
</div>
|
|
}
|
|
>
|
|
<p>Contenu du dialog…</p>
|
|
</Dialog>
|
|
</>
|
|
);
|
|
},
|
|
};
|
|
|
|
export const Confirm: Story = {
|
|
name: "ConfirmDialog (destructive)",
|
|
render: () => {
|
|
const [open, setOpen] = useState(false);
|
|
return (
|
|
<>
|
|
<Button variant="danger" onClick={() => setOpen(true)}>
|
|
Supprimer le compte
|
|
</Button>
|
|
<ConfirmDialog
|
|
open={open}
|
|
onOpenChange={setOpen}
|
|
destructive
|
|
title="Supprimer définitivement ?"
|
|
description="Cette action est irréversible. Toutes les données associées à ce compte seront perdues."
|
|
confirmLabel="Supprimer définitivement"
|
|
onConfirm={() => alert("Confirmé")}
|
|
/>
|
|
</>
|
|
);
|
|
},
|
|
};
|