~sjm/builds-character

3a60e0830323ccace8b0132fd7fc0abc9069c26e — Sam Marshall 2 years ago dc28e3c
chore: add css, save every xp change
A .postcssrc => .postcssrc +9 -0
@@ 0,0 1,9 @@
{
    "modules": false,
    "plugins": {
        "autoprefixer": {
            "grid": true
        },
        "tailwindcss": {}
    }
}

A app.css => app.css +3 -0
@@ 0,0 1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

M index.html => index.html +4 -0
@@ 3,6 3,10 @@
  <head>
    <meta charset="UTF-8">
    <title>Halogen6 Template</title>
    <link rel="stylesheet" type="text/css" href="./app.css">

    </style>

  </head>
  <body>
    <script src="./index.js"></script>

M package.json => package.json +5 -1
@@ 4,8 4,12 @@
  "author": "Sam Marshall <sjm@sjm.codes>",
  "license": "MIT",
  "devDependencies": {
    "autoprefixer": "^10.2.5",
    "parcel": "^2.0.0-beta.2",
    "postcss": "^8.2.14",
    "postcss-modules": "^4.0.0",
    "purescript": "^0.14.1",
    "spago": "^0.20.1"
    "spago": "^0.20.1",
    "tailwindcss": "^2.1.2"
  }
}

M readme.org => readme.org +34 -1
@@ 2,5 2,38 @@

a Stars Without Number p2p Character Sheet.

Control your data, avoid hosting character sheets online, still share them with your friends.

** todo list
*** TODO save sheet on update
*** DONE save sheet on update
:LOGBOOK:
- State "DONE"       from "TODO"       [2021-05-08 Sat 15:40]
:END:
*** TODO some styles

going to stick to something simple for now, but some structure in the UI would be nice. Ideally, it would look like the default char sheet in the SWN rule book.

**** DONE install tailwind
:LOGBOOK:
- State "DONE"       from "TODO"       [2021-05-08 Sat 17:02]
:END:

I'm gonna use tailwind CSS...

#+begin_src shell
yarn add -D postcss-modules tailwindcss
#+end_src

**** DONE Hook styles into HTML
:LOGBOOK:
- State "DONE"       from "TODO"       [2021-05-08 Sat 17:02]
:END:
**** TODO Style existing components

*** TODO UI.XP slot should have configurable id
*** TODO UI.Class drop-down for selecting class
*** TODO Improve use of profunctor-lenses

This one might require me to understand profunctor lenses a lot better...

**** TODO Read up on profunctor-lenses

M scripts.org => scripts.org +22 -21
@@ 11,30 11,31 @@ $ /home/sam/Documents/code/builds-character/node_modules/.bin/parcel build ./ind
Building...
Bundling...
Packaging & Optimizing...
✨ Built in 7.40s
✨ Built in 6.27s

dist/index.1b2e5459.js                          644.66 KB    6.28s
├── output/Data.Map.Internal/index.js            35.27 KB     45ms
├── output/Data.List/index.js                     17.4 KB     55ms
├── output/Data.List.Lazy/index.js               16.62 KB     57ms
├── output/Control.Monad.List.Trans/index.js     12.76 KB     54ms
├── output/Data.List.Lazy.Types/index.js         12.57 KB     56ms
├── output/Data.List.Types/index.js              11.81 KB     18ms
├── output/Data.Foldable/index.js                10.81 KB     46ms
├── output/Data.Array/index.js                   10.15 KB     47ms
├── output/Data.FoldableWithIndex/index.js        9.86 KB     44ms
└── output/Halogen.Query.HalogenM/index.js         8.8 KB    193ms
└── + 377 more assets
dist/index.0ebdc5d7.css                         ⚠️  3.07 MB    105ms
├── app.css                                         3.07 MB    6.00s
├── <no source>                                       128 B      0ms
├── Code from unknown sourcefiles                      48 B      0ms
└── %3Cinput%20css%20B9PXjF%3E                          6 B      0ms

dist/index.html                                     152 B    174ms
└── index.html                                      194 B     53ms
Done in 8.67s.
#+end_example
dist/index.115142ed.js                            649.14 KB    5.30s
├── output/Data.Map.Internal/index.js              35.27 KB    984ms
├── output/Data.List/index.js                       17.4 KB    993ms
├── output/Data.List.Lazy/index.js                 16.62 KB    337ms
├── output/Control.Monad.List.Trans/index.js       12.76 KB    785ms
├── output/Data.List.Lazy.Types/index.js           12.57 KB    369ms
├── output/Data.List.Types/index.js                11.81 KB    583ms
├── output/Data.Foldable/index.js                  10.81 KB    507ms
├── output/Data.Array/index.js                     10.15 KB    455ms
├── output/Data.FoldableWithIndex/index.js          9.86 KB    808ms
└── output/Halogen.Query.HalogenM/index.js           8.8 KB    463ms
└── + 380 more assets

