import * as React from "react"
import { Tabs as TabsPrimitive, Dialog as DialogPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
import { DialogContent } from "./dialog"
/**
* Sample Usage:
*
*
*/
type SettingsDialogContextValue = {
onClose?: VoidFunction
}
const SettingsDialogContext = React.createContext({})
/**
* Exposes `onClose` to descendant panels so they can dismiss the dialog after
* a successful save without prop-drilling.
*/
export const useSettingsDialog = () => React.useContext(SettingsDialogContext)
type SettingsDialogProps = Omit<
React.ComponentProps,
"orientation"
> & {
onClose?: VoidFunction
contentClassName?: string
}
function SettingsDialog({
children,
className,
contentClassName,
onClose,
...props
}: SettingsDialogProps) {
const contextValue = React.useMemo(() => ({ onClose }), [onClose])
return (
{children}
)
}
function SettingsTabs({
className,
...props
}: React.ComponentProps) {
return (
)
}
type SettingsTabGroupProps = React.ComponentProps<"div"> & {
header?: React.ReactNode
}
function SettingsTabGroup({
children,
header,
className,
...props
}: SettingsTabGroupProps) {
return (
{header && (
{header}
)}
)
}
type SettingsTabItemProps = React.ComponentProps & {
icon?: React.ReactNode
label: React.ReactNode
}
function SettingsTabItem({
icon,
label,
className,
...props
}: SettingsTabItemProps) {
return (
{icon && (
{icon}
)}
{label}
)
}
function SettingsPanels({
className,
...props
}: React.ComponentProps<"div">) {
return (
)
}
function SettingsPanel({
className,
...props
}: React.ComponentProps) {
return (
)
}
/**
* Usage:
*
* >}>
*
* Settings
* Settings description
*
*
*/
function SettingsPanelHeader({
className,
children,
actions,
...props
}: React.ComponentProps<"div"> & { actions?: React.ReactNode }) {
return (
)
}
function SettingsPanelTitle({
className,
...props
}: React.ComponentProps) {
return (
)
}
function SettingsPanelDescription({
className,
...props
}: React.ComponentProps) {
return (
)
}
function SettingsPanelContent({
className,
...props
}: React.ComponentProps<"div">) {
return (
)
}
export {
SettingsDialog,
SettingsTabs,
SettingsTabGroup,
SettingsTabItem,
SettingsPanels,
SettingsPanel,
SettingsPanelHeader,
SettingsPanelTitle,
SettingsPanelDescription,
SettingsPanelContent
}