import { Dialog as Kobalte } from "@kobalte/core/dialog" import { type ComponentProps, type JSXElement, type ParentProps, Show, children, splitProps } from "solid-js" import { useI18n } from "../../context/i18n" import "./dialog-v2.css" export interface DialogProps extends ParentProps { size?: "normal" | "large" | "x-large" variant?: "default" | "settings" class?: ComponentProps<"div">["class"] containerClass?: ComponentProps<"div">["class"] classList?: ComponentProps<"div">["classList"] fit?: boolean } export interface DialogHeaderProps extends ParentProps { closeLabel?: string hideClose?: boolean } export interface DialogTitleGroupProps { title?: JSXElement description: JSXElement } export function DialogFooter(props: ParentProps) { return
{props.children}
} export function DialogBody(props: ParentProps & { class?: ComponentProps<"div">["class"] }) { const [local] = splitProps(props, ["class", "children"]) return (
{local.children}
) } export function DialogTitle(props: ParentProps) { return {props.children} } export function DialogTitleGroup(props: DialogTitleGroupProps) { const title = children(() => props.title) const description = children(() => props.description) return (
{(t) => {t()}} {description()}
) } export function DialogHeader(props: DialogHeaderProps) { const i18n = useI18n() const [local] = splitProps(props, ["closeLabel", "hideClose", "children"]) const hideClose = () => local.hideClose === true return (
{local.children} {!hideClose() && ( )}
) } export function Dialog(props: DialogProps) { const [local] = splitProps(props, ["size", "variant", "class", "containerClass", "classList", "fit", "children"]) return (
{ const target = e.currentTarget as HTMLElement | null const autofocusEl = target?.querySelector("[autofocus]") as HTMLElement | null if (autofocusEl) { e.preventDefault() autofocusEl.focus({ preventScroll: true }) } }} > {local.children}
) } export const DialogV2 = Dialog