{-# LANGUAGE OverloadedLabels #-}

-- | House palette for string-diagram SVGs.
--
-- Colours match @coffee/buff/string-diagram-schematics.html@.
module Strings.Svg.Palette
  ( bgDark,
    boxFill,
    wireGrey,
    accentBlue,
    accentMagenta,
    accentGreen,
    muteGrey,
    wireStyle,
    pathStroke,
    boxStyle,
    labelStyle,
    eqStyle,
  )
where

import Chart
import Optics.Core
import Prelude

-- | Background @#1b1e23@.
bgDark :: Colour
bgDark :: Colour
bgDark = Double -> Double -> Double -> Double -> Colour
Colour (Double
0x1b Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x1e Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x23 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Box fill @#21252d@.
boxFill :: Colour
boxFill :: Colour
boxFill = Double -> Double -> Double -> Double -> Colour
Colour (Double
0x21 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x25 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x2d Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Plain wire @#c8ccd4@.
wireGrey :: Colour
wireGrey :: Colour
wireGrey = Double -> Double -> Double -> Double -> Colour
Colour (Double
0xc8 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0xcc Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0xd4 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Primary accent @#4B7FBD@.
accentBlue :: Colour
accentBlue :: Colour
accentBlue = Double -> Double -> Double -> Double -> Colour
Colour (Double
0x4b Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x7f Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0xbd Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Secondary accent @#C44E8A@.
accentMagenta :: Colour
accentMagenta :: Colour
accentMagenta = Double -> Double -> Double -> Double -> Colour
Colour (Double
0xc4 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x4e Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x8a Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Result / id accent @#3fa47e@.
accentGreen :: Colour
accentGreen :: Colour
accentGreen = Double -> Double -> Double -> Double -> Colour
Colour (Double
0x3f Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0xa4 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x7e Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Muted labels @#777d87@.
muteGrey :: Colour
muteGrey :: Colour
muteGrey = Double -> Double -> Double -> Double -> Colour
Colour (Double
0x77 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x7d Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) (Double
0x87 Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
255) Double
1

-- | Straight wire line style (stroke width in data units).
wireStyle :: Colour -> Style
wireStyle :: Colour -> Style
wireStyle Colour
c =
  Style
defaultLineStyle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#color Colour
c
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Double Double
-> Double -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Double Double
#size Double
0.035
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style (Maybe LineCap) (Maybe LineCap)
-> Maybe LineCap -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style (Maybe LineCap) (Maybe LineCap)
#lineCap (LineCap -> Maybe LineCap
forall a. a -> Maybe a
Just LineCap
LineCapRound)
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style ScaleP ScaleP
-> ScaleP -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style ScaleP ScaleP
#scaleP ScaleP
NoScaleP

-- | Stroke-only path style (cups, caps, braid arcs).
pathStroke :: Colour -> Double -> Style
pathStroke :: Colour -> Double -> Style
pathStroke Colour
c Double
w =
  Style
defaultPathStyle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#color Colour
transparent
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#borderColor Colour
c
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Double Double
-> Double -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Double Double
#borderSize Double
w
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style (Maybe LineCap) (Maybe LineCap)
-> Maybe LineCap -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style (Maybe LineCap) (Maybe LineCap)
#lineCap (LineCap -> Maybe LineCap
forall a. a -> Maybe a
Just LineCap
LineCapRound)
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style (Maybe LineJoin) (Maybe LineJoin)
-> Maybe LineJoin -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style (Maybe LineJoin) (Maybe LineJoin)
#lineJoin (LineJoin -> Maybe LineJoin
forall a. a -> Maybe a
Just LineJoin
LineJoinRound)
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style ScaleP ScaleP
-> ScaleP -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style ScaleP ScaleP
#scaleP ScaleP
NoScaleP

-- | Filled box with coloured border.
boxStyle :: Colour -> Style
boxStyle :: Colour -> Style
boxStyle Colour
stroke =
  Style
defaultRectStyle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#color Colour
boxFill
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#borderColor Colour
stroke
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Double Double
-> Double -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Double Double
#borderSize Double
0.025
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style ScaleP ScaleP
-> ScaleP -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style ScaleP ScaleP
#scaleP ScaleP
NoScaleP

-- | Label inside a box.
labelStyle :: Style
labelStyle :: Style
labelStyle =
  Style
defaultTextStyle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#color Colour
wireGrey
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Double Double
-> Double -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Double Double
#size Double
0.18
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style TextAnchor TextAnchor
-> TextAnchor -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style TextAnchor TextAnchor
#textAnchor TextAnchor
AnchorMiddle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style ScaleP ScaleP
-> ScaleP -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style ScaleP ScaleP
#scaleP ScaleP
NoScaleP

-- | Equals sign between equality sides.
eqStyle :: Style
eqStyle :: Style
eqStyle =
  Style
defaultTextStyle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Colour Colour
-> Colour -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Colour Colour
#color Colour
muteGrey
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style Double Double
-> Double -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style Double Double
#size Double
0.28
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style TextAnchor TextAnchor
-> TextAnchor -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style TextAnchor TextAnchor
#textAnchor TextAnchor
AnchorMiddle
    Style -> (Style -> Style) -> Style
forall a b. a -> (a -> b) -> b
& Optic A_Lens NoIx Style Style ScaleP ScaleP
-> ScaleP -> Style -> Style
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a b -> b -> s -> t
set Optic A_Lens NoIx Style Style ScaleP ScaleP
#scaleP ScaleP
NoScaleP