#+name: launch-project
#+begin_src shell
yarn parcel ./index.html
#+end_src
dist/index.html                                       218 B    105ms
└── index.html                                        285 B     59ms
Done in 7.15s.
#+end_example

#+name: install
#+begin_src shell :results output verbose

M src/CharSheet.purs => src/CharSheet.purs +25 -19
@@ 1,27 1,34 @@
module CharSheet (Character(..), fresh, fromJson, write, xp, setXP, modifyXP) where
module CharSheet (Character(..), fresh, fromJson, write, xp, class', setXP, modifyXP) where

import Prelude

import Beaker.HyperDrive as HD
import CharSheet.Class as CC
import CharSheet.XP as XP
import Data.Argonaut as A
import Data.Either (Either(..))
import Data.Int as I
import Data.Lens as L
import Data.Lens.Index (ix)
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe)
import Data.Tuple (Tuple(..))
import Effect.Aff (Aff, Error, error)
import Foreign.Object as Object

newtype Character = Character { xp :: XP.XP }
newtype Character = Character { xp :: XP.XP
                              , class :: CC.Class }

fresh :: Character
fresh = Character { xp : XP.xp 0 }
fresh = Character { xp : XP.xp 0
                  , class : CC.Undecided }

xp :: Character -> XP.XP
xp (Character { xp: x }) = x

-- shouldn't have picked a keyword...
class' :: Character -> CC.Class
class' (Character { class: c }) = c

modifyXP :: (XP.XP -> XP.XP) -> Character -> Character
modifyXP f (Character c) = Character $ c { xp = ( f c.xp ) }



@@ 31,25 38,24 @@ setXP (Character c) x = Character $ c { xp = x }
fromJson :: A.Json -> Maybe Character
fromJson j = do
  x <- I.ceil <$> (L.preview (A._Object <<< ix "xp" <<< A._Number) j)
  cl <- CC.fromString $ L.view (A._Object <<< ix "class" <<< A._String) j

  pure $ Character { xp: XP.xp x }
  pure $ Character { xp: XP.xp x, class: CC.Undecided }

toJson :: Character -> A.Json
toJson c = let
  x = XP._xp $ xp $ c
  in
toJson (Character { xp: x, class: c }) =
   A.fromObject ( Object.fromFoldable
                  [ Tuple "xp" ( A.fromNumber $ I.toNumber x )  ] )
                  [ Tuple "xp" (XP.toJson x)
                  , Tuple "class" (CC.toJson c)
                  ]
                )

write :: Character -> Aff (Either Error Unit)
write c = do
  let mo = A.toString $ toJson c
  case mo of
    Just x -> do
      if x == "" then
        pure $ Left $ error "[CharSheet] character data empty"
      else do
        HD.writeFile "/data.json" x
        pure $ Right unit
    Nothing -> do
      pure $ Left $ error "[CharSheet] unable to find character data"
  let s = A.stringify $ toJson c

  if s == "" then
    pure $ Left $ error "[CharSheet] character data is empty"
  else do
    HD.writeFile "/data.json" s
    pure $ Right unit

A src/CharSheet/Class.purs => src/CharSheet/Class.purs +74 -0
@@ 0,0 1,74 @@
module CharSheet.Class where

import Prelude

import Data.Argonaut as A
import Data.Lens as L
import Data.Maybe (Maybe(..))

data Class
  = Expert
  | Warrior
  | Psychic
  | ExpertWarrior
  | ExpertPsychic
  | PsychicWarrior
  -- allow the initial class to be undecided to avoid having to wrap in a Maybe
  | Undecided

_expert :: String
_expert = "expert"

_warrior :: String
_warrior = "warrior"

_psychic :: String
_psychic = "psychic"

_expertWarrior :: String
_expertWarrior = "adventurer: expert warrior"

_expertPsychic :: String
_expertPsychic = "adventurer: psychic expert"

_psychicWarrior :: String
_psychicWarrior = "adventurer: psychic warrior"

_undecided :: String
_undecided = "undecided"

toString :: Class -> String
toString Expert = _expert
toString Warrior = _warrior
toString Psychic = _psychic
toString ExpertWarrior = _expertWarrior
toString ExpertPsychic = _expertPsychic
toString PsychicWarrior = _psychicWarrior
toString Undecided = _undecided

toJson :: Class -> A.Json
toJson = A.fromString <<< toString

