packages feed

css-parser-0.0.1: src/CssParser/Rule/Pseudo.hs

module CssParser.Rule.Pseudo where

import CssParser.Ident ( Ident(..) )
import CssParser.Prelude hiding (Left, Right)
import CssParser.Show ( CssShow(..), ShowSpaceBetween(..) )

newtype Language = Language Text deriving newtype (Eq, Ord, Show, IsString)

instance CssShow Language where
  toCssText (Language l)  = fromStrict l

data PseudoElement
  = UnknownPe Ident
  | After
  | Backdrop
  | Before
  | Checkmark
  | Column
  | Cue
  | DetailsContent
  | FileSelectorButton
  | FirstLetter
  | FirstLine
  | GrammarError
  | Marker
  | PickerIcon
  | Placeholder
  | ScrollMarker
  | ScrollMarkerGroup
  | SearchText
  | Selection
  | SpellingError
  | TargetText
  | ViewTransition
  deriving (Eq, Ord, Show, Generic)

instance GEnum PseudoElement

newtype BrowserSpecificIdent = BrowserSpecificIdent Ident
  deriving newtype (Eq, Ord, Show, CssShow, IsString, GEnum)
  deriving (Generic)

data AtomicPseudoClass
  = UnknownPc BrowserSpecificIdent
  | Active
  | ActiveViewTransition
  | AnyList
  | Autofill
  | Blank
  | Buffering
  | Checked
  | Current
  | Default
  | Defined
  | Disabled
  | Empty
  | Enabled
  | First
  | FirstChild
  | FirstOfType
  | Focus
  | FocusVisible
  | FocusWithin
  | Fullscreen
  | Future
  | HasSlotted
  | Heading
  | Host
  | Hover
  | Indeterminate
  | InRange
  | InterestSource
  | InterestTarget
  | Invalid
  | LastChild
  | LastOfType
  | Left
  | Link
  | LocalLink
  | Modal
  | Muted
  | OnlyChild
  | OnlyOfType
  | Open
  | Optional
  | OutOfRange
  | Past
  | Paused
  | PictureInPicture
  | PlaceholderShown
  | Playing
  | PopoverOpen
  | ReadOnly
  | ReadWrite
  | Required
  | Right
  | Root
  | Scope
  | Seeking
  | Stalled
  | Target
  | TargetAfter
  | TargetBefore
  | TargetCurrent
  | UserInvalid
  | UserValid
  | Valid
  | Visited
  | VolumeLocked
  | XrOverlay
  deriving (Eq, Ord, Show, Generic)

instance GEnum AtomicPseudoClass

instance ShowSpaceBetween AtomicPseudoClass AtomicPseudoClass where
  cssSpace _ _ = ""

instance CssShow AtomicPseudoClass where
  toCssText = cons ':' . go
    where
      go :: AtomicPseudoClass -> LText
      go = \case
        UnknownPc i -> toCssText i
        Active -> "active"
        ActiveViewTransition -> "active-view-transition"
        AnyList -> "any-list"
        Autofill -> "autofill"
        Blank -> "blank"
        Buffering -> "buffering"
        Checked -> "checked"
        Current -> "current"
        Default -> "default"
        Defined -> "defined"
        Disabled -> "disabled"
        Empty -> "empty"
        Enabled -> "enabled"
        First -> "first"
        FirstChild -> "first-child"
        FirstOfType -> "first-of-type"
        Focus -> "focus"
        FocusVisible -> "focus-visible"
        FocusWithin -> "focus-within"
        Fullscreen -> "fullscreen"
        Future -> "future"
        HasSlotted -> "has-slotted"
        Heading -> "heading"
        Host -> "host"
        Hover -> "hover"
        Indeterminate -> "indeterminate"
        InRange -> "in-range"
        InterestSource -> "interest-source"
        InterestTarget -> "interest-target"
        Invalid -> "invalid"
        LastChild -> "last-child"
        LastOfType -> "last-of-type"
        Left -> "left"
        Link -> "link"
        LocalLink -> "local-link"
        Modal -> "modal"
        Muted -> "muted"
        OnlyChild -> "only-child"
        OnlyOfType -> "only-of-type"
        Open -> "open"
        Optional -> "optional"
        OutOfRange -> "out-of-range"
        Past -> "past"
        Paused -> "paused"
        PictureInPicture -> "picture-in-picture"
        PlaceholderShown -> "placeholder-shown"
        Playing -> "playing"
        PopoverOpen -> "popover-open"
        ReadOnly -> "read-only"
        ReadWrite -> "read-write"
        Required -> "required"
        Right -> "right"
        Root -> "root"
        Scope -> "scope"
        Seeking -> "seeking"
        Stalled -> "stalled"
        Target -> "target"
        TargetAfter -> "target-after"
        TargetBefore -> "target-before"
        TargetCurrent -> "target-current"
        UserInvalid -> "user-invalid"
        UserValid -> "user-valid"
        Valid -> "valid"
        Visited -> "visited"
        VolumeLocked -> "volume-locked"
        XrOverlay -> "xr-overlay"

instance CssShow PseudoElement where
  toCssText = ("::" <>) . go
    where
      go = \case
        UnknownPe i -> toCssText i
        After -> "after"
        Backdrop -> "backdrop"
        Before -> "before"
        Checkmark -> "checkmark"
        Column -> "column"
        Cue -> "cue"
        DetailsContent -> "details-content"
        FileSelectorButton -> "file-selector-button"
        FirstLetter -> "first-letter"
        FirstLine -> "first-line"
        GrammarError -> "grammar-error"
        Marker -> "marker"
        PickerIcon -> "picker-icon"
        Placeholder -> "placeholder"
        ScrollMarker -> "scroll-marker"
        ScrollMarkerGroup -> "scroll-marker-group"
        SearchText -> "search-text"
        Selection -> "selection"
        SpellingError -> "spelling-error"
        TargetText -> "target-text"
        ViewTransition -> "view-transition"