import { ClassValue } from 'clsx'; type PortalContainerOptions = { id?: string; className?: string; style?: Partial; }; export declare function cn(...inputs: ClassValue[]): string; export declare const isStorybookTestEnv: boolean; export declare function getInitials(name: string): string; /** * Focus rings for non-form interactive elements (buttons, etc.). * These provide only the shadow-based focus ring without background/border changes. */ export declare const focusRing: "focus-visible:shadow-focus-ring outline-none"; export declare const focusRingDestructive: "focus-visible:shadow-focus-ring-destructive outline-none"; /** * Reusable form element state Tailwind classes. * Import these to maintain consistent styling across all form components. */ export declare const formElementBase: "border border-transparent rounded-lg bg-muted-background py-1.75 pl-2 pr-1 text-sm leading-5 tracking-tight text-muted-foreground placeholder:text-muted-foreground"; export declare const hoverState: "hover:bg-accent-background hover:border hover:border-border-emphasized"; export declare const filledState: "[&:not(:placeholder-shown):not(:focus)]:bg-muted-background [&:not(:placeholder-shown)]:text-foreground"; export declare const focusState: "focus-visible:shadow-focus-ring focus-visible:bg-background focus-visible:border-transparent focus-visible:text-foreground outline-none"; export declare const invalidState: "aria-invalid:border-destructive-foreground aria-invalid:shadow-focus-ring-destructive aria-invalid:border-transparent aria-invalid:text-foreground aria-invalid:focus-visible:shadow-focus-ring aria-invalid:focus-visible:bg-background aria-invalid:focus-visible:border-transparent aria-invalid:focus-visible:text-foreground outline-none"; export declare const disabledState: "disabled:bg-disabled-background disabled:border-transparent disabled:text-disabled-foreground disabled:placeholder:text-disabled-foreground disabled:pointer-events-none disabled:cursor-not-allowed"; export declare const readOnlyState: "read-only:border-transparent read-only:text-muted-foreground read-only:cursor-default read-only:hover:border-transparent read-only:focus-visible:shadow-none read-only:focus-visible:border-transparent read-only:focus-visible:bg-muted-background [&:read-only:not(:placeholder-shown)]:text-muted-foreground"; /** * Reusable styles for selection-control rows (radio group items, checkbox items, etc.). * These provide the shared layout, card variant, label, and description classes * without baking in a parent group name (ancestor `group-has-[...]/` selectors * must stay inline in each consumer so they reference that component's own `group/`). */ export declare const selectionItemBase: "grid max-w-150 cursor-pointer grid-cols-[auto_1fr] items-start gap-x-2 gap-y-1 has-[[data-disabled]]:cursor-not-allowed"; export declare const selectionItemDefault: "min-h-9 py-2"; export declare const selectionItemCard: string; export declare const selectionItemLabel: "col-start-2 text-sm font-medium leading-4.5 tracking-normal text-secondary-foreground dark:text-secondary-foreground"; export declare const selectionItemDescription: "col-start-2 text-xs font-normal leading-3.5 tracking-tightest text-muted-foreground"; export declare function slugToPascalCase(slug: string): string; /** * Safely extracts hostname from a URL string. * Returns the hostname if valid, otherwise returns the original string or "unknown". * * @param url - URL string to extract hostname from (optional) * @returns The hostname, original string, or "unknown" if url is undefined */ export declare function getHostname(url: string | undefined): string; /** * Gets or creates the portal container for portalled UI components. * Container is created in document.body to avoid positioning issues * from the shell app's container query context. * The result is cached to avoid side effects on subsequent calls during React renders. */ export declare const getPortalContainer: (options?: PortalContainerOptions) => HTMLElement | undefined; export {};