-- if over case so we can compare using references to variables,
-- rather than string literals, which could allow mistakes to creep in.
fromString :: String -> Maybe Class
fromString str = if str == _expert then
    Just Expert
  else if str == _warrior then
    Just Warrior
  else if str == _psychic then
    Just Psychic
  else if str == _expertWarrior then
    Just ExpertWarrior
  else if str == _expertPsychic then
    Just ExpertPsychic
  else if str == _psychicWarrior then
    Just PsychicWarrior
  else if str == _undecided then
    Just Undecided
  else
    Nothing

fromJson :: A.Json -> Maybe Class
fromJson json =
  L.preview (A._String) json >>= fromString

M src/CharSheet/XP.purs => src/CharSheet/XP.purs +6 -1
@@ 1,8 1,10 @@
module CharSheet.XP (XP, _xp, xp, toLevel, inc, dec) where
module CharSheet.XP (XP, _xp, xp, toLevel, inc, dec, toJson) where

import Prelude

import CharSheet.Level (Level(..))
import Data.Argonaut as A
import Data.Int as I

newtype XP = XP Int



@@ 23,6 25,9 @@ dec (XP i)
  | i > 0 = XP (i - 1)
  | otherwise = XP i

toJson :: XP -> A.Json
toJson (XP i) = A.fromNumber $ I.toNumber i

toLevel :: XP -> Level
toLevel (XP count)
  | count < 3 = Level 1

M src/Main.purs => src/Main.purs +25 -5
@@ 4,17 4,19 @@ import Prelude

import Beaker.HyperDrive as BHD
import CharSheet as C
import Data.Either (Either(..))
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Effect.Aff (Aff, launchAff_)
import Effect.Aff (Aff, attempt, launchAff_)
import Effect.Class (liftEffect)
import Effect.Console as Console
import Halogen as H
import Halogen.Aff as HA
import Halogen.Subscription as Event
import Halogen.VDom.Driver (runUI)
import UI.Entry as Entry

entry :: forall o. Aff (H.HalogenIO Entry.Query o Aff)
entry :: Aff (H.HalogenIO Entry.Query Entry.Output Aff)
entry = do
  body <- HA.awaitBody



@@ 24,10 26,28 @@ main :: Effect Unit
main = launchAff_ do

  ui <- entry
  json <- C.fromJson <$> BHD.readFileJSON "/data.json"
  f' <- attempt $ BHD.readFileJSON "/data.json"

  _ <- case json of
  c' <- case f' of
    Left _ -> do
      -- if there's no data.json, make one
      _ <- C.write C.fresh
      pure Nothing
    Right f -> do
      pure $ C.fromJson f

  _ <- case c' of
    Just c -> ui.query $ H.mkTell $ Entry.Load c
    Nothing -> pure Nothing
    Nothing -> do
      _ <- C.write C.fresh
      pure Nothing

  _ <- H.liftEffect $ Event.subscribe ui.messages \(Entry.Save char) -> do
    launchAff_ do
      res <- C.write char
      case res of
        Left e -> liftEffect $ Console.logShow e
        Right _ -> pure unit
      pure unit

  liftEffect $ Console.logShow "Done"

A src/UI/Class.purs => src/UI/Class.purs +34 -0
@@ 0,0 1,34 @@
module UI.Class where

import Prelude

import CharSheet.Class as CC
import Data.Maybe (Maybe(..))
import Halogen as H
import Halogen.HTML as HH

type Input = CC.Class
type State = CC.Class

data Action = Update Input

type Slot s = forall q o. H.Slot q o s

component :: forall q o m. H.Component q Input o m
component = H.mkComponent { initialState
                          , render
                          , eval : H.mkEval $ H.defaultEval { handleAction = handleAction
                                                            , receive = Just <<< Update
                                                            }
                          }

initialState :: Input -> State
initialState = identity

render :: forall a m. State -> H.ComponentHTML a () m
render s =
  HH.div_ [ HH.text $ CC.toString s ]

handleAction :: forall o m. Action -> H.HalogenM State Action () o m Unit
handleAction = case _ of
  Update i -> H.modify_ $ const i

M src/UI/Entry.purs => src/UI/Entry.purs +18 -7
@@ 8,13 8,18 @@ import Data.Maybe (Maybe(..))
import Effect.Class (class MonadEffect)
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Properties as HP
import Type.Proxy (Proxy(..))
import UI.Class as UC
import UI.Level as UILevel
import UI.XP as UIXP

type State = C.Character
type Input = C.Character

data Output =
  Save State

data Query a = Load Input a

data Action =


@@ 22,12 27,14 @@ data Action =

type Slots = ( xp :: UIXP.Slot
             , lvl :: (UILevel.Slot Unit)
             , class :: (UC.Slot Unit)
             )

_xp = Proxy :: Proxy "xp"
_lvl = Proxy :: Proxy "lvl"
_class = Proxy :: Proxy "class"

component :: forall m o. MonadEffect m => H.Component Query Input o m
component :: forall m. MonadEffect m => H.Component Query Input Output m
component = H.mkComponent { initialState
                          , render
                          , eval : H.mkEval $ H.defaultEval { handleQuery = handleQuery


@@ 39,16 46,20 @@ initialState = identity
render :: forall m. MonadEffect m => State -> H.ComponentHTML Action Slots m
render state = let
  xp = C.xp state
  cl = C.class' state
  in
    HH.div_ [ HH.slot _xp 0 UIXP.component { xp } XPOutput
    HH.div [ HP.classes $ HH.ClassName <$> [ "border-solid", "border-2", "border-black" ] ] [ HH.slot_ _class unit UC.component cl
            , HH.slot _xp 0 UIXP.component { xp } XPOutput
            , HH.slot_ _lvl unit UILevel.component xp ]

handleAction :: forall o m. MonadEffect m => Action -> H.HalogenM State Action Slots o m Unit
handleAction :: forall m. MonadEffect m => Action -> H.HalogenM State Action Slots Output m Unit
handleAction = case _ of
  XPOutput output -> case output of
    UIXP.IncXP -> do
      H.modify_ $ C.modifyXP CXP.inc
    UIXP.DecXP -> H.modify_ $ C.modifyXP CXP.dec
  XPOutput output -> do
    case output of
      UIXP.IncXP -> H.modify_ $ C.modifyXP CXP.inc
      UIXP.DecXP -> H.modify_ $ C.modifyXP CXP.dec
    c <- H.get
    H.raise $ Save c

handleQuery :: forall a m o. Query a -> H.HalogenM State Action Slots o m (Maybe a)
handleQuery = case _ of

M src/UI/XP.purs => src/UI/XP.purs +0 -1
@@ 5,7 5,6 @@ import Prelude
import CharSheet.XP as CX
import Data.Maybe (Maybe(..))
import Effect.Class (class MonadEffect)
import Effect.Console as Console
import Halogen as H
import Halogen.HTML as HH
import Halogen.HTML.Events as HE

M yarn.lock => yarn.lock +436 -13
@@ 950,6 950,13 @@
    "@babel/helper-validator-identifier" "^7.14.0"
    to-fast-properties "^2.0.0"

"@fullhuman/postcss-purgecss@^3.1.3":
  version "3.1.3"
  resolved "https://registry.yarnpkg.com/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz#47af7b87c9bfb3de4bc94a38f875b928fffdf339"
  integrity sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==
  dependencies:
    purgecss "^3.1.3"

"@iarna/toml@^2.2.0":
  version "2.2.5"
  resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"


@@ 1596,16 1603,35 @@ acorn-globals@^4.3.0:
    acorn "^6.0.1"
    acorn-walk "^6.0.1"

acorn-node@^1.6.1:
  version "1.8.2"
  resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
  integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
  dependencies:
    acorn "^7.0.0"
    acorn-walk "^7.0.0"
    xtend "^4.0.2"

acorn-walk@^6.0.1:
  version "6.2.0"
  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
  integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==

acorn-walk@^7.0.0:
  version "7.2.0"
  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==

acorn@^6.0.1, acorn@^6.0.4:
  version "6.4.2"
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==

acorn@^7.0.0:
  version "7.4.1"
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==

ajv@^6.12.3:
  version "6.12.6"
  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"


@@ 1665,6 1691,14 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
  dependencies:
    color-convert "^2.0.1"

anymatch@~3.1.1:
  version "3.1.2"
  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
  integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
  dependencies:
    normalize-path "^3.0.0"
    picomatch "^2.0.4"

aproba@^1.1.1:
  version "1.2.0"
  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"


@@ 1769,11 1803,28 @@ asynckit@^0.4.0:
  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=

at-least-node@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==

atob@^2.1.2:
  version "2.1.2"
  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==

autoprefixer@^10.2.5:
  version "10.2.5"
  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d"
  integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==
  dependencies:
    browserslist "^4.16.3"
    caniuse-lite "^1.0.30001196"
    colorette "^1.2.2"
    fraction.js "^4.0.13"
    normalize-range "^0.1.2"
    postcss-value-parser "^4.1.0"

available-typed-arrays@^1.0.2:
  version "1.0.2"
  resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5"


@@ 1864,6 1915,11 @@ big.js@^5.2.2:
  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==

binary-extensions@^2.0.0:
  version "2.2.0"
  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==

bl@^4.1.0:
  version "4.1.0"
  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"


@@ 1917,7 1973,7 @@ braces@^2.3.1:
    split-string "^3.0.2"
    to-regex "^3.0.1"

braces@^3.0.1:
braces@^3.0.1, braces@~3.0.2:
  version "3.0.2"
  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==


@@ 1995,7 2051,7 @@ browserify-zlib@^0.2.0:
  dependencies:
    pako "~1.0.5"

browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.5, browserslist@^4.6.6:
browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.16.5, browserslist@^4.6.6:
  version "4.16.6"
  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
  integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==


@@ 2039,6 2095,11 @@ bytes@3.0.0:
  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=

bytes@^3.0.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==

cacache@^11.3.2:
  version "11.3.3"
  resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"


@@ 2101,6 2162,11 @@ callsites@^2.0.0:
  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=

camelcase-css@^2.0.1:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==

caniuse-api@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"


@@ 2116,6 2182,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001219:
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz#c080e1c8eefb99f6cc9685da6313840bdbaf4c36"
  integrity sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA==

caniuse-lite@^1.0.30001196:
  version "1.0.30001223"
  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz#39b49ff0bfb3ee3587000d2f66c47addc6e14443"
  integrity sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==

caseless@~0.12.0:
  version "0.12.0"
  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"


@@ 2149,6 2220,21 @@ chalk@^4.0.0, chalk@^4.1.0:
    ansi-styles "^4.1.0"
    supports-color "^7.1.0"

chokidar@^3.5.1:
  version "3.5.1"
  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
  dependencies:
    anymatch "~3.1.1"
    braces "~3.0.2"
    glob-parent "~5.1.0"
    is-binary-path "~2.1.0"
    is-glob "~4.0.1"
    normalize-path "~3.0.0"
    readdirp "~3.5.0"
  optionalDependencies:
    fsevents "~2.3.1"

chownr@^1.1.1:
  version "1.1.4"
  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"


@@ 2255,7 2341,7 @@ color-string@^1.5.4:
    color-name "^1.0.0"
    simple-swizzle "^0.2.2"

color@^3.0.0:
color@^3.0.0, color@^3.1.3:
  version "3.1.3"
  resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e"
  integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==


@@ 2290,6 2376,11 @@ commander@^5.0.0:
  resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==

commander@^6.0.0:
  version "6.2.1"
  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
  integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==

commander@^7.0.0:
  version "7.2.0"
  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"


@@ 2524,6 2615,11 @@ css-tree@^1.1.2:
    mdn-data "2.0.14"
    source-map "^0.6.1"

css-unit-converter@^1.1.1:
  version "1.1.2"
  resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21"
  integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==

css-what@^3.2.1:
  version "3.4.2"
  resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"


@@ 2702,6 2798,11 @@ define-property@^2.0.2:
    is-descriptor "^1.0.2"
    isobject "^3.0.1"

defined@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
  integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=

delayed-stream@~1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"


@@ 2720,6 2821,20 @@ detect-libc@^1.0.3:
  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=

detective@^5.2.0:
  version "5.2.0"
  resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
  integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
  dependencies:
    acorn-node "^1.6.1"
    defined "^1.0.0"
    minimist "^1.1.1"

didyoumean@^1.2.1:
  version "1.2.1"
  resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff"
  integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=

diffie-hellman@^5.0.0:
  version "5.0.3"
  resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"


@@ 2729,6 2844,11 @@ diffie-hellman@^5.0.0:
    miller-rabin "^4.0.0"
    randombytes "^2.0.0"

dlv@^1.1.3:
  version "1.1.3"
  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==

dom-serializer@0:
  version "0.2.2"
  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"


@@ 3099,6 3219,18 @@ fast-glob@3.1.1:
    merge2 "^1.3.0"
    micromatch "^4.0.2"

fast-glob@^3.2.5:
  version "3.2.5"
  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
  integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
  dependencies:
    "@nodelib/fs.stat" "^2.0.2"
    "@nodelib/fs.walk" "^1.2.3"
    glob-parent "^5.1.0"
    merge2 "^1.3.0"
    micromatch "^4.0.2"
    picomatch "^2.2.1"

fast-json-stable-stringify@^2.0.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"


@@ 3227,6 3359,11 @@ format@^0.2.0:
  resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
  integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=

fraction.js@^4.0.13:
  version "4.0.13"
  resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe"
  integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==

fragment-cache@^0.2.1:
  version "0.2.1"
  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"


@@ 3242,6 3379,16 @@ from2@^2.1.0:
    inherits "^2.0.1"
    readable-stream "^2.0.0"

fs-extra@^9.1.0:
  version "9.1.0"
  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
  dependencies:
    at-least-node "^1.0.0"
    graceful-fs "^4.2.0"
    jsonfile "^6.0.1"
    universalify "^2.0.0"

fs-minipass@^1.2.5:
  version "1.2.7"
  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"


@@ 3264,6 3411,11 @@ fs.realpath@^1.0.0:
  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=

fsevents@~2.3.1:
  version "2.3.2"
  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==

function-bind@^1.1.1:
  version "1.1.1"
  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"


@@ 3314,7 3466,22 @@ getpass@^0.1.1:
  dependencies:
    assert-plus "^1.0.0"

glob-parent@^5.1.0:
glob-base@^0.3.0:
  version "0.3.0"
  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
  dependencies:
    glob-parent "^2.0.0"
    is-glob "^2.0.0"

glob-parent@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
  dependencies:
    is-glob "^2.0.0"

glob-parent@^5.1.0, glob-parent@~5.1.0:
  version "5.1.2"
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==


@@ 3333,6 3500,18 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4:
    once "^1.3.0"
    path-is-absolute "^1.0.0"

glob@^7.1.2:
  version "7.1.7"
  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
  dependencies:
    fs.realpath "^1.0.0"
    inflight "^1.0.4"
    inherits "2"
    minimatch "^3.0.4"
    once "^1.3.0"
    path-is-absolute "^1.0.0"

globals@^11.1.0:
  version "11.12.0"
  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"


@@ 3345,7 3524,7 @@ globals@^13.2.0:
  dependencies:
    type-fest "^0.20.2"

graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.4:
graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
  version "4.2.6"
  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
  integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==


@@ 3491,6 3670,11 @@ html-tags@^1.0.0:
  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-1.2.0.tgz#c78de65b5663aa597989dd2b7ab49200d7e4db98"
  integrity sha1-x43mW1Zjqll5id0rerSSANfk25g=

html-tags@^3.1.0:
  version "3.1.0"
  resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
  integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==

htmlnano@^0.2.2:
  version "0.2.9"
  resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-0.2.9.tgz#5723a26afa0d1343ea8648c2d5be8170744af9a7"


@@ 3579,6 3763,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
  dependencies:
    postcss "^7.0.14"

icss-utils@^5.0.0:
  version "5.1.0"
  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
  integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==

ieee754@^1.1.13:
  version "1.2.1"
  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"


@@ 3671,6 3860,13 @@ is-bigint@^1.0.1:
  resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
  integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==

is-binary-path@~2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
  dependencies:
    binary-extensions "^2.0.0"

is-boolean-object@^1.1.0:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"


@@ 3754,6 3950,11 @@ is-docker@^2.0.0:
  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==

is-dotfile@^1.0.0:
  version "1.0.3"
  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=

is-extendable@^0.1.0, is-extendable@^0.1.1:
  version "0.1.1"
  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"


@@ 3766,6 3967,11 @@ is-extendable@^1.0.1:
  dependencies:
    is-plain-object "^2.0.4"

is-extglob@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=

is-extglob@^2.1.1:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"


@@ 3786,7 3992,14 @@ is-generator-function@^1.0.7:
  resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b"
  integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==

is-glob@^4.0.0, is-glob@^4.0.1:
is-glob@^2.0.0:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
  dependencies:
    is-extglob "^1.0.0"

is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
  version "4.0.1"
  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==


@@ 4051,6 4264,15 @@ json5@^2.1.0, json5@^2.1.2:
  dependencies:
    minimist "^1.2.5"

jsonfile@^6.0.1:
  version "6.1.0"
  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
  dependencies:
    universalify "^2.0.0"
  optionalDependencies:
    graceful-fs "^4.1.6"

jsprim@^1.2.2:
  version "1.4.1"
  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"


@@ 4127,12 4349,22 @@ lodash.sortby@^4.7.0:
  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=

lodash.toarray@^4.4.0:
  version "4.4.0"
  resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
  integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=

lodash.topath@^4.5.2:
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009"
  integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=

lodash.uniq@^4.5.0:
  version "4.5.0"
  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=

lodash@^4.17.15, lodash@^4.17.19:
lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
  version "4.17.21"
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==


@@ 4310,7 4542,7 @@ minimatch@3.0.4, minimatch@^3.0.4:
  dependencies:
    brace-expansion "^1.1.7"

minimist@^1.2.0, minimist@^1.2.5:
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
  version "1.2.5"
  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==


@@ 4361,6 4593,11 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
  dependencies:
    minimist "^1.2.5"

modern-normalize@^1.0.0:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.1.0.tgz#da8e80140d9221426bd4f725c6e11283d34f90b7"
  integrity sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==

move-concurrently@^1.0.1:
  version "1.0.1"
  resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"


@@ 4425,6 4662,13 @@ node-addon-api@^3.0.0, node-addon-api@^3.0.2:
  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239"
  integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==

node-emoji@^1.8.1:
  version "1.10.0"
  resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
  integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
  dependencies:
    lodash.toarray "^4.4.0"

node-forge@^0.10.0:
  version "0.10.0"
  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"


@@ 4440,6 4684,16 @@ node-releases@^1.1.71:
  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
  integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==

normalize-path@^3.0.0, normalize-path@~3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==

normalize-range@^0.1.2:
  version "0.1.2"
  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=

normalize-url@^3.0.0:
  version "3.3.0"
  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"


@@ 4474,6 4728,11 @@ oauth-sign@~0.9.0:
  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==

object-assign@^4.1.1:
  version "4.1.1"
  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=

object-copy@^0.1.0:
  version "0.1.0"
  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"


@@ 4483,6 4742,11 @@ object-copy@^0.1.0:
    define-property "^0.2.5"
    kind-of "^3.0.3"

object-hash@^2.1.1:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09"
  integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==

object-inspect@^1.9.0:
  version "1.10.2"
  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30"


@@ 4662,6 4926,16 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
    pbkdf2 "^3.0.3"
    safe-buffer "^5.1.1"

parse-glob@^3.0.4:
  version "3.0.4"
  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
  dependencies:
    glob-base "^0.3.0"
    is-dotfile "^1.0.0"
    is-extglob "^1.0.0"
    is-glob "^2.0.0"

parse-json@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"


@@ 4736,7 5010,7 @@ performance-now@^2.1.0:
  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=

picomatch@^2.2.3:
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
  version "2.2.3"
  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
  integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==


@@ 4807,6 5081,24 @@ postcss-discard-overridden@^4.0.1:
  dependencies:
    postcss "^7.0.0"

postcss-functions@^3:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e"
  integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=
  dependencies:
    glob "^7.1.2"
    object-assign "^4.1.1"
    postcss "^6.0.9"
    postcss-value-parser "^3.3.0"

postcss-js@^3.0.3:
  version "3.0.3"
  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33"
  integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==
  dependencies:
    camelcase-css "^2.0.1"
    postcss "^8.1.6"

postcss-merge-longhand@^4.0.11:
  version "4.0.11"
  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"


@@ 4883,6 5175,11 @@ postcss-modules-extract-imports@^2.0.0:
  dependencies:
    postcss "^7.0.5"

postcss-modules-extract-imports@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
  integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==

postcss-modules-local-by-default@1.2.0:
  version "1.2.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"


@@ 4901,6 5198,15 @@ postcss-modules-local-by-default@^3.0.2:
    postcss-selector-parser "^6.0.2"
    postcss-value-parser "^4.1.0"

postcss-modules-local-by-default@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
  integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
  dependencies:
    icss-utils "^5.0.0"
    postcss-selector-parser "^6.0.2"
    postcss-value-parser "^4.1.0"

postcss-modules-scope@1.1.0:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"


@@ 4917,6 5223,13 @@ postcss-modules-scope@^2.2.0:
    postcss "^7.0.6"
    postcss-selector-parser "^6.0.0"

postcss-modules-scope@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
  integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
  dependencies:
    postcss-selector-parser "^6.0.4"

postcss-modules-values@1.3.0:
  version "1.3.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"


@@ 4933,6 5246,13 @@ postcss-modules-values@^3.0.0:
    icss-utils "^4.0.0"
    postcss "^7.0.6"

postcss-modules-values@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
  integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
  dependencies:
    icss-utils "^5.0.0"

postcss-modules@^3.2.2:
  version "3.2.2"
  resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-3.2.2.tgz#ee390de0f9f18e761e1778dfb9be26685c02c51f"


@@ 4948,6 5268,27 @@ postcss-modules@^3.2.2:
    postcss-modules-values "^3.0.0"
    string-hash "^1.1.1"

postcss-modules@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b"
  integrity sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw==
  dependencies:
    generic-names "^2.0.1"
    icss-replace-symbols "^1.1.0"
    lodash.camelcase "^4.3.0"
    postcss-modules-extract-imports "^3.0.0"
    postcss-modules-local-by-default "^4.0.0"
    postcss-modules-scope "^3.0.0"
    postcss-modules-values "^4.0.0"
    string-hash "^1.1.1"

postcss-nested@5.0.5:
  version "5.0.5"
  resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.5.tgz#f0a107d33a9fab11d7637205f5321e27223e3603"
  integrity sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==
  dependencies:
    postcss-selector-parser "^6.0.4"

postcss-normalize-charset@^4.0.1:
  version "4.0.1"
  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"


@@ 5076,7 5417,7 @@ postcss-selector-parser@^3.0.0:
    indexes-of "^1.0.1"
    uniq "^1.0.1"

postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
  version "6.0.5"
  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4"
  integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==


@@ 5102,7 5443,7 @@ postcss-unique-selectors@^4.0.1:
    postcss "^7.0.0"
    uniqs "^2.0.0"

postcss-value-parser@^3.0.0:
postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0:
  version "3.3.1"
  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==


@@ 5130,7 5471,7 @@ postcss@7.0.32:
    source-map "^0.6.1"
    supports-color "^6.1.0"

postcss@^6.0.1:
postcss@^6.0.1, postcss@^6.0.9:
  version "6.0.23"
  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
  integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==


@@ 5157,6 5498,15 @@ postcss@^8.0.5, postcss@^8.2.1:
    nanoid "^3.1.22"
    source-map "^0.6.1"

postcss@^8.1.6, postcss@^8.2.14:
  version "8.2.14"
  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.14.tgz#dcf313eb8247b3ce8078d048c0e8262ca565ad2b"
  integrity sha512-+jD0ZijcvyCqPQo/m/CW0UcARpdFylq04of+Q7RKX6f/Tu+dvpUI/9Sp81+i6/vJThnOBX09Quw0ZLOVwpzX3w==
  dependencies:
    colorette "^1.2.2"
    nanoid "^3.1.22"
    source-map "^0.6.1"

posthtml-parser@^0.6.0:
  version "0.6.0"
  resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.6.0.tgz#52488cdb4fa591c3102de73197c471859ee0be63"


@@ 5194,6 5544,11 @@ prelude-ls@~1.1.2:
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=

pretty-hrtime@^1.0.3:
  version "1.0.3"
  resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
  integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=

process-nextick-args@~2.0.0:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"


@@ 5309,6 5664,16 @@ purgecss@^2.3.0:
    postcss "7.0.32"
    postcss-selector-parser "^6.0.2"

purgecss@^3.1.3:
  version "3.1.3"
  resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-3.1.3.tgz#26987ec09d12eeadc318e22f6e5a9eb0be094f41"
  integrity sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==
  dependencies:
    commander "^6.0.0"
    glob "^7.0.0"
    postcss "^8.2.1"
    postcss-selector-parser "^6.0.2"

q@^1.1.2:
  version "1.5.1"
  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"


@@ 5339,6 5704,11 @@ queue-microtask@^1.2.2:
  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==

quick-lru@^5.1.1:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==

randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"


@@ 5386,6 5756,21 @@ readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0:
    string_decoder "^1.1.1"
    util-deprecate "^1.0.1"

readdirp@~3.5.0:
  version "3.5.0"
  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
  integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
  dependencies:
    picomatch "^2.2.1"

reduce-css-calc@^2.1.8:
  version "2.1.8"
  resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03"
  integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==
  dependencies:
    css-unit-converter "^1.1.1"
    postcss-value-parser "^3.3.0"

regenerate-unicode-properties@^8.2.0:
  version "8.2.0"
  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"


@@ 5514,7 5899,7 @@ resolve-url@^0.2.1:
  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=

resolve@^1.14.2:
resolve@^1.14.2, resolve@^1.20.0:
  version "1.20.0"
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
  integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==


@@ 6039,6 6424,39 @@ symbol-tree@^3.2.2:
  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==

tailwindcss@^2.1.2:
  version "2.1.2"
  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.1.2.tgz#29402bf73a445faedd03df6d3b177e7b52b7c4a1"
  integrity sha512-T5t+wwd+/hsOyRw2HJuFuv0LTUm3MUdHm2DJ94GPVgzqwPPFa9XxX0KlwLWupUuiOUj6uiKURCzYPHFcuPch/w==
  dependencies:
    "@fullhuman/postcss-purgecss" "^3.1.3"
    bytes "^3.0.0"
    chalk "^4.1.0"
    chokidar "^3.5.1"
    color "^3.1.3"
    detective "^5.2.0"
    didyoumean "^1.2.1"
    dlv "^1.1.3"
    fast-glob "^3.2.5"
    fs-extra "^9.1.0"
    html-tags "^3.1.0"
    lodash "^4.17.21"
    lodash.topath "^4.5.2"
    modern-normalize "^1.0.0"
    node-emoji "^1.8.1"
    normalize-path "^3.0.0"
    object-hash "^2.1.1"
    parse-glob "^3.0.4"
    postcss-functions "^3"
    postcss-js "^3.0.3"
    postcss-nested "5.0.5"
    postcss-selector-parser "^6.0.4"
    postcss-value-parser "^4.1.0"
    pretty-hrtime "^1.0.3"
    quick-lru "^5.1.1"
    reduce-css-calc "^2.1.8"
    resolve "^1.20.0"

tar@^4.4.6, tar@^4.4.8:
  version "4.4.13"
  resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"


@@ 6254,6 6672,11 @@ unique-slug@^2.0.0:
  dependencies:
    imurmurhash "^0.1.4"

universalify@^2.0.0:
  version "2.0.0"
  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==

unpipe@~1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"