-----------------------------------------------------------------------------
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
module THREE.PointLight
  ( -- * Types
    PointLight (..)
    -- * Constructors
  , THREE.PointLight.new
    -- * Read-only Properties
  , isPointLight
    -- * Properties
  , decay
  , distance
  , power
    -- * Optional properties
    -- * Methods
    -- * Helper functions
  ) where
-----------------------------------------------------------------------------
import           Miso
-----------------------------------------------------------------------------
import           THREE.EventDispatcher as THREE
import           THREE.Internal as THREE
import           THREE.Light as THREE
import           THREE.Object3D as THREE
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/#api/en/lights/PointLight
newtype PointLight
  = PointLight
  { PointLight -> JSVal
unPointLight :: JSVal
  } deriving newtype (PointLight -> IO [JSVal]
(PointLight -> IO [JSVal]) -> ToArgs PointLight
forall args. (args -> IO [JSVal]) -> ToArgs args
$ctoArgs :: PointLight -> IO [JSVal]
toArgs :: PointLight -> IO [JSVal]
ToArgs, PointLight -> IO Object
(PointLight -> IO Object) -> ToObject PointLight
forall a. (a -> IO Object) -> ToObject a
$ctoObject :: PointLight -> IO Object
toObject :: PointLight -> IO Object
ToObject, PointLight -> IO JSVal
(PointLight -> IO JSVal) -> ToJSVal PointLight
forall a. (a -> IO JSVal) -> ToJSVal a
$ctoJSVal :: PointLight -> IO JSVal
toJSVal :: PointLight -> IO JSVal
ToJSVal)
    deriving anyclass (Property PointLight Double
Property PointLight Color
ReadOnly PointLight Bool
Object3D PointLight
Method PointLight () ()
Object3D PointLight =>
ReadOnly PointLight Bool
-> Property PointLight Color
-> Property PointLight Double
-> Method PointLight () ()
-> Light PointLight
forall light.
Object3D light =>
ReadOnly light Bool
-> Property light Color
-> Property light Double
-> Method light () ()
-> Light light
$cisLight :: ReadOnly PointLight Bool
isLight :: ReadOnly PointLight Bool
$ccolor :: Property PointLight Color
color :: Property PointLight Color
$cintensity :: Property PointLight Double
intensity :: Property PointLight Double
$cdispose :: Method PointLight () ()
dispose :: Method PointLight () ()
Light, Property PointLight Bool
Property PointLight Double
Property PointLight MisoString
Property PointLight Function
Property PointLight Object
Property PointLight Euler
Property PointLight AnimationClip
Property PointLight Layers
Property PointLight Matrix3
Property PointLight Matrix4
Property PointLight Quaternion
Property PointLight Vector3
ReadOnly PointLight Bool
ReadOnly PointLight Int
EventDispatcher PointLight
Method PointLight Bool ()
Method PointLight () ()
Method PointLight (Bool, Bool) ()
Method PointLight (Raycaster, JSVal) ()
Method PointLight (Vector3, Double) ()
Method PointLight Function ()
Method PointLight Object Object
FromJSVal PointLight => Method PointLight Double PointLight
FromJSVal PointLight => Method PointLight () PointLight
FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
FromJSVal PointLight => Method PointLight Quaternion PointLight
EventDispatcher PointLight =>
Property PointLight AnimationClip
-> Property PointLight Bool
-> (forall material.
    (Material material, FromJSVal material) =>
    Property PointLight material)
-> (forall material.
    (Material material, FromJSVal material) =>
    Property PointLight material)
-> Property PointLight Bool
-> ReadOnly PointLight Int
-> ReadOnly PointLight Bool
-> Property PointLight Layers
-> Property PointLight Matrix4
-> Property PointLight Bool
-> Property PointLight Matrix4
-> Property PointLight Bool
-> Property PointLight Bool
-> Property PointLight Matrix4
-> Property PointLight MisoString
-> Property PointLight Matrix3
-> Property PointLight Function
-> Property PointLight Function
-> Property PointLight Function
-> Property PointLight Function
-> (forall return.
    (Object3D return, FromJSVal return) =>
    Property PointLight return)
-> Property PointLight Vector3
-> Property PointLight Quaternion
-> Property PointLight Bool
-> Property PointLight Double
-> Property PointLight Euler
-> Property PointLight Vector3
-> Property PointLight Vector3
-> Property PointLight Object
-> Property PointLight MisoString
-> Property PointLight Bool
-> Property PointLight Vector3
-> Property PointLight Bool
-> Property PointLight Bool
-> (forall arg.
    (ToArgs arg, FromJSVal PointLight, Object3D arg) =>
    Method PointLight arg PointLight)
-> Method PointLight Matrix4 ()
-> (FromJSVal PointLight =>
    Method PointLight Quaternion PointLight)
-> (forall arg.
    (FromJSVal PointLight, ToArgs arg) =>
    Method PointLight arg PointLight)
-> (forall arg.
    (ToArgs arg, FromJSVal PointLight) =>
    Method PointLight arg PointLight)
-> (forall t.
    (FromJSVal PointLight, Object3DCloneParams t, ToArgs t) =>
    Method PointLight t PointLight)
-> (forall t.
    (ToArgs PointLight, FromJSVal PointLight,
     Object3DCopyParams PointLight t, ToArgs t) =>
    Method PointLight t PointLight)
-> Method PointLight Vector3 Vector3
-> Method PointLight Quaternion Quaternion
-> Method PointLight Vector3 Vector3
-> Method PointLight Vector3 Vector3
-> Method PointLight Vector3 Vector3
-> (forall arg.
    (ToArgs arg, Triplet arg) =>
    Method PointLight arg ())
-> Method PointLight (Raycaster, JSVal) ()
-> (forall arg.
    (ToArgs arg, Object3D arg, FromJSVal PointLight) =>
    Method PointLight arg PointLight)
-> (FromJSVal PointLight => Method PointLight () PointLight)
-> (FromJSVal PointLight =>
    Method PointLight (Vector3, Double) PointLight)
-> (FromJSVal PointLight =>
    Method PointLight (Vector3, Double) PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> Method PointLight (Vector3, Double) ()
-> Method PointLight Euler ()
-> Method PointLight Matrix4 ()
-> Method PointLight Quaternion ()
-> Method PointLight Object Object
-> (FromJSVal PointLight =>
    Method PointLight (Vector3, Double) PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> (FromJSVal PointLight => Method PointLight Double PointLight)
-> Method PointLight Function ()
-> Method PointLight Function ()
-> Method PointLight Function ()
-> Method PointLight () ()
-> Method PointLight Bool ()
-> Method PointLight (Bool, Bool) ()
-> Method PointLight Vector3 Vector3
-> Object3D PointLight
Method PointLight Euler ()
Method PointLight Matrix4 ()
Method PointLight Quaternion ()
Method PointLight Quaternion Quaternion
Method PointLight Vector3 Vector3
forall arg.
(ToArgs arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
forall arg.
(ToArgs arg, FromJSVal PointLight, Object3D arg) =>
Method PointLight arg PointLight
forall arg. (ToArgs arg, Triplet arg) => Method PointLight arg ()
forall arg.
(ToArgs arg, Object3D arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
forall t.
(ToArgs PointLight, FromJSVal PointLight,
 Object3DCopyParams PointLight t, ToArgs t) =>
Method PointLight t PointLight
forall arg.
(FromJSVal PointLight, ToArgs arg) =>
Method PointLight arg PointLight
forall t.
(FromJSVal PointLight, Object3DCloneParams t, ToArgs t) =>
Method PointLight t PointLight
forall object.
EventDispatcher object =>
Property object AnimationClip
-> Property object Bool
-> (forall material.
    (Material material, FromJSVal material) =>
    Property object material)
-> (forall material.
    (Material material, FromJSVal material) =>
    Property object material)
-> Property object Bool
-> ReadOnly object Int
-> ReadOnly object Bool
-> Property object Layers
-> Property object Matrix4
-> Property object Bool
-> Property object Matrix4
-> Property object Bool
-> Property object Bool
-> Property object Matrix4
-> Property object MisoString
-> Property object Matrix3
-> Property object Function
-> Property object Function
-> Property object Function
-> Property object Function
-> (forall return.
    (Object3D return, FromJSVal return) =>
    Property object return)
-> Property object Vector3
-> Property object Quaternion
-> Property object Bool
-> Property object Double
-> Property object Euler
-> Property object Vector3
-> Property object Vector3
-> Property object Object
-> Property object MisoString
-> Property object Bool
-> Property object Vector3
-> Property object Bool
-> Property object Bool
-> (forall arg.
    (ToArgs arg, FromJSVal object, Object3D arg) =>
    Method object arg object)
-> Method object Matrix4 ()
-> (FromJSVal object => Method object Quaternion object)
-> (forall arg.
    (FromJSVal object, ToArgs arg) =>
    Method object arg object)
-> (forall arg.
    (ToArgs arg, FromJSVal object) =>
    Method object arg object)
-> (forall t.
    (FromJSVal object, Object3DCloneParams t, ToArgs t) =>
    Method object t object)
-> (forall t.
    (ToArgs object, FromJSVal object, Object3DCopyParams object t,
     ToArgs t) =>
    Method object t object)
-> Method object Vector3 Vector3
-> Method object Quaternion Quaternion
-> Method object Vector3 Vector3
-> Method object Vector3 Vector3
-> Method object Vector3 Vector3
-> (forall arg. (ToArgs arg, Triplet arg) => Method object arg ())
-> Method object (Raycaster, JSVal) ()
-> (forall arg.
    (ToArgs arg, Object3D arg, FromJSVal object) =>
    Method object arg object)
-> (FromJSVal object => Method object () object)
-> (FromJSVal object => Method object (Vector3, Double) object)
-> (FromJSVal object => Method object (Vector3, Double) object)
-> (FromJSVal object => Method object Double object)
-> (FromJSVal object => Method object Double object)
-> (FromJSVal object => Method object Double object)
-> Method object (Vector3, Double) ()
-> Method object Euler ()
-> Method object Matrix4 ()
-> Method object Quaternion ()
-> Method object Object Object
-> (FromJSVal object => Method object (Vector3, Double) object)
-> (FromJSVal object => Method object Double object)
-> (FromJSVal object => Method object Double object)
-> (FromJSVal object => Method object Double object)
-> Method object Function ()
-> Method object Function ()
-> Method object Function ()
-> Method object () ()
-> Method object Bool ()
-> Method object (Bool, Bool) ()
-> Method object Vector3 Vector3
-> Object3D object
forall material.
(Material material, FromJSVal material) =>
Property PointLight material
forall return.
(Object3D return, FromJSVal return) =>
Property PointLight return
$canimations :: Property PointLight AnimationClip
animations :: Property PointLight AnimationClip
$ccastShadow :: Property PointLight Bool
castShadow :: Property PointLight Bool
$ccustomDepthMaterial :: forall material.
(Material material, FromJSVal material) =>
Property PointLight material
customDepthMaterial :: forall material.
(Material material, FromJSVal material) =>
Property PointLight material
$ccustomDistanceMaterial :: forall material.
(Material material, FromJSVal material) =>
Property PointLight material
customDistanceMaterial :: forall material.
(Material material, FromJSVal material) =>
Property PointLight material
$cfrustumCulled :: Property PointLight Bool
frustumCulled :: Property PointLight Bool
$cid :: ReadOnly PointLight Int
id :: ReadOnly PointLight Int
$cisObject3D :: ReadOnly PointLight Bool
isObject3D :: ReadOnly PointLight Bool
$clayers :: Property PointLight Layers
layers :: Property PointLight Layers
$cmatrix :: Property PointLight Matrix4
matrix :: Property PointLight Matrix4
$cmatrixAutoUpdate :: Property PointLight Bool
matrixAutoUpdate :: Property PointLight Bool
$cmatrixWorld :: Property PointLight Matrix4
matrixWorld :: Property PointLight Matrix4
$cmatrixWorldAutoUpdate :: Property PointLight Bool
matrixWorldAutoUpdate :: Property PointLight Bool
$cmatrixWorldNeedsUpdate :: Property PointLight Bool
matrixWorldNeedsUpdate :: Property PointLight Bool
$cmodelViewMatrix :: Property PointLight Matrix4
modelViewMatrix :: Property PointLight Matrix4
$cname :: Property PointLight MisoString
name :: Property PointLight MisoString
$cnormalMatrix :: Property PointLight Matrix3
normalMatrix :: Property PointLight Matrix3
$conAfterRender :: Property PointLight Function
onAfterRender :: Property PointLight Function
$conAfterShadow :: Property PointLight Function
onAfterShadow :: Property PointLight Function
$conBeforeRender :: Property PointLight Function
onBeforeRender :: Property PointLight Function
$conBeforeShadow :: Property PointLight Function
onBeforeShadow :: Property PointLight Function
$cparent :: forall return.
(Object3D return, FromJSVal return) =>
Property PointLight return
parent :: forall return.
(Object3D return, FromJSVal return) =>
Property PointLight return
$cposition :: Property PointLight Vector3
position :: Property PointLight Vector3
$cquaternion :: Property PointLight Quaternion
quaternion :: Property PointLight Quaternion
$creceiveShadow :: Property PointLight Bool
receiveShadow :: Property PointLight Bool
$crenderOrder :: Property PointLight Double
renderOrder :: Property PointLight Double
$crotation :: Property PointLight Euler
rotation :: Property PointLight Euler
$cscale :: Property PointLight Vector3
scale :: Property PointLight Vector3
$cup :: Property PointLight Vector3
up :: Property PointLight Vector3
$cuserData :: Property PointLight Object
userData :: Property PointLight Object
$cuuid :: Property PointLight MisoString
uuid :: Property PointLight MisoString
$cvisible :: Property PointLight Bool
visible :: Property PointLight Bool
$cdefaultUp :: Property PointLight Vector3
defaultUp :: Property PointLight Vector3
$cdefaultMatrixAutoUpdate :: Property PointLight Bool
defaultMatrixAutoUpdate :: Property PointLight Bool
$cdefaultMatrixWorldAutoUpdate :: Property PointLight Bool
defaultMatrixWorldAutoUpdate :: Property PointLight Bool
$cadd :: forall arg.
(ToArgs arg, FromJSVal PointLight, Object3D arg) =>
Method PointLight arg PointLight
add :: forall arg.
(ToArgs arg, FromJSVal PointLight, Object3D arg) =>
Method PointLight arg PointLight
$capplyMatrix4 :: Method PointLight Matrix4 ()
applyMatrix4 :: Method PointLight Matrix4 ()
$capplyQuaternion :: FromJSVal PointLight => Method PointLight Quaternion PointLight
applyQuaternion :: FromJSVal PointLight => Method PointLight Quaternion PointLight
$cattach :: forall arg.
(FromJSVal PointLight, ToArgs arg) =>
Method PointLight arg PointLight
attach :: forall arg.
(FromJSVal PointLight, ToArgs arg) =>
Method PointLight arg PointLight
$cclear :: forall arg.
(ToArgs arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
clear :: forall arg.
(ToArgs arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
$cclone :: forall t.
(FromJSVal PointLight, Object3DCloneParams t, ToArgs t) =>
Method PointLight t PointLight
clone :: forall t.
(FromJSVal PointLight, Object3DCloneParams t, ToArgs t) =>
Method PointLight t PointLight
$ccopy :: forall t.
(ToArgs PointLight, FromJSVal PointLight,
 Object3DCopyParams PointLight t, ToArgs t) =>
Method PointLight t PointLight
copy :: forall t.
(ToArgs PointLight, FromJSVal PointLight,
 Object3DCopyParams PointLight t, ToArgs t) =>
Method PointLight t PointLight
$cgetWorldPosition :: Method PointLight Vector3 Vector3
getWorldPosition :: Method PointLight Vector3 Vector3
$cgetWorldQuaternion :: Method PointLight Quaternion Quaternion
getWorldQuaternion :: Method PointLight Quaternion Quaternion
$cgetWorldScale :: Method PointLight Vector3 Vector3
getWorldScale :: Method PointLight Vector3 Vector3
$cgetWorldDirection :: Method PointLight Vector3 Vector3
getWorldDirection :: Method PointLight Vector3 Vector3
$clocalToWorld :: Method PointLight Vector3 Vector3
localToWorld :: Method PointLight Vector3 Vector3
$clookAt :: forall arg. (ToArgs arg, Triplet arg) => Method PointLight arg ()
lookAt :: forall arg. (ToArgs arg, Triplet arg) => Method PointLight arg ()
$craycast :: Method PointLight (Raycaster, JSVal) ()
raycast :: Method PointLight (Raycaster, JSVal) ()
$cremove :: forall arg.
(ToArgs arg, Object3D arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
remove :: forall arg.
(ToArgs arg, Object3D arg, FromJSVal PointLight) =>
Method PointLight arg PointLight
$cremoveFromParent :: FromJSVal PointLight => Method PointLight () PointLight
removeFromParent :: FromJSVal PointLight => Method PointLight () PointLight
$crotateOnAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
rotateOnAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
$crotateOnWorldAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
rotateOnWorldAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
$crotateX :: FromJSVal PointLight => Method PointLight Double PointLight
rotateX :: FromJSVal PointLight => Method PointLight Double PointLight
$crotateY :: FromJSVal PointLight => Method PointLight Double PointLight
rotateY :: FromJSVal PointLight => Method PointLight Double PointLight
$crotateZ :: FromJSVal PointLight => Method PointLight Double PointLight
rotateZ :: FromJSVal PointLight => Method PointLight Double PointLight
$csetRotationFromAxisAngle :: Method PointLight (Vector3, Double) ()
setRotationFromAxisAngle :: Method PointLight (Vector3, Double) ()
$csetRotationFromEuler :: Method PointLight Euler ()
setRotationFromEuler :: Method PointLight Euler ()
$csetRotationFromMatrix :: Method PointLight Matrix4 ()
setRotationFromMatrix :: Method PointLight Matrix4 ()
$csetRotationFromQuaternion :: Method PointLight Quaternion ()
setRotationFromQuaternion :: Method PointLight Quaternion ()
$ctoJSON :: Method PointLight Object Object
toJSON :: Method PointLight Object Object
$ctranslateOnAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
translateOnAxis :: FromJSVal PointLight =>
Method PointLight (Vector3, Double) PointLight
$ctranslateX :: FromJSVal PointLight => Method PointLight Double PointLight
translateX :: FromJSVal PointLight => Method PointLight Double PointLight
$ctranslateY :: FromJSVal PointLight => Method PointLight Double PointLight
translateY :: FromJSVal PointLight => Method PointLight Double PointLight
$ctranslateZ :: FromJSVal PointLight => Method PointLight Double PointLight
translateZ :: FromJSVal PointLight => Method PointLight Double PointLight
$ctraverse :: Method PointLight Function ()
traverse :: Method PointLight Function ()
$ctraverseVisible :: Method PointLight Function ()
traverseVisible :: Method PointLight Function ()
$ctraverseAncestors :: Method PointLight Function ()
traverseAncestors :: Method PointLight Function ()
$cupdateMatrix :: Method PointLight () ()
updateMatrix :: Method PointLight () ()
$cupdateMatrixWorld :: Method PointLight Bool ()
updateMatrixWorld :: Method PointLight Bool ()
$cupdateWorldMatrix :: Method PointLight (Bool, Bool) ()
updateWorldMatrix :: Method PointLight (Bool, Bool) ()
$cworldToLocal :: Method PointLight Vector3 Vector3
worldToLocal :: Method PointLight Vector3 Vector3
Object3D, ToObject PointLight
ToJSVal PointLight
Method PointLight (MisoString, Function) ()
Method PointLight Object ()
(ToObject PointLight, ToJSVal PointLight) =>
Method PointLight (MisoString, Function) ()
-> Method PointLight (MisoString, Function) ()
-> Method PointLight (MisoString, Function) ()
-> Method PointLight Object ()
-> EventDispatcher PointLight
forall object.
(ToObject object, ToJSVal object) =>
Method object (MisoString, Function) ()
-> Method object (MisoString, Function) ()
-> Method object (MisoString, Function) ()
-> Method object Object ()
-> EventDispatcher object
$caddEventListener :: Method PointLight (MisoString, Function) ()
addEventListener :: Method PointLight (MisoString, Function) ()
$chasEventListener :: Method PointLight (MisoString, Function) ()
hasEventListener :: Method PointLight (MisoString, Function) ()
$cremoveEventListener :: Method PointLight (MisoString, Function) ()
removeEventListener :: Method PointLight (MisoString, Function) ()
$cdispatchEvent :: Method PointLight Object ()
dispatchEvent :: Method PointLight Object ()
EventDispatcher)
-----------------------------------------------------------------------------
instance FromJSVal PointLight where
  fromJSVal :: JSVal -> IO (Maybe PointLight)
fromJSVal = Maybe PointLight -> IO (Maybe PointLight)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe PointLight -> IO (Maybe PointLight))
-> (JSVal -> Maybe PointLight) -> JSVal -> IO (Maybe PointLight)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PointLight -> Maybe PointLight
forall a. a -> Maybe a
Just (PointLight -> Maybe PointLight)
-> (JSVal -> PointLight) -> JSVal -> Maybe PointLight
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> PointLight
PointLight
-----------------------------------------------------------------------------
class PointLightParams t
instance PointLightParams ()
instance PointLightParams Int
instance PointLightParams (Int, Double)
instance PointLightParams (Int, Double, Double)
instance PointLightParams (Int, Double, Double, Double)
new :: (ToArgs t, PointLightParams t) => t -> THREE.Three PointLight
new :: forall t. (ToArgs t, PointLightParams t) => t -> IO PointLight
new = (JSVal -> PointLight) -> MisoString -> t -> IO PointLight
forall args con.
ToArgs args =>
(JSVal -> con) -> MisoString -> args -> Three con
THREE.new JSVal -> PointLight
PointLight MisoString
"PointLight"
-----------------------------------------------------------------------------
-- Read-only properties
-----------------------------------------------------------------------------
isPointLight :: ReadOnly PointLight Bool
isPointLight :: ReadOnly PointLight Bool
isPointLight = MisoString -> ReadOnly PointLight Bool
forall object return.
(FromJSVal return, ToObject object) =>
MisoString -> ReadOnly object return
readonly MisoString
"isPointLight" 
-----------------------------------------------------------------------------
-- Properties
-----------------------------------------------------------------------------
decay :: Property PointLight Double
decay :: Property PointLight Double
decay = MisoString -> Property PointLight Double
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"decay"
-----------------------------------------------------------------------------
distance :: Property PointLight Double
distance :: Property PointLight Double
distance = MisoString -> Property PointLight Double
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"distance" 
-----------------------------------------------------------------------------
power :: Property PointLight Double
power :: Property PointLight Double
power = MisoString -> Property PointLight Double
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"power" 
-----------------------------------------------------------------------------
-- Optional properties
-----------------------------------------------------------------------------
-- Methods
-----------------------------------------------------------------------------
-- Helper functions
-----------------------------------------------------------------------------