-- | 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
  ( Widget(..)
  , Size(..)

  -- * Basic rendering primitives
  , emptyWidget
  , raw
  , txt
  , str
  , fill

  -- * Padding
  , Padding(..)
  , padLeft
  , padRight
  , padTop
  , padBottom
  , padLeftRight
  , padTopBottom
  , padAll

  -- * Box layout
  , (<=>)
  , (<+>)
  , hBox
  , vBox

  -- * Limits
  , hLimit
  , vLimit

  -- * Attribute mangement
  , withDefAttr
  , withAttr
  , forceAttr
  , updateAttrMap

  -- * Border style management
  , withBorderStyle

  -- * Cursor placement
  , showCursor

  -- * Translation
  , translateBy

  -- * Cropping
  , cropLeftBy
  , cropRightBy
  , cropTopBy
  , cropBottomBy

  -- * Scrollable viewports
  , ViewportType(..)
  , viewport
  , visible
  , visibleRegion

  -- * Rendering infrastructure
  , RenderM
  , getContext
  , lookupAttrName

  -- ** The rendering context
  , Context(ctxAttrName, availWidth, availHeight, ctxBorderStyle, ctxAttrMap)
  , attrL
  , availWidthL
  , availHeightL
  , ctxAttrMapL
  , ctxAttrNameL
  , ctxBorderStyleL

  -- ** Rendering results
  , Result(..)
  -- ** Result lenses
  , imageL
  , cursorsL
  , visibilityRequestsL
  -- ** Visibility requests
  , VisibilityRequest(..)
  , vrPositionL
  , vrSizeL
  -- ** Adding offsets to cursor positions and visibility requests
  , addResultOffset
  -- ** Cropping results
  , cropToContext

  -- * Misc
  , Direction(..)
  )
where

import Brick.Widgets.Internal