UNPKG

apphouse

Version:

Component library for React that uses observable state management and theme-able components.

187 lines (186 loc) 5 kB
import React from 'react'; import { CSSProperties } from 'glamor'; import { ApphouseComponent } from '../component.interfaces'; import { PositionOptionsType } from '../../utils/styles/getStylesForPosition'; import { ButtonProps } from '../Button'; /** * Interface for the Popup Footer component */ export interface PopupFooterStyles { container?: CSSProperties; footerLeft?: CSSProperties; footerRight?: CSSProperties; btnCancel?: CSSProperties; btnConfirm?: CSSProperties; } /** * Interface for the Popup Header component styles */ export interface PopupHeaderStyles { container?: CSSProperties; title?: CSSProperties; headerIcon?: CSSProperties; } /** * Interface for the Popup Body component */ export type PopupBodyStyles = { container?: CSSProperties; content?: CSSProperties; }; /** * Interface for the Popup component styles */ export interface PopupStyles { /** * Styles applied on the overlay, the div that covers the entire screen * behind the popup */ overlay?: CSSProperties; popup?: CSSProperties; container?: CSSProperties; header?: PopupHeaderStyles; body?: PopupBodyStyles; footer?: PopupFooterStyles; closeButton?: CSSProperties; } /** * Interface for the Popup Header component */ export interface PopupHeaderProps extends ApphouseComponent<PopupHeaderStyles> { /** * If provided, the popup will be rendered with this icon * */ headerIcon?: React.ReactNode; /** * The title of the popup */ title?: React.ReactNode; /** * If true, the header bottom border will be removed * @optional * @default false */ clear?: boolean; /** * If true, the header will be hidden */ hideHeader?: boolean; } /** * Interface for an action button in the Popup */ export interface ActionButtonType extends ButtonProps { label: React.ReactNode; } /** * Interface for props to be passed to the Popup Footer component */ export interface PopupFooterProps { /** * If true, the footer actions will not display * and the cancel and confirm button won't show. * @optional * @default false */ hideFooterActions?: boolean; /** * If true, the entire footer will not show. * @optional * @default false */ hideFooter?: boolean; /** * Unique id for the popup * @required */ id: string; /** * If true, the popup will not be closable * @optional * @default false */ disableClosing?: boolean; /** * If true, the popup will be rendered with a sticky footer. * This means that the footer will always be visible at the bottom of the popup * in a fixed position. * @optional * @default false */ stickyFooter?: boolean; /** * Additional actions to be rendered in the footer. * They will be rendered to the left of the cancel and confirm buttons when provided. * @optional */ actions?: ActionButtonType[]; /** * Settings for the cancel button */ cancel?: ActionButtonType; /** * Settings for the confirm button */ confirm?: ActionButtonType; /** * Additional content to be rendered in the footer. * If actions are present it renders to the left of the footer. * If no actions are present it renders full width. */ additionalFooterContent?: React.ReactNode; /** * Overwrite styles for the footer */ styleOverwrites?: PopupFooterStyles; /** * if provided it will be added in addition to the default footer */ children?: React.ReactNode; } export interface PopupProps extends ApphouseComponent<PopupStyles>, Omit<PopupHeaderProps, 'styleOverwrites' | 'gutters'>, Omit<PopupFooterProps, 'styleOverwrites' | 'clear' | 'disableClosing' | 'gutters'> { /** * The content of the popup */ children?: React.ReactNode; /** * If true, the popup will close when the user clicks outside of it */ closeOnClickOutside?: boolean; /** * If true, the popup will be rendered in fullscreen * @optional * @default false */ fullscreen?: boolean; /** * If true, the popup will be rendered with a close button * that will be rendered in the top right corner * that will close the popup when clicked * @optional * @default false */ showCloseButton?: boolean; /** * The width of the popup */ width?: string; /** * If true, the popup will not be closable * @optional * @default false */ disableClosing?: boolean; /** * If true, the popup will allow clicks to pass through * and there will be no overlay */ allowOverlayPassThrough?: boolean; /** * The position of where the popup will be displayed on the page * @optional * @default 'center' */ position?: keyof typeof PositionOptionsType; }