"use client" import { useEffect, useState } from "react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { DOCS_DEFAULT_LINE_HEIGHT, DOCS_LINE_HEIGHT_PRESETS, } from "@/lib/drive/docs-line-spacing" import type { DocsParagraphSpacingAttrs } from "@/lib/drive/docs-line-spacing" import { DRIVE_BTN_GHOST, DRIVE_BTN_PRIMARY, DRIVE_DIALOG_BODY, DRIVE_DIALOG_CONTENT, DRIVE_DIALOG_FOOTER, DRIVE_DIALOG_HEADER, DRIVE_FIELD_CLASS, DRIVE_LABEL_CLASS, DRIVE_TEXT_TITLE, } from "@/lib/drive/drive-dialog-styles" import { cn } from "@/lib/utils" export function DocsLineSpacingDialog({ open, onOpenChange, initial, onApply, }: { open: boolean onOpenChange: (open: boolean) => void initial: DocsParagraphSpacingAttrs onApply: (input: Pick) => void }) { const [lineHeightPreset, setLineHeightPreset] = useState("1.15") const [customLineHeight, setCustomLineHeight] = useState(String(DOCS_DEFAULT_LINE_HEIGHT)) const [spaceBefore, setSpaceBefore] = useState("0") const [spaceAfter, setSpaceAfter] = useState("0") useEffect(() => { if (!open) return const height = initial.lineHeight ?? DOCS_DEFAULT_LINE_HEIGHT const preset = DOCS_LINE_HEIGHT_PRESETS.find((item) => Math.abs(item.value - height) < 0.001) setLineHeightPreset(preset?.id ?? "custom") setCustomLineHeight(String(height)) setSpaceBefore(String(initial.spaceBeforePt)) setSpaceAfter(String(initial.spaceAfterPt)) }, [initial, open]) const resolvedLineHeight = (): number | null => { if (lineHeightPreset === "custom") { const value = Number.parseFloat(customLineHeight) return Number.isFinite(value) && value > 0 ? value : DOCS_DEFAULT_LINE_HEIGHT } const preset = DOCS_LINE_HEIGHT_PRESETS.find((item) => item.id === lineHeightPreset) return preset?.value ?? DOCS_DEFAULT_LINE_HEIGHT } return ( Espacement personnalisé
{lineHeightPreset === "custom" ? ( setCustomLineHeight(event.target.value)} className={DRIVE_FIELD_CLASS} aria-label="Interligne personnalisé" /> ) : null}
setSpaceBefore(event.target.value)} className={DRIVE_FIELD_CLASS} />
setSpaceAfter(event.target.value)} className={DRIVE_FIELD_CLASS} />
) }