-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A declarative terminal user interface library -- -- Write terminal applications painlessly with brick! You write an -- event handler and a drawing function and the library does the rest. -- --
-- module Main where -- -- import Brick -- -- ui :: Widget n -- ui = str "Hello, world!" -- -- main :: IO () -- main = simpleMain ui ---- -- To get started, see: -- --
-- let n = attrName "parent" <> attrName "child" ---- -- Attribute names are mapped to attributes, but some attributes may be -- partial (specify only a foreground or background color). When -- attribute name lookups occur, the attribute corresponding to a more -- specific name ('parent <> child' as above) is sucessively merged -- with the parent attribute (parent as above) all the way to -- the "root" of the attribute map, the map's default attribute. In this -- way, more specific attributes inherit what they don't specify from -- more general attributes in the same hierarchy. This allows more -- modularity and less repetition in specifying how elements of your user -- interface take on different attributes. module Brick.AttrMap -- | An attribute map which maps AttrName values to Attr -- values. data AttrMap -- | An attribute name. Attribute names are hierarchical; use -- mappend (<>) to assemble them. Hierachy in an -- attribute name is used to represent increasing levels of specificity -- in referring to the attribute you want to use for a visual element, -- with names to the left being general and names to the right being more -- specific. For example: -- --
-- "window" <> "border" -- "window" <> "title" -- "header" <> "clock" <> "seconds" --data AttrName -- | Create an attribute map. attrMap :: Attr -> [(AttrName, Attr)] -> AttrMap -- | Create an attribute map in which all lookups map to the same -- attribute. forceAttrMap :: Attr -> AttrMap -- | Create an attribute name from a string. attrName :: String -> AttrName -- | Look up the specified attribute name in the map. Map lookups proceed -- as follows. If the attribute map is forcing all lookups to a specific -- attribute, that attribute is returned. If the attribute name is empty, -- the map's default attribute is returned. If the attribute name is -- non-empty, very subsequence of names from the specified name are used -- to perform a lookup, and the results are combined as in -- mergeWithDefault, with more specific results taking precedence -- over less specific ones. -- -- For example: -- --
-- attrMapLookup ("foo" <> "bar") (attrMap a []) == a
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", fg red)]) == red `on` blue
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", red on cyan)]) == red `on` cyan
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo" <> "bar", fg red), ("foo", bg cyan)]) == red `on` cyan
-- attrMapLookup ("foo" <> "bar") (attrMap (bg blue) [("foo", fg red)]) == red `on` blue
--
attrMapLookup :: AttrName -> AttrMap -> Attr
-- | Set the default attribute value in an attribute map.
setDefault :: Attr -> AttrMap -> AttrMap
-- | Insert a set of attribute mappings to an attribute map.
applyAttrMappings :: [(AttrName, Attr)] -> AttrMap -> AttrMap
-- | Given an attribute and a map, merge the attribute with the map's
-- default attribute. If the map is forcing all lookups to a specific
-- attribute, the forced attribute is returned without merging it with
-- the one specified here. Otherwise the attribute given here is merged
-- with the attribute map's default attribute in that any aspect of the
-- specified attribute that is not provided falls back to the map
-- default. For example,
--
-- -- mergeWithDefault (fg blue) $ attrMap (bg red) [] ---- -- returns -- --
-- blue `on` red --mergeWithDefault :: Attr -> AttrMap -> Attr instance GHC.Show.Show Brick.AttrMap.AttrMap instance GHC.Classes.Ord Brick.AttrMap.AttrName instance GHC.Classes.Eq Brick.AttrMap.AttrName instance GHC.Show.Show Brick.AttrMap.AttrName instance Data.Default.Class.Default Brick.AttrMap.AttrName instance GHC.Base.Monoid Brick.AttrMap.AttrName instance Data.String.IsString Brick.AttrMap.AttrName instance Data.Default.Class.Default Brick.AttrMap.AttrMap -- | Utility functions. module Brick.Util -- | Given a minimum value and a maximum value, clamp a value to that range -- (values less than the minimum map to the minimum and values greater -- than the maximum map to the maximum). -- --
-- >>> clamp 1 10 11 -- 10 -- -- >>> clamp 1 10 2 -- 2 -- -- >>> clamp 5 10 1 -- 5 --clamp :: (Ord a) => a -> a -> a -> a -- | Build an attribute from a foreground color and a background color. -- Intended to be used infix. on :: Color -> Color -> Attr -- | Create an attribute from the specified foreground color (the -- background color is the "default"). fg :: Color -> Attr -- | Create an attribute from the specified background color (the -- background color is the "default"). bg :: Color -> Attr -- | Add a Location offset to the specified CursorLocation. clOffset :: CursorLocation n -> Location -> CursorLocation n -- | Basic types used by this library. module Brick.Types -- | The type of widgets. data Widget n Widget :: Size -> Size -> RenderM n (Result n) -> Widget n -- | This widget's horizontal growth policy [hSize] :: Widget n -> Size -- | This widget's vertical growth policy [vSize] :: Widget n -> Size -- | This widget's rendering function [render] :: Widget n -> RenderM n (Result n) -- | A terminal screen location. data Location Location :: (Int, Int) -> Location -- | (Column, Row) [loc] :: Location -> (Int, Int) locL :: Lens' Location (Int, Int) -- | The class of types that behave like terminal locations. class TerminalLocation a -- | Get the column out of the value columnL :: TerminalLocation a => Lens' a Int column :: TerminalLocation a => a -> Int -- | Get the row out of the value rowL :: TerminalLocation a => Lens' a Int row :: TerminalLocation a => a -> Int -- | A cursor location. These are returned by the rendering process. data CursorLocation n CursorLocation :: !Location -> !(Maybe n) -> CursorLocation n -- | The location [cursorLocation] :: CursorLocation n -> !Location -- | The name of the widget associated with the location [cursorLocationName] :: CursorLocation n -> !(Maybe n) cursorLocationL :: forall n_aw7h. Lens' (CursorLocation n_aw7h) Location cursorLocationNameL :: forall n_aw7h n_awgq. Lens (CursorLocation n_aw7h) (CursorLocation n_awgq) (Maybe n_aw7h) (Maybe n_awgq) -- | Describes the state of a viewport as it appears as its most recent -- rendering. data Viewport VP :: Int -> Int -> DisplayRegion -> Viewport -- | The column offset of left side of the viewport. [_vpLeft] :: Viewport -> Int -- | The row offset of the top of the viewport. [_vpTop] :: Viewport -> Int -- | The size of the viewport. [_vpSize] :: Viewport -> DisplayRegion -- | The type of viewports that indicates the direction(s) in which a -- viewport is scrollable. data ViewportType -- | Viewports of this type are scrollable only vertically. Vertical :: ViewportType -- | Viewports of this type are scrollable only horizontally. Horizontal :: ViewportType -- | Viewports of this type are scrollable vertically and horizontally. Both :: ViewportType vpSize :: Lens' Viewport DisplayRegion vpTop :: Lens' Viewport Int vpLeft :: Lens' Viewport Int -- | The monad in which event handlers run. Although it may be tempting to -- dig into the reader value yourself, just use lookupViewport. newtype EventM n a EventM :: ReaderT (Map n Viewport) (StateT (EventState n) IO) a -> EventM n a [runEventM] :: EventM n a -> ReaderT (Map n Viewport) (StateT (EventState n) IO) a -- | The type of actions to take upon completion of an event handler. data Next a -- | A convenience function for handling events intended for values that -- are targets of lenses in your application state. This function obtains -- the target value of the specified lens, invokes handleEvent -- on it, and stores the resulting transformed value back in the state -- using the lens. handleEventLensed :: a -> Lens' a b -> (Event -> b -> EventM n b) -> Event -> EventM n a -- | The type of the rendering monad. This monad is used by the library's -- rendering routines to manage rendering state and communicate rendering -- parameters to widgets' rendering functions. type RenderM n a = ReaderT Context (State (RenderState n)) a -- | Get the current rendering context. getContext :: RenderM n Context -- | The rendering context. This tells widgets how to render: how much -- space they have in which to render, which attribute they should use to -- render, which bordring style should be used, and the attribute map -- available for rendering. data Context -- | The rendering context's current drawing attribute. attrL :: forall r. Getting r Context Attr availWidthL :: Lens' Context Int availHeightL :: Lens' Context Int ctxAttrMapL :: Lens' Context AttrMap ctxAttrNameL :: Lens' Context AttrName ctxBorderStyleL :: Lens' Context BorderStyle -- | The type of result returned by a widget's rendering function. The -- result provides the image, cursor positions, and visibility requests -- that resulted from the rendering process. data Result n Result :: Image -> [CursorLocation n] -> [VisibilityRequest] -> Result n -- | The final rendered image for a widget [image] :: Result n -> Image -- | The list of reported cursor positions for the application to choose -- from [cursors] :: Result n -> [CursorLocation n] -- | The list of visibility requests made by widgets rendered while -- rendering this one (used by viewports) [visibilityRequests] :: Result n -> [VisibilityRequest] -- | Given an attribute name, obtain the attribute for the attribute name -- by consulting the context's attribute map. lookupAttrName :: AttrName -> RenderM n Attr imageL :: forall n_azJ4. Lens' (Result n_azJ4) Image cursorsL :: forall n_azJ4 n_aAvg. Lens (Result n_azJ4) (Result n_aAvg) [CursorLocation n_azJ4] [CursorLocation n_aAvg] visibilityRequestsL :: forall n_azJ4. Lens' (Result n_azJ4) [VisibilityRequest] data VisibilityRequest VR :: Location -> DisplayRegion -> VisibilityRequest [vrPosition] :: VisibilityRequest -> Location [vrSize] :: VisibilityRequest -> DisplayRegion vrPositionL :: Lens' VisibilityRequest Location vrSizeL :: Lens' VisibilityRequest DisplayRegion -- | A template haskell function to build lenses for a record type. This -- function differs from the makeLenses function in that it does -- not require the record fields to be prefixed with underscores and it -- adds an L suffix to lens names to make it clear that they are -- lenses. suffixLenses :: Name -> DecsQ -- | Widget growth policies. These policies communicate to layout -- algorithms how a widget uses space when being rendered. These policies -- influence rendering order and space allocation in the box layout -- algorithm. data Size -- | Fixed widgets take up the same amount of space no matter how much they -- are given (non-greedy). Fixed :: Size -- | Greedy widgets take up all the space they are given. Greedy :: Size -- | The type of padding. data Padding -- | Pad by the specified number of rows or columns. Pad :: Int -> Padding -- | Pad up to the number of available rows or columns. Max :: Padding -- | Scrolling direction. data Direction -- | Up/left Up :: Direction -- | Down/right Down :: Direction instance Brick.Types.Internal.TerminalLocation (Brick.Types.Internal.CursorLocation n) instance GHC.Show.Show n => GHC.Show.Show (Brick.Types.Result n) instance GHC.Classes.Ord Brick.Types.Size instance GHC.Classes.Eq Brick.Types.Size instance GHC.Show.Show Brick.Types.Size instance Control.Monad.IO.Class.MonadIO (Brick.Types.EventM n) instance GHC.Base.Monad (Brick.Types.EventM n) instance GHC.Base.Applicative (Brick.Types.EventM n) instance GHC.Base.Functor (Brick.Types.EventM n) instance Data.Default.Class.Default (Brick.Types.Result n) -- | This module provides the core widget combinators and rendering -- routines. Everything this library does is in terms of these basic -- primitives. module Brick.Widgets.Core -- | The empty widget. emptyWidget :: Widget n -- | Build a widget directly from a raw Vty image. raw :: Image -> Widget n -- | Build a widget from a one-line Text value. Behaves the same as -- str. txt :: Text -> Widget n -- | Build a widget from a String. Breaks newlines up and space-pads -- short lines out to the length of the longest line. str :: String -> Widget n -- | Fill all available space with the specified character. Grows both -- horizontally and vertically. fill :: Char -> Widget n -- | Pad the specified widget on the left. If max padding is used, this -- grows greedily horizontally; otherwise it defers to the padded widget. padLeft :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the right. If max padding is used, this -- grows greedily horizontally; otherwise it defers to the padded widget. padRight :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the top. If max padding is used, this -- grows greedily vertically; otherwise it defers to the padded widget. padTop :: Padding -> Widget n -> Widget n -- | Pad the specified widget on the bottom. If max padding is used, this -- grows greedily vertically; otherwise it defers to the padded widget. padBottom :: Padding -> Widget n -> Widget n -- | Pad a widget on the left and right. Defers to the padded widget for -- growth policy. padLeftRight :: Int -> Widget n -> Widget n -- | Pad a widget on the top and bottom. Defers to the padded widget for -- growth policy. padTopBottom :: Int -> Widget n -> Widget n -- | Pad a widget on all sides. Defers to the padded widget for growth -- policy. padAll :: Int -> Widget n -> Widget n -- | Vertical box layout: put the specified widgets one above the other in -- the specified order. Defers growth policies to the growth policies of -- both widgets. This operator is a binary version of vBox. (<=>) :: Widget n -> Widget n -> Widget n -- | Horizontal box layout: put the specified widgets next to each other in -- the specified order. Defers growth policies to the growth policies of -- both widgets. This operator is a binary version of hBox. (<+>) :: Widget n -> Widget n -> Widget n -- | Horizontal box layout: put the specified widgets next to each other in -- the specified order (leftmost first). Defers growth policies to the -- growth policies of the contained widgets (if any are greedy, so is the -- box). hBox :: [Widget n] -> Widget n -- | Vertical box layout: put the specified widgets one above the other in -- the specified order (uppermost first). Defers growth policies to the -- growth policies of the contained widgets (if any are greedy, so is the -- box). vBox :: [Widget n] -> Widget n -- | Limit the space available to the specified widget to the specified -- number of columns. This is important for constraining the horizontal -- growth of otherwise-greedy widgets. This is non-greedy horizontally -- and defers to the limited widget vertically. hLimit :: Int -> Widget n -> Widget n -- | Limit the space available to the specified widget to the specified -- number of rows. This is important for constraining the vertical growth -- of otherwise-greedy widgets. This is non-greedy vertically and defers -- to the limited widget horizontally. vLimit :: Int -> Widget n -> Widget n -- | Update the attribute map while rendering the specified widget: set its -- new default attribute to the one that we get by looking up the -- specified attribute name in the map. withDefAttr :: AttrName -> Widget n -> Widget n -- | When drawing the specified widget, set the current attribute used for -- drawing to the one with the specified name. Note that the widget may -- use further calls to withAttr to override this; if you really -- want to prevent that, use forceAttr. Attributes used this way -- still get merged hierarchically and still fall back to the attribute -- map's default attribute. If you want to change the default attribute, -- use withDefAttr. withAttr :: AttrName -> Widget n -> Widget n -- | When rendering the specified widget, force all attribute lookups in -- the attribute map to use the value currently assigned to the specified -- attribute name. forceAttr :: AttrName -> Widget n -> Widget n -- | When rendering the specified widget, update the attribute map with the -- specified transformation. updateAttrMap :: (AttrMap -> AttrMap) -> Widget n -> Widget n -- | When rendering the specified widget, use the specified border style -- for any border rendering. withBorderStyle :: BorderStyle -> Widget n -> Widget n -- | When rendering the specified widget, also register a cursor -- positioning request using the specified name and location. showCursor :: n -> Location -> Widget n -> Widget n -- | The class of types that store interface element names. class Named a n -- | Get the name of the specified value. getName :: Named a n => a -> n -- | Translate the specified widget by the specified offset amount. Defers -- to the translated width for growth policy. translateBy :: Location -> Widget n -> Widget n -- | Crop the specified widget on the left by the specified number of -- columns. Defers to the translated width for growth policy. cropLeftBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the right by the specified number of -- columns. Defers to the translated width for growth policy. cropRightBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the top by the specified number of rows. -- Defers to the translated width for growth policy. cropTopBy :: Int -> Widget n -> Widget n -- | Crop the specified widget on the bottom by the specified number of -- rows. Defers to the translated width for growth policy. cropBottomBy :: Int -> Widget n -> Widget n -- | Render the specified widget in a named viewport with the specified -- type. This permits widgets to be scrolled without being -- scrolling-aware. To make the most use of viewports, the specified -- widget should use the visible combinator to make a "visibility -- request". This viewport combinator will then translate the resulting -- rendering to make the requested region visible. In addition, the -- EventM monad provides primitives to scroll viewports created by -- this function if visible is not what you want. -- -- If a viewport receives more than one visibility request, then the -- visibility requests are merged with the inner visibility request -- taking preference. If a viewport receives more than one scrolling -- request from EventM, all are honored in the order in which they -- are received. viewport :: (Ord n, Show n) => n -> ViewportType -> Widget n -> Widget n -- | Request that the specified widget be made visible when it is rendered -- inside a viewport. This permits widgets (whose sizes and positions -- cannot be known due to being embedded in arbitrary layouts) to make a -- request for a parent viewport to locate them and scroll enough to put -- them in view. This, together with viewport, is what makes the -- text editor and list widgets possible without making them deal with -- the details of scrolling state management. -- -- This does nothing if not rendered in a viewport. visible :: Widget n -> Widget n -- | Similar to visible, request that a region (with the specified -- Location as its origin and DisplayRegion as its size) be -- made visible when it is rendered inside a viewport. The -- Location is relative to the specified widget's upper-left -- corner of (0, 0). -- -- This does nothing if not rendered in a viewport. visibleRegion :: Location -> DisplayRegion -> Widget n -> Widget n -- | Given a name, obtain the viewport for that name by consulting the -- viewport map in the rendering monad. NOTE! Some care must be taken -- when calling this function, since it only returns useful values after -- the viewport in question has been rendered. If you call this function -- during rendering before a viewport has been rendered, you may get -- nothing or you may get a stale version of the viewport. This is -- because viewports are updated during rendering and the one you are -- interested in may not have been rendered yet. So if you want to use -- this, be sure you know what you are doing. unsafeLookupViewport :: (Ord n) => n -> RenderM n (Maybe Viewport) -- | Add an offset to all cursor locations and visbility requests in the -- specified rendering result. This function is critical for maintaining -- correctness in the rendering results as they are processed -- successively by box layouts and other wrapping combinators, since -- calls to this function result in converting from widget-local -- coordinates to (ultimately) terminal-global ones so they can be used -- by other combinators. You should call this any time you render -- something and then translate it or otherwise offset it from its -- original origin. addResultOffset :: Location -> Result n -> Result n -- | After rendering the specified widget, crop its result image to the -- dimensions in the rendering context. cropToContext :: Widget n -> Widget n -- | This module provides a type and functions for handling focus rings of -- widgets. Note that this interface is merely provided for managing the -- focus state for a sequence of widget names; it does not do anything -- beyond keep track of that. -- -- This interface is experimental. module Brick.Focus -- | A focus ring containing a sequence of widget names to focus and a -- currently-focused widget name. data FocusRing n -- | Construct a focus ring from the list of names. focusRing :: [n] -> FocusRing n -- | Advance focus to the next widget in the ring. focusNext :: FocusRing n -> FocusRing n -- | Advance focus to the previous widget in the ring. focusPrev :: FocusRing n -> FocusRing n -- | Get the currently-focused widget name from the ring. If the ring is -- emtpy, return Nothing. focusGetCurrent :: FocusRing n -> Maybe n -- | Cursor selection convenience function for use as an -- appChooseCursor value. focusRingCursor :: (Eq n) => (a -> FocusRing n) -> a -> [CursorLocation n] -> Maybe (CursorLocation n) -- | This function is a convenience function to look up a widget state -- value's name in a focus ring and set its focus setting according to -- the focus ring's state. This function determines whether a given -- widget state value is the focus of the ring and passes the resulting -- boolean to a rendering function, along with the state value (a), to -- produce whatever comes next (b). -- -- Focus-aware widgets have rendering functions that should be usable -- with this combinator; see List and Edit. withFocusRing :: (Eq n, Named a n) => FocusRing n -> (Bool -> a -> b) -> a -> b -- | This module provides an API for turning "markup" values into widgets. -- This module uses the Data.Text.Markup interface in this package -- to assign attributes to substrings in a text string; to manipulate -- markup using (for example) syntax highlighters, see that module. module Brick.Markup -- | Markup with metadata type a assigned to each character. data Markup a -- | Build a widget from markup. markup :: (Eq a, GetAttr a) => Markup a -> Widget n -- | Build a piece of markup from text with an assigned attribute name. -- When the markup is rendered, the attribute name will be looked up in -- the rendering context's AttrMap to determine the attribute to -- use for this piece of text. (@?) :: Text -> AttrName -> Markup AttrName -- | A type class for types that provide access to an attribute in the -- rendering monad. You probably won't need to instance this. class GetAttr a -- | Where to get the attribute for this attribute metadata. getAttr :: GetAttr a => a -> RenderM n Attr instance Brick.Markup.GetAttr Graphics.Vty.Attributes.Attr instance Brick.Markup.GetAttr Brick.AttrMap.AttrName -- | This module provides combinators for centering other widgets. module Brick.Widgets.Center -- | Center the specified widget horizontally. Consumes all available -- horizontal space. hCenter :: Widget n -> Widget n -- | Center the specified widget horizontally. Consumes all available -- horizontal space. Uses the specified character to fill in the space to -- either side of the centered widget (defaults to space). hCenterWith :: Maybe Char -> Widget n -> Widget n -- | Center the specified widget horizontally using a Vty image -- translation. Consumes all available horizontal space. Unlike hCenter, -- this does not fill the surrounding space so it is suitable for use as -- a layer. Layers underneath this widget will be visible in regions -- surrounding the centered widget. hCenterLayer :: Widget n -> Widget n -- | Center a widget vertically. Consumes all vertical space. vCenter :: Widget n -> Widget n -- | Center a widget vertically. Consumes all vertical space. Uses the -- specified character to fill in the space above and below the centered -- widget (defaults to space). vCenterWith :: Maybe Char -> Widget n -> Widget n -- | Center the specified widget vertically using a Vty image translation. -- Consumes all available vertical space. Unlike vCenter, this does not -- fill the surrounding space so it is suitable for use as a layer. -- Layers underneath this widget will be visible in regions surrounding -- the centered widget. vCenterLayer :: Widget n -> Widget n -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. center :: Widget n -> Widget n -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. Uses the specified character -- to fill in the space around the centered widget (defaults to space). centerWith :: Maybe Char -> Widget n -> Widget n -- | Center a widget both vertically and horizontally using a Vty image -- translation. Consumes all available vertical and horizontal space. -- Unlike center, this does not fill in the surrounding space with a -- character so it is usable as a layer. Any widget underneath this one -- will be visible in the region surrounding the centered widget. centerLayer :: Widget n -> Widget n -- | Center the widget horizontally and vertically about the specified -- origin. centerAbout :: Location -> Widget n -> Widget n -- | This module provides border widgets: vertical borders, horizontal -- borders, and a box border wrapper widget. All functions in this module -- use the rendering context's active BorderStyle; to change the -- BorderStyle, use withBorderStyle. module Brick.Widgets.Border -- | Put a border around the specified widget. border :: Widget n -> Widget n -- | Put a border around the specified widget with the specified label -- widget placed in the middle of the top horizontal border. borderWithLabel :: Widget n -> Widget n -> Widget n -- | A horizontal border. Fills all horizontal space. hBorder :: Widget n -- | A horizontal border with a label placed in the center of the border. -- Fills all horizontal space. hBorderWithLabel :: Widget n -> Widget n -- | A vertical border. Fills all vertical space. vBorder :: Widget n -- | Draw the specified border element using the active border style using -- borderAttr. borderElem :: (BorderStyle -> Char) -> Widget n -- | The top-level border attribute name. borderAttr :: AttrName -- | The vertical border attribute name. vBorderAttr :: AttrName -- | The horizontal border attribute name. hBorderAttr :: AttrName -- | The attribute used for horizontal border labels. hBorderLabelAttr :: AttrName -- | The attribute used for border box top-left corners. tlCornerAttr :: AttrName -- | The attribute used for border box top-right corners. trCornerAttr :: AttrName -- | The attribute used for border box bottom-left corners. blCornerAttr :: AttrName -- | The attribute used for border box bottom-right corners. brCornerAttr :: AttrName -- | This module provides a simple dialog widget. You get to pick the -- dialog title, if any, as well as its body and buttons. module Brick.Widgets.Dialog -- | Dialogs present a window with a title (optional), a body, and buttons -- (optional). They provide a HandleEvent instance that knows -- about Tab and Shift-Tab for changing which button is active. Dialog -- buttons are labeled with strings and map to values of type a, -- which you choose. -- -- Dialogs handle the following events by default: -- --