-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Native.X.Element.Overlay.Property
-- Copyright   :  (C) 2016-2026 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
----------------------------------------------------------------------------
module Miso.Native.X.Element.Overlay.Property
  ( -- *** Property
    iosEnableSwipeBack_
  , level_
  , mode_
  , visible_
    -- *** Types
  , OverlayLevel (..)
  , OverlayMode (..)
  ) where
-----------------------------------------------------------------------------
import           Miso.JSON (ToJSON(..))
import           Miso.String (MisoString)
import           Miso.Types (Attribute)
import           Miso.Property
-----------------------------------------------------------------------------
-- | Layer level of an \<overlay\>, used by 'level_'.
data OverlayLevel
  = Level1
  | Level2
  | Level3
  | Level4
  deriving (Int -> OverlayLevel -> ShowS
[OverlayLevel] -> ShowS
OverlayLevel -> String
(Int -> OverlayLevel -> ShowS)
-> (OverlayLevel -> String)
-> ([OverlayLevel] -> ShowS)
-> Show OverlayLevel
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OverlayLevel -> ShowS
showsPrec :: Int -> OverlayLevel -> ShowS
$cshow :: OverlayLevel -> String
show :: OverlayLevel -> String
$cshowList :: [OverlayLevel] -> ShowS
showList :: [OverlayLevel] -> ShowS
Show, OverlayLevel -> OverlayLevel -> Bool
(OverlayLevel -> OverlayLevel -> Bool)
-> (OverlayLevel -> OverlayLevel -> Bool) -> Eq OverlayLevel
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OverlayLevel -> OverlayLevel -> Bool
== :: OverlayLevel -> OverlayLevel -> Bool
$c/= :: OverlayLevel -> OverlayLevel -> Bool
/= :: OverlayLevel -> OverlayLevel -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSON OverlayLevel where
  toJSON :: OverlayLevel -> Value
toJSON OverlayLevel
Level1 = Int -> Value
forall a. ToJSON a => a -> Value
toJSON (Int
1 :: Int)
  toJSON OverlayLevel
Level2 = Int -> Value
forall a. ToJSON a => a -> Value
toJSON (Int
2 :: Int)
  toJSON OverlayLevel
Level3 = Int -> Value
forall a. ToJSON a => a -> Value
toJSON (Int
3 :: Int)
  toJSON OverlayLevel
Level4 = Int -> Value
forall a. ToJSON a => a -> Value
toJSON (Int
4 :: Int)
-----------------------------------------------------------------------------
-- | The level at which the overlay content resides (iOS), used by 'mode_'.
-- 'ModeOther' carries a custom client class name.
data OverlayMode
  = ModeWindow
  | ModeTop
  | ModePage
  | ModeOther MisoString
  deriving (Int -> OverlayMode -> ShowS
[OverlayMode] -> ShowS
OverlayMode -> String
(Int -> OverlayMode -> ShowS)
-> (OverlayMode -> String)
-> ([OverlayMode] -> ShowS)
-> Show OverlayMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OverlayMode -> ShowS
showsPrec :: Int -> OverlayMode -> ShowS
$cshow :: OverlayMode -> String
show :: OverlayMode -> String
$cshowList :: [OverlayMode] -> ShowS
showList :: [OverlayMode] -> ShowS
Show, OverlayMode -> OverlayMode -> Bool
(OverlayMode -> OverlayMode -> Bool)
-> (OverlayMode -> OverlayMode -> Bool) -> Eq OverlayMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OverlayMode -> OverlayMode -> Bool
== :: OverlayMode -> OverlayMode -> Bool
$c/= :: OverlayMode -> OverlayMode -> Bool
/= :: OverlayMode -> OverlayMode -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSON OverlayMode where
  toJSON :: OverlayMode -> Value
toJSON OverlayMode
ModeWindow      = Value
"window"
  toJSON OverlayMode
ModeTop         = Value
"top"
  toJSON OverlayMode
ModePage        = Value
"page"
  toJSON (ModeOther MisoString
cls) = MisoString -> Value
forall a. ToJSON a => a -> Value
toJSON MisoString
cls
-----------------------------------------------------------------------------
-- | https://lynxjs.org/api/elements/built-in/overlay.html#ios-enable-swipe-back
--
-- *iOS* only. When the overlay is displayed, whether swiping right closes the
-- current page.
--
-- Default Value: 'False'
--
iosEnableSwipeBack_ :: Bool -> Attribute model action
iosEnableSwipeBack_ :: forall model action. Bool -> Attribute model action
iosEnableSwipeBack_ = MisoString -> Bool -> Attribute model action
forall model action. MisoString -> Bool -> Attribute model action
boolProp MisoString
"ios-enable-swipe-back"
-----------------------------------------------------------------------------
-- | https://lynxjs.org/api/elements/built-in/overlay.html#level
--
-- Layer level, from 'Level1' to 'Level4'. The larger the value, the closer it
-- is to the bottom.
--
-- > level_ Level2
--
-- Default Value: 'Level1'
--
level_ :: OverlayLevel -> Attribute model action
level_ :: forall model action. OverlayLevel -> Attribute model action
level_ = MisoString -> OverlayLevel -> Attribute model action
forall a model action.
ToJSON a =>
MisoString -> a -> Attribute model action
prop MisoString
"level"
-----------------------------------------------------------------------------
-- | https://lynxjs.org/api/elements/built-in/overlay.html#mode
--
-- *iOS* only. The level at which the overlay content resides. Use 'ModeOther'
-- for a custom client class name.
--
-- > mode_ ModeTop
--
-- Default Value: 'ModeWindow'
--
mode_ :: OverlayMode -> Attribute model action
mode_ :: forall model action. OverlayMode -> Attribute model action
mode_ = MisoString -> OverlayMode -> Attribute model action
forall a model action.
ToJSON a =>
MisoString -> a -> Attribute model action
prop MisoString
"mode"
-----------------------------------------------------------------------------
-- | https://lynxjs.org/api/elements/built-in/overlay.html#visible
--
-- Controls whether the overlay is displayed.
--
-- Default Value: 'False'
--
visible_ :: Bool -> Attribute model action
visible_ :: forall model action. Bool -> Attribute model action
visible_ = MisoString -> Bool -> Attribute model action
forall model action. MisoString -> Bool -> Attribute model action
boolProp MisoString
"visible"
-----------------------------------------------------------------------------