/*! Strand UI | MIT License | dillingerstaffing.com */ import type { JSX } from "preact"; import { forwardRef } from "preact/compat"; import { cx, styled } from "../../internal/index.js"; /** In-page window chrome that hosts a modal specimen without taking the viewport. */ export const LabFrame = styled("div", "strand-ref-frame", "LabFrame"); export const LabFrameChrome = styled("div", "strand-ref-frame__chrome", "LabFrameChrome"); export const LabFrameTitle = styled("span", "strand-ref-frame__title", "LabFrameTitle"); export const LabFrameBody = styled("div", "strand-ref-frame__body", "LabFrameBody"); export const LabFrameContentHead = styled("div", "strand-ref-frame__content-head", "LabFrameContentHead"); export const LabFrameActions = styled("div", "strand-ref-frame__actions", "LabFrameActions"); export const LabFrameOverlay = styled("div", "strand-ref-frame__overlay", "LabFrameOverlay"); export const LabFramePanelHeader = styled("div", "strand-ref-frame__panel-header", "LabFramePanelHeader"); export const LabFramePanelTitle = styled("h2", "strand-ref-frame__panel-title", "LabFramePanelTitle"); export const LabFramePanelBody = styled("div", "strand-ref-frame__panel-body", "LabFramePanelBody"); export const LabFramePanelFooter = styled("div", "strand-ref-frame__panel-footer", "LabFramePanelFooter"); export interface LabFrameDotProps extends JSX.HTMLAttributes { /** Dot colour, e.g. "#ff5f57". */ color?: string; } /** A window-chrome dot. */ export const LabFrameDot = forwardRef( ({ color, className = "", style, ...rest }, ref) => ( ) }} {...rest} /> ), ); LabFrameDot.displayName = "LabFrameDot"; export interface LabFrameContentProps extends JSX.HTMLAttributes { /** Hide the content visually while it stays in layout. */ hidden?: boolean; } /** The page content behind a modal specimen. */ export const LabFrameContent = forwardRef( ({ hidden = false, className = "", children, ...rest }, ref) => (
{children}
), ); LabFrameContent.displayName = "LabFrameContent"; /** The modal panel of a specimen. */ export const LabFramePanel = forwardRef>( ({ className = "", children, ...rest }, ref) => (
{children}
), ); LabFramePanel.displayName = "LabFramePanel"; export interface LabFramePanelCloseProps extends JSX.HTMLAttributes { /** Accessible name. */ "aria-label"?: string; } /** The panel's close control. */ export const LabFramePanelClose = forwardRef( ({ className = "", children, "aria-label": ariaLabel = "Close", ...rest }, ref) => ( ), ); LabFramePanelClose.displayName = "LabFramePanelClose";