k      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneYA border style for use in any widget that needs to render borders in a consistent style.Top-left corner characterTop-right corner characterBottom-right corner characterBottom-left corner characterFull intersection (cross)<Left side of a horizontal border intersecting a vertical one=Right side of a horizontal border intersecting a vertical one 6Top of a vertical border intersecting a horizontal one 9Bottom of a vertical border intersecting a horizontal one Horizontal border character Vertical border character =Make a border style using the specified character everywhere.6An ASCII border style which will work in any terminal.DA unicode border style with real corner and intersection characters.*A unicode border style in a bold typeface.,A unicode border style with rounded corners.     None_A template haskell function to build lenses for a record type. This function differs from the i 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.NoneMarkup with metadata type a assigned to each character.aBuild a piece of markup; assign the specified metadata to every character in the specified text.1Build markup from text with the default metadata.=Extract the text from markup, discarding the markup metadata.ySet the metadata for a range of character positions in a piece of markup. This is useful for, e.g., syntax highlighting.~Convert markup to a list of pairs in which each pair contains the longest subsequence of characters having the same metadata.6Convert a list of text and metadata pairs into markup.      None An attribute map which maps  values to   values.9An attribute name. Attribute names are hierarchical; use   (  ) 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: J"window" <> "border" "window" <> "title" "header" <> "clock" <> "seconds" 'Create an attribute name from a string.Create an attribute map.HCreate an attribute map in which all lookups map to the same attribute.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, 1mergeWithDefault (fg blue) $ attrMap (bg red) [] returns blue `on` red 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 H, 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 !4Set the default attribute value in an attribute map."7Insert a set of attribute mappings to an attribute map.The map's default attribute to be returned when a name lookup fails, and the attribute that will be merged with successful lookups.The map's initial contents. !"  !"  !" !"None6#A terminal screen location.% (Column, Row)&Scrolling direction.' Down/right(Up/left)@The type of actions to take upon completion of an event handler.*YThe type of viewports that indicates the direction(s) in which a viewport is scrollable.+BViewports of this type are scrollable vertically and horizontally.,8Viewports of this type are scrollable only horizontally.-6Viewports of this type are scrollable only vertically..NDescribes the state of a viewport as it appears as its most recent rendering.0/The column offset of left side of the viewport.1*The row offset of the top of the viewport.2The size of the viewport.7HNames of things. Used to name cursor locations, widgets, and viewports.9The 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.?@A cursor location. These are returned by the rendering process.A The locationB3The name of the widget associated with the locationC7The class of types that behave like terminal locations.DGet the column out of the valueFGet the row out of the valueThe origin (upper-left corner).G#$%&'()*+,-./0123456 !"#$%&'(78)9*:;<=>?@ABCDEFGH+,-./0IJKLMNOB#$%&'()*+,-./0123456 !"#$%&'(789*:;<=>?@ABCDEFGH/0IJKLMNO#$%&(')*-,+./0123456$#"! %&'(78)9*:;<=>?@ABCDEFGH+,-./0IJKLMNONonePGiven 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 1110 clamp 1 10 22 clamp 5 10 15Q^Build an attribute from a foreground color and a background color. Intended to be used infix.RaCreate an attribute from the specified foreground color (the background color is the "default").SaCreate an attribute from the specified background color (the background color is the "default").TAdd a # offset to the specified ?.PThe minimum valueThe maximum valueThe value to clampQThe foreground colorThe background colorRSTPQRSTPQRSTPQRSTNoneHMUThe 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.W%The final rendered image for a widgetXIThe list of reported cursor positions for the application to choose fromYfThe list of visibility requests made by widgets rendered while rendering this one (used by viewports)ZThe 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.[The type of widgets.]&This widget's horizontal growth policy^$This widget's vertical growth policy_ This widget's rendering function`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.a4Greedy widgets take up all the space they are given.b_Fixed widgets take up the same amount of space no matter how much they are given (non-greedy).cuThe monad in which event handlers run. Although it may be tempting to dig into the reader value yourself, just use .d:The class of types that provide some basic event-handling.eHandle a Vty eventfThe type of padding.g2Pad up to the number of available rows or columns.h/Pad by the specified number of rows or columns.iA 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 eV on it, and stores the resulting transformed value back in the state using the lens.j"Get the current rendering context.s2The rendering context's current drawing attribute.tpGiven an attribute name, obtain the attribute for the attribute name by consulting the context's attribute map."UVWXYZ[\]^_`abcdefghiThe state value.>The lens to use to extract and store the target of the event.The event to handle.j1klmnopqrst2N#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOUVWXYZ[\]^_`abcdefghijklmnopqrstN[\]^_#$%HCDEFG?@ABKL./012*-,+NOMc)deiZj9:;<=>slkmnoUVWXYtqpr3456IJ`bafhg&('78UVWXYZ[\]^_`bacdefhgij1klmnopqrst2NoneuaA focus ring containing a sequence of widget names to focus and a currently-focused widget name.v.Construct a focus ring from the list of names.w-Advance focus to the next widget in the ring.x1Advance focus to the previous widget in the ring.ySGet the currently-focused widget name from the ring. If the ring is emtpy, return 3.z5Cursor selection convenience function for use as an  value.u45vwxyzGThe function used to get the focus ring out of your application state.Your application state.'The list of available cursor positions.MThe cursor position, if any, that matches the name currently focused by the u.uvwxyzuvwxyzu54vwxyzNone{hAfter rendering the specified widget, crop its result image to the dimensions in the rendering context.6{76{76{7NoneEHM#8The process of rendering widgets in a box layout is exactly the same except for the dimension under consideration (width vs. height), in which case all of the same operations that consider one dimension in the layout algorithm need to be switched to consider the other. Because of this we fill a BoxRenderer with all of the functions needed to consider the "primary" dimension (e.g. vertical if the box layout is vertical) as well as the "secondary" dimension (e.g. horizontal if the box layout is vertical). Doing this permits us to have one implementation for box layout and parameterizing on the orientation of all of the operations.|^When rendering the specified widget, use the specified border style for any border rendering.}The empty 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.Build a widget from a 9W. Breaks newlines up and space-pads short lines out to the length of the longest line.Build a widget from a one-line : value. Behaves the same as .Pad the specified widget on the left. If max padding is used, this grows greedily horizontally; otherwise it defers to the padded widget.Pad the specified widget on the right. If max padding is used, this grows greedily horizontally; otherwise it defers to the padded widget.Pad the specified widget on the top. If max padding is used, this grows greedily vertically; otherwise it defers to the padded widget.Pad the specified widget on the bottom. If max padding is used, this grows greedily vertically; otherwise it defers to the padded widget.SPad a widget on the left and right. Defers to the padded widget for growth policy.SPad a widget on the top and bottom. Defers to the padded widget for growth policy.JPad a widget on all sides. Defers to the padded widget for growth policy._Fill all available space with the specified character. Grows both horizontally and vertically.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).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).;>Render a series of widgets in a box layout in the order given. The growth policy of a box layout is the most unrestricted of the growth policies of the widgets it contains, so to determine the hSize and vSize of the box we just take the maximum (using the Ord instance for Size) of all of the widgets to be rendered in the box.Then the box layout algorithm proceeds as follows. We'll use the vertical case to concretely describe the algorithm, but the horizontal case can be envisioned just by exchanging all "vertical""horizontal" and "rows"%"columns", etc., in the description.,The growth policies of the child widgets determine the order in which they are rendered, i.e., the order in which space in the box is allocated to widgets as the algorithm proceeds. This is because order matters: if we render greedy widgets first, there will be no space left for non-greedy ones.#So we render all widgets with size b in the vertical dimension first. Each is rendered with as much room as the overall box has, but we assume that they will not be greedy and use it all. If they do, maybe it's because the terminal is small and there just isn't enough room to render everything.JThen the remaining height is distributed evenly amongst all remaining (greedy) widgets and they are rendered in sub-boxes that are as high as this even slice of rows and as wide as the box is permitted to be. We only do this step at all if rendering the non-greedy widgets left us any space, i.e., if there were any rows left. After rendering the non-greedy and then greedy widgets, their images are sorted so that they are stored in the order the original widgets were given. All cursor locations and visibility requests in each sub-widget are translated according to the position of the sub-widget in the box.All images are padded to be as wide as the widest sub-widget to prevent attribute over-runs. Without this step the attribute used by a sub-widget may continue on in an undesirable fashion until it hits something with a different attribute. To prevent this and to behave in the least surprising way, we pad the image on the right with whitespace using the context's current attribute.Finally, the padded images are concatenated together vertically and returned along with the translated cursor positions and visibility requests.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.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.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 < to override this; if you really want to prevent that, use . 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 .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.aWhen rendering the specified widget, update the attribute map with the specified transformation.When rendering the specified widget, force all attribute lookups in the attribute map to use the value currently assigned to the specified attribute name.-Build a widget directly from a raw Vty image.qTranslate the specified widget by the specified offset amount. Defers to the translated width for growth policy.|Crop the specified widget on the left by the specified number of columns. Defers to the translated width for growth policy.}Crop the specified widget on the right by the specified number of columns. Defers to the translated width for growth policy.xCrop the specified widget on the top by the specified number of rows. Defers to the translated width for growth policy.{Crop the specified widget on the bottom by the specified number of rows. Defers to the translated width for growth policy.wWhen rendering the specified widget, also register a cursor positioning request using the specified name and location.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  combinator to make a "visibility request". This viewport combinator will then translate the resulting rendering to make the requested region visible. In addition, the L monad provides primitives to scroll viewports created by this function if  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 ;, all are honored in the order in which they are received.;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 , is what makes the text editor and list widgets possible without making them deal with the details of scrolling state management.0This does nothing if not rendered in a viewport. Similar to -, request that a region (with the specified # as its origin and <J as its size) be made visible when it is rendered inside a viewport. The #D is relative to the specified widget's upper-left corner of (0, 0).0This does nothing if not rendered in a viewport.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 .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 .78=>?@ABCDEFG|}~HIJKL;MNKThe name of the viewport (must be unique and stable for reliable behavior)CThe type of viewport (indicates the permitted scrolling direction)4The widget to be rendered in the scrollable viewportOPLeftRightTopBottom"{|}~"}|~{,8 =>?@ABCDEFG|}~HIJKL;MNOPNone~A type class for types that provide access to an attribute in the rendering monad. You probably won't need to instance this.7Where to get the attribute for this attribute metadata.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 ; to determine the attribute to use for this piece of text.Build a widget from markup.QRQR NoneSCenter the specified widget horizontally. Consumes all available horizontal space.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).9Center a widget vertically. Consumes all vertical space.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).hCenter a widget both vertically and horizontally. Consumes all available vertical and horizontal space.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).JCenter the widget horizontally and vertically about the specified origin. None$The top-level border attribute name.#The vertical border attribute name.%The horizontal border attribute name.0The attribute used for horizontal border labels.3The attribute used for border box top-left corners.4The attribute used for border box top-right corners.6The attribute used for border box bottom-left corners.7The attribute used for border box bottom-right corners.GDraw the specified border element using the active border style using .)Put a border around the specified widget.|Put a border around the specified widget with the specified label widget placed in the middle of the top horizontal border.1A horizontal border. Fills all horizontal space.aA horizontal border with a label placed in the center of the border. Fills all horizontal space.-A vertical border. Fills all vertical space.The label widget!The widget to put a border aroundSThe label widgetTST None bDialogs present a window with a title (optional), a body, and buttons (optional). They provide a d 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:Tab: selecte the next button%Shift-tab: select the previous buttonThe dialog nameThe dialog title#The dialog button labels and values3The currently selected dialog button index (if any)The maximum width of the dialogCreate a dialog.#The default attribute of the dialog,The default attribute for all dialog buttons6The attribute for the selected dialog button (extends )/Render a dialog with the specified body widget.Obtain the value associated with the dialog's currently-selected button, if any. This function is probably what you want when someone presses Enter in a dialog.UjThe dialog name, provided so that you can use this as a basis for viewport names in the dialog if desiredThe dialog title_The currently-selected button index (starting at zero) and the button labels and values to useThe maximum width of the dialogVWUVW None ?Editor state. Editors support the following events by default:Ctrl-a: go to beginning of lineCtrl-e: go to end of line0Ctrl-d, Del: delete character at cursor position4Backspace: delete character prior to cursor position-Ctrl-k: delete all from cursor to end of lineArrow keys: move cursor4Enter: break the current line at the cursor positionThe contents of the editor1The function the editor uses to draw its contentsThe name of the editorConstruct an editor.Apply an editing operation to the editor's contents. Bear in mind that you should only apply zipper operations that operate on the current line; the editor will only ever render the first line of text.$The attribute assigned to the editorGet the contents of the editor.(Turn an editor state value into a widgetXY"The editor's name (must be unique)The content rendering function0The limit on the number of lines in the editor (3 means no limit)The initial contentThe  editing transformation to applyZ XYZ None;The attribute of the completed portion of the progress bar.<The attribute of the incomplete portion of the progress bar.Draw a progress bar with the specified (optional) label and progress value. This fills available horizontal space and is one row high.JThe label. If specified, this is shown in the center of the progress bar.8The progress value. Should be between 0 and 1 inclusive.NoneHA viewport scrolling handle for managing the scroll state of viewports.[DThe name of the viewport to be controlled by this scrolling handle.IScroll the viewport horizontally by one page in the specified direction.{Scroll the viewport horizontally by the specified number of rows or columns depending on the orientation of the viewport.6Scroll horizontally to the beginning of the viewport./Scroll horizontally to the end of the viewport.GScroll the viewport vertically by one page in the specified direction.yScroll the viewport vertically by the specified number of rows or columns depending on the orientation of the viewport.3Scroll vertically to the beginning of the viewport.-Scroll vertically to the end of the viewport.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 \ 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.nThis function turns your application state into a list of widget layers. The layers are listed topmost first.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 3, 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.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 , , and .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.7The attribute map that should be used during rendering.zThe event constructor to use to wrap Vty events in your own event type. For example, if the application's event type is \, this is just ].xThe default main entry point which takes an application and an initial state and returns the final state returned by a  operation.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.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 * value for simple applications using the \= type that do not need to get more sophisticated user input.\The custom event loop entry point to use when the simpler ones don't permit enough control.oGiven a viewport name, get the viewport's size and offset information from the most recent rendering. Returns 3y if no such state could be found, either because the name was invalid or because no rendering has occurred (e.g. in an  handler).wIgnore all requested cursor positions returned by the rendering process. This is a convenience function useful as an E value when a simple application has no need to position the cursor.wAlways show the first cursor, if any, returned by the rendering process. This is a convenience function useful as an X value when a simple program has zero or more widgets that advertise a cursor position.VShow the cursor with the specified name, if such a cursor location has been reported.CBuild a viewport scroller for the viewport with the specified name.FContinue running the event loop with the specified application state.YHalt the event loop and return the specified application state as the final state value.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.'^[_`aThe application.The initial application state.The widget to draw.bAn IO action to build a Vty handle. This is used to build a Vty handle whenever the event loop begins or is resumed after suspension.yAn event channel for sending custom events to the event loop (you write to this channel, the event loop reads from it).The application.The initial application state.cdef% ^[_a`bcdefNoneE 'List state. Lists have an element type eU that is the data stored by the list. Lists handle the following events by default:0Up/down arrow keys: move cursor of selected itemtPage up / page down keys: move cursor of selected item by one page at a time (based on the number of items shown)JHome/end keys: move cursor of selected item to beginning or end of list1The top-level attribute used for the entire list.GThe attribute used only for the currently-selected list item. Extends .-Construct a list in terms of an element type e.FTurn a list state value into a widget given an item drawing function.5Insert an item into a list at the specified position.8Remove an element from a list at the specified position.eReplace the contents of a list with a new set of elements but preserve the currently selected index.]Move the list selected index up by one. (Moves the cursor up, subtracts one from the index.)ZMove the list selected index down by one. (Moves the cursor down, adds one to the index.)MMove the list selected index by the specified amount, subject to validation.QSet the selected index for a list to the specified index, subject to validation.)Return a list's selected element, if any.gThe list name (must be unique)The initial list contentsGThe list item height in rows (all list item widgets must be this high)h0The position at which to insert (0 <= i <= size)The element to insert:The position at which to remove an element (0 <= i < size)ijkghijkNone !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst{|}~l !"#$%&'()*+,-./0123456789:;<==>?@ABCDEFGHIJKLMNOPPQRSTUVWWXYZ[\]^_`abcdefghijkllmnopqqrstuvwxyz{|}~        - !"45#$%&'()*+,-./0123456789:;Q<=>?@ABCDEFGHIJKLMNOPQRJSTUVWXYZ[\]^_`abcdefg h i  j k  l mnopKqrstuvwxyz{|}~ brick-0.2Brick.Widgets.Border.Style Brick.TypesData.Text.Markup Brick.AttrMap Brick.Util Brick.FocusBrick.Widgets.Core Brick.MarkupBrick.Widgets.CenterBrick.Widgets.BorderBrick.Widgets.DialogBrick.Widgets.EditBrick.Widgets.ProgressBar Brick.MainBrick.Widgets.ListBrick.Types.TH Control.Lens makeLensesBrick.Types.InternallookupViewportappChooseCursorBrick.Widgets.InternalEventM Data.TextZipperBrick BorderStyle bsCornerTL bsCornerTR bsCornerBR bsCornerBLbsIntersectFull bsIntersectL bsIntersectR bsIntersectT bsIntersectB bsHorizontal bsVerticalborderStyleFromCharasciiunicode unicodeBoldunicodeRounded suffixLensesMarkup@@fromTexttoText markupSet markupToListfromListAttrMapAttrNameattrNameattrMap forceAttrMapmergeWithDefault attrMapLookup setDefaultapplyAttrMappingsLocationloc DirectionDownUpNext ViewportTypeBoth HorizontalVerticalViewportVP_vpLeft_vpTop_vpSizeVisibilityRequestVR vrPositionvrSizeNameContext ctxAttrName availWidth availHeightctxBorderStyle ctxAttrMapCursorLocationcursorLocationcursorLocationNameTerminalLocationcolumnLcolumnrowLrowlocL vrPositionLvrSizeLcursorLocationLcursorLocationNameLvpLeftvpSizevpTopclamponfgbgclOffsetResultimagecursorsvisibilityRequestsRenderMWidgethSizevSizerenderSizeGreedyFixed HandleEvent handleEventPaddingMaxPadhandleEventLensed getContext availHeightL availWidthL ctxAttrMapL ctxAttrNameLctxBorderStyleLcursorsLimageLvisibilityRequestsLattrLlookupAttrName FocusRing focusRing focusNext focusPrevfocusGetCurrentfocusRingCursor cropToContextwithBorderStyle emptyWidgetaddResultOffsetstrtxtpadLeftpadRightpadTop padBottom padLeftRight padTopBottompadAllfillvBoxhBoxhLimitvLimitwithAttr withDefAttr updateAttrMap forceAttrraw translateBy cropLeftBy cropRightBy cropTopBy cropBottomBy showCursorviewportvisible visibleRegion<+><=>GetAttrgetAttr@?markuphCenter hCenterWithvCenter vCenterWithcenter centerWith centerAbout borderAttr vBorderAttr hBorderAttrhBorderLabelAttr tlCornerAttr trCornerAttr blCornerAttr brCornerAttr borderElemborderborderWithLabelhBorderhBorderWithLabelvBorderDialog dialogName dialogTitle dialogButtonsdialogSelectedIndex dialogWidthdialogButtonsL dialogNameLdialogSelectedIndexL dialogTitleL dialogWidthLdialog dialogAttr buttonAttrbuttonSelectedAttr renderDialogdialogSelectionEditor editContentseditDrawContents editorName editContentsLeditDrawContentsLeditor applyEditeditAttrgetEditContents renderEditorprogressCompleteAttrprogressIncompleteAttr progressBarViewportScroll hScrollPage hScrollByhScrollToBeginning hScrollToEnd vScrollPage vScrollByvScrollToBeginning vScrollToEndAppappDrawappHandleEvent appStartEvent appAttrMapappLiftVtyEvent defaultMain simpleMain resizeOrQuit customMainneverShowCursorshowFirstCursorshowCursorNamedviewportScrollcontinuehaltsuspendAndResumeList listElements listSelectedlistNamelistItemHeight listElementsLlistItemHeightL listNameL listSelectedLlistAttrlistSelectedAttrlist renderList listInsert listRemove listReplace listMoveUp listMoveDown listMoveBy listMoveTolistSelectedElement$fDefaultBorderStyle$fIsStringMarkup$fMonoidMarkup vty-5.4.0Graphics.Vty.AttributesAttrbase Data.Monoidmappend<> ForceAttr combineAttrs combineMDs$fDefaultAttrMap$fIsStringAttrName$fMonoidAttrName$fDefaultAttrNameoriginHaltSuspendAndResumeContinue EventState ScrollRequest VScrollToEndVScrollToBeginning VScrollPage VScrollBy HScrollToEndHScrollToBeginning HScrollPage HScrollBy RenderStateRS viewportMapscrollRequests$fIsStringName$fMonoidLocation$fTerminalLocationLocation$fField2LocationLocationIntInt$fField1LocationLocationIntIntscrollRequestsL viewportMapL$fDefaultResult $fTerminalLocationCursorLocation Data.MaybeNothingFocusRingNonemptyFocusRingEmpty renderFinalcropResultToContext BoxRendererGHC.BaseString text-1.2.1.3Data.Text.InternalText renderBoxGraphics.Vty.Prelude DisplayRegioncontextPrimarycontextSecondary imagePrimaryimageSecondary limitPrimarylimitSecondaryprimaryWidgetSizeconcatenatePrimarylocationFromOffsetpadImageSecondaryaddVisibilityOffsetaddCursorOffset unrestricted vBoxRenderer hBoxRendererhReleasevReleasescrollTo scrollToView$fGetAttrAttrName $fGetAttrAttrborder_hBorder_ nextButtonBy$fHandleEventDialog editorNameL$fHandleEventEditor viewportNameGraphics.Vty.Input.EventsEventid InternalNext InternalHaltInternalSuspendAndResume runWithNewVtysupplyVtyEventsrunVtywithVty renderAppdrawListElements maintainSelmerge$fHandleEventList