// ~/src/siteplane/components/toolbar/toolbar.tsx "use client"; import { Toolbar as ToolbarPrimitive } from "@base-ui/react/toolbar"; import * as React from "react"; import { type SiteplaneControlSize, useResolvedControlSize, } from "../../system/provider/siteplane-ui-provider"; import { cn, type WithStringClassName } from "../../system/utils/cn"; import { slotClass } from "../../system/utils/slot-class"; import { Button, type ButtonStandardProps } from "../button"; import { Input, type InputProps } from "../input"; import { Separator } from "../separator"; /** The size of the enclosing Toolbar, which its parts take by default. */ const ToolbarSizeContext = React.createContext( null, ); /** A part's own size, else the Toolbar's, else the provider's (S1). */ function useToolbarSize( size: SiteplaneControlSize | undefined, ): SiteplaneControlSize { const toolbarSize = React.useContext(ToolbarSizeContext); return useResolvedControlSize(size ?? toolbarSize); } export function Toolbar({ className, size, ...props }: WithStringClassName & { /** The control size of the toolbar's buttons, links, groups and input. */ size?: SiteplaneControlSize | undefined; }): React.ReactElement { const resolvedSize = useToolbarSize(size); return ( svg]:pointer-events-none [&>svg]:shrink-0 [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-(--sp-rw-control-icon)", resolvedSize === "xl" && "[&>svg:not([class*='size-'])]:size-(--sp-rw-control-icon-xl)", className, )} data-size={resolvedSize} data-slot="toolbar" {...props} /> ); } export function ToolbarButton({ className, render, size, ...props }: WithStringClassName & { size?: SiteplaneControlSize | undefined; }): React.ReactElement { const resolvedSize = useToolbarSize(size); return ( (