import { ErrorHttp } from "@krosoft/core/types"; import type { ButtonVariantType } from "../../../types"; import React from "react"; export type { ButtonVariantType }; export type AppDialogSize = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "full"; export interface DialogAction { /** Clé de rendu. À défaut, le libellé sert de clé : à renseigner si deux actions partagent le même. */ id?: string; /** Clé i18n, ou libellé déjà résolu — le repli i18next renvoie la chaîne telle quelle. */ label: string; onClick?: () => void; variant?: ButtonVariantType; disabled?: boolean; icon?: React.ElementType; className?: string; /** * `"submit"` combiné à `form` soumet un formulaire rendu dans `children` : c'est * ce qui évite de remonter le `submit` du formulaire jusqu'au pied de la dialog. */ type?: "button" | "submit"; /** `id` du `
` visé par une action `"submit"`. */ form?: string; /** * Désactivation automatique pendant `isLoading`. Passer `false` pour une action * qui doit rester atteignable pendant le chargement (« Annuler » d'un envoi long). */ disableOnLoading?: boolean; } export interface AppDialogConfig { /** Une chaîne est traitée comme une clé i18n ; passer un `ReactNode` pour un libellé métier à ne pas traduire. */ title: React.ReactNode; description?: React.ReactNode; icon?: React.ElementType; /** Largeur maximale à partir de `sm`. `xl` par défaut. */ size?: AppDialogSize; /** * Classe de largeur brute, breakpoint compris (`"sm:max-w-4xl"`). * @deprecated Préférer `size`, qui n'oblige pas à connaître le gabarit interne. */ maxWidth?: string; /** Ignoré si un `footer` est fourni au composant. */ actions?: DialogAction[]; headerClassName?: string; footerClassName?: string; } interface AppDialogProps { open: boolean; onOpenChange: (open: boolean) => void; config: AppDialogConfig; /** Affiche une barre de progression, désactive les actions et verrouille la fermeture. */ isLoading?: boolean; error?: ErrorHttp | Error | null; /** Pied de dialog libre, prioritaire sur `config.actions`. */ footer?: React.ReactNode; className?: string; children: React.ReactNode; } export declare function AppDialog({ open, onOpenChange, config, isLoading, error, footer, className, children }: AppDialogProps): React.ReactElement; //# sourceMappingURL=AppDialog.d.ts.map