-- 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 -- 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 -- | Basic types used by this library. module Brick.Types -- | The type of widgets. data Widget Widget :: Size -> Size -> RenderM Result -> Widget -- | This widget's horizontal growth policy [hSize] :: Widget -> Size -- | This widget's vertical growth policy [vSize] :: Widget -> Size -- | This widget's rendering function [render] :: Widget -> RenderM Result -- | A terminal screen location. data Location Location :: (Int, Int) -> Location -- | (Column, Row) [loc] :: Location -> (Int, Int) locL :: Iso' 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 CursorLocation :: !Location -> !(Maybe Name) -> CursorLocation -- | The location [cursorLocation] :: CursorLocation -> !Location -- | The name of the widget associated with the location [cursorLocationName] :: CursorLocation -> !(Maybe Name) cursorLocationL :: Lens' CursorLocation Location cursorLocationNameL :: Lens' CursorLocation (Maybe Name) -- | 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 a EventM :: ReaderT (Map Name Viewport) (StateT EventState IO) a -> EventM a [runEventM] :: EventM a -> ReaderT (Map Name Viewport) (StateT EventState IO) a -- | The type of actions to take upon completion of an event handler. data Next a -- | The class of types that provide some basic event-handling. class HandleEvent a -- | Handle a Vty event handleEvent :: HandleEvent a => Event -> a -> EventM 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 :: (HandleEvent b) => a -> Lens' a b -> Event -> EventM 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 a = ReaderT Context (State RenderState) a -- | Get the current rendering context. getContext :: RenderM 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 :: (Contravariant f, Functor f) => (Attr -> f Attr) -> Context -> f Context 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 Result :: Image -> [CursorLocation] -> [VisibilityRequest] -> Result -- | The final rendered image for a widget [image] :: Result -> Image -- | The list of reported cursor positions for the application to choose -- from [cursors] :: Result -> [CursorLocation] -- | The list of visibility requests made by widgets rendered while -- rendering this one (used by viewports) [visibilityRequests] :: Result -> [VisibilityRequest] -- | Given an attribute name, obtain the attribute for the attribute name -- by consulting the context's attribute map. lookupAttrName :: AttrName -> RenderM Attr imageL :: Lens' Result Image cursorsL :: Lens' Result [CursorLocation] visibilityRequestsL :: Lens' Result [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 -- | Names of things. Used to name cursor locations, widgets, and -- viewports. newtype Name Name :: String -> Name instance Brick.Types.Internal.TerminalLocation Brick.Types.Internal.CursorLocation instance GHC.Show.Show Brick.Types.Result instance GHC.Classes.Ord Brick.Types.Size instance GHC.Classes.Eq Brick.Types.Size instance GHC.Show.Show Brick.Types.Size instance GHC.Base.Monad Brick.Types.EventM instance GHC.Base.Applicative Brick.Types.EventM instance GHC.Base.Functor Brick.Types.EventM instance Data.Default.Class.Default Brick.Types.Result -- | 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 -- | Construct a focus ring from the list of names. focusRing :: [Name] -> FocusRing -- | Advance focus to the next widget in the ring. focusNext :: FocusRing -> FocusRing -- | Advance focus to the previous widget in the ring. focusPrev :: FocusRing -> FocusRing -- | Get the currently-focused widget name from the ring. If the ring is -- emtpy, return Nothing. focusGetCurrent :: FocusRing -> Maybe Name -- | Cursor selection convenience function for use as an -- appChooseCursor value. focusRingCursor :: (a -> FocusRing) -> a -> [CursorLocation] -> Maybe CursorLocation -- | 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 -- | 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 Attr instance Brick.Markup.GetAttr Graphics.Vty.Attributes.Attr instance Brick.Markup.GetAttr Brick.AttrMap.AttrName -- | 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 -> Location -> CursorLocation module Brick.Main -- | The library application abstraction. Your application's operations are -- represented here and passed to one of the various main functions in -- this module. An application is in terms of an application state type -- s and an application event type e. In the simplest -- case e is vty's Event type, but you may define your -- own event type, permitted that it has a constructor for wrapping Vty -- events, so that Vty events can be handled by your event loop. data App s e App :: (s -> [Widget]) -> (s -> [CursorLocation] -> Maybe CursorLocation) -> (s -> e -> EventM (Next s)) -> (s -> EventM s) -> (s -> AttrMap) -> (Event -> e) -> App s e -- | This function turns your application state into a list of widget -- layers. The layers are listed topmost first. [appDraw] :: App s e -> s -> [Widget] -- | This function chooses which of the zero or more cursor locations -- reported by the rendering process should be selected as the one to use -- to place the cursor. If this returns Nothing, no cursor is -- placed. The rationale here is that many widgets may request a cursor -- placement but your application state is what you probably want to use -- to decide which one wins. [appChooseCursor] :: App s e -> s -> [CursorLocation] -> Maybe CursorLocation -- | This function takes the current application state and an event and -- returns an action to be taken and a corresponding transformed -- application state. Possible options are continue, -- suspendAndResume, and halt. [appHandleEvent] :: App s e -> s -> e -> EventM (Next s) -- | This function gets called once just prior to the first drawing of your -- application. Here is where you can make initial scrolling requests, -- for example. [appStartEvent] :: App s e -> s -> EventM s -- | The attribute map that should be used during rendering. [appAttrMap] :: App s e -> s -> AttrMap -- | The event constructor to use to wrap Vty events in your own event -- type. For example, if the application's event type is Event, -- this is just id. [appLiftVtyEvent] :: App s e -> Event -> e -- | The default main entry point which takes an application and an initial -- state and returns the final state returned by a halt operation. defaultMain :: App s Event -> s -> IO s -- | The custom event loop entry point to use when the simpler ones don't -- permit enough control. customMain :: IO Vty -> Chan e -> App s e -> s -> IO s -- | A simple main entry point which takes a widget and renders it. This -- event loop terminates when the user presses any key, but terminal -- resize events cause redraws. simpleMain :: Widget -> IO () -- | An event-handling function which continues execution of the event loop -- only when resize events occur; all other types of events trigger a -- halt. This is a convenience function useful as an -- appHandleEvent value for simple applications using the -- Event type that do not need to get more sophisticated user -- input. resizeOrQuit :: s -> Event -> EventM (Next s) -- | Continue running the event loop with the specified application state. continue :: s -> EventM (Next s) -- | Halt the event loop and return the specified application state as the -- final state value. halt :: s -> EventM (Next s) -- | Suspend the event loop, save the terminal state, and run the specified -- action. When it returns an application state value, restore the -- terminal state, redraw the application from the new state, and resume -- the event loop. suspendAndResume :: IO s -> EventM (Next s) -- | Given a viewport name, get the viewport's size and offset information -- from the most recent rendering. Returns Nothing if no such -- state could be found, either because the name was invalid or because -- no rendering has occurred (e.g. in an appStartEvent handler). lookupViewport :: Name -> EventM (Maybe Viewport) -- | Build a viewport scroller for the viewport with the specified name. viewportScroll :: Name -> ViewportScroll -- | A viewport scrolling handle for managing the scroll state of -- viewports. data ViewportScroll -- | Scroll the viewport vertically by the specified number of rows or -- columns depending on the orientation of the viewport. vScrollBy :: ViewportScroll -> Int -> EventM () -- | Scroll the viewport vertically by one page in the specified direction. vScrollPage :: ViewportScroll -> Direction -> EventM () -- | Scroll vertically to the beginning of the viewport. vScrollToBeginning :: ViewportScroll -> EventM () -- | Scroll vertically to the end of the viewport. vScrollToEnd :: ViewportScroll -> EventM () -- | Scroll the viewport horizontally by the specified number of rows or -- columns depending on the orientation of the viewport. hScrollBy :: ViewportScroll -> Int -> EventM () -- | Scroll the viewport horizontally by one page in the specified -- direction. hScrollPage :: ViewportScroll -> Direction -> EventM () -- | Scroll horizontally to the beginning of the viewport. hScrollToBeginning :: ViewportScroll -> EventM () -- | Scroll horizontally to the end of the viewport. hScrollToEnd :: ViewportScroll -> EventM () -- | Ignore all requested cursor positions returned by the rendering -- process. This is a convenience function useful as an -- appChooseCursor value when a simple application has no need to -- position the cursor. neverShowCursor :: s -> [CursorLocation] -> Maybe CursorLocation -- | Always show the first cursor, if any, returned by the rendering -- process. This is a convenience function useful as an -- appChooseCursor value when a simple program has zero or more -- widgets that advertise a cursor position. showFirstCursor :: s -> [CursorLocation] -> Maybe CursorLocation -- | Show the cursor with the specified name, if such a cursor location has -- been reported. showCursorNamed :: Name -> [CursorLocation] -> Maybe CursorLocation -- | 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 -- | Build a widget directly from a raw Vty image. raw :: Image -> Widget -- | Build a widget from a one-line Text value. Behaves the same as -- str. txt :: Text -> Widget -- | 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 -- | Fill all available space with the specified character. Grows both -- horizontally and vertically. fill :: Char -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | Pad a widget on the left and right. Defers to the padded widget for -- growth policy. padLeftRight :: Int -> Widget -> Widget -- | Pad a widget on the top and bottom. Defers to the padded widget for -- growth policy. padTopBottom :: Int -> Widget -> Widget -- | Pad a widget on all sides. Defers to the padded widget for growth -- policy. padAll :: Int -> Widget -> Widget -- | 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 -> Widget -> Widget -- | 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 -> Widget -> Widget -- | 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] -> Widget -- | 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] -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | When rendering the specified widget, update the attribute map with the -- specified transformation. updateAttrMap :: (AttrMap -> AttrMap) -> Widget -> Widget -- | When rendering the specified widget, use the specified border style -- for any border rendering. withBorderStyle :: BorderStyle -> Widget -> Widget -- | When rendering the specified widget, also register a cursor -- positioning request using the specified name and location. showCursor :: Name -> Location -> Widget -> Widget -- | Translate the specified widget by the specified offset amount. Defers -- to the translated width for growth policy. translateBy :: Location -> Widget -> Widget -- | Crop the specified widget on the left by the specified number of -- columns. Defers to the translated width for growth policy. cropLeftBy :: Int -> Widget -> Widget -- | Crop the specified widget on the right by the specified number of -- columns. Defers to the translated width for growth policy. cropRightBy :: Int -> Widget -> Widget -- | Crop the specified widget on the top by the specified number of rows. -- Defers to the translated width for growth policy. cropTopBy :: Int -> Widget -> Widget -- | Crop the specified widget on the bottom by the specified number of -- rows. Defers to the translated width for growth policy. cropBottomBy :: Int -> Widget -> Widget -- | 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, only the -- first is honored. If a viewport receives more than one scrolling -- request from EventM, all are honored in the order in which they -- are received. viewport :: Name -> ViewportType -> Widget -> Widget -- | 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 -> Widget -- | 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 -> Widget -- | 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 -> Result -- | After rendering the specified widget, crop its result image to the -- dimensions in the rendering context. cropToContext :: Widget -> Widget -- | This module provides combinators for centering other widgets. module Brick.Widgets.Center -- | Center the specified widget horizontally. Consumes all available -- horizontal space. hCenter :: Widget -> Widget -- | 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 -> Widget -- | Center a widget vertically. Consumes all vertical space. vCenter :: Widget -> Widget -- | 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 -> Widget -- | Center a widget both vertically and horizontally. Consumes all -- available vertical and horizontal space. center :: Widget -> Widget -- | 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 -> Widget -- | Center the widget horizontally and vertically about the specified -- origin. centerAbout :: Location -> Widget -> Widget -- | 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 -> Widget -- | Put a border around the specified widget with the specified label -- widget placed in the middle of the top horizontal border. borderWithLabel :: Widget -> Widget -> Widget -- | A horizontal border. Fills all horizontal space. hBorder :: Widget -- | A horizontal border with a label placed in the center of the border. -- Fills all horizontal space. hBorderWithLabel :: Widget -> Widget -- | A vertical border. Fills all vertical space. vBorder :: Widget -- | Draw the specified border element using the active border style using -- borderAttr. borderElem :: (BorderStyle -> Char) -> Widget -- | 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: -- --