diff --git a/.travis.yml b/.travis.yml index a6d54080..e9c7a35a 100755 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ script: after_success: - export PR=https://api.github.com/repos/$TRAVIS_REPO_SLUG/pulls/$TRAVIS_PULL_REQUEST - export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo `curl -s $PR | jq -r .head.ref`; fi) + - if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then make docker DOCKER_USER=$DOCKER_USER DOCKER_PASS=$DOCKER_PASS DOCKER_EMAIL=$DOCKER_EMAIL TAG=pr-$TRAVIS_PULL_REQUEST COMMIT=$TRAVIS_COMMIT; fi - if [[ "$TRAVIS_TAG" =~ ^v.*$ ]]; then make docker DOCKER_USER=$DOCKER_USER DOCKER_PASS=$DOCKER_PASS DOCKER_EMAIL=$DOCKER_EMAIL TAG=$TRAVIS_TAG COMMIT=$TRAVIS_COMMIT; fi - if [[ "$BRANCH" == "master" ]]; then make docker DOCKER_USER=$DOCKER_USER DOCKER_PASS=$DOCKER_PASS DOCKER_EMAIL=$DOCKER_EMAIL TAG=latest COMMIT=$TRAVIS_COMMIT; fi diff --git a/Makefile b/Makefile index 1e3deb15..7e396542 100644 --- a/Makefile +++ b/Makefile @@ -6,12 +6,14 @@ EXTERNAL_TOOLS=\ GOFILES_NOVENDOR = $(shell find . -type f -name '*.go' -not -path "./backend/vendor/*") +.PHONY: bootstrap bootstrap: @for tool in $(EXTERNAL_TOOLS); do \ echo "Installing $$tool" ; \ go get $$tool; \ done +.PHONY: fmt fmt: @echo "--> Running go fmt" ; @if [ -n "`go fmt ${GOFILES_NOVENDOR}`" ]; then \ @@ -19,7 +21,8 @@ fmt: exit 1; \ fi -vet: +.PHONY: vet +vet: fmt @go tool vet 2>/dev/null ; if [ $$? -eq 3 ]; then \ go get golang.org/x/tools/cmd/vet; \ fi @@ -30,29 +33,38 @@ vet: echo "and fix them if necessary before submitting the code for review."; \ fi +.PHONY: frontend frontend: @echo "=> building frontend ..." $(MAKE) -C frontend build -backend/bindata_assetfs.go: +.PHONY: backend/bindata_assetfs.go +backend/bindata_assetfs.go: frontend @echo "=> packaging assets ..." go-bindata-assetfs -prefix frontend frontend/build/... mv -f bindata_assetfs.go backend/ +.PHONY: build build: fmt vet bootstrap frontend backend/bindata_assetfs.go $(MAKE) -C backend build +.PHONY: rebuild +rebuild: + rm -f backend/bindata_assetfs.go + rm -f backend/build/nomad-ui-darwin-amd64 + $(MAKE) -j build + +.PHONY: clean clean: @echo "=> cleaning ..." $(MAKE) -C backend clean $(MAKE) -C frontend clean rm -f backend/bindata_assetfs.go +.PHONY: docker docker: @echo "=> build and push Docker image ..." @docker login -e $(DOCKER_EMAIL) -u $(DOCKER_USER) -p $(DOCKER_PASS) docker build -f Dockerfile -t iverberk/nomad-ui:$(COMMIT) . docker tag iverberk/nomad-ui:$(COMMIT) iverberk/nomad-ui:$(TAG) docker push iverberk/nomad-ui:$(TAG) - -.PHONY: docker clean build backend frontend fmt vet diff --git a/README.md b/README.md index 9a8e7cf9..86844295 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,11 @@ Nomad UI [![Build Status](https://travis-ci.org/iverberk/nomad-ui.svg?branch=mas [![Join the chat at https://gitter.im/nomad-ui/Lobby](https://badges.gitter.im/nomad-ui/Lobby.svg)](https://gitter.im/nomad-ui/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -An awesome user interface for an awesome scheduler, plain and simple :-) +An awesome user interface (even for mobile devices!) for an awesome scheduler, plain and simple :-) -![Nomad UI](http://www.ivoverberk.nl/dl/nomad-ui.jpg) -![Nomad UI](http://www.ivoverberk.nl/dl/nomad-ui-2.jpg) -![Nomad UI](http://www.ivoverberk.nl/dl/nomad-ui-3.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/cluster-overview-small.jpg) + +[More screenshots](https://github.com/iverberk/nomad-ui/blob/master/SCREENSHOTS.md) # Usage @@ -25,18 +25,25 @@ Another way to run nomad-ui is through Docker. Run the following command to start a webserver that will serve the application. ``` -docker run -e NOMAD_ADDR=... -p 8000:3000 iverberk/nomad-ui:v0.3.1 +docker run -e NOMAD_ADDR=... -p 8000:3000 iverberk/nomad-ui ``` -Check the releases page on Github to see which version is current. +Check the releases page on GitHub to see which version is current. The user interface will be accessible on localhost, port `8000`. Adjust the Docker run parameters as needed. If you need to change the port that Nomad is listening on, you should do it with ```-e NOMAD_ADDR``` environment variable that contains both hostname and port. -`NOMAD_ADDR` (IP or DNS name) should point to the correct location of your Nomad server. -If you have a Node and Go environment you can also build the production version yourself. +# Configuration + +Nomad-UI can be controlled by both ENV or CLI flags as described below + +| Environment | Flag | Default | Description | +|------------------- |----------------------- |------------------------- |------------------------------------------------------------------------------------------------------ | +| `NOMAD_ADDR` | `--nomad.address` | `http://127.0.0.1:4646` | Must point to the correct location of your Nomad server. | +| `NOMAD_PORT_http` | `--web.listen-address` | `0.0.0.0:3000` | The IP + PORT to listen on | +| `NOMAD_LOG_LEVEL` | `--log.level` | `info` | Log level to use while running the nomad-ui server - (`critical`, `error`, `warning`, `notice`, `info`, `debug`) | # Try @@ -85,8 +92,3 @@ Just run ```npm install``` and ```npm start``` and start developing. Hot reloadi changes will be visible in the browser immediately. Unfortunately there are no tests yet. If you would like to contribute please open a pull-request. - -# Credits - -The awesome dashboard theme is created by [Creative Tim](www.creative-tim.com) -and can be found [here](http://www.creative-tim.com/product/light-bootstrap-dashboard-pro) diff --git a/SCREENSHOTS.md b/SCREENSHOTS.md new file mode 100644 index 00000000..6933ff6b --- /dev/null +++ b/SCREENSHOTS.md @@ -0,0 +1,72 @@ +# Cluster + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/cluster-overview.jpg) + +# Jobs + +## List + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-list.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-list-filter.jpg) + +### Mobile + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-list-mobile.jpg) + +## Details + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-details-info.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-details-allocations.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-details-evaluations.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-details-task-groups.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/job-details-raw.jpg) + +# Allocations + +## List + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-list-filtered.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-list.jpg) + +## Details + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-details-info.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-details-files.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-details-logs.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/allocation-details-raw.jpg) + +# Client + +## List + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/client-list.jpg) + +## Details + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/client-details-info.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/client-details-allocations.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/client-details-evaluations.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/client-details-raw.jpg) + +# Evaluation + +## List + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/evaluation-list.jpg) + +## Details + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/evaluation-details-info.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/evaluation-details-allocations.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/evaluation-details-raw.jpg) + +# Server + +## List + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/server-list.jpg) + +## Details + +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/server-details-info.jpg) +![Nomad UI](https://dl.dropboxusercontent.com/u/27514/nomad-screenshots/0.5/server-details-raw.jpg) diff --git a/backend/actions.go b/backend/actions.go index 64db9b99..a4a9608a 100644 --- a/backend/actions.go +++ b/backend/actions.go @@ -1,32 +1,47 @@ package main const ( + watchAllocs = "WATCH_ALLOCS" + unwatchAllocs = "UNWATCH_ALLOCS" fetchedAllocs = "FETCHED_ALLOCS" - fetchedAlloc = "FETCHED_ALLOC" - watchAlloc = "WATCH_ALLOC" - unwatchAlloc = "UNWATCH_ALLOC" + fetchedAlloc = "FETCHED_ALLOC" + watchAlloc = "WATCH_ALLOC" + unwatchAlloc = "UNWATCH_ALLOC" + + watchEvals = "WATCH_EVALS" + unwatchEvals = "UNWATCH_EVALS" fetchedEvals = "FETCHED_EVALS" - fetchedEval = "FETCHED_EVAL" - watchEval = "WATCH_EVAL" - unwatchEval = "UNWATCH_EVAL" + fetchedEval = "FETCHED_EVAL" + watchEval = "WATCH_EVAL" + unwatchEval = "UNWATCH_EVAL" + + watchJobs = "WATCH_JOBS" + unwatchJobs = "UNWATCH_JOBS" fetchedJobs = "FETCHED_JOBS" - fetchedJob = "FETCHED_JOB" - watchJob = "WATCH_JOB" - unwatchJob = "UNWATCH_JOB" + fetchedJob = "FETCHED_JOB" + watchJob = "WATCH_JOB" + unwatchJob = "UNWATCH_JOB" + + watchNodes = "WATCH_NODES" + unwatchNodes = "UNWATCH_NODES" fetchedNodes = "FETCHED_NODES" - fetchedNode = "FETCHED_NODE" - fetchNode = "FETCH_NODE" - watchNode = "WATCH_NODE" - unwatchNode = "UNWATCH_NODE" + fetchedNode = "FETCHED_NODE" + fetchNode = "FETCH_NODE" + watchNode = "WATCH_NODE" + unwatchNode = "UNWATCH_NODE" + + watchMembers = "WATCH_MEMBERS" + unwatchMembers = "UNWATCH_MEMBERS" fetchedMembers = "FETCHED_MEMBERS" - fetchedMember = "FETCHED_MEMBER" - fetchMember = "FETCH_MEMBER" - watchMember = "WATCH_MEMBER" - unwatchMember = "UNWATCH_MEMBER" + + fetchedMember = "FETCHED_MEMBER" + fetchMember = "FETCH_MEMBER" + watchMember = "WATCH_MEMBER" + unwatchMember = "UNWATCH_MEMBER" fetchDir = "FETCH_DIR" fetchedDir = "FETCHED_DIR" @@ -41,5 +56,6 @@ const ( // via a websocket connection. type Action struct { Type string + Index uint64 Payload interface{} } diff --git a/backend/connection.go b/backend/connection.go index f16cf438..0e682b42 100644 --- a/backend/connection.go +++ b/backend/connection.go @@ -10,6 +10,8 @@ import ( "github.com/gorilla/websocket" "github.com/hashicorp/nomad/api" "github.com/hashicorp/nomad/command" + + uuid "github.com/satori/go.uuid" ) const ( @@ -30,21 +32,23 @@ const ( // received on the websocket and sends out actions on Nomad state changes. It // maintains a set to keep track of the running watches. type Connection struct { - socket *websocket.Conn - - hub *Hub - - receive chan *Action - send chan *Action - + ID uuid.UUID + shortId string + socket *websocket.Conn + hub *Hub + receive chan *Action + send chan *Action destroyCh chan struct{} - - watches *set.Set + watches *set.Set } // NewConnection creates a new connection. func NewConnection(hub *Hub, socket *websocket.Conn) *Connection { + connectionId := uuid.NewV4() + return &Connection{ + ID: connectionId, + shortId: fmt.Sprintf("%s", connectionId)[0:8], watches: set.New(), hub: hub, socket: socket, @@ -54,20 +58,43 @@ func NewConnection(hub *Hub, socket *websocket.Conn) *Connection { } } +func (c *Connection) Warningf(format string, args ...interface{}) { + message := fmt.Sprintf("[%s] ", c.shortId) + format + logger.Warningf(message, args...) +} + +func (c *Connection) Errorf(format string, args ...interface{}) { + message := fmt.Sprintf("[%s] ", c.shortId) + format + logger.Errorf(message, args...) +} + +func (c *Connection) Infof(format string, args ...interface{}) { + message := fmt.Sprintf("[%s] ", c.shortId) + format + logger.Infof(message, args...) +} + +func (c *Connection) Debugf(format string, args ...interface{}) { + message := fmt.Sprintf("[%s] ", c.shortId) + format + logger.Debugf(message, args...) +} + func (c *Connection) writePump() { defer func() { c.socket.Close() }() + for { action, ok := <-c.send + if !ok { if err := c.socket.WriteMessage(websocket.CloseMessage, []byte{}); err != nil { - logger.Errorf("Could not write close message to websocket: %s", err) + c.Errorf("Could not write close message to websocket: %s", err) } return } + if err := c.socket.WriteJSON(action); err != nil { - logger.Errorf("Could not write action to websocket: %s", err) + c.Errorf("Could not write action to websocket: %s", err) } } } @@ -82,9 +109,6 @@ func (c *Connection) readPump() { // Register this connection with the hub for broadcast updates c.hub.register <- c - // Flush all current state to the websocket - c.hub.nomad.FlushAll(c) - var action Action for { err := c.socket.ReadJSON(&action) @@ -96,36 +120,95 @@ func (c *Connection) readPump() { } func (c *Connection) process(action Action) { + c.Debugf("Processing event %s (index %d)", action.Type, action.Index) + switch action.Type { - case fetchMember: - c.fetchMember(action) + // + // Actions for a list of members (aka servers in the UI) + // + case watchMembers: + go c.watchGenericBroadcast("members", fetchedMembers, c.hub.nomad.members) + case unwatchMembers: + c.unwatchGenericBroadcast("members") + + // + // Actions for a list of jobs + // + case watchJobs: + go c.watchGenericBroadcast("jobs", fetchedJobs, c.hub.nomad.jobs) + case unwatchJobs: + c.unwatchGenericBroadcast("jobs") + + // + // Actions for a list of allocations + // + case watchAllocs: + go c.watchGenericBroadcast("allocs", fetchedAllocs, c.hub.nomad.allocs) + case unwatchAllocs: + c.unwatchGenericBroadcast("allocs") + + // + // Actions for a list of nodes (aka clients in the UI) + // + case watchNodes: + go c.watchGenericBroadcast("nodes", fetchedNodes, c.hub.nomad.nodes) + case unwatchNodes: + c.unwatchGenericBroadcast("nodes") + + // + // Actions for a list of evaluations + // + case watchEvals: + go c.watchGenericBroadcast("evaluations", fetchedEvals, c.hub.nomad.evals) + case unwatchEvals: + c.unwatchGenericBroadcast("evaluations") + + // + // Actions for a single node (aka client in the UI) + // + case watchNode: + go c.watchNode(action) + case unwatchNode: + c.watches.Remove(action.Payload.(string)) case fetchNode: - c.fetchNode(action) - case fetchDir: - c.fetchDir(action) + go c.fetchNode(action) + + // + // Actions for a single job + // case watchJob: go c.watchJob(action) + case unwatchJob: + c.watches.Remove(action.Payload.(string)) + + // + // Actions for a single allocation + // case watchAlloc: go c.watchAlloc(action) - case watchEval: - go c.watchEval(action) + case unwatchAlloc: + c.watches.Remove(action.Payload.(string)) + case fetchDir: // for file browsing in an allocation + go c.fetchDir(action) + case watchFile: // for following (tail -f) a file in an allocation + go c.watchFile(action) + case unwatchFile: // for stopping a follow of a file (tail -f) + c.watches.Remove(action.Payload.(string)) + + // + // Actions for a single member (aka server in the UI) + // case watchMember: go c.watchMember(action) - case watchNode: - go c.watchNode(action) - case watchFile: - go c.watchFile(action) - case unwatchEval: - fallthrough case unwatchMember: - fallthrough - case unwatchNode: - fallthrough - case unwatchJob: - fallthrough - case unwatchAlloc: c.watches.Remove(action.Payload.(string)) - case unwatchFile: + case fetchMember: + go c.fetchMember(action) + + // Actions for a single evaluation + case watchEval: + go c.watchEval(action) + case unwatchEval: c.watches.Remove(action.Payload.(string)) } } @@ -145,11 +228,11 @@ func (c *Connection) watchAlloc(action Action) { defer func() { c.watches.Remove(allocID) - logger.Infof("Stopped watching alloc with id: %s", allocID) + c.Infof("Stopped watching alloc with id: %s", allocID) }() c.watches.Add(allocID) - logger.Infof("Started watching alloc with id: %s", allocID) + c.Infof("Started watching alloc with id: %s", allocID) q := &api.QueryOptions{WaitIndex: 1} for { @@ -159,14 +242,14 @@ func (c *Connection) watchAlloc(action Action) { default: alloc, meta, err := c.hub.nomad.Client.Allocations().Info(allocID, q) if err != nil { - logger.Errorf("connection: unable to fetch alloc info: %s", err) + c.Errorf("connection: unable to fetch alloc info: %s", err) time.Sleep(10 * time.Second) continue } if !c.watches.Has(allocID) { return } - c.send <- &Action{Type: fetchedAlloc, Payload: alloc} + c.send <- &Action{Type: fetchedAlloc, Payload: alloc, Index: meta.LastIndex} waitIndex := meta.LastIndex if q.WaitIndex > meta.LastIndex { @@ -182,11 +265,11 @@ func (c *Connection) watchEval(action Action) { defer func() { c.watches.Remove(evalID) - logger.Infof("Stopped watching eval with id: %s", evalID) + c.Infof("Stopped watching eval with id: %s", evalID) }() c.watches.Add(evalID) - logger.Infof("Started watching eval with id: %s", evalID) + c.Infof("Started watching eval with id: %s", evalID) q := &api.QueryOptions{WaitIndex: 1} for { @@ -196,14 +279,14 @@ func (c *Connection) watchEval(action Action) { default: eval, meta, err := c.hub.nomad.Client.Evaluations().Info(evalID, q) if err != nil { - logger.Errorf("connection: unable to fetch eval info: %s", err) + c.Errorf("connection: unable to fetch eval info: %s", err) time.Sleep(10 * time.Second) continue } if !c.watches.Has(evalID) { return } - c.send <- &Action{Type: fetchedEval, Payload: eval} + c.send <- &Action{Type: fetchedEval, Payload: eval, Index: meta.LastIndex} waitIndex := meta.LastIndex if q.WaitIndex > meta.LastIndex { @@ -218,7 +301,7 @@ func (c *Connection) fetchMember(action Action) { memberID := action.Payload.(string) member, err := c.hub.nomad.MemberWithID(memberID) if err != nil { - logger.Errorf("websocket: unable to fetch member %q: %s", memberID, err) + c.Errorf("websocket: unable to fetch member %q: %s", memberID, err) return } @@ -230,11 +313,11 @@ func (c *Connection) watchMember(action Action) { defer func() { c.watches.Remove(memberID) - logger.Infof("Stopped watching member with id: %s", memberID) + c.Infof("Stopped watching member with id: %s", memberID) }() c.watches.Add(memberID) - logger.Infof("Started watching member with id: %s", memberID) + c.Infof("Started watching member with id: %s", memberID) for { select { @@ -243,7 +326,7 @@ func (c *Connection) watchMember(action Action) { default: member, err := c.hub.nomad.MemberWithID(memberID) if err != nil { - logger.Errorf("connection: unable to fetch member info: %s", err) + c.Errorf("connection: unable to fetch member info: %s", err) time.Sleep(10 * time.Second) continue } @@ -261,7 +344,7 @@ func (c *Connection) fetchNode(action Action) { nodeID := action.Payload.(string) node, _, err := c.hub.nomad.Client.Nodes().Info(nodeID, nil) if err != nil { - logger.Errorf("websocket: unable to fetch node %q: %s", nodeID, err) + c.Errorf("websocket: unable to fetch node %q: %s", nodeID, err) } c.send <- &Action{Type: fetchedNode, Payload: node} } @@ -271,11 +354,11 @@ func (c *Connection) watchNode(action Action) { defer func() { c.watches.Remove(nodeID) - logger.Infof("Stopped watching node with id: %s", nodeID) + c.Infof("Stopped watching node with id: %s", nodeID) }() c.watches.Add(nodeID) - logger.Infof("Started watching node with id: %s", nodeID) + c.Infof("Started watching node with id: %s", nodeID) q := &api.QueryOptions{WaitIndex: 1} for { @@ -285,14 +368,14 @@ func (c *Connection) watchNode(action Action) { default: node, meta, err := c.hub.nomad.Client.Nodes().Info(nodeID, q) if err != nil { - logger.Errorf("connection: unable to fetch node info: %s", err) + c.Errorf("connection: unable to fetch node info: %s", err) time.Sleep(10 * time.Second) continue } if !c.watches.Has(nodeID) { return } - c.send <- &Action{Type: fetchedNode, Payload: node} + c.send <- &Action{Type: fetchedNode, Payload: node, Index: meta.LastIndex} waitIndex := meta.LastIndex if q.WaitIndex > meta.LastIndex { @@ -303,38 +386,85 @@ func (c *Connection) watchNode(action Action) { } } +func (c *Connection) watchGenericBroadcast(watchKey string, actionEvent string, initialPayload interface{}) { + defer func() { + c.watches.Remove(watchKey) + c.Infof("Stopped watching %s", watchKey) + + // recovering from panic caused by writing to a closed channel + if recover() == nil { + return + } + + c.Warningf("Channel %s is closed. Thats sad :(", watchKey) + }() + + c.watches.Add(watchKey) + + c.Debugf("Sending our current %s list", watchKey) + c.send <- &Action{Type: actionEvent, Payload: initialPayload, Index: 0} + + c.Debugf("Started watching %s", watchKey) + for { + if !c.watches.Has(watchKey) { + c.Infof("Connection is no longer subscribed to %s", watchKey) + return + } + + c.Debugf("Waiting on %s pipe", watchKey) + channelAction := <-c.hub.nomad.updateCh + + if channelAction.Type != actionEvent { + c.Debugf("Type mismatch: %s <> %s", channelAction.Type, actionEvent) + continue + } + + c.send <- channelAction + } +} + +func (c *Connection) unwatchGenericBroadcast(watchKey string) { + c.Debugf("Removing subscription for %s", watchKey) + c.watches.Remove(watchKey) +} + func (c *Connection) watchJob(action Action) { jobID := action.Payload.(string) defer func() { c.watches.Remove(jobID) - logger.Infof("Stopped watching job with id: %s", jobID) + c.Infof("Stopped watching job with id: %s", jobID) }() c.watches.Add(jobID) - logger.Infof("Started watching job with id: %s", jobID) + c.Infof("Started watching job with id: %s", jobID) q := &api.QueryOptions{WaitIndex: 1} for { select { case <-c.destroyCh: return + default: job, meta, err := c.hub.nomad.Client.Jobs().Info(jobID, q) + if err != nil { - logger.Errorf("connection: unable to fetch job info: %s", err) + c.Errorf("connection: unable to fetch job info: %s", err) time.Sleep(10 * time.Second) continue } + if !c.watches.Has(jobID) { return } - c.send <- &Action{Type: fetchedJob, Payload: job} + + c.send <- &Action{Type: fetchedJob, Payload: job, Index: meta.LastIndex} waitIndex := meta.LastIndex if q.WaitIndex > meta.LastIndex { waitIndex = q.WaitIndex } + q = &api.QueryOptions{WaitIndex: waitIndex, WaitTime: 10 * time.Second} } } @@ -343,7 +473,7 @@ func (c *Connection) watchJob(action Action) { func (c *Connection) fetchDir(action Action) { params, ok := action.Payload.(map[string]interface{}) if !ok { - logger.Errorf("Could not decode payload") + c.Errorf("Could not decode payload") return } addr := params["addr"].(string) @@ -358,17 +488,19 @@ func (c *Connection) fetchDir(action Action) { logger.Fatalf("Could not create client: %s", err) return } + alloc, _, err := client.Allocations().Info(allocID, nil) if err != nil { - logger.Errorf("Unable to fetch alloc: %s", err) + c.Errorf("Unable to fetch alloc: %s", err) return } + dir, _, err := client.AllocFS().List(alloc, path, nil) if err != nil { - logger.Errorf("Unable to fetch directory: %s", err) + c.Errorf("Unable to fetch directory: %s", err) } - c.send <- &Action{Type: fetchedDir, Payload: dir} + c.send <- &Action{Type: fetchedDir, Payload: dir, Index: 0} } type Line struct { @@ -391,25 +523,27 @@ func (c *Connection) watchFile(action Action) { client, err := api.NewClient(config) if err != nil { - logger.Errorf("Could not create client: %s", err) + c.Errorf("Could not create client: %s", err) return } + alloc, _, err := client.Allocations().Info(allocID, nil) if err != nil { - logger.Errorf("Unable to fetch alloc: %s", err) + c.Errorf("Unable to fetch alloc: %s", err) return } // Get file stat info file, _, err := client.AllocFS().Stat(alloc, path, nil) if err != nil { - logger.Errorf("Unable to stat file: %s", err) + c.Errorf("Unable to stat file: %s", err) return } var origin string = api.OriginStart var offset int64 = 0 var oversized bool + if file.Size > maxFileSize { origin = api.OriginEnd offset = maxFileSize @@ -426,9 +560,10 @@ func (c *Connection) watchFile(action Action) { }{ path: path, }, + Index: 0, } - logger.Errorf("Unable to stream file: %s", err) + c.Errorf("Unable to stream file: %s", err) return } @@ -454,12 +589,12 @@ func (c *Connection) watchFile(action Action) { c.watches.Add(path) defer func() { - logger.Infof("Stopped watching file with path: %s", path) + c.Infof("Stopped watching file with path: %s", path) c.watches.Remove(path) r.Close() }() - logger.Infof("Started watching file with path: %s", path) + c.Infof("Started watching file with path: %s", path) c.send <- &Action{ Type: fetchedFile, Payload: struct { @@ -471,6 +606,7 @@ func (c *Connection) watchFile(action Action) { Data: "", Oversized: oversized, }, + Index: 0, } ticker := time.NewTicker(10 * time.Second) @@ -493,6 +629,7 @@ func (c *Connection) watchFile(action Action) { Data: string(line), Oversized: oversized, }, + Index: 0, } case <-ticker.C: if !c.watches.Has(path) { diff --git a/backend/hub.go b/backend/hub.go index b9a34a11..33378b7c 100644 --- a/backend/hub.go +++ b/backend/hub.go @@ -39,16 +39,19 @@ func NewHub(nomad *Nomad, broadcast chan *Action) *Hub { func (h *Hub) Run() { for { select { + case c := <-h.register: h.connections[c] = true + case c := <-h.unregister: if _, ok := h.connections[c]; ok { delete(h.connections, c) close(c.send) } + case action := <-h.broadcast: for c := range h.connections { - c.send <- action + c.process(*action) } } } diff --git a/backend/main.go b/backend/main.go index 5550f186..ef713928 100644 --- a/backend/main.go +++ b/backend/main.go @@ -3,28 +3,35 @@ package main import ( "flag" "fmt" + "net/http" "os" + "strings" "syscall" "time" - "net/http" - "github.com/gorilla/mux" "github.com/op/go-logging" ) var logger = logging.MustGetLogger("nomad-ui") -func init() { +func startLogging(logLevel string) { logBackend := logging.NewLogBackend(os.Stderr, "", 0) format := logging.MustStringFormatter( - `%{color}%{time:15:04:05.000} %{shortfile} ▶ %{level:.4s} %{color:reset} %{message}`, + `%{color}%{time:15:04:05.000} %{shortfile} ▶ %{level:.5s} %{color:reset} %{message}`, ) logBackendFormatted := logging.NewBackendFormatter(logBackend, format) logBackendFormattedAndLeveled := logging.AddModuleLevel(logBackendFormatted) - logBackendFormattedAndLeveled.SetLevel(logging.INFO, "") + + realLogLevel, err := logging.LogLevel(strings.ToUpper(logLevel)) + if err != nil { + fmt.Printf("%s (%s)", err, logLevel) + os.Exit(1) + } + + logBackendFormattedAndLeveled.SetLevel(realLogLevel, "") logging.SetBackend(logBackendFormattedAndLeveled) } @@ -32,12 +39,14 @@ func init() { type Config struct { Address string ListenAddress string + LogLevel string } func DefaultConfig() *Config { return &Config{ Address: "http://127.0.0.1:4646", ListenAddress: "0.0.0.0:3000", + LogLevel: "info", } } @@ -48,10 +57,14 @@ func flagDefault(value string) string { var ( defaultConfig = DefaultConfig() - flagAddress = flag.String("address", "", "The address of the Nomad server. "+ + flagAddress = flag.String("nomad.address", "", "The address of the Nomad server. "+ "Overrides the NOMAD_ADDR environment variable if set. "+flagDefault(defaultConfig.Address)) + flagListenAddress = flag.String("web.listen-address", "", "The address on which to expose the web interface. "+flagDefault(defaultConfig.ListenAddress)) + + flagLogLevel = flag.String("log.level", "", + "The log level for nomad-ui to run under. "+flagDefault(defaultConfig.LogLevel)) ) func (c *Config) Parse() { @@ -67,6 +80,11 @@ func (c *Config) Parse() { c.ListenAddress = fmt.Sprintf("0.0.0.0:%s", listenPort) } + logLevel, ok := syscall.Getenv("NOMAD_LOG_LEVEL") + if ok { + c.LogLevel = logLevel + } + if *flagAddress != "" { c.Address = *flagAddress } @@ -74,17 +92,25 @@ func (c *Config) Parse() { if *flagListenAddress != "" { c.ListenAddress = *flagListenAddress } + + if *flagLogLevel != "" { + c.LogLevel = *flagLogLevel + } } func main() { cfg := DefaultConfig() cfg.Parse() - logger.Infof("----------------------------------------------------------------------") - logger.Infof("| NOMAD UI |") - logger.Infof("----------------------------------------------------------------------") - logger.Infof("| address : %-45s |", cfg.Address) - logger.Infof("| web.listen-address : %-45s |", cfg.ListenAddress) - logger.Infof("----------------------------------------------------------------------") + + startLogging(cfg.LogLevel) + + logger.Infof("---------------------------------------------------------------------------") + logger.Infof("| NOMAD UI |") + logger.Infof("---------------------------------------------------------------------------") + logger.Infof("| nomad.address : %-50s |", cfg.Address) + logger.Infof("| web.listen-address : http://%-43s |", cfg.ListenAddress) + logger.Infof("| log.level : %-50s |", cfg.LogLevel) + logger.Infof("---------------------------------------------------------------------------") logger.Infof("") broadcast := make(chan *Action) diff --git a/backend/nomad.go b/backend/nomad.go index 73ec7994..cf80ad1b 100644 --- a/backend/nomad.go +++ b/backend/nomad.go @@ -97,16 +97,6 @@ func NewNomad(url string, updateCh chan *Action) (*Nomad, error) { }, nil } -// FlushAll sends the current Nomad state to the connection. This is used to pass -// all known state to the client connection. -func (n *Nomad) FlushAll(c *Connection) { - c.send <- &Action{Type: fetchedAllocs, Payload: n.allocs} - c.send <- &Action{Type: fetchedEvals, Payload: n.evals} - c.send <- &Action{Type: fetchedJobs, Payload: n.jobs} - c.send <- &Action{Type: fetchedNodes, Payload: n.nodes} - c.send <- &Action{Type: fetchedMembers, Payload: n.members} -} - // MembersWithID is used to query all of the known server members. func (n *Nomad) MembersWithID() ([]*AgentMemberWithID, error) { members, err := n.Client.Agent().Members() @@ -170,7 +160,7 @@ func (n *Nomad) watchAllocs() { continue } n.allocs = allocs - n.updateCh <- &Action{Type: fetchedAllocs, Payload: allocs} + n.updateCh <- &Action{Type: fetchedAllocs, Payload: allocs, Index: meta.LastIndex} // Guard for zero LastIndex in case of timeout waitIndex := meta.LastIndex @@ -191,7 +181,7 @@ func (n *Nomad) watchEvals() { continue } n.evals = evals - n.updateCh <- &Action{Type: fetchedEvals, Payload: evals} + n.updateCh <- &Action{Type: fetchedEvals, Payload: evals, Index: meta.LastIndex} // Guard for zero LastIndex in case of timeout waitIndex := meta.LastIndex @@ -212,7 +202,7 @@ func (n *Nomad) watchJobs() { continue } n.jobs = jobs - n.updateCh <- &Action{Type: fetchedJobs, Payload: jobs} + n.updateCh <- &Action{Type: fetchedJobs, Payload: jobs, Index: meta.LastIndex} // Guard for zero LastIndex in case of timeout waitIndex := meta.LastIndex @@ -233,7 +223,7 @@ func (n *Nomad) watchNodes() { continue } n.nodes = nodes - n.updateCh <- &Action{Type: fetchedNodes, Payload: nodes} + n.updateCh <- &Action{Type: fetchedNodes, Payload: nodes, Index: meta.LastIndex} // Guard for zero LastIndex in case of timeout waitIndex := meta.LastIndex @@ -254,7 +244,7 @@ func (n *Nomad) watchMembers() { } n.members = members - n.updateCh <- &Action{Type: fetchedMembers, Payload: members} + n.updateCh <- &Action{Type: fetchedMembers, Payload: members, Index: 0} time.Sleep(10 * time.Second) } diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 00000000..083ed67f --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,67 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.json] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.js] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.scss] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.css] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.bat] +end_of_line = crlf + +[*.yml] +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.yaml] +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +# In a Makefile, the tab is significant and not "just" whitespace +[Makefile] +indent_style = tab +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index b1a1f588..ac3c053d 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -1,23 +1,36 @@ module.exports = { - "env": { - "browser": true, - "node": true - }, - "extends": "airbnb", - "rules": { - 'indent': ['error', 4], - 'no-constant-condition': ['error', { checkLoops: false }], - 'no-console': 0, - 'no-plusplus': 0, - 'class-methods-use-this': 0, - 'arrow-body-style': 0, - 'max-len': ['error', 120], - 'react/jsx-indent': ['error', 2], - 'react/prefer-stateless-function': 0, - 'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.js'] }], - 'react/jsx-curly-spacing': [2, 'always', { 'spacing': { 'objectLiterals': 'never' }}], - 'react/self-closing-comp': ['error', { 'component': true, 'html': false }], - 'react/forbid-prop-types': 0, - 'jsx-a11y/no-static-element-interactions': 0, + root: true, + env: { + es6: true, + browser: true, + node: true, + }, + extends: ['eslint:recommended', 'standard-react'], + parser: 'babel-eslint', + parserOptions: { + ecmaVersion: 7, + sourceType: 'module', + ecmaFeatures: { + jsx: true, + experimentalObjectRestSpread: true, } + }, + "rules": { + 'indent': ['error', 2], + 'no-constant-condition': ['error', { checkLoops: false }], + 'no-console': 0, + 'no-plusplus': 0, + 'operator-linebreak': 0, + 'class-methods-use-this': 0, + 'arrow-body-style': 0, + 'max-len': ['error', 120], + 'react/jsx-indent': ['error', 2], + 'react/prefer-stateless-function': 0, + 'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.js'] }], + 'react/jsx-curly-spacing': [2, 'always', { 'spacing': { 'objectLiterals': 'never' }}], + 'react/self-closing-comp': ['error', { 'component': true, 'html': false }], + 'react/forbid-prop-types': 0, + 'jsx-a11y/no-static-element-interactions': 0, + 'jsx-a11y/anchor-has-content': 0, + } } diff --git a/frontend/Makefile b/frontend/Makefile index e89cbfbb..9b77798c 100644 --- a/frontend/Makefile +++ b/frontend/Makefile @@ -1,14 +1,14 @@ .PHONY: build build: @echo "=> building frontend ..." - npm install - npm run-script build + yarn install + yarn run build .PHONY: lint lint: @echo "=> running linter ..." - @test -e node_modules || npm install - npm run-script lint + @test -e node_modules || yarn install + yarn run lint .PHONY: clean clean: diff --git a/frontend/assets/css/animate.min.css b/frontend/assets/css/animate.min.css deleted file mode 100755 index 0b6a47de..00000000 --- a/frontend/assets/css/animate.min.css +++ /dev/null @@ -1,6 +0,0 @@ -@charset "UTF-8";/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT - -Copyright (c) 2015 Daniel Eden -*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(0.755,.050,.855,.060);animation-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}@keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(0.390625deg) skewY(0.390625deg);transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(0.215,.61,.355,1);animation-timing-function:cubic-bezier(0.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}100%{opacity:1}}@keyframes fadeIn{from{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}100%{opacity:0}}@keyframes fadeOut{from{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/frontend/assets/css/dashboard.css b/frontend/assets/css/dashboard.css deleted file mode 100644 index 93715f56..00000000 --- a/frontend/assets/css/dashboard.css +++ /dev/null @@ -1,2781 +0,0 @@ -/* light colors */ -@keyframes spin { - from { - transform: rotate(0deg); } - to { - transform: rotate(360deg); } } -@-webkit-keyframes spin { - from { - -webkit-transform: rotate(0deg); } - to { - -webkit-transform: rotate(360deg); } } -@-moz-keyframes spin { - from { - -moz-transform: rotate(0deg); } - to { - -moz-transform: rotate(360deg); } } -@-ms-keyframes spin { - from { - -ms-transform: rotate(0deg); } - to { - -ms-transform: rotate(360deg); } } -/* Font Smoothing */ -body, -h1, .h1, -h2, .h2, -h3, .h3, -h4, .h4, -h5, .h5, -h6, .h6, -p, -.navbar, -.brand, -.btn-simple, -.alert, -a, -.td-name, -td, -button.close { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - font-family: "Roboto","Helvetica Neue",Arial,sans-serif; - font-weight: 400; } - -h1, .h1, h2, .h2, h3, .h3, h4, .h4 { - font-weight: 300; - margin: 30px 0 15px; } - -h1, .h1 { - font-size: 52px; } - -h2, .h2 { - font-size: 36px; } - -h3, .h3 { - font-size: 28px; - margin: 20px 0 10px; } - -h4, .h4 { - font-size: 22px; - line-height: 30px; } - -h5, .h5 { - font-size: 16px; - margin-bottom: 15px; } - -h6, .h6 { - font-size: 14px; - font-weight: 600; - text-transform: uppercase; } - -p { - font-size: 16px; - line-height: 1.5; } - -h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { - color: #9A9A9A; - font-weight: 300; - line-height: 1.5; } - -h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { - font-size: 60%; } - -h1 .subtitle { - display: block; - margin: 0 0 30px; } - -.text-muted { - color: #9A9A9A; } - -.text-primary, .text-primary:hover { - color: #1D62F0 !important; } - -.text-info, .text-info:hover { - color: #1DC7EA !important; } - -.text-success, .text-success:hover { - color: #87CB16 !important; } - -.text-warning, .text-warning:hover { - color: #FF9500 !important; } - -.text-danger, .text-danger:hover { - color: #FF4A55 !important; } - -/* General overwrite */ -body, -.wrapper { - min-height: 100vh; - position: relative; - background: rgba(203, 203, 210, 0.15); - } - -a { - color: #56cdad; } - a:hover, a:focus { - color: #42d0ed; - text-decoration: none; } - -a:focus, a:active, -button::-moz-focus-inner, -input::-moz-focus-inner, -input[type="reset"]::-moz-focus-inner, -input[type="button"]::-moz-focus-inner, -input[type="submit"]::-moz-focus-inner, -select::-moz-focus-inner, -input[type="file"] > input[type="button"]::-moz-focus-inner { - outline: 0; } - -.ui-slider-handle:focus, -.navbar-toggle, -input:focus { - outline: 0 !important; } - -/* Animations */ -.form-control, -.input-group-addon, -.tagsinput, -.navbar, -.navbar .alert { - -webkit-transition: all 300ms linear; - -moz-transition: all 300ms linear; - -o-transition: all 300ms linear; - -ms-transition: all 300ms linear; - transition: all 300ms linear; } - -.sidebar .nav a, -.table > tbody > tr .td-actions .btn { - -webkit-transition: all 150ms ease-in; - -moz-transition: all 150ms ease-in; - -o-transition: all 150ms ease-in; - -ms-transition: all 150ms ease-in; - transition: all 150ms ease-in; } - -.btn { - -webkit-transition: all 100ms ease-in; - -moz-transition: all 100ms ease-in; - -o-transition: all 100ms ease-in; - -ms-transition: all 100ms ease-in; - transition: all 100ms ease-in; } - -.fa { - width: 18px; - text-align: center; } - -.margin-top { - margin-top: 50px; } - -.wrapper { - position: relative; - top: 0; - height: 100vh; } - -.sidebar { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 260px; - display: block; - z-index: 1; - color: #fff; - font-weight: 200; - background-size: cover; - background-position: center center; } - .sidebar .sidebar-wrapper { - position: relative; - max-height: none; - min-height: 100%; - overflow: hidden; - width: 260px; - z-index: 4; } - .sidebar .sidebar-background { - position: absolute; - z-index: 1; - height: 100%; - width: 100%; - display: block; - top: 0; - left: 0; - background-size: cover; - background-position: center center; } - .sidebar .logo { - padding: 10px 15px; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); } - .sidebar .logo p { - float: left; - font-size: 20px; - margin: 10px 10px; - color: #FFFFFF; - line-height: 20px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } - .sidebar .logo .simple-text { - text-transform: uppercase; - padding: 5px 0px; - display: block; - font-size: 18px; - color: #FFFFFF; - text-align: center; - font-weight: 400; - line-height: 30px; } - .sidebar .logo-tim { - border-radius: 50%; - border: 1px solid #333; - display: block; - height: 61px; - width: 61px; - float: left; - overflow: hidden; } - .sidebar .logo-tim img { - width: 60px; - height: 60px; } - .sidebar .nav { - margin-top: 20px; } - .sidebar .nav li > a { - color: #FFFFFF; - margin: 5px 15px; - opacity: .86; - border-radius: 4px; } - .sidebar .nav li:hover > a { - background: rgba(255, 255, 255, 0.13); - opacity: 1; } - .sidebar .nav li.active > a { - color: #FFFFFF; - opacity: 1; - background: rgba(255, 255, 255, 0.23); } - .sidebar .nav p { - margin: 0; - line-height: 30px; - font-size: 12px; - font-weight: 600; - text-transform: uppercase; } - .sidebar .nav i { - font-size: 28px; - float: left; - margin-right: 15px; - line-height: 30px; - width: 30px; - text-align: center; } - -.sidebar .logo, -body > .navbar-collapse .logo { - padding: 10px 15px; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); } - .sidebar .logo p, - body > .navbar-collapse .logo p { - float: left; - font-size: 20px; - margin: 10px 10px; - color: #FFFFFF; - line-height: 20px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } - .sidebar .logo .simple-text, - body > .navbar-collapse .logo .simple-text { - text-transform: uppercase; - padding: 5px 0px; - display: block; - font-size: 18px; - color: #FFFFFF; - text-align: center; - font-weight: 400; - line-height: 30px; } -.sidebar .logo-tim, -body > .navbar-collapse .logo-tim { - border-radius: 50%; - border: 1px solid #333; - display: block; - height: 61px; - width: 61px; - float: left; - overflow: hidden; } - .sidebar .logo-tim img, - body > .navbar-collapse .logo-tim img { - width: 60px; - height: 60px; } -.sidebar:after, .sidebar:before, -body > .navbar-collapse:after, -body > .navbar-collapse:before { - display: block; - content: ""; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - z-index: 2; } -.sidebar:before, -body > .navbar-collapse:before { - opacity: .33; - background: #000000; } -.sidebar:after, -body > .navbar-collapse:after { - background: #787878; - background: -moz-linear-gradient(top, #787878 0%, #343434 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #787878), color-stop(100%, #343434)); - background: -webkit-linear-gradient(top, #787878 0%, #343434 100%); - background: -o-linear-gradient(top, #787878 0%, #343434 100%); - background: -ms-linear-gradient(top, #787878 0%, #343434 100%); - background: linear-gradient(to bottom, #787878 0%, #343434 100%); - background-size: 150% 150%; - z-index: 3; - opacity: 1; } -.sidebar[data-image]:after, .sidebar.has-image:after, -body > .navbar-collapse[data-image]:after, -body > .navbar-collapse.has-image:after { - opacity: .77; } -.sidebar[data-color="blue"]:after, -body > .navbar-collapse[data-color="blue"]:after { - background: #1F77D0; - background: -moz-linear-gradient(top, #1F77D0 0%, #533ce1 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #1F77D0), color-stop(100%, #533ce1)); - background: -webkit-linear-gradient(top, #1F77D0 0%, #533ce1 100%); - background: -o-linear-gradient(top, #1F77D0 0%, #533ce1 100%); - background: -ms-linear-gradient(top, #1F77D0 0%, #533ce1 100%); - background: linear-gradient(to bottom, #1F77D0 0%, #533ce1 100%); - background-size: 150% 150%; } -.sidebar[data-color="azure"]:after, -body > .navbar-collapse[data-color="azure"]:after { - background: #1DC7EA; - background: -moz-linear-gradient(top, #1DC7EA 0%, #4091ff 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #1DC7EA), color-stop(100%, #4091ff)); - background: -webkit-linear-gradient(top, #1DC7EA 0%, #4091ff 100%); - background: -o-linear-gradient(top, #1DC7EA 0%, #4091ff 100%); - background: -ms-linear-gradient(top, #1DC7EA 0%, #4091ff 100%); - background: linear-gradient(to bottom, #1DC7EA 0%, #4091ff 100%); - background-size: 150% 150%; } -.sidebar[data-color="green"]:after, -body > .navbar-collapse[data-color="green"]:after { - background: #449b82; - background: -moz-linear-gradient(top, #449b82 0%, #6dc030 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #449b82), color-stop(100%, #6dc030)); - background: -webkit-linear-gradient(top, #449b82 0%, #6dc030 100%); - background: -o-linear-gradient(top, #449b82 0%, #6dc030 100%); - background: -ms-linear-gradient(top, #449b82 0%, #6dc030 100%); - background: linear-gradient(to bottom, #449b82 0%, #6dc030 100%); - background-size: 150% 150%; } -.sidebar[data-color="nomad-green"]:after, -body > .navbar-collapse[data-color="nomad-green"]:after { - background: #449b82; - background: -moz-linear-gradient(top, #449b82 0%, #739873 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #449b82), color-stop(100%, #739873)); - background: -webkit-linear-gradient(top, #449b82 0%, #739873 100%); - background: -o-linear-gradient(top, #449b82 0%, #739873 100%); - background: -ms-linear-gradient(top, #449b82 0%, #739873 100%); - background: linear-gradient(to bottom, #449b82 0%, #739873 100%); - background-size: 150% 150%; } -.sidebar[data-color="orange"]:after, -body > .navbar-collapse[data-color="orange"]:after { - background: #FFA534; - background: -moz-linear-gradient(top, #FFA534 0%, #ff5221 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FFA534), color-stop(100%, #ff5221)); - background: -webkit-linear-gradient(top, #FFA534 0%, #ff5221 100%); - background: -o-linear-gradient(top, #FFA534 0%, #ff5221 100%); - background: -ms-linear-gradient(top, #FFA534 0%, #ff5221 100%); - background: linear-gradient(to bottom, #FFA534 0%, #ff5221 100%); - background-size: 150% 150%; } -.sidebar[data-color="red"]:after, -body > .navbar-collapse[data-color="red"]:after { - background: #FB404B; - background: -moz-linear-gradient(top, #FB404B 0%, #bb0502 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FB404B), color-stop(100%, #bb0502)); - background: -webkit-linear-gradient(top, #FB404B 0%, #bb0502 100%); - background: -o-linear-gradient(top, #FB404B 0%, #bb0502 100%); - background: -ms-linear-gradient(top, #FB404B 0%, #bb0502 100%); - background: linear-gradient(to bottom, #FB404B 0%, #bb0502 100%); - background-size: 150% 150%; } -.sidebar[data-color="purple"]:after, -body > .navbar-collapse[data-color="purple"]:after { - background: #9368E9; - background: -moz-linear-gradient(top, #9368E9 0%, #943bea 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #9368E9), color-stop(100%, #943bea)); - background: -webkit-linear-gradient(top, #9368E9 0%, #943bea 100%); - background: -o-linear-gradient(top, #9368E9 0%, #943bea 100%); - background: -ms-linear-gradient(top, #9368E9 0%, #943bea 100%); - background: linear-gradient(to bottom, #9368E9 0%, #943bea 100%); - background-size: 150% 150%; } - -.main-panel { - position: relative; - z-index: 2; - float: right; - width: calc(100% - 260px); - min-height: 100%; } - .main-panel > .content { - padding: 30px 15px; - min-height: calc(100% - 123px); } - .main-panel > .footer { - border-top: 1px solid #e7e7e7; } - .main-panel .navbar { - margin-bottom: 0; } - -.sidebar, -.main-panel { - overflow: auto; - max-height: 100%; - height: 100%; - -webkit-transition-property: top,bottom; - transition-property: top,bottom; - -webkit-transition-duration: .2s,.2s; - transition-duration: .2s,.2s; - -webkit-transition-timing-function: linear,linear; - transition-timing-function: linear,linear; - -webkit-overflow-scrolling: touch; } - -.btn { - border-width: 2px; - background-color: transparent; - font-weight: 400; - opacity: 0.8; - filter: alpha(opacity=80); - padding: 8px 16px; - border-color: #888888; - color: #888888; } - .btn:hover, .btn:focus, .btn:active, .btn.active, .open > .btn.dropdown-toggle { - background-color: transparent; - color: #777777; - border-color: #777777; } - .btn.disabled, .btn.disabled:hover, .btn.disabled:focus, .btn.disabled.focus, .btn.disabled:active, .btn.disabled.active, .btn:disabled, .btn:disabled:hover, .btn:disabled:focus, .btn:disabled.focus, .btn:disabled:active, .btn:disabled.active, .btn[disabled], .btn[disabled]:hover, .btn[disabled]:focus, .btn[disabled].focus, .btn[disabled]:active, .btn[disabled].active, fieldset[disabled] .btn, fieldset[disabled] .btn:hover, fieldset[disabled] .btn:focus, fieldset[disabled] .btn.focus, fieldset[disabled] .btn:active, fieldset[disabled] .btn.active { - background-color: transparent; - border-color: #888888; } - .btn.btn-fill { - color: #FFFFFF; - background-color: #888888; - opacity: 1; - filter: alpha(opacity=100); } - .btn.btn-fill:hover, .btn.btn-fill:focus, .btn.btn-fill:active, .btn.btn-fill.active, .open > .btn.btn-fill.dropdown-toggle { - background-color: #777777; - color: #FFFFFF; } - .btn.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn .caret { - border-top-color: #888888; } - .btn:hover, .btn:focus { - opacity: 1; - filter: alpha(opacity=100); - outline: 0 !important; } - .btn:active, .btn.active, .open > .btn.dropdown-toggle { - -webkit-box-shadow: none; - box-shadow: none; - outline: 0 !important; } - .btn.btn-icon { - padding: 8px; } - -.btn-primary { - border-color: #3472F7; - color: #3472F7; } - .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { - background-color: transparent; - color: #1D62F0; - border-color: #1D62F0; } - .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary:disabled, .btn-primary:disabled:hover, .btn-primary:disabled:focus, .btn-primary:disabled.focus, .btn-primary:disabled:active, .btn-primary:disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary.focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active { - background-color: transparent; - border-color: #3472F7; } - .btn-primary.btn-fill { - color: #FFFFFF; - background-color: #3472F7; - opacity: 1; - filter: alpha(opacity=100); } - .btn-primary.btn-fill:hover, .btn-primary.btn-fill:focus, .btn-primary.btn-fill:active, .btn-primary.btn-fill.active, .open > .btn-primary.btn-fill.dropdown-toggle { - background-color: #1D62F0; - color: #FFFFFF; } - .btn-primary.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-primary .caret { - border-top-color: #3472F7; } - -.btn-success { - border-color: #87CB16; - color: #87CB16; } - .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { - background-color: transparent; - color: #049F0C; - border-color: #049F0C; } - .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success:disabled, .btn-success:disabled:hover, .btn-success:disabled:focus, .btn-success:disabled.focus, .btn-success:disabled:active, .btn-success:disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success.focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { - background-color: transparent; - border-color: #87CB16; } - .btn-success.btn-fill { - color: #FFFFFF; - background-color: #87CB16; - opacity: 1; - filter: alpha(opacity=100); } - .btn-success.btn-fill:hover, .btn-success.btn-fill:focus, .btn-success.btn-fill:active, .btn-success.btn-fill.active, .open > .btn-success.btn-fill.dropdown-toggle { - background-color: #049F0C; - color: #FFFFFF; } - .btn-success.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-success .caret { - border-top-color: #87CB16; } - -.btn-info { - border-color: #1DC7EA; - color: #1DC7EA; } - .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { - background-color: transparent; - color: #42d0ed; - border-color: #42d0ed; } - .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info:disabled, .btn-info:disabled:hover, .btn-info:disabled:focus, .btn-info:disabled.focus, .btn-info:disabled:active, .btn-info:disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info.focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active { - background-color: transparent; - border-color: #1DC7EA; } - .btn-info.btn-fill { - color: #FFFFFF; - background-color: #1DC7EA; - opacity: 1; - filter: alpha(opacity=100); } - .btn-info.btn-fill:hover, .btn-info.btn-fill:focus, .btn-info.btn-fill:active, .btn-info.btn-fill.active, .open > .btn-info.btn-fill.dropdown-toggle { - background-color: #42d0ed; - color: #FFFFFF; } - .btn-info.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-info .caret { - border-top-color: #1DC7EA; } - -.btn-warning { - border-color: #FF9500; - color: #FF9500; } - .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { - background-color: transparent; - color: #ED8D00; - border-color: #ED8D00; } - .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning:disabled, .btn-warning:disabled:hover, .btn-warning:disabled:focus, .btn-warning:disabled.focus, .btn-warning:disabled:active, .btn-warning:disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning.focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active { - background-color: transparent; - border-color: #FF9500; } - .btn-warning.btn-fill { - color: #FFFFFF; - background-color: #FF9500; - opacity: 1; - filter: alpha(opacity=100); } - .btn-warning.btn-fill:hover, .btn-warning.btn-fill:focus, .btn-warning.btn-fill:active, .btn-warning.btn-fill.active, .open > .btn-warning.btn-fill.dropdown-toggle { - background-color: #ED8D00; - color: #FFFFFF; } - .btn-warning.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-warning .caret { - border-top-color: #FF9500; } - -.btn-danger { - border-color: #FF4A55; - color: #FF4A55; } - .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { - background-color: transparent; - color: #EE2D20; - border-color: #EE2D20; } - .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger:disabled, .btn-danger:disabled:hover, .btn-danger:disabled:focus, .btn-danger:disabled.focus, .btn-danger:disabled:active, .btn-danger:disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger.focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active { - background-color: transparent; - border-color: #FF4A55; } - .btn-danger.btn-fill { - color: #FFFFFF; - background-color: #FF4A55; - opacity: 1; - filter: alpha(opacity=100); } - .btn-danger.btn-fill:hover, .btn-danger.btn-fill:focus, .btn-danger.btn-fill:active, .btn-danger.btn-fill.active, .open > .btn-danger.btn-fill.dropdown-toggle { - background-color: #EE2D20; - color: #FFFFFF; } - .btn-danger.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-danger .caret { - border-top-color: #FF4A55; } - -.btn-neutral { - border-color: #FFFFFF; - color: #FFFFFF; } - .btn-neutral:hover, .btn-neutral:focus, .btn-neutral:active, .btn-neutral.active, .open > .btn-neutral.dropdown-toggle { - background-color: transparent; - color: #FFFFFF; - border-color: #FFFFFF; } - .btn-neutral.disabled, .btn-neutral.disabled:hover, .btn-neutral.disabled:focus, .btn-neutral.disabled.focus, .btn-neutral.disabled:active, .btn-neutral.disabled.active, .btn-neutral:disabled, .btn-neutral:disabled:hover, .btn-neutral:disabled:focus, .btn-neutral:disabled.focus, .btn-neutral:disabled:active, .btn-neutral:disabled.active, .btn-neutral[disabled], .btn-neutral[disabled]:hover, .btn-neutral[disabled]:focus, .btn-neutral[disabled].focus, .btn-neutral[disabled]:active, .btn-neutral[disabled].active, fieldset[disabled] .btn-neutral, fieldset[disabled] .btn-neutral:hover, fieldset[disabled] .btn-neutral:focus, fieldset[disabled] .btn-neutral.focus, fieldset[disabled] .btn-neutral:active, fieldset[disabled] .btn-neutral.active { - background-color: transparent; - border-color: #FFFFFF; } - .btn-neutral.btn-fill { - color: #FFFFFF; - background-color: #FFFFFF; - opacity: 1; - filter: alpha(opacity=100); } - .btn-neutral.btn-fill:hover, .btn-neutral.btn-fill:focus, .btn-neutral.btn-fill:active, .btn-neutral.btn-fill.active, .open > .btn-neutral.btn-fill.dropdown-toggle { - background-color: #FFFFFF; - color: #FFFFFF; } - .btn-neutral.btn-fill .caret { - border-top-color: #FFFFFF; } - .btn-neutral .caret { - border-top-color: #FFFFFF; } - .btn-neutral:active, .btn-neutral.active, .open > .btn-neutral.dropdown-toggle { - background-color: #FFFFFF; - color: #888888; } - .btn-neutral.btn-fill, .btn-neutral.btn-fill:hover, .btn-neutral.btn-fill:focus { - color: #888888; } - .btn-neutral.btn-simple:active, .btn-neutral.btn-simple.active { - background-color: transparent; } - -.btn:disabled, .btn[disabled], .btn.disabled { - opacity: 0.5; - filter: alpha(opacity=50); } - -.btn-round { - border-width: 1px; - border-radius: 30px !important; - padding: 9px 18px; } - .btn-round.btn-icon { - padding: 9px; } - -.btn-simple { - border: 0; - font-size: 16px; - padding: 8px 16px; } - .btn-simple.btn-icon { - padding: 8px; } - -.btn-lg { - font-size: 18px; - border-radius: 6px; - padding: 14px 30px; - font-weight: 400; } - .btn-lg.btn-round { - padding: 15px 30px; } - .btn-lg.btn-simple { - padding: 16px 30px; } - -.btn-sm { - font-size: 12px; - border-radius: 3px; - padding: 5px 10px; } - .btn-sm.btn-round { - padding: 6px 10px; } - .btn-sm.btn-simple { - padding: 7px 10px; } - -.btn-xs { - font-size: 12px; - border-radius: 3px; - padding: 1px 5px; } - .btn-xs.btn-round { - padding: 2px 5px; } - .btn-xs.btn-simple { - padding: 3px 5px; } - -.btn-wd { - min-width: 140px; } - -.btn-group.select { - width: 100%; } - -.btn-group.select .btn { - text-align: left; } - -.btn-group.select .caret { - position: absolute; - top: 50%; - margin-top: -1px; - right: 8px; } - -.form-control::-moz-placeholder { - color: #DDDDDD; - opacity: 1; - filter: alpha(opacity=100); } - -.form-control:-moz-placeholder { - color: #DDDDDD; - opacity: 1; - filter: alpha(opacity=100); } - -.form-control::-webkit-input-placeholder { - color: #DDDDDD; - opacity: 1; - filter: alpha(opacity=100); } - -.form-control:-ms-input-placeholder { - color: #DDDDDD; - opacity: 1; - filter: alpha(opacity=100); } - -.form-control { - background-color: #FFFFFF; - border: 1px solid #E3E3E3; - border-radius: 4px; - color: #565656; - padding: 8px 12px; - height: 40px; - -webkit-box-shadow: none; - box-shadow: none; } - .form-control:focus { - background-color: #FFFFFF; - border: 1px solid #AAAAAA; - -webkit-box-shadow: none; - box-shadow: none; - outline: 0 !important; - color: #333333; } - .has-success .form-control, .has-error .form-control, .has-success .form-control:focus, .has-error .form-control:focus { - border-color: #E3E3E3; - -webkit-box-shadow: none; - box-shadow: none; } - .has-success .form-control { - color: #87CB16; } - .has-success .form-control:focus { - border-color: #87CB16; } - .has-error .form-control { - color: #FF4A55; } - .has-error .form-control:focus { - border-color: #FF4A55; } - .form-control + .form-control-feedback { - border-radius: 6px; - font-size: 14px; - margin-top: -7px; - position: absolute; - right: 10px; - top: 50%; - vertical-align: middle; } - .open .form-control { - border-radius: 4px 4px 0 0; - border-bottom-color: transparent; } - -.input-lg { - height: 55px; - padding: 14px 30px; } - -.has-error .form-control-feedback { - color: #FF4A55; } - -.has-success .form-control-feedback { - color: #87CB16; } - -.input-group-addon { - background-color: #FFFFFF; - border: 1px solid #E3E3E3; - border-radius: 4px; } - .has-success .input-group-addon, .has-error .input-group-addon { - background-color: #FFFFFF; - border: 1px solid #E3E3E3; } - .has-error .form-control:focus + .input-group-addon { - border-color: #FF4A55; - color: #FF4A55; } - .has-success .form-control:focus + .input-group-addon { - border-color: #87CB16; - color: #87CB16; } - .form-control:focus + .input-group-addon, .form-control:focus ~ .input-group-addon { - background-color: #FFFFFF; - border-color: #9A9A9A; } - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-right: 0 none; } - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { - border-left: 0 none; } - -.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { - background-color: #F5F5F5; - color: #888888; - cursor: not-allowed; } - -.input-group-btn .btn { - border-width: 1px; - padding: 9px 16px; } - -.input-group-btn .btn-default:not(.btn-fill) { - border-color: #DDDDDD; } - -.input-group-btn:last-child > .btn { - margin-left: 0; } - -.input-group-focus .input-group-addon { - border-color: #9A9A9A; } - -.alert { - border: 0; - border-radius: 0; - color: #FFFFFF; - padding: 10px 15px; - font-size: 14px; } - .container .alert { - border-radius: 4px; } - .navbar .alert { - border-radius: 0; - left: 0; - position: absolute; - right: 0; - top: 85px; - width: 100%; - z-index: 3; } - .navbar:not(.navbar-transparent) .alert { - top: 70px; } - .alert span[data-notify="icon"] { - font-size: 30px; - display: block; - left: 15px; - position: absolute; - top: 50%; - margin-top: -15px; } - .alert button.close { - position: absolute; - right: 10px; - top: 50%; - margin-top: -13px; - z-index: 1033; - background-color: #FFFFFF; - display: block; - border-radius: 50%; - opacity: .4; - line-height: 11px; - width: 25px; - height: 25px; - outline: 0 !important; - text-align: center; - padding: 3px; - font-weight: 300; } - .alert button.close:hover { - opacity: .55; } - .alert .close ~ span { - display: block; - max-width: 89%; } - .alert[data-notify="container"] { - padding: 10px 10px 10px 20px; - border-radius: 4px; } - .alert.alert-with-icon { - padding-left: 65px; } - -.alert-info { - background-color: #63d8f1; } - -.alert-success { - background-color: #5bb79d; } - -.alert-warning { - background-color: #ffbc67; } - -.alert-danger { - background-color: #fc727a; } - -.table .radio, -.table .checkbox { - position: relative; - height: 20px; - display: block; - width: 20px; - padding: 0px 0px; - margin: 0px 5px; - text-align: center; } - .table .radio .icons, - .table .checkbox .icons { - left: 5px; } -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 12px 8px; - vertical-align: middle; } -.table > thead > tr > th { - border-bottom-width: 1px; - font-size: 12px; - text-transform: uppercase; - color: #9A9A9A; - font-weight: 400; - padding-bottom: 5px; } -.table .td-actions .btn { - opacity: 0.36; - filter: alpha(opacity=36); } - .table .td-actions .btn.btn-xs { - padding-left: 3px; - padding-right: 3px; } -.table .td-actions { - min-width: 90px; } -.table > tbody > tr { - position: relative; } - .table > tbody > tr:hover .td-actions .btn { - opacity: 1; - filter: alpha(opacity=100); } - -/* Checkbox and radio */ -.checkbox, -.radio { - margin-bottom: 12px; - padding-left: 32px; - position: relative; - -webkit-transition: color 0.25s linear; - transition: color 0.25s linear; - font-size: 14px; - font-weight: normal; - line-height: 1.5; - color: #333333; } - -.checkbox input, -.radio input { - outline: none !important; - display: none; } - -.checkbox .icons, -.radio .icons { - color: #DDDDDD; - display: block; - height: 20px; - left: 0; - position: absolute; - top: 0; - width: 20px; - text-align: center; - line-height: 21px; - font-size: 20px; - cursor: pointer; - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; } - -.checkbox .icons .first-icon, -.radio .icons .first-icon, -.checkbox .icons .second-icon, -.radio .icons .second-icon { - display: inline-table; - position: absolute; - left: 0; - top: 0; - background-color: transparent; - margin: 0; - opacity: 1; - filter: alpha(opacity=100); } - -.checkbox .icons .second-icon, -.radio .icons .second-icon { - opacity: 0; - filter: alpha(opacity=0); } - -.checkbox:hover, -.radio:hover { - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; } - -.checkbox:hover .first-icon, -.radio:hover .first-icon { - opacity: 0; - filter: alpha(opacity=0); } - -.checkbox:hover .second-icon, -.radio:hover .second-icon { - opacity: 1; - filter: alpha(opacity=100); } - -.checkbox.checked, -.radio.checked { - color: #1DC7EA; } - -.checkbox.checked .first-icon, -.radio.checked .first-icon { - opacity: 0; - filter: alpha(opacity=0); } - -.checkbox.checked .second-icon, -.radio.checked .second-icon { - opacity: 1; - filter: alpha(opacity=100); - color: #1DC7EA; - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; } - -.checkbox.disabled, -.radio.disabled { - cursor: default; - color: #DDDDDD !important; } - -.checkbox.disabled .icons, -.radio.disabled .icons { - color: #DDDDDD !important; } - -.checkbox.disabled .first-icon, -.radio.disabled .first-icon { - opacity: 1; - filter: alpha(opacity=100); } - -.checkbox.disabled .second-icon, -.radio.disabled .second-icon { - opacity: 0; - filter: alpha(opacity=0); } - -.checkbox.disabled.checked .icons, -.radio.disabled.checked .icons { - color: #DDDDDD; } - -.checkbox.disabled.checked .first-icon, -.radio.disabled.checked .first-icon { - opacity: 0; - filter: alpha(opacity=0); } - -.checkbox.disabled.checked .second-icon, -.radio.disabled.checked .second-icon { - opacity: 1; - filter: alpha(opacity=100); - color: #D9D9D9; } - -/* ============================================================ - * bootstrapSwitch v1.3 by Larentis Mattia @spiritualGuru - * http://www.larentis.eu/switch/ - * ============================================================ - * Licensed under the Apache License, Version 2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * ============================================================ */ -.has-switch { - border-radius: 30px; - cursor: pointer; - display: inline-block; - line-height: 1.72222; - overflow: hidden; - position: relative; - text-align: left; - width: 60px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; - /* this code is for fixing safari bug with hidden overflow for border-radius */ - -webkit-mask: url("../img/mask.png") 0 0 no-repeat; - -webkit-mask-size: 60px 24px; - mask: url("../img/mask.png") 0 0 no-repeat; } - -.has-switch.deactivate { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default !important; } - -.has-switch.deactivate label, -.has-switch.deactivate span { - cursor: default !important; } - -.has-switch > div { - position: relative; - top: 0; - width: 100px; } - -.has-switch > div.switch-animate { - -webkit-transition: left 0.25s ease-out; - transition: left 0.25s ease-out; } - -.has-switch > div.switch-off { - left: -35px; } - -.has-switch > div.switch-on { - left: 0; } - -.has-switch > div label { - background-color: #FFFFFF; - background: white; - background: -moz-linear-gradient(top, white 0%, #f1f1f2 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #f1f1f2)); - background: -webkit-linear-gradient(top, white 0%, #f1f1f2 100%); - background: -o-linear-gradient(top, white 0%, #f1f1f2 100%); - background: -ms-linear-gradient(top, white 0%, #f1f1f2 100%); - background: linear-gradient(to bottom, white 0%, #f1f1f2 100%); - background-size: 150% 150%; - box-shadow: 0 1px 1px #FFFFFF inset, 0 1px 1px rgba(0, 0, 0, 0.25); - cursor: pointer; } - -.has-switch input[type=checkbox] { - display: none; } - -.has-switch span { - /* box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; */ - cursor: pointer; - float: left; - font-size: 11px; - font-weight: 400; - height: 24px; - line-height: 15px; - margin: 0; - padding-bottom: 6px; - padding-top: 5px; - position: relative; - text-align: center; - text-indent: -10px; - width: 50%; - z-index: 1; - -webkit-transition: 0.25s ease-out; - transition: 0.25s ease-out; } - -.has-switch span.switch-left { - background-color: #1DC7EA; - border-left: 1px solid transparent; - border-radius: 30px 0 0 30px; - color: #FFFFFF; } - -.has-switch .switch-off span.switch-left { - background-color: #DDDDDD; } - -.has-switch span.switch-right { - border-radius: 0 30px 30px 0; - background-color: #1DC7EA; - color: #ffffff; - text-indent: 1px; } - -.has-switch .switch-off span.switch-right { - background-color: #DDDDDD; } - -.has-switch label { - border-radius: 12px; - float: left; - height: 22px; - margin: 1px -13px; - padding: 0; - position: relative; - transition: all 0.25s ease-out 0s; - vertical-align: middle; - width: 22px; - z-index: 100; - -webkit-transition: 0.25s ease-out; - transition: 0.25s ease-out; } - -.has-switch .switch-on .fa-check:before { - margin-left: 10px; } - -.has-switch:hover .switch-on label { - margin: 1px -17px; - width: 26px; } - -.has-switch:hover .switch-off label { - margin: 1px -13px; - width: 26px; } - -.nav > li > a:hover, -.nav > li > a:focus { - background-color: transparent; } - -.navbar { - border: 0; - font-size: 16px; - border-radius: 0; } - .navbar .navbar-brand { - font-weight: 400; - margin: 5px 0px; - padding: 15px 15px; - font-size: 20px; } - .navbar .navbar-nav > li > a { - padding: 10px 15px; - margin: 10px 3px; - position: relative; } - .navbar .navbar-nav > li > a.btn { - margin: 15px 3px; - padding: 8px 16px; } - .navbar .navbar-nav > li > a.btn-round { - margin: 16px 3px; } - .navbar .navbar-nav > li > a [class^="fa"] { - font-size: 19px; - position: relative; - line-height: 16px; - top: 1px; } - .navbar .navbar-nav .notification { - position: absolute; - background-color: #FB404B; - text-align: center; - border-radius: 10px; - min-width: 18px; - padding: 0 5px; - height: 18px; - font-size: 12px; - color: #FFFFFF; - font-weight: bold; - line-height: 18px; - top: 0px; - left: 7px; } - .navbar .btn { - margin: 15px 3px; - font-size: 14px; } - .navbar .btn-simple { - font-size: 16px; } - .navbar.fixed { - width: calc(100% - $sidebar-width); - right: 0; - left: auto; - border-radius: 0; } - -.navbar-nav > li > .dropdown-menu { - border-radius: 10px; - margin-top: -5px; } - -.navbar-transparent .navbar-brand, [class*="navbar-ct"] .navbar-brand { - color: #FFFFFF; - opacity: 0.9; - filter: alpha(opacity=90); } - .navbar-transparent .navbar-brand:focus, .navbar-transparent .navbar-brand:hover, [class*="navbar-ct"] .navbar-brand:focus, [class*="navbar-ct"] .navbar-brand:hover { - background-color: transparent; - opacity: 1; - filter: alpha(opacity=100); } -.navbar-transparent .navbar-nav > li > a:not(.btn), [class*="navbar-ct"] .navbar-nav > li > a:not(.btn) { - color: #FFFFFF; - border-color: #FFFFFF; - opacity: 0.8; - filter: alpha(opacity=80); } -.navbar-transparent .navbar-nav > .active > a:not(.btn), -.navbar-transparent .navbar-nav > .active > a:hover:not(.btn), -.navbar-transparent .navbar-nav > .active > a:focus:not(.btn), -.navbar-transparent .navbar-nav > li > a:hover:not(.btn), -.navbar-transparent .navbar-nav > li > a:focus:not(.btn), [class*="navbar-ct"] .navbar-nav > .active > a:not(.btn), -[class*="navbar-ct"] .navbar-nav > .active > a:hover:not(.btn), -[class*="navbar-ct"] .navbar-nav > .active > a:focus:not(.btn), -[class*="navbar-ct"] .navbar-nav > li > a:hover:not(.btn), -[class*="navbar-ct"] .navbar-nav > li > a:focus:not(.btn) { - background-color: transparent; - border-radius: 3px; - color: #FFFFFF; - opacity: 1; - filter: alpha(opacity=100); } -.navbar-transparent .navbar-nav .nav > li > a.btn:hover, [class*="navbar-ct"] .navbar-nav .nav > li > a.btn:hover { - background-color: transparent; } -.navbar-transparent .navbar-nav > .dropdown > a .caret, -.navbar-transparent .navbar-nav > .dropdown > a:hover .caret, -.navbar-transparent .navbar-nav > .dropdown > a:focus .caret, [class*="navbar-ct"] .navbar-nav > .dropdown > a .caret, -[class*="navbar-ct"] .navbar-nav > .dropdown > a:hover .caret, -[class*="navbar-ct"] .navbar-nav > .dropdown > a:focus .caret { - border-bottom-color: #FFFFFF; - border-top-color: #FFFFFF; } -.navbar-transparent .navbar-nav > .open > a, -.navbar-transparent .navbar-nav > .open > a:hover, -.navbar-transparent .navbar-nav > .open > a:focus, [class*="navbar-ct"] .navbar-nav > .open > a, -[class*="navbar-ct"] .navbar-nav > .open > a:hover, -[class*="navbar-ct"] .navbar-nav > .open > a:focus { - background-color: transparent; - color: #FFFFFF; - opacity: 1; - filter: alpha(opacity=100); } -.navbar-transparent .btn-default, [class*="navbar-ct"] .btn-default { - color: #FFFFFF; - border-color: #FFFFFF; } -.navbar-transparent .btn-default.btn-fill, [class*="navbar-ct"] .btn-default.btn-fill { - color: #9A9A9A; - background-color: #FFFFFF; - opacity: 0.9; - filter: alpha(opacity=90); } -.navbar-transparent .btn-default.btn-fill:hover, -.navbar-transparent .btn-default.btn-fill:focus, -.navbar-transparent .btn-default.btn-fill:active, -.navbar-transparent .btn-default.btn-fill.active, -.navbar-transparent .open .dropdown-toggle.btn-fill.btn-default, [class*="navbar-ct"] .btn-default.btn-fill:hover, -[class*="navbar-ct"] .btn-default.btn-fill:focus, -[class*="navbar-ct"] .btn-default.btn-fill:active, -[class*="navbar-ct"] .btn-default.btn-fill.active, -[class*="navbar-ct"] .open .dropdown-toggle.btn-fill.btn-default { - border-color: #FFFFFF; - opacity: 1; - filter: alpha(opacity=100); } - -.navbar-transparent .dropdown-menu .divider { - background-color: rgba(255, 255, 255, 0.2); } - -.nav-open .nav .caret { - border-bottom-color: #FFFFFF; - border-top-color: #FFFFFF; } - -.navbar-default { - background-color: rgba(255, 255, 255, 0.96); - border-bottom: 1px solid rgba(0, 0, 0, 0.1); } - .navbar-default .navbar-nav > li > a:not(.btn) { - color: #9A9A9A; } - .navbar-default .navbar-nav > .active > a, - .navbar-default .navbar-nav > .active > a:not(.btn):hover, - .navbar-default .navbar-nav > .active > a:not(.btn):focus, - .navbar-default .navbar-nav > li > a:not(.btn):hover, - .navbar-default .navbar-nav > li > a:not(.btn):focus { - background-color: transparent; - border-radius: 3px; - color: #1DC7EA; - opacity: 1; - filter: alpha(opacity=100); } - .navbar-default .navbar-nav > .dropdown > a:hover .caret, - .navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-bottom-color: #1DC7EA; - border-top-color: #1DC7EA; } - .navbar-default .navbar-nav > .open > a, - .navbar-default .navbar-nav > .open > a:hover, - .navbar-default .navbar-nav > .open > a:focus { - background-color: transparent; - color: #1DC7EA; } - .navbar-default .navbar-nav .navbar-toggle:hover, .navbar-default .navbar-nav .navbar-toggle:focus { - background-color: transparent; } - .navbar-default:not(.navbar-transparent) .btn-default:hover { - color: #1DC7EA; - border-color: #1DC7EA; } - .navbar-default:not(.navbar-transparent) .btn-neutral, .navbar-default:not(.navbar-transparent) .btn-neutral:hover, .navbar-default:not(.navbar-transparent) .btn-neutral:active { - color: #9A9A9A; } - -/* Navbar with icons */ -.navbar-icons.navbar .navbar-brand { - margin-top: 12px; - margin-bottom: 12px; } -.navbar-icons .navbar-nav > li > a { - text-align: center; - padding: 6px 15px; - margin: 6px 3px; } -.navbar-icons .navbar-nav [class^="pe"] { - font-size: 30px; - position: relative; } -.navbar-icons .navbar-nav p { - margin: 3px 0 0; } - -.navbar-form { - -webkit-box-shadow: none; - box-shadow: none; } - .navbar-form .form-control { - border-radius: 0; - border: 0; - padding: 0; - background-color: transparent; - height: 22px; - font-size: 16px; - line-height: 1.5; - color: #E3E3E3; } - .navbar-transparent .navbar-form .form-control, [class*="navbar-ct"] .navbar-form .form-control { - color: #FFFFFF; - border: 0; - border-bottom: 1px solid rgba(255, 255, 255, 0.6); } - -.navbar-ct-blue { - background-color: #4091e2; } - -.navbar-ct-azure { - background-color: #63d8f1; } - -.navbar-ct-green { - background-color: #5bb79d; } - -.navbar-ct-orange { - background-color: #ffbc67; } - -.navbar-ct-red { - background-color: #fc727a; } - -.navbar-transparent { - padding-top: 15px; - background-color: transparent; - border-bottom: 1px solid transparent; } - -.navbar-toggle { - margin-top: 19px; - margin-bottom: 19px; - border: 0; } - .navbar-toggle .icon-bar { - background-color: #FFFFFF; } - .navbar-toggle .navbar-collapse, - .navbar-toggle .navbar-form { - border-color: transparent; } - .navbar-toggle.navbar-default .navbar-toggle:hover, .navbar-toggle.navbar-default .navbar-toggle:focus { - background-color: transparent; } - -.footer { - background-color: #FFFFFF; - line-height: 20px; } - .footer nav > ul { - list-style: none; - margin: 0; - padding: 0; - font-weight: normal; } - .footer nav > ul a:not(.btn) { - color: #9A9A9A; - display: block; - margin-bottom: 3px; } - .footer nav > ul a:not(.btn):hover, .footer nav > ul a:not(.btn):focus { - color: #777777; } - .footer .social-area { - padding: 15px 0; } - .footer .social-area h5 { - padding-bottom: 15px; } - .footer .social-area > a:not(.btn) { - color: #9A9A9A; - display: inline-block; - vertical-align: top; - padding: 10px 5px; - font-size: 20px; - font-weight: normal; - line-height: 20px; - text-align: center; } - .footer .social-area > a:not(.btn):hover, .footer .social-area > a:not(.btn):focus { - color: #777777; } - .footer .copyright { - color: #777777; - padding: 10px 15px; - margin: 10px 3px; - line-height: 20px; - font-size: 14px; } - .footer hr { - border-color: #DDDDDD; } - .footer .title { - color: #777777; } - -.footer-default { - background-color: #F5F5F5; } - -.footer:not(.footer-big) nav > ul { - font-size: 14px; } - .footer:not(.footer-big) nav > ul li { - margin-left: 20px; - float: left; } - .footer:not(.footer-big) nav > ul a { - padding: 10px 0px; - margin: 10px 10px 10px 0px; } - -.dropdown-menu { - visibility: hidden; - margin: 0; - padding: 0; - border-radius: 10px; - display: block; - z-index: 9000; - position: absolute; - opacity: 0; - filter: alpha(opacity=0); - -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125); - box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125); } - .open .dropdown-menu { - opacity: 1; - filter: alpha(opacity=100); - visibility: visible; } - .select .dropdown-menu { - border-radius: 0 0 10px 10px; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transform-origin: 50% -40px; - -moz-transform-origin: 50% -40px; - -o-transform-origin: 50% -40px; - -ms-transform-origin: 50% -40px; - transform-origin: 50% -40px; - -webkit-transform: scale(1); - -moz-transform: scale(1); - -o-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - -webkit-transition: all 150ms linear; - -moz-transition: all 150ms linear; - -o-transition: all 150ms linear; - -ms-transition: all 150ms linear; - transition: all 150ms linear; - margin-top: -20px; } - .select.open .dropdown-menu { - margin-top: -1px; } - .dropdown-menu > li > a { - padding: 8px 16px; - color: #333333; } - .dropdown-menu > li > a img { - margin-top: -3px; } - .dropdown-menu > li > a:focus { - outline: 0 !important; } - .btn-group.select .dropdown-menu { - min-width: 100%; } - .dropdown-menu > li:first-child > a { - border-top-left-radius: 10px; - border-top-right-radius: 10px; } - .dropdown-menu > li:last-child > a { - border-bottom-left-radius: 10px; - border-bottom-right-radius: 10px; } - .select .dropdown-menu > li:first-child > a { - border-radius: 0; - border-bottom: 0 none; } - .dropdown-menu > li > a:hover, - .dropdown-menu > li > a:focus { - background-color: #F5F5F5; - color: #333333; - opacity: 1; - text-decoration: none; } - .dropdown-menu.dropdown-blue > li > a:hover, .dropdown-menu.dropdown-blue > li > a:focus { - background-color: rgba(52, 114, 247, 0.2); } - .dropdown-menu.dropdown-azure > li > a:hover, .dropdown-menu.dropdown-azure > li > a:focus { - background-color: rgba(29, 199, 234, 0.2); } - .dropdown-menu.ct-green > li > a:hover, .dropdown-menu.ct-green > li > a:focus { - background-color: rgba(135, 203, 22, 0.2); } - .dropdown-menu.dropdown-orange > li > a:hover, .dropdown-menu.dropdown-orange > li > a:focus { - background-color: rgba(255, 149, 0, 0.2); } - .dropdown-menu.dropdown-red > li > a:hover, .dropdown-menu.dropdown-red > li > a:focus { - background-color: rgba(255, 74, 85, 0.2); } - -.dropdown-with-icons > li > a { - padding-left: 0px; - line-height: 28px; } -.dropdown-with-icons i { - text-align: center; - line-height: 28px; - float: left; } - .dropdown-with-icons i[class^="pe-"] { - font-size: 24px; - width: 46px; } - .dropdown-with-icons i[class^="fa"] { - font-size: 14px; - width: 38px; } - -.btn-group.select { - overflow: hidden; } - -.btn-group.select.open { - overflow: visible; } - -.card { - border-radius: 4px; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(63, 63, 68, 0.1); - background-color: #FFFFFF; - margin-bottom: 30px; } - .card .image { - width: 100%; - overflow: hidden; - height: 260px; - border-radius: 4px 4px 0 0; - position: relative; - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; - transform-style: preserve-3d; } - .card .image img { - width: 100%; } - .card .filter { - position: absolute; - z-index: 2; - background-color: rgba(0, 0, 0, 0.68); - top: 0; - left: 0; - width: 100%; - height: 100%; - text-align: center; - opacity: 0; - filter: alpha(opacity=0); } - .card .filter .btn { - position: relative; - top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); } - .card:hover .filter { - opacity: 1; - filter: alpha(opacity=100); } - .card .btn-hover { - opacity: 0; - filter: alpha(opacity=0); } - .card:hover .btn-hover { - opacity: 1; - filter: alpha(opacity=100); } - .card .content { - padding: 15px 15px 10px 15px; } - .card .header { - padding: 15px 15px 0; } - .card .category, - .card label { - font-size: 14px; - font-weight: 400; - color: #9A9A9A; - margin-bottom: 0px; } - .card .category i, - .card label i { - font-size: 16px; } - .card label { - font-size: 12px; - margin-bottom: 5px; - text-transform: uppercase; } - .card .title { - margin: 0; - color: #333333; - font-weight: 300; } - .card .avatar { - width: 30px; - height: 30px; - overflow: hidden; - border-radius: 50%; - margin-right: 5px; } - .card .description { - font-size: 14px; - color: #333; } - .card .footer { - padding: 0; - background-color: transparent; - line-height: 30px; } - .card .footer .legend { - padding: 5px 0; } - .card .footer hr { - margin-top: 5px; - margin-bottom: 5px; } - .card .stats { - color: #a9a9a9; } - .card .footer div { - display: inline-block; } - .card .author { - font-size: 12px; - font-weight: 600; - text-transform: uppercase; } - .card .author i { - font-size: 14px; } - .card h6 { - font-size: 12px; - margin: 0; } - .card.card-separator:after { - height: 100%; - right: -15px; - top: 0; - width: 1px; - background-color: #DDDDDD; - content: ""; - position: absolute; } - .card .ct-chart { - margin: 30px 0 30px; - height: 245px; } - .card .table tbody td:first-child, - .card .table thead th:first-child { - padding-left: 15px; } - .card .table tbody td:last-child, - .card .table thead th:last-child { - padding-right: 15px; } - .card .alert { - border-radius: 4px; - position: relative; } - .card .alert.alert-with-icon { - padding-left: 65px; } - -.card-user .image { - height: 110px; } -.card-user .image-plain { - height: 0; - margin-top: 110px; } -.card-user .author { - text-align: center; - text-transform: none; - margin-top: -70px; } -.card-user .avatar { - width: 124px; - height: 124px; - border: 5px solid #FFFFFF; - position: relative; - margin-bottom: 15px; } - .card-user .avatar.border-gray { - border-color: #EEEEEE; } -.card-user .title { - line-height: 24px; } -.card-user .content { - min-height: 240px; } - -.card-user .footer, -.card-price .footer { - padding: 5px 15px 10px; } -.card-user hr, -.card-price hr { - margin: 5px 15px; } - -.card-plain { - background-color: transparent; - box-shadow: none; - border-radius: 0; } - .card-plain .image { - border-radius: 4px; } - -.ct-label { - fill: rgba(0, 0, 0, 0.4); - color: rgba(0, 0, 0, 0.4); - font-size: 1.3rem; - line-height: 1; } - -.ct-chart-line .ct-label, -.ct-chart-bar .ct-label { - display: block; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; } - -.ct-label.ct-horizontal.ct-start { - -webkit-box-align: flex-end; - -webkit-align-items: flex-end; - -ms-flex-align: flex-end; - align-items: flex-end; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: start; } - -.ct-label.ct-horizontal.ct-end { - -webkit-box-align: flex-start; - -webkit-align-items: flex-start; - -ms-flex-align: flex-start; - align-items: flex-start; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: start; } - -.ct-label.ct-vertical.ct-start { - -webkit-box-align: flex-end; - -webkit-align-items: flex-end; - -ms-flex-align: flex-end; - align-items: flex-end; - -webkit-box-pack: flex-end; - -webkit-justify-content: flex-end; - -ms-flex-pack: flex-end; - justify-content: flex-end; - text-align: right; - text-anchor: end; } - -.ct-label.ct-vertical.ct-end { - -webkit-box-align: flex-end; - -webkit-align-items: flex-end; - -ms-flex-align: flex-end; - align-items: flex-end; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: start; } - -.ct-chart-bar .ct-label.ct-horizontal.ct-start { - -webkit-box-align: flex-end; - -webkit-align-items: flex-end; - -ms-flex-align: flex-end; - align-items: flex-end; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; - text-anchor: start; } - -.ct-chart-bar .ct-label.ct-horizontal.ct-end { - -webkit-box-align: flex-start; - -webkit-align-items: flex-start; - -ms-flex-align: flex-start; - align-items: flex-start; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; - text-anchor: start; } - -.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start { - -webkit-box-align: flex-end; - -webkit-align-items: flex-end; - -ms-flex-align: flex-end; - align-items: flex-end; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: start; } - -.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end { - -webkit-box-align: flex-start; - -webkit-align-items: flex-start; - -ms-flex-align: flex-start; - align-items: flex-start; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: start; } - -.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: flex-end; - -webkit-justify-content: flex-end; - -ms-flex-pack: flex-end; - justify-content: flex-end; - text-align: right; - text-anchor: end; } - -.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end { - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: flex-start; - -webkit-justify-content: flex-start; - -ms-flex-pack: flex-start; - justify-content: flex-start; - text-align: left; - text-anchor: end; } - -.ct-grid { - stroke: rgba(0, 0, 0, 0.2); - stroke-width: 1px; - stroke-dasharray: 2px; } - -.ct-point { - stroke-width: 8px; - stroke-linecap: round; } - -.ct-line { - fill: none; - stroke-width: 3px; } - -.ct-area { - stroke: none; - fill-opacity: 0.8; } - -.ct-bar { - fill: none; - stroke-width: 10px; } - -.ct-slice-donut { - fill: none; - stroke-width: 60px; } - -.ct-series-a .ct-point, .ct-series-a .ct-line, .ct-series-a .ct-bar, .ct-series-a .ct-slice-donut { - stroke: #1DC7EA; } -.ct-series-a .ct-slice-pie, .ct-series-a .ct-area { - fill: #1DC7EA; } - -.ct-series-b .ct-point, .ct-series-b .ct-line, .ct-series-b .ct-bar, .ct-series-b .ct-slice-donut { - stroke: #FB404B; } -.ct-series-b .ct-slice-pie, .ct-series-b .ct-area { - fill: #FB404B; } - -.ct-series-c .ct-point, .ct-series-c .ct-line, .ct-series-c .ct-bar, .ct-series-c .ct-slice-donut { - stroke: #FFA534; } -.ct-series-c .ct-slice-pie, .ct-series-c .ct-area { - fill: #FFA534; } - -.ct-series-d .ct-point, .ct-series-d .ct-line, .ct-series-d .ct-bar, .ct-series-d .ct-slice-donut { - stroke: #9368E9; } -.ct-series-d .ct-slice-pie, .ct-series-d .ct-area { - fill: #9368E9; } - -.ct-series-e .ct-point, .ct-series-e .ct-line, .ct-series-e .ct-bar, .ct-series-e .ct-slice-donut { - stroke: #449b82; } -.ct-series-e .ct-slice-pie, .ct-series-e .ct-area { - fill: #449b82; } - -.ct-series-f .ct-point, .ct-series-f .ct-line, .ct-series-f .ct-bar, .ct-series-f .ct-slice-donut { - stroke: #1F77D0; } -.ct-series-f .ct-slice-pie, .ct-series-f .ct-area { - fill: #1F77D0; } - -.ct-series-g .ct-point, .ct-series-g .ct-line, .ct-series-g .ct-bar, .ct-series-g .ct-slice-donut { - stroke: #5e5e5e; } -.ct-series-g .ct-slice-pie, .ct-series-g .ct-area { - fill: #5e5e5e; } - -.ct-series-h .ct-point, .ct-series-h .ct-line, .ct-series-h .ct-bar, .ct-series-h .ct-slice-donut { - stroke: #dd4b39; } -.ct-series-h .ct-slice-pie, .ct-series-h .ct-area { - fill: #dd4b39; } - -.ct-series-i .ct-point, .ct-series-i .ct-line, .ct-series-i .ct-bar, .ct-series-i .ct-slice-donut { - stroke: #35465c; } -.ct-series-i .ct-slice-pie, .ct-series-i .ct-area { - fill: #35465c; } - -.ct-series-j .ct-point, .ct-series-j .ct-line, .ct-series-j .ct-bar, .ct-series-j .ct-slice-donut { - stroke: #e52d27; } -.ct-series-j .ct-slice-pie, .ct-series-j .ct-area { - fill: #e52d27; } - -.ct-series-k .ct-point, .ct-series-k .ct-line, .ct-series-k .ct-bar, .ct-series-k .ct-slice-donut { - stroke: #55acee; } -.ct-series-k .ct-slice-pie, .ct-series-k .ct-area { - fill: #55acee; } - -.ct-series-l .ct-point, .ct-series-l .ct-line, .ct-series-l .ct-bar, .ct-series-l .ct-slice-donut { - stroke: #cc2127; } -.ct-series-l .ct-slice-pie, .ct-series-l .ct-area { - fill: #cc2127; } - -.ct-series-m .ct-point, .ct-series-m .ct-line, .ct-series-m .ct-bar, .ct-series-m .ct-slice-donut { - stroke: #1769ff; } -.ct-series-m .ct-slice-pie, .ct-series-m .ct-area { - fill: #1769ff; } - -.ct-series-n .ct-point, .ct-series-n .ct-line, .ct-series-n .ct-bar, .ct-series-n .ct-slice-donut { - stroke: #6188e2; } -.ct-series-n .ct-slice-pie, .ct-series-n .ct-area { - fill: #6188e2; } - -.ct-series-o .ct-point, .ct-series-o .ct-line, .ct-series-o .ct-bar, .ct-series-o .ct-slice-donut { - stroke: #a748ca; } -.ct-series-o .ct-slice-pie, .ct-series-o .ct-area { - fill: #a748ca; } - -.ct-square { - display: block; - position: relative; - width: 100%; } - .ct-square:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 100%; } - .ct-square:after { - content: ""; - display: table; - clear: both; } - .ct-square > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-minor-second { - display: block; - position: relative; - width: 100%; } - .ct-minor-second:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 93.75%; } - .ct-minor-second:after { - content: ""; - display: table; - clear: both; } - .ct-minor-second > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-second { - display: block; - position: relative; - width: 100%; } - .ct-major-second:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 88.88889%; } - .ct-major-second:after { - content: ""; - display: table; - clear: both; } - .ct-major-second > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-minor-third { - display: block; - position: relative; - width: 100%; } - .ct-minor-third:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 83.33333%; } - .ct-minor-third:after { - content: ""; - display: table; - clear: both; } - .ct-minor-third > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-third { - display: block; - position: relative; - width: 100%; } - .ct-major-third:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 80%; } - .ct-major-third:after { - content: ""; - display: table; - clear: both; } - .ct-major-third > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-perfect-fourth { - display: block; - position: relative; - width: 100%; } - .ct-perfect-fourth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 75%; } - .ct-perfect-fourth:after { - content: ""; - display: table; - clear: both; } - .ct-perfect-fourth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-perfect-fifth { - display: block; - position: relative; - width: 100%; } - .ct-perfect-fifth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 66.66667%; } - .ct-perfect-fifth:after { - content: ""; - display: table; - clear: both; } - .ct-perfect-fifth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-minor-sixth { - display: block; - position: relative; - width: 100%; } - .ct-minor-sixth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 62.5%; } - .ct-minor-sixth:after { - content: ""; - display: table; - clear: both; } - .ct-minor-sixth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-golden-section { - display: block; - position: relative; - width: 100%; } - .ct-golden-section:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 61.8047%; } - .ct-golden-section:after { - content: ""; - display: table; - clear: both; } - .ct-golden-section > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-sixth { - display: block; - position: relative; - width: 100%; } - .ct-major-sixth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 60%; } - .ct-major-sixth:after { - content: ""; - display: table; - clear: both; } - .ct-major-sixth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-minor-seventh { - display: block; - position: relative; - width: 100%; } - .ct-minor-seventh:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 56.25%; } - .ct-minor-seventh:after { - content: ""; - display: table; - clear: both; } - .ct-minor-seventh > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-seventh { - display: block; - position: relative; - width: 100%; } - .ct-major-seventh:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 53.33333%; } - .ct-major-seventh:after { - content: ""; - display: table; - clear: both; } - .ct-major-seventh > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-octave { - display: block; - position: relative; - width: 100%; } - .ct-octave:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 50%; } - .ct-octave:after { - content: ""; - display: table; - clear: both; } - .ct-octave > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-tenth { - display: block; - position: relative; - width: 100%; } - .ct-major-tenth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 40%; } - .ct-major-tenth:after { - content: ""; - display: table; - clear: both; } - .ct-major-tenth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-eleventh { - display: block; - position: relative; - width: 100%; } - .ct-major-eleventh:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 37.5%; } - .ct-major-eleventh:after { - content: ""; - display: table; - clear: both; } - .ct-major-eleventh > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-major-twelfth { - display: block; - position: relative; - width: 100%; } - .ct-major-twelfth:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 33.33333%; } - .ct-major-twelfth:after { - content: ""; - display: table; - clear: both; } - .ct-major-twelfth > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -.ct-double-octave { - display: block; - position: relative; - width: 100%; } - .ct-double-octave:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: 25%; } - .ct-double-octave:after { - content: ""; - display: table; - clear: both; } - .ct-double-octave > svg { - display: block; - position: absolute; - top: 0; - left: 0; } - -@media (min-width: 992px) { - .navbar-form { - margin-top: 21px; - margin-bottom: 21px; - padding-left: 5px; - padding-right: 5px; } - - .navbar-nav > li > .dropdown-menu, .dropdown .dropdown-menu { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -o-transform: scale(0); - -ms-transform: scale(0); - transform: scale(0); - -webkit-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1); - -moz-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1); - -o-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1); - -ms-transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: all 370ms cubic-bezier(0.34, 1.61, 0.7, 1); } - - .navbar-nav > li.open > .dropdown-menu, .dropdown.open .dropdown-menu { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -o-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - -webkit-transform-origin: 29px -50px; - -moz-transform-origin: 29px -50px; - -o-transform-origin: 29px -50px; - -ms-transform-origin: 29px -50px; - transform-origin: 29px -50px; } - - .navbar-nav > li > .dropdown-menu:before { - border-bottom: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid transparent; - border-right: 11px solid transparent; - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -11px; } - - .navbar-nav > li > .dropdown-menu:after { - border-bottom: 11px solid #FFFFFF; - border-left: 11px solid transparent; - border-right: 11px solid transparent; - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -10px; } - - .navbar-nav.navbar-right > li > .dropdown-menu:before { - left: auto; - right: 12px; } - - .navbar-nav.navbar-right > li > .dropdown-menu:after { - left: auto; - right: 12px; } - - .footer:not(.footer-big) nav > ul li:first-child { - margin-left: 0; } - - body > .navbar-collapse.collapse { - display: none !important; } - - .card form [class*="col-"] { - padding: 6px; } - .card form [class*="col-"]:first-child { - padding-left: 15px; } - .card form [class*="col-"]:last-child { - padding-right: 15px; } } -/* Changes for small display */ -@media (max-width: 991px) { - .sidebar { - display: none; } - - .main-panel { - width: 100%; } - - .navbar-transparent { - padding-top: 15px; - background-color: rgba(0, 0, 0, 0.45); } - - body { - position: relative; } - - .wrapper { - -webkit-transform: translate3d(0px, 0, 0); - -moz-transform: translate3d(0px, 0, 0); - -o-transform: translate3d(0px, 0, 0); - -ms-transform: translate3d(0px, 0, 0); - transform: translate3d(0px, 0, 0); - -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - left: 0; - background-color: white; } - - .navbar .container { - left: 0; - width: 100%; - -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - position: relative; } - - .navbar .navbar-collapse.collapse, - .navbar .navbar-collapse.collapse.in, - .navbar .navbar-collapse.collapsing { - display: none !important; } - - .navbar-nav > li { - float: none; - position: relative; - display: block; } - - body > .navbar-collapse { - position: fixed; - display: block; - top: 0; - height: 100%; - width: 250px; - right: 0; - z-index: 1032; - visibility: visible; - background-color: #999; - overflow-y: visible; - border-top: none; - text-align: left; - padding: 0; - -webkit-transform: translate3d(250px, 0, 0); - -moz-transform: translate3d(250px, 0, 0); - -o-transform: translate3d(250px, 0, 0); - -ms-transform: translate3d(250px, 0, 0); - transform: translate3d(250px, 0, 0); - -webkit-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -moz-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -o-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - -ms-transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); - transition: all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1); } - body > .navbar-collapse > ul { - position: relative; - z-index: 4; - overflow-y: scroll; - height: calc(100vh - 61px); - width: 100%; } - body > .navbar-collapse .nav > li > a { - padding: 30px 25px; } - body > .navbar-collapse::before { - top: 0; - left: 0; - height: 100%; - width: 100%; - position: absolute; - background-color: #282828; - display: block; - content: ""; - z-index: 1; } - body > .navbar-collapse .logo { - position: relative; - z-index: 4; } - - .nav-open .navbar-collapse { - -webkit-transform: translate3d(0px, 0, 0); - -moz-transform: translate3d(0px, 0, 0); - -o-transform: translate3d(0px, 0, 0); - -ms-transform: translate3d(0px, 0, 0); - transform: translate3d(0px, 0, 0); } - - .nav-open .navbar .container { - left: -250px; } - - .nav-open .wrapper { - left: 0; - -webkit-transform: translate3d(-250px, 0, 0); - -moz-transform: translate3d(-250px, 0, 0); - -o-transform: translate3d(-250px, 0, 0); - -ms-transform: translate3d(-250px, 0, 0); - transform: translate3d(-250px, 0, 0); } - - .navbar-toggle .icon-bar { - display: block; - position: relative; - background: #fff; - width: 24px; - height: 2px; - border-radius: 1px; - margin: 0 auto; } - - .navbar-header .navbar-toggle { - margin: 10px 15px 10px 0; - width: 40px; - height: 40px; } - - .bar1, - .bar2, - .bar3 { - outline: 1px solid transparent; } - - .bar1 { - top: 0px; - -webkit-animation: topbar-back 500ms linear 0s; - -moz-animation: topbar-back 500ms linear 0s; - animation: topbar-back 500ms 0s; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - animation-fill-mode: forwards; } - - .bar2 { - opacity: 1; } - - .bar3 { - bottom: 0px; - -webkit-animation: bottombar-back 500ms linear 0s; - -moz-animation: bottombar-back 500ms linear 0s; - animation: bottombar-back 500ms 0s; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - animation-fill-mode: forwards; } - - .toggled .bar1 { - top: 6px; - -webkit-animation: topbar-x 500ms linear 0s; - -moz-animation: topbar-x 500ms linear 0s; - animation: topbar-x 500ms 0s; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - animation-fill-mode: forwards; } - - .toggled .bar2 { - opacity: 0; } - - .toggled .bar3 { - bottom: 6px; - -webkit-animation: bottombar-x 500ms linear 0s; - -moz-animation: bottombar-x 500ms linear 0s; - animation: bottombar-x 500ms 0s; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - animation-fill-mode: forwards; } - - @keyframes topbar-x { - 0% { - top: 0px; - transform: rotate(0deg); } - 45% { - top: 6px; - transform: rotate(145deg); } - 75% { - transform: rotate(130deg); } - 100% { - transform: rotate(135deg); } } - @-webkit-keyframes topbar-x { - 0% { - top: 0px; - -webkit-transform: rotate(0deg); } - 45% { - top: 6px; - -webkit-transform: rotate(145deg); } - 75% { - -webkit-transform: rotate(130deg); } - 100% { - -webkit-transform: rotate(135deg); } } - @-moz-keyframes topbar-x { - 0% { - top: 0px; - -moz-transform: rotate(0deg); } - 45% { - top: 6px; - -moz-transform: rotate(145deg); } - 75% { - -moz-transform: rotate(130deg); } - 100% { - -moz-transform: rotate(135deg); } } - @keyframes topbar-back { - 0% { - top: 6px; - transform: rotate(135deg); } - 45% { - transform: rotate(-10deg); } - 75% { - transform: rotate(5deg); } - 100% { - top: 0px; - transform: rotate(0); } } - @-webkit-keyframes topbar-back { - 0% { - top: 6px; - -webkit-transform: rotate(135deg); } - 45% { - -webkit-transform: rotate(-10deg); } - 75% { - -webkit-transform: rotate(5deg); } - 100% { - top: 0px; - -webkit-transform: rotate(0); } } - @-moz-keyframes topbar-back { - 0% { - top: 6px; - -moz-transform: rotate(135deg); } - 45% { - -moz-transform: rotate(-10deg); } - 75% { - -moz-transform: rotate(5deg); } - 100% { - top: 0px; - -moz-transform: rotate(0); } } - @keyframes bottombar-x { - 0% { - bottom: 0px; - transform: rotate(0deg); } - 45% { - bottom: 6px; - transform: rotate(-145deg); } - 75% { - transform: rotate(-130deg); } - 100% { - transform: rotate(-135deg); } } - @-webkit-keyframes bottombar-x { - 0% { - bottom: 0px; - -webkit-transform: rotate(0deg); } - 45% { - bottom: 6px; - -webkit-transform: rotate(-145deg); } - 75% { - -webkit-transform: rotate(-130deg); } - 100% { - -webkit-transform: rotate(-135deg); } } - @-moz-keyframes bottombar-x { - 0% { - bottom: 0px; - -moz-transform: rotate(0deg); } - 45% { - bottom: 6px; - -moz-transform: rotate(-145deg); } - 75% { - -moz-transform: rotate(-130deg); } - 100% { - -moz-transform: rotate(-135deg); } } - @keyframes bottombar-back { - 0% { - bottom: 6px; - transform: rotate(-135deg); } - 45% { - transform: rotate(10deg); } - 75% { - transform: rotate(-5deg); } - 100% { - bottom: 0px; - transform: rotate(0); } } - @-webkit-keyframes bottombar-back { - 0% { - bottom: 6px; - -webkit-transform: rotate(-135deg); } - 45% { - -webkit-transform: rotate(10deg); } - 75% { - -webkit-transform: rotate(-5deg); } - 100% { - bottom: 0px; - -webkit-transform: rotate(0); } } - @-moz-keyframes bottombar-back { - 0% { - bottom: 6px; - -moz-transform: rotate(-135deg); } - 45% { - -moz-transform: rotate(10deg); } - 75% { - -moz-transform: rotate(-5deg); } - 100% { - bottom: 0px; - -moz-transform: rotate(0); } } - @-webkit-keyframes fadeIn { - 0% { - opacity: 0; } - 100% { - opacity: 1; } } - @-moz-keyframes fadeIn { - 0% { - opacity: 0; } - 100% { - opacity: 1; } } - @keyframes fadeIn { - 0% { - opacity: 0; } - 100% { - opacity: 1; } } - .dropdown-menu .divider { - background-color: rgba(229, 229, 229, 0.15); } - - .navbar-nav { - margin: 1px 0; } - .navbar-nav .open .dropdown-menu > li > a { - padding: 15px 15px 5px 50px; } - .navbar-nav .open .dropdown-menu > li:first-child > a { - padding: 5px 15px 5px 50px; } - .navbar-nav .open .dropdown-menu > li:last-child > a { - padding: 15px 15px 25px 50px; } - - [class*="navbar-"] .navbar-nav > li > a, - [class*="navbar-"] .navbar-nav > li > a:hover, - [class*="navbar-"] .navbar-nav > li > a:focus, - [class*="navbar-"] .navbar-nav .active > a, - [class*="navbar-"] .navbar-nav .active > a:hover, - [class*="navbar-"] .navbar-nav .active > a:focus, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:hover, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:focus, - [class*="navbar-"] .navbar-nav .navbar-nav .open .dropdown-menu > li > a:active { - color: white; } - [class*="navbar-"] .navbar-nav > li > a, - [class*="navbar-"] .navbar-nav > li > a:hover, - [class*="navbar-"] .navbar-nav > li > a:focus, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:hover, - [class*="navbar-"] .navbar-nav .open .dropdown-menu > li > a:focus { - opacity: .7; - background: transparent; } - [class*="navbar-"] .navbar-nav.navbar-nav .open .dropdown-menu > li > a:active { - opacity: 1; } - [class*="navbar-"] .navbar-nav .dropdown > a:hover .caret { - border-bottom-color: #777; - border-top-color: #777; } - [class*="navbar-"] .navbar-nav .dropdown > a:active .caret { - border-bottom-color: white; - border-top-color: white; } - - .dropdown-menu { - display: none; } - - .navbar-fixed-top { - -webkit-backface-visibility: hidden; } - - #bodyClick { - height: 100%; - width: 100%; - position: fixed; - opacity: 0; - top: 0; - left: auto; - right: 250px; - content: ""; - z-index: 9999; - overflow-x: hidden; } - - .social-line .btn { - margin: 0 0 10px 0; } - - .subscribe-line .form-control { - margin: 0 0 10px 0; } - - .social-line.pull-right { - float: none; } - - .footer nav.pull-left { - float: none !important; } - - .footer:not(.footer-big) nav > ul li { - float: none; } - - .social-area.pull-right { - float: none !important; } - - .form-control + .form-control-feedback { - margin-top: -8px; } - - .navbar-toggle:hover, .navbar-toggle:focus { - background-color: transparent !important; } - - .btn.dropdown-toggle { - margin-bottom: 0; } - - .media-post .author { - width: 20%; - float: none !important; - display: block; - margin: 0 auto 10px; } - - .media-post .media-body { - width: 100%; } - - .navbar-collapse.collapse { - height: 100% !important; } - - .navbar-collapse.collapse.in { - display: block; } - - .navbar-header .collapse, .navbar-toggle { - display: block !important; } - - .navbar-header { - float: none; } - - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; } - - .navbar-collapse .nav p { - font-size: 14px; - margin: 0; } - .navbar-collapse [class^="pe-7s-"] { - float: left; - font-size: 20px; - margin-right: 10px; } } -@media (min-width: 992px) { - .table-full-width { - margin-left: -15px; - margin-right: -15px; } - - .table-responsive { - overflow: visible; } } -@media (max-width: 991px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - -webkit-overflow-scrolling: touch; } } diff --git a/frontend/assets/css/font-awesome.min.css b/frontend/assets/css/font-awesome.min.css deleted file mode 100644 index ec53d4d6..00000000 --- a/frontend/assets/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/frontend/assets/css/fonts.css b/frontend/assets/css/fonts.css deleted file mode 100644 index dab771f7..00000000 --- a/frontend/assets/css/fonts.css +++ /dev/null @@ -1,18 +0,0 @@ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} diff --git a/frontend/assets/css/pe-icon-7-stroke.css b/frontend/assets/css/pe-icon-7-stroke.css deleted file mode 100755 index 44bcbaa6..00000000 --- a/frontend/assets/css/pe-icon-7-stroke.css +++ /dev/null @@ -1,632 +0,0 @@ -@font-face { - font-family: 'Pe-icon-7-stroke'; - src:url('../fonts/Pe-icon-7-stroke.eot?d7yf1v'); - src:url('../fonts/Pe-icon-7-stroke.eot?#iefixd7yf1v') format('embedded-opentype'), - url('../fonts/Pe-icon-7-stroke.woff?d7yf1v') format('woff'), - url('../fonts/Pe-icon-7-stroke.ttf?d7yf1v') format('truetype'), - url('../fonts/Pe-icon-7-stroke.svg?d7yf1v#Pe-icon-7-stroke') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class^="pe-7s-"], [class*=" pe-7s-"] { - display: inline-block; - font-family: 'Pe-icon-7-stroke'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.pe-7s-album:before { - content: "\e6aa"; -} -.pe-7s-arc:before { - content: "\e6ab"; -} -.pe-7s-back-2:before { - content: "\e6ac"; -} -.pe-7s-bandaid:before { - content: "\e6ad"; -} -.pe-7s-car:before { - content: "\e6ae"; -} -.pe-7s-diamond:before { - content: "\e6af"; -} -.pe-7s-door-lock:before { - content: "\e6b0"; -} -.pe-7s-eyedropper:before { - content: "\e6b1"; -} -.pe-7s-female:before { - content: "\e6b2"; -} -.pe-7s-gym:before { - content: "\e6b3"; -} -.pe-7s-hammer:before { - content: "\e6b4"; -} -.pe-7s-headphones:before { - content: "\e6b5"; -} -.pe-7s-helm:before { - content: "\e6b6"; -} -.pe-7s-hourglass:before { - content: "\e6b7"; -} -.pe-7s-leaf:before { - content: "\e6b8"; -} -.pe-7s-magic-wand:before { - content: "\e6b9"; -} -.pe-7s-male:before { - content: "\e6ba"; -} -.pe-7s-map-2:before { - content: "\e6bb"; -} -.pe-7s-next-2:before { - content: "\e6bc"; -} -.pe-7s-paint-bucket:before { - content: "\e6bd"; -} -.pe-7s-pendrive:before { - content: "\e6be"; -} -.pe-7s-photo:before { - content: "\e6bf"; -} -.pe-7s-piggy:before { - content: "\e6c0"; -} -.pe-7s-plugin:before { - content: "\e6c1"; -} -.pe-7s-refresh-2:before { - content: "\e6c2"; -} -.pe-7s-rocket:before { - content: "\e6c3"; -} -.pe-7s-settings:before { - content: "\e6c4"; -} -.pe-7s-shield:before { - content: "\e6c5"; -} -.pe-7s-smile:before { - content: "\e6c6"; -} -.pe-7s-usb:before { - content: "\e6c7"; -} -.pe-7s-vector:before { - content: "\e6c8"; -} -.pe-7s-wine:before { - content: "\e6c9"; -} -.pe-7s-cloud-upload:before { - content: "\e68a"; -} -.pe-7s-cash:before { - content: "\e68c"; -} -.pe-7s-close:before { - content: "\e680"; -} -.pe-7s-bluetooth:before { - content: "\e68d"; -} -.pe-7s-cloud-download:before { - content: "\e68b"; -} -.pe-7s-way:before { - content: "\e68e"; -} -.pe-7s-close-circle:before { - content: "\e681"; -} -.pe-7s-id:before { - content: "\e68f"; -} -.pe-7s-angle-up:before { - content: "\e682"; -} -.pe-7s-wristwatch:before { - content: "\e690"; -} -.pe-7s-angle-up-circle:before { - content: "\e683"; -} -.pe-7s-world:before { - content: "\e691"; -} -.pe-7s-angle-right:before { - content: "\e684"; -} -.pe-7s-volume:before { - content: "\e692"; -} -.pe-7s-angle-right-circle:before { - content: "\e685"; -} -.pe-7s-users:before { - content: "\e693"; -} -.pe-7s-angle-left:before { - content: "\e686"; -} -.pe-7s-user-female:before { - content: "\e694"; -} -.pe-7s-angle-left-circle:before { - content: "\e687"; -} -.pe-7s-up-arrow:before { - content: "\e695"; -} -.pe-7s-angle-down:before { - content: "\e688"; -} -.pe-7s-switch:before { - content: "\e696"; -} -.pe-7s-angle-down-circle:before { - content: "\e689"; -} -.pe-7s-scissors:before { - content: "\e697"; -} -.pe-7s-wallet:before { - content: "\e600"; -} -.pe-7s-safe:before { - content: "\e698"; -} -.pe-7s-volume2:before { - content: "\e601"; -} -.pe-7s-volume1:before { - content: "\e602"; -} -.pe-7s-voicemail:before { - content: "\e603"; -} -.pe-7s-video:before { - content: "\e604"; -} -.pe-7s-user:before { - content: "\e605"; -} -.pe-7s-upload:before { - content: "\e606"; -} -.pe-7s-unlock:before { - content: "\e607"; -} -.pe-7s-umbrella:before { - content: "\e608"; -} -.pe-7s-trash:before { - content: "\e609"; -} -.pe-7s-tools:before { - content: "\e60a"; -} -.pe-7s-timer:before { - content: "\e60b"; -} -.pe-7s-ticket:before { - content: "\e60c"; -} -.pe-7s-target:before { - content: "\e60d"; -} -.pe-7s-sun:before { - content: "\e60e"; -} -.pe-7s-study:before { - content: "\e60f"; -} -.pe-7s-stopwatch:before { - content: "\e610"; -} -.pe-7s-star:before { - content: "\e611"; -} -.pe-7s-speaker:before { - content: "\e612"; -} -.pe-7s-signal:before { - content: "\e613"; -} -.pe-7s-shuffle:before { - content: "\e614"; -} -.pe-7s-shopbag:before { - content: "\e615"; -} -.pe-7s-share:before { - content: "\e616"; -} -.pe-7s-server:before { - content: "\e617"; -} -.pe-7s-search:before { - content: "\e618"; -} -.pe-7s-film:before { - content: "\e6a5"; -} -.pe-7s-science:before { - content: "\e619"; -} -.pe-7s-disk:before { - content: "\e6a6"; -} -.pe-7s-ribbon:before { - content: "\e61a"; -} -.pe-7s-repeat:before { - content: "\e61b"; -} -.pe-7s-refresh:before { - content: "\e61c"; -} -.pe-7s-add-user:before { - content: "\e6a9"; -} -.pe-7s-refresh-cloud:before { - content: "\e61d"; -} -.pe-7s-paperclip:before { - content: "\e69c"; -} -.pe-7s-radio:before { - content: "\e61e"; -} -.pe-7s-note2:before { - content: "\e69d"; -} -.pe-7s-print:before { - content: "\e61f"; -} -.pe-7s-network:before { - content: "\e69e"; -} -.pe-7s-prev:before { - content: "\e620"; -} -.pe-7s-mute:before { - content: "\e69f"; -} -.pe-7s-power:before { - content: "\e621"; -} -.pe-7s-medal:before { - content: "\e6a0"; -} -.pe-7s-portfolio:before { - content: "\e622"; -} -.pe-7s-like2:before { - content: "\e6a1"; -} -.pe-7s-plus:before { - content: "\e623"; -} -.pe-7s-left-arrow:before { - content: "\e6a2"; -} -.pe-7s-play:before { - content: "\e624"; -} -.pe-7s-key:before { - content: "\e6a3"; -} -.pe-7s-plane:before { - content: "\e625"; -} -.pe-7s-joy:before { - content: "\e6a4"; -} -.pe-7s-photo-gallery:before { - content: "\e626"; -} -.pe-7s-pin:before { - content: "\e69b"; -} -.pe-7s-phone:before { - content: "\e627"; -} -.pe-7s-plug:before { - content: "\e69a"; -} -.pe-7s-pen:before { - content: "\e628"; -} -.pe-7s-right-arrow:before { - content: "\e699"; -} -.pe-7s-paper-plane:before { - content: "\e629"; -} -.pe-7s-delete-user:before { - content: "\e6a7"; -} -.pe-7s-paint:before { - content: "\e62a"; -} -.pe-7s-bottom-arrow:before { - content: "\e6a8"; -} -.pe-7s-notebook:before { - content: "\e62b"; -} -.pe-7s-note:before { - content: "\e62c"; -} -.pe-7s-next:before { - content: "\e62d"; -} -.pe-7s-news-paper:before { - content: "\e62e"; -} -.pe-7s-musiclist:before { - content: "\e62f"; -} -.pe-7s-music:before { - content: "\e630"; -} -.pe-7s-mouse:before { - content: "\e631"; -} -.pe-7s-more:before { - content: "\e632"; -} -.pe-7s-moon:before { - content: "\e633"; -} -.pe-7s-monitor:before { - content: "\e634"; -} -.pe-7s-micro:before { - content: "\e635"; -} -.pe-7s-menu:before { - content: "\e636"; -} -.pe-7s-map:before { - content: "\e637"; -} -.pe-7s-map-marker:before { - content: "\e638"; -} -.pe-7s-mail:before { - content: "\e639"; -} -.pe-7s-mail-open:before { - content: "\e63a"; -} -.pe-7s-mail-open-file:before { - content: "\e63b"; -} -.pe-7s-magnet:before { - content: "\e63c"; -} -.pe-7s-loop:before { - content: "\e63d"; -} -.pe-7s-look:before { - content: "\e63e"; -} -.pe-7s-lock:before { - content: "\e63f"; -} -.pe-7s-lintern:before { - content: "\e640"; -} -.pe-7s-link:before { - content: "\e641"; -} -.pe-7s-like:before { - content: "\e642"; -} -.pe-7s-light:before { - content: "\e643"; -} -.pe-7s-less:before { - content: "\e644"; -} -.pe-7s-keypad:before { - content: "\e645"; -} -.pe-7s-junk:before { - content: "\e646"; -} -.pe-7s-info:before { - content: "\e647"; -} -.pe-7s-home:before { - content: "\e648"; -} -.pe-7s-help2:before { - content: "\e649"; -} -.pe-7s-help1:before { - content: "\e64a"; -} -.pe-7s-graph3:before { - content: "\e64b"; -} -.pe-7s-graph2:before { - content: "\e64c"; -} -.pe-7s-graph1:before { - content: "\e64d"; -} -.pe-7s-graph:before { - content: "\e64e"; -} -.pe-7s-global:before { - content: "\e64f"; -} -.pe-7s-gleam:before { - content: "\e650"; -} -.pe-7s-glasses:before { - content: "\e651"; -} -.pe-7s-gift:before { - content: "\e652"; -} -.pe-7s-folder:before { - content: "\e653"; -} -.pe-7s-flag:before { - content: "\e654"; -} -.pe-7s-filter:before { - content: "\e655"; -} -.pe-7s-file:before { - content: "\e656"; -} -.pe-7s-expand1:before { - content: "\e657"; -} -.pe-7s-exapnd2:before { - content: "\e658"; -} -.pe-7s-edit:before { - content: "\e659"; -} -.pe-7s-drop:before { - content: "\e65a"; -} -.pe-7s-drawer:before { - content: "\e65b"; -} -.pe-7s-download:before { - content: "\e65c"; -} -.pe-7s-display2:before { - content: "\e65d"; -} -.pe-7s-display1:before { - content: "\e65e"; -} -.pe-7s-diskette:before { - content: "\e65f"; -} -.pe-7s-date:before { - content: "\e660"; -} -.pe-7s-cup:before { - content: "\e661"; -} -.pe-7s-culture:before { - content: "\e662"; -} -.pe-7s-crop:before { - content: "\e663"; -} -.pe-7s-credit:before { - content: "\e664"; -} -.pe-7s-copy-file:before { - content: "\e665"; -} -.pe-7s-config:before { - content: "\e666"; -} -.pe-7s-compass:before { - content: "\e667"; -} -.pe-7s-comment:before { - content: "\e668"; -} -.pe-7s-coffee:before { - content: "\e669"; -} -.pe-7s-cloud:before { - content: "\e66a"; -} -.pe-7s-clock:before { - content: "\e66b"; -} -.pe-7s-check:before { - content: "\e66c"; -} -.pe-7s-chat:before { - content: "\e66d"; -} -.pe-7s-cart:before { - content: "\e66e"; -} -.pe-7s-camera:before { - content: "\e66f"; -} -.pe-7s-call:before { - content: "\e670"; -} -.pe-7s-calculator:before { - content: "\e671"; -} -.pe-7s-browser:before { - content: "\e672"; -} -.pe-7s-box2:before { - content: "\e673"; -} -.pe-7s-box1:before { - content: "\e674"; -} -.pe-7s-bookmarks:before { - content: "\e675"; -} -.pe-7s-bicycle:before { - content: "\e676"; -} -.pe-7s-bell:before { - content: "\e677"; -} -.pe-7s-battery:before { - content: "\e678"; -} -.pe-7s-ball:before { - content: "\e679"; -} -.pe-7s-back:before { - content: "\e67a"; -} -.pe-7s-attention:before { - content: "\e67b"; -} -.pe-7s-anchor:before { - content: "\e67c"; -} -.pe-7s-albums:before { - content: "\e67d"; -} -.pe-7s-alarm:before { - content: "\e67e"; -} -.pe-7s-airplay:before { - content: "\e67f"; -} diff --git a/frontend/assets/fonts/Pe-icon-7-stroke.eot b/frontend/assets/fonts/Pe-icon-7-stroke.eot deleted file mode 100755 index 6f7b5848..00000000 Binary files a/frontend/assets/fonts/Pe-icon-7-stroke.eot and /dev/null differ diff --git a/frontend/assets/fonts/Pe-icon-7-stroke.svg b/frontend/assets/fonts/Pe-icon-7-stroke.svg deleted file mode 100755 index 13d9709a..00000000 --- a/frontend/assets/fonts/Pe-icon-7-stroke.svg +++ /dev/null @@ -1,212 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/frontend/assets/fonts/Pe-icon-7-stroke.ttf b/frontend/assets/fonts/Pe-icon-7-stroke.ttf deleted file mode 100755 index bc8a269c..00000000 Binary files a/frontend/assets/fonts/Pe-icon-7-stroke.ttf and /dev/null differ diff --git a/frontend/assets/fonts/Pe-icon-7-stroke.woff b/frontend/assets/fonts/Pe-icon-7-stroke.woff deleted file mode 100755 index c205e6fd..00000000 Binary files a/frontend/assets/fonts/Pe-icon-7-stroke.woff and /dev/null differ diff --git a/frontend/assets/img/mask.png b/frontend/assets/img/mask.png deleted file mode 100755 index 429360d5..00000000 Binary files a/frontend/assets/img/mask.png and /dev/null differ diff --git a/frontend/assets/img/nomad.jpg b/frontend/assets/img/nomad.jpg deleted file mode 100644 index 79ead7f1..00000000 Binary files a/frontend/assets/img/nomad.jpg and /dev/null differ diff --git a/frontend/assets/nomad-ui.css b/frontend/assets/nomad-ui.css new file mode 100644 index 00000000..8d467892 --- /dev/null +++ b/frontend/assets/nomad-ui.css @@ -0,0 +1,79 @@ +html { + font-family: 'Roboto', sans-serif; + -webkit-font-smoothing: antialiased; +} + +body { + font-size: 15px; + line-height: 24px; + margin: 0; + padding: 0; + background: #f3f3f3 +} + +body, h1, h2, h3, h4, h5, h6 { + margin: 0; +} + +a { + text-decoration: none; + color: #449b82; +} + +a:hover { + text-decoration: underline; +} + +dl { + margin-top: 0; + margin-bottom: 20px; +} + +dt { + float: left; + width: 200px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 500 +} + +dt:after { + content: " : "; +} + +dd { + margin-left: 220px; +} + +.content-file { + height: 650px; + overflow: auto; + clear: both; + white-space: pre; + background: #f5f5f5; +} + +code { + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; + padding: 2px 4px; + font-size: 90%; +} + +th { + text-align: left +} + +.nomad-table-responsive { + border: 0; + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + -webkit-overflow-scrolling: touch; +} diff --git a/frontend/assets/sass/nomad-ui.scss b/frontend/assets/sass/nomad-ui.scss deleted file mode 100755 index 8c7fff96..00000000 --- a/frontend/assets/sass/nomad-ui.scss +++ /dev/null @@ -1,185 +0,0 @@ -// variables and mixins -@import "nomad-ui/variables"; -@import "nomad-ui/mixins"; - -//plugins css -// @import "nomad-ui/plugins/animate"; -// @import "nomad-ui/plugins/sweetalert2"; - -// @import "nomad-ui/plugins/jquery.jvectormap"; -// @import "nomad-ui/plugins/bootstrap-table"; -// @import "nomad-ui/plugins/datatables.net"; -// @import "nomad-ui/plugins/fullcalendar"; -// @import "nomad-ui/plugins/chartist"; -// @import "nomad-ui/plugins/perfect-scrollbar"; -// @import "nomad-ui/plugins/bootstrap-select"; - -// Core CSS -@import "nomad-ui/typography"; -@import "nomad-ui/sidebar-and-main-panel"; -@import "nomad-ui/buttons"; -@import "nomad-ui/misc"; -@import "nomad-ui/inputs"; -// @import "nomad-ui/progress-bars"; -// @import "nomad-ui/sliders"; -@import "nomad-ui/forms"; -// @import "nomad-ui/alerts"; -@import "nomad-ui/tables"; -// @import "nomad-ui/tags"; -// @import "nomad-ui/tooltips-and-popovers"; -// @import "nomad-ui/checkbox-radio-switch"; -@import "nomad-ui/navbars"; -// @import "nomad-ui/footers"; - -// Fancy Stuff -// @import "nomad-ui/social-buttons"; -@import "nomad-ui/dropdown"; -@import "nomad-ui/cards"; -@import "nomad-ui/collapse"; -// @import "nomad-ui/carousel"; -// SCSS for Pages -// @import "nomad-ui/pages.scss"; - -// Responsive adjustments -@import "nomad-ui/responsive"; -@import "nomad-ui/tabs-navs-pagination"; - -.wrapper{ - position: relative; - top: 0; - height: 100vh; - - &:after{ - display: table; - clear: both; - content: " "; - } - - &.wrapper-full-page{ - height: auto; - min-height: 100vh; - } -} - -.pointer { - cursor: pointer; -} - -dl { - margin-bottom: 0; -} - -.dotted { - border-bottom: 1px dashed #999; - text-decoration: none; -} - -.no-border { - border: none -} - -.btn.no-border { - padding: 0 -} - -.dropdown-menu:before { - content: initial; -} - -.dropdown-menu:after { - content: initial; -} - -.header .btn-group { - padding-top: 15px; -} - -.inline-pad { - padding-bottom: 15px; - padding-left: 15px; -} - -.content > .inline-pad { - padding-left: 0; -} - -.statistics-big { - font-size: 150% -} - -.expand-left-menu { - top: 5px; - right: 5px; - position: absolute -} - -.sidebar .sidebar-background { - background-size: initial; - background-position: initial; -} - -.file-content-hr { - margin-bottom: 0px; - margin-top: 15px; -} - -.btn-download { - float: right; - line-height: 1em; -} - -form.file-download { - float: right; - line-height: 0; - margin-bottom: 0.5em; -} - -i.pe-7s-attention { - margin-right: 15px; - line-height: 1.5; -} - -span.file-size-warning { - line-height: 2; -} - -.tab-pane { - // padding-top: 0; -} - -.tab-column { - margin-bottom: 15px; -} - -.tab-content { - legend { - padding-left: 15px; - } - - padding: 15px; - padding-left: 0; - padding-top: 0; -} - -.nested-content { - .table-full-width { - margin-left: 0; - margin-right: -30px - } - - legend, - .panel-group { - padding-left: 15px - } -} - -.center { - text-align: center -} - -.content-file { - font-family: monospace; - font-size: 90%; - unicode-bidi: embed; - white-space: pre; -} diff --git a/frontend/assets/sass/nomad-ui/_alerts.scss b/frontend/assets/sass/nomad-ui/_alerts.scss deleted file mode 100644 index 3fbc267d..00000000 --- a/frontend/assets/sass/nomad-ui/_alerts.scss +++ /dev/null @@ -1,82 +0,0 @@ -.alert{ - border: 0; - border-radius: 0; - color: #FFFFFF; - padding: 10px 15px; - font-size: 14px; - - .container &{ - border-radius: 4px; - - } - .navbar &{ - border-radius: 0; - left: 0; - position: absolute; - right: 0; - top: 85px; - width: 100%; - z-index: 3; - } - .navbar:not(.navbar-transparent) &{ - top: 70px; - } - - span[data-notify="icon"]{ - font-size: 30px; - display: block; - left: 15px; - position: absolute; - top: 50%; - margin-top: -15px; - } - - button.close{ - position: absolute; - right: 10px; - top: 50%; - margin-top: -13px; - z-index: 1033; - background-color: #FFFFFF; - display: block; - border-radius: 50%; - opacity: .4; - line-height: 11px; - width: 25px; - height: 25px; - outline: 0 !important; - text-align: center; - padding: 3px; - font-weight: 300; - - &:hover{ - opacity: .55; - } - } - - .close ~ span{ - display: block; - max-width: 89%; - } - - &[data-notify="container"]{ - padding: 10px 10px 10px 20px; - border-radius: $border-radius-base; - } - - &.alert-with-icon{ - padding-left: 65px; - } -} -.alert-info{ - background-color: $azure-navbar; -} -.alert-success { - background-color: $green-navbar; -} -.alert-warning { - background-color: $orange-navbar; -} -.alert-danger { - background-color: $red-navbar; -} diff --git a/frontend/assets/sass/nomad-ui/_buttons.scss b/frontend/assets/sass/nomad-ui/_buttons.scss deleted file mode 100755 index d14f110a..00000000 --- a/frontend/assets/sass/nomad-ui/_buttons.scss +++ /dev/null @@ -1,123 +0,0 @@ -.btn{ - border-width: $border-thin; - background-color: $transparent-bg; - font-weight: $font-weight-normal; - - @include opacity(.8); - padding: $padding-base-vertical $padding-base-horizontal; - - @include btn-styles($default-color, $default-states-color); - - &:hover, - &:focus{ - @include opacity(1); - outline: 0 !important; - } - &:active, - &.active, - .open > &.dropdown-toggle { - @include box-shadow(none); - outline: 0 !important; - } - - &.btn-icon{ - padding: $padding-base-vertical; - } - - .btn-label{ - .fa{ - width: 13px; - } - } - - .fa{ - width: 20px; - } -} - -// Apply the mixin to the buttons -//.btn-default { @include btn-styles($default-color, $default-states-color); } -.btn-primary { @include btn-styles($primary-color, $primary-states-color); } -.btn-success { @include btn-styles($success-color, $success-states-color); } -.btn-info { @include btn-styles($info-color, $info-states-color); } -.btn-warning { @include btn-styles($warning-color, $warning-states-color); } -.btn-danger { @include btn-styles($danger-color, $danger-states-color); } - -.btn-neutral { - @include btn-styles($white-color, $white-color); - - &:active, - &.active, - .open > &.dropdown-toggle{ - background-color: $white-color; - color: $default-color; - } - - &.btn-fill, - &.btn-fill:hover, - &.btn-fill:focus{ - color: $default-color; - } - - &.btn-fill:hover, - &.btn-fill:focus{ - @include opacity(.86); - } - - &.btn-simple:active, - &.btn-simple.active{ - background-color: transparent; - } -} - -.btn{ - &:disabled, - &[disabled], - &.disabled{ - @include opacity(.5); - } -} -.btn-round{ - border-width: $border-thin; - border-radius: $btn-round-radius !important; - padding: $padding-round-vertical $padding-round-horizontal; - - &.btn-icon{ - padding: $padding-round-vertical; - } -} -.btn-simple{ - border: $none; - font-size: $font-size-medium; - padding: $padding-base-vertical $padding-base-horizontal; - - &.btn-icon{ - padding: $padding-base-vertical; - } -} -.btn-lg{ - @include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large); - font-weight: $font-weight-normal; -} -.btn-sm{ - @include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small); -} -.btn-xs { - @include btn-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $border-radius-small); -} -.btn-wd { - min-width: 140px; -} - -.btn-group.select{ - width: 100%; -} -.btn-group.select .btn{ - text-align: left; -} -.btn-group.select .caret{ - position: absolute; - top: 50%; - margin-top: -1px; - right: 8px; -} diff --git a/frontend/assets/sass/nomad-ui/_cards.scss b/frontend/assets/sass/nomad-ui/_cards.scss deleted file mode 100644 index a2d877c9..00000000 --- a/frontend/assets/sass/nomad-ui/_cards.scss +++ /dev/null @@ -1,322 +0,0 @@ -.card{ - border-radius: $border-radius-base; - box-shadow: 0 1px 2px rgba(0,0,0,.05),0 0 0 1px rgba(63,63,68,.1); - background-color: #FFFFFF; - margin-bottom: 30px; - -/* - background-image: url('https://images.unsplash.com/photo-1438978280647-f359d95ebda4?q=80&fm=jpg&s=73cb1239b517411534379c92660b2660'); - background-size: cover; - z-index: 1; - - &:before{ - position: absolute; - width: 94%; - left: 3%; - height: 95%; - z-index: 0; - background-color: red; - display: block; - border-radius: 6px; - content: ""; - box-shadow: 0 3px 40px rgba(0, 0, 0, 0.2); - top: 24px; - } -*/ - - .image{ - width: 100%; - overflow: hidden; - height: 260px; - border-radius: $border-radius-base $border-radius-base 0 0; - position: relative; - -webkit-transform-style: preserve-3d; - -moz-transform-style: preserve-3d; - transform-style: preserve-3d; - - img { - width: 100%; - } - } - .filter{ - position: absolute; - z-index: 2; - background-color: rgba(0,0,0,.68); - top: 0; - left: 0; - width: 100%; - height: 100%; - text-align: center; - - @include opacity(0); - - .btn{ - @include vertical-align(); - } - } - &:hover .filter{ - @include opacity(1); - } - .btn-hover{ - @include opacity(0); - } - &:hover .btn-hover{ - @include opacity(1); - } - .map { - height: 280px; - border-radius: $border-radius-base; - - &.map-big{ - height: 420px; - } - } - .content{ - padding: $padding-default-horizontal; - } - .content-file{ - height: 750px; - overflow: auto; - clear: both; - white-space: pre; - background: #f5f5f5; - } - .content-no-padding{ - padding: 0; - - .map{ - margin-top: $padding-default-horizontal; - border-radius: 0; - } - } - .content-full-width{ - padding: $padding-default-horizontal 0; - } - - .header{ - padding: $padding-default-horizontal $padding-default-horizontal 0px; - color: $black-color; - font-weight: $font-weight-light; - font-size: $font-size-h4; - - - } - .category, - .form-group > label{ - font-size: $font-size-base; - font-weight: $font-weight-normal; - color: $default-color; - margin-bottom: 0px; - - &.error{ - text-transform: none; - color: $danger-color; - } - i{ - font-size: $font-paragraph; - } - } - - .form-group > label{ - font-size: $font-size-small; - margin-bottom: 5px; - text-transform: uppercase; - } - - .title{ - margin: $none; - color: $black-color; - font-weight: $font-weight-light; - } - .avatar{ - width: 30px; - height: 30px; - overflow: hidden; - border-radius: 50%; - margin-right: 5px; - } - .description{ - font-size: $font-size-base; - color: #333; - } - .footer{ - padding: 0 $padding-default-horizontal $padding-default-vertical; - background-color: $transparent-bg; - line-height: 30px; - - .form-group label{ - margin-bottom: 0; - } - - .legend{ - padding: 5px 0; - } - - hr{ - margin-top: 5px; - margin-bottom: 5px; - } - } - .stats{ - color: #a9a9a9; - } -/* - .footer div{ - display: inline-block; - } -*/ - - .author{ - font-size: $font-size-small; - font-weight: $font-weight-bold; - text-transform: uppercase; - } - .author i{ - font-size: $font-size-base; - } - h6{ - font-size: $font-size-small; - margin: 0; - } - &.card-separator:after{ - height: 100%; - right: -15px; - top: 0; - width: 1px; - background-color: $medium-gray; - content: ""; - position: absolute; - } - - .ct-chart{ - margin: 30px 0 30px; - height: 245px; - } - - - //custom properties for tables that are inside cards - .table{ - margin-bottom: 0; - - tbody .bs-checkbox input, - thead .bs-checkbox .th-inner{ - padding-left: 15px; - } - - tbody td:last-child, - thead th:last-child{ - padding-right: 15px; - } - - tbody td.bs-checkbox:first-child{ - padding-left: 23px !important; - } - } - - .alert{ - border-radius: $border-radius-base; - position: relative; - - &.alert-with-icon{ - padding-left: 65px; - } - } - - &.card-plain{ - background-color: transparent !important; - box-shadow: none !important; - border-radius: 0 !important; - - .image{ - border-radius: 4px; - } - } -} -.card-user{ - .image{ - height: 110px; - } - .image-plain{ - height: 0; - margin-top: 110px; - } - .author{ - text-align: center; - text-transform: none; - margin-top: -70px; - } - .avatar{ - width: 124px; - height: 124px; - border: 5px solid #FFFFFF; - position: relative; - margin-bottom: 15px; - - &.border-gray{ - border-color: #EEEEEE; - } - } - .title{ - line-height: 24px; - } - .content{ - min-height: 240px; - } -} - -.card-user, -.card-price{ - .footer{ - padding: 5px 15px 10px; - } - hr{ - margin: 5px 15px; - } -} - - -.card-wizard{ - border-radius: $border-radius-extreme; - - .nav-pills{ - margin-left: -$padding-default-horizontal; - margin-right: -$padding-default-horizontal; - margin-top: 10px; - margin-bottom: 10px; - - > li{ - - > a{ - text-align: center; - border: none; - background-color: $dark-gray; - color: $white-color; - text-transform: uppercase; - - &:hover, - &:focus{ - background-color: $dark-gray; - outline: 0 !important; - } - } - - &:first-child > a, - &:last-child > a{ - border-radius: 0; - } - } - } - - .btn-finish{ - display: none; - } - - .header{ - padding-top: ($padding-default-vertical + 15); - padding-bottom: ($padding-default-vertical); - } - - .footer{ - padding-bottom: ($padding-default-vertical + 5); - } -} diff --git a/frontend/assets/sass/nomad-ui/_carousel.scss b/frontend/assets/sass/nomad-ui/_carousel.scss deleted file mode 100644 index 5518df88..00000000 --- a/frontend/assets/sass/nomad-ui/_carousel.scss +++ /dev/null @@ -1,15 +0,0 @@ -.carousel-control{ - width: 8%; -} -.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .fa, .carousel-control .fa { - display: inline-block; - position: absolute; - top: 50%; - z-index: 5; -} -.carousel-control .fa{ - font-size: 35px; -} -.carousel-control.left, .carousel-control.right { - background-image: none; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/_checkbox-radio-switch.scss b/frontend/assets/sass/nomad-ui/_checkbox-radio-switch.scss deleted file mode 100644 index 31ec6018..00000000 --- a/frontend/assets/sass/nomad-ui/_checkbox-radio-switch.scss +++ /dev/null @@ -1,253 +0,0 @@ -/* Checkbox and radio */ -.checkbox, -.radio { - margin-bottom: 12px; - padding-left: 24px; - position: relative; - -webkit-transition: color 0.25s linear; - transition: color 0.25s linear; - font-size: 14px; - font-weight: normal; - line-height: 1.5; - color: #333333; -} -.checkbox input, -.radio input { - outline: none !important; - opacity: 0; - margin-left: -9999px; - position: absolute; -} -.checkbox .icons, -.radio .icons { - color: $medium-gray; - display: block; - height: 20px; - left: 0; - position: absolute; - top: 0; - width: 20px; - text-align: center; - line-height: 21px; - font-size: 20px; - cursor: pointer; - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; -} - - -.checkbox .icons .first-icon, -.radio .icons .first-icon, -.checkbox .icons .second-icon, -.radio .icons .second-icon { - display: inline-table; - position: absolute; - left: 0; - top: 0; - background-color: transparent; - margin: 0; - @include opacity(1); -} -.checkbox .icons .second-icon, -.radio .icons .second-icon { - @include opacity(0); -} -.checkbox:hover, -.radio:hover { - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; -} -.checkbox:hover .first-icon, -.radio:hover .first-icon { - @include opacity(0); -} -.checkbox:hover .second-icon, -.radio:hover .second-icon { - @include opacity (1); -} -.checkbox.checked .icons, -.radio.checked .icons{ - color: $info-color; -} -.checkbox.checked .first-icon, -.radio.checked .first-icon { - opacity: 0; - filter: alpha(opacity=0); -} -.checkbox.checked .second-icon, -.radio.checked .second-icon { - opacity: 1; - filter: alpha(opacity=100); - color: $info-color; - -webkit-transition: color 0.2s linear; - transition: color 0.2s linear; -} -.checkbox.disabled, -.radio.disabled { - cursor: default; - color: $medium-gray !important; -} -.checkbox.disabled .icons, -.radio.disabled .icons { - color: $medium-gray !important; -} -.checkbox.disabled .first-icon, -.radio.disabled .first-icon { - opacity: 1; - filter: alpha(opacity=100); -} -.checkbox.disabled .second-icon, -.radio.disabled .second-icon { - opacity: 0; - filter: alpha(opacity=0); -} -.checkbox.disabled.checked .icons, -.radio.disabled.checked .icons { - color: $medium-gray; -} -.checkbox.disabled.checked .first-icon, -.radio.disabled.checked .first-icon { - opacity: 0; - filter: alpha(opacity=0); -} -.checkbox.disabled.checked .second-icon, -.radio.disabled.checked .second-icon { - opacity: 1; - filter: alpha(opacity=100); - color: #D9D9D9; -} - -.checkbox label.error, -.radio label.error{ - position: absolute; - top: 15px; - left: 5px; -} - - -/* ============================================================ - * bootstrapSwitch v1.3 by Larentis Mattia @spiritualGuru - * http://www.larentis.eu/switch/ - * ============================================================ - * Licensed under the Apache License, Version 2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * ============================================================ */ -.has-switch { - border-radius: 30px; - cursor: pointer; - display: inline-block; - line-height: 1.72222; - overflow: hidden; - position: relative; - text-align: left; - width: 60px; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; - - /* this code is for fixing safari bug with hidden overflow for border-radius */ - -webkit-mask: url('../img/mask.png') 0 0 no-repeat; - -webkit-mask-size: 60px 28px; - mask: url('../img/mask.png') 0 0 no-repeat; -} -.has-switch.deactivate { - opacity: 0.5; - filter: alpha(opacity=50); - cursor: default !important; -} -.has-switch.deactivate label, -.has-switch.deactivate span { - cursor: default !important; -} -.has-switch > div { - position: relative; - top: 0; - width: 100px; -} -.has-switch > div.switch-animate { - -webkit-transition: left 0.25s ease-out; - transition: left 0.25s ease-out; -} -.has-switch > div.switch-off { - left: -32px; -} - -.has-switch > div.switch-on { - left: 0; -} -.has-switch > div label { - background-color: #FFFFFF; - @include line-gradient (rgba(255,255,255,1), rgba(241,241,242,1)); - - box-shadow: 0 1px 1px #FFFFFF inset, 0 1px 1px rgba(0, 0, 0, 0.25); - cursor: pointer; -} -.has-switch input[type=checkbox] { - display: none; -} -.has-switch span { -/* box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; */ - cursor: pointer; - float: left; - font-size: 11px; - font-weight: 400; - height: 28px; - line-height: 15px; - margin: 0; - padding-bottom: 6px; - padding-top: 7px; - position: relative; - text-align: center; - text-indent: -10px; - width: 50%; - z-index: 1; - -webkit-transition: 0.25s ease-out; - transition: 0.25s ease-out; -} -.has-switch span.switch-left { - background-color: $info-color; - border-left: 1px solid rgba(0, 0, 0, 0); - border-radius: 30px 0 0 30px; - color: #FFFFFF; -} -.has-switch .switch-off span.switch-left{ - background-color: $medium-gray; -} -.has-switch span.switch-right { - border-radius: 0 30px 30px 0; - background-color: $info-color; - color: #ffffff; - text-indent: -3px; -} -.has-switch .switch-off span.switch-right{ - background-color: $medium-gray; -} - -.has-switch label { - border-radius: 12px; - float: left; - height: 22px; - margin: 3px -15px; - padding: 0; - position: relative; - transition: all 0.25s ease-out 0s; - vertical-align: middle; - width: 22px; - z-index: 100; - -webkit-transition: 0.25s ease-out; - transition: 0.25s ease-out; -} -.has-switch .switch-on .fa-check:before{ - margin-left: 10px; -} -.has-switch:hover .switch-on label{ - margin: 3px -19px; - width: 26px; -} -.has-switch:hover .switch-off label{ - margin: 3px -15px; - width: 26px; -} diff --git a/frontend/assets/sass/nomad-ui/_collapse.scss b/frontend/assets/sass/nomad-ui/_collapse.scss deleted file mode 100644 index 8449bda4..00000000 --- a/frontend/assets/sass/nomad-ui/_collapse.scss +++ /dev/null @@ -1,49 +0,0 @@ -.panel { - border: 0; - border-bottom: 1px solid $medium-gray; - box-shadow: none; -} -.panel-default > .panel-heading { - background-color: $white-color; - border-color: $white-color; -} -.panel-group .panel{ - border-radius: 0; -} -.panel-title{ - font-size: $font-size-h5; -} -.panel-title a:hover, .panel-title a:focus{ - text-decoration: none; -} -.collapse-hover{ - display: block; - height: 0px; - visibility: visible; - overflow: hidden; -} -.panel-title a:hover, .panel-title a:focus{ - color: $default-states-color; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - box-shadow: inset 0 7px 10px -7px rgba(0,0,0,0.14); -} -.panel-heading{ - padding: 0; - - .caret{ - float: right; - margin-top: 12px; - margin-right: $padding-default-horizontal; - } - - a{ - padding: $padding-default-vertical 0; - display: block; - width: 100%; - - .content-full-width &{ - padding: $padding-default-vertical $padding-default-horizontal; - } - } -} diff --git a/frontend/assets/sass/nomad-ui/_dropdown.scss b/frontend/assets/sass/nomad-ui/_dropdown.scss deleted file mode 100644 index 17b0bf7d..00000000 --- a/frontend/assets/sass/nomad-ui/_dropdown.scss +++ /dev/null @@ -1,176 +0,0 @@ -.dropdown-menu{ - margin: 0; - padding: 0; - border-radius: $border-radius-extreme; - z-index: 9000; - @include box-shadow($dropdown-shadow); - - > li > a { - padding: $padding-base-vertical $padding-base-horizontal; - color: #333333; - - img{ - margin-top: -3px; - } - } - > li > a:focus{ - outline: 0 !important; - } - - .btn-group.select &{ - min-width: 100%; - } - - > li:first-child > a{ - margin-top: 5px; - border-top-left-radius: $border-radius-small; - border-top-right-radius: $border-radius-small; - } - - > li:last-child > a{ - margin-bottom: 5px; - border-bottom-left-radius: $border-radius-small; - border-bottom-right-radius: $border-radius-small; - } - - .select & > li:first-child > a{ - border-radius: 0; - border-bottom: 0 none; - } - - > li > a:hover, - > li > a:focus, - > li.selected > a{ - background-color: $smoke-bg; - color: #333333; - opacity: 1; - text-decoration: none; - } - - > .active > a, - > .active > a:focus, - > .active > a:hover,{ - background-color: $light-blue; - color: #333333; - } - - &:before{ - border-bottom: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -11px; - } - &:after { - border-bottom: 11px solid #FFFFFF; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -10px; - } - - .pull-right &:before{ - left: auto; - right: 12px; - } - .pull-right &:after{ - left: auto; - right: 12px; - } - - .dropup &:before{ - border-bottom: none; - border-top: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: auto; - bottom: -11px; - } - .dropup &:after { - border-bottom: none; - border-top: 11px solid #FFFFFF; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: auto; - bottom: -10px; - } - - &.dropdown-blue > li > a:hover, - &.dropdown-blue > li > a:focus, - &.dropdown-blue > li.selected > a{ - background-color: $light-blue; - } - &.dropdown-azure > li > a:hover, - &.dropdown-azure > li > a:focus, - &.dropdown-azure > li.selected > a{ - background-color: $light-azure; - } - &.dropdown-green > li > a:hover, - &.dropdown-green > li > a:focus, - &.dropdown-green > li.selected > a{ - background-color: $light-green; - } - &.dropdown-orange > li > a:hover, - &.dropdown-orange > li > a:focus, - &.dropdown-orange > li.selected > a{ - background-color: $light-orange; - } - &.dropdown-red > li > a:hover, - &.dropdown-red > li > a:focus, - &.dropdown-red > li.selected > a{ - background-color: $light-red; - } - - & > li.disabled > a{ - background-color: transparent !important; - opacity: .5; - } -} - -.dropdown-with-icons{ - > li > a{ - padding-left: 0px; - line-height: 28px; - } - - .dropdown-menu{ - min-width: 180px; - - i{ - text-align: center; - line-height: 28px; - float: left; - - &[class^="pe-"]{ - font-size: 24px; - width: 46px; - } - &[class^="fa"]{ - font-size: 14px; - width: 38px; - } - } - } -} - -//fix bug for the select items in btn-group -.btn-group.select{ - overflow: hidden; -} -.btn-group.select.open{ - overflow: visible; -} diff --git a/frontend/assets/sass/nomad-ui/_footers.scss b/frontend/assets/sass/nomad-ui/_footers.scss deleted file mode 100644 index 65aac5cc..00000000 --- a/frontend/assets/sass/nomad-ui/_footers.scss +++ /dev/null @@ -1,155 +0,0 @@ -.footer{ - background-color: $white-color; - line-height: $line-height; - - nav > ul{ - list-style: none; - margin: 0; - padding: 0; - font-weight: normal; - - a:not(.btn){ - color: $dark-gray; - display: block; - margin-bottom: 3px; - &:hover, - &:focus{ - color: $default-states-color; - } - } - } - .social-area{ - padding: 15px 0; - h5{ - padding-bottom: 15px; - } - } - .social-area > a:not(.btn){ - color: $dark-gray; - display: inline-block; - vertical-align: top; - padding: $padding-social-a; - font-size: $font-size-large-navbar; - font-weight: normal; - line-height: $line-height; - text-align: center; - &:hover, - &:focus{ - color: $default-states-color; - } - } - .copyright{ - color: $default-states-color; - padding: 10px 15px; - margin: 10px 3px; - line-height: 31px; - font-size: $font-size-base; - } - hr{ - border-color: $medium-gray; - } - .title{ - color: $default-states-color; - } -} - -.footer-default{ - background-color: $smoke-bg; -} - -.footer:not(.footer-big){ - nav > ul{ - font-size: 16px; - li{ - margin-left: 20px; - float: left; - } - a{ - padding: 10px 0px; - margin: 15px 10px 15px 0px; - } - } -} - -.footer-black, -.footer-transparent{ - background-color: $black-bg; - color: $medium-gray; - - nav > ul{ - a{ - color: $white-color; - &:hover, - &:focus{ - color: $dark-gray; - } - } - } - .social-area > a:not(.btn){ - color: $white-color; - &:hover, - &:focus{ - color: $dark-gray; - } - } - .btn-social{ - color: $white-color; - } - hr{ - border-color: $black-hr; - } - .title{ - color: $medium-gray; - } -} - -.footer-transparent{ - background-attachment: fixed; - background-size: cover; - position: relative; - background-color: transparent; - - .container{ - z-index: 2; - position: relative; - } - - -} - -.footer-big{ - padding-top: 30px; - - hr{ - margin-bottom: 0; - margin-top: 50px; - } - .copyright{ - margin: 10px 0px 20px; - } - .social-area > *{ - margin: 0 15px; - } - - nav > ul{ - list-style: none; - margin: 0; - padding: 0; - font-weight: normal; - li{ - float: none; - } - .btn{ - margin-bottom: 5px; - } - .btn-social.btn-simple{ - padding: 0 0 4px 0; - } - } - .form-group{ - margin-top: 15px; - } - .numbers h4{ - margin: $margin-bottom; - } -} diff --git a/frontend/assets/sass/nomad-ui/_forms.scss b/frontend/assets/sass/nomad-ui/_forms.scss deleted file mode 100644 index 3a7a2078..00000000 --- a/frontend/assets/sass/nomad-ui/_forms.scss +++ /dev/null @@ -1,41 +0,0 @@ -form{ - - label{ - &.radio, - &.checkbox{ - font-size: $font-size-base; - text-transform: none; - cursor: pointer; - } - } -} - -.form-horizontal{ - .checkbox, - .radio{ - padding-top: 0; - - &:first-child, - &.checkbox-inline, - &.radio-inline{ - margin-top: 10px; - } - } -} - -star{ - color: $danger-color; - padding-left: 3px; -} - -@media (min-width: $screen-md-min){ - .form-horizontal{ - .control-label{ - padding-top: 12px !important; - } - code{ - margin-top: 8px; - display: inline-block; - } - } -} diff --git a/frontend/assets/sass/nomad-ui/_inputs.scss b/frontend/assets/sass/nomad-ui/_inputs.scss deleted file mode 100755 index fac32f2c..00000000 --- a/frontend/assets/sass/nomad-ui/_inputs.scss +++ /dev/null @@ -1,170 +0,0 @@ -.form-control::-moz-placeholder{ - @include placeholder($placeholder-gray,1); -} -.form-control:-moz-placeholder{ - @include placeholder($placeholder-gray,1); -} -.form-control::-webkit-input-placeholder{ - @include placeholder($placeholder-gray,1); -} -.form-control:-ms-input-placeholder{ - @include placeholder($placeholder-gray,1); -} - -.form-control { - background-color: $white-bg; - border: 1px solid $light-gray; - border-radius: $border-radius-base; - color: #565656; - @include input-size($padding-base-vertical, $padding-base-horizontal - 4, $height-base); - @include box-shadow(none); - - &:focus{ - background-color: $white-bg; - border: 1px solid $medium-dark-gray; - @include box-shadow(none); - outline: 0 !important; - color: #333333; - } - - .has-error &, - .has-error &:focus, - .has-success &, - .has-warning &, - .has-success &:focus, - .has-warning &:focus{ - border-color: $light-gray; - @include box-shadow(none); - } - - .has-success &:focus, - &.valid:focus{ - border-color: $success-color; - } - - .has-error &, - &.error, - .has-error &:focus{ - color: $danger-color; - border-color: $danger-color; - } - - & + .form-control-feedback{ - border-radius: $border-radius-large; - font-size: $font-size-base; - margin-top: -7px; - position: absolute; - right: 10px; - top: 50%; - vertical-align: middle; - } - - .open &{ - border-radius: $border-radius-base $border-radius-base 0 0; - border-bottom-color: transparent; - } -} -.input-sm{ - height: 30px; - padding: $padding-small-vertical $padding-small-horizontal; -} -.input-lg{ - height: 55px; - padding: $padding-large-vertical $padding-large-horizontal; -} - -.has-error{ - .form-control-feedback{ - color: $danger-color; - } -} -.has-success{ - .form-control-feedback{ - color: $success-color - } -} - -.control-label{ - .has-success &{ - color: $success-color; - } - - .has-warning &{ - color: $warning-color; - } - - .has-error &{ - color: $danger-color; - } -} - -.input-group-addon { - background-color: $white-color; - border: 1px solid $light-gray; - border-radius: $border-radius-base; - - .has-success &, - .has-error &{ - background-color: $white-color; - border: 1px solid $light-gray; - } - - .has-error &, - .has-error.input-group-focus &{ - border-color: $danger-color; - color: $danger-color; - } - - .has-success.input-group-focus &{ - border-color: $success-color; - } - .has-error .form-control:focus + &{ - border-color: $danger-color; - color: $danger-color; - } - .has-success .form-control:focus + &{ - border-color: $success-color; - color: $success-color; - } - .form-control:focus + &, - .form-control:focus ~ &{ - background-color: $white-color; - border-color: $dark-gray; - } -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-right: 0 none; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { - border-left: 0 none; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: $smoke-bg; - color: $default-color; - cursor: not-allowed; -} - -.input-group-btn .btn{ - border-width: $border-thin; - padding: $padding-round-vertical $padding-base-horizontal; -} -.input-group-btn .btn-default:not(.btn-fill){ - border-color: $medium-gray; -} - -.input-group-btn:last-child > .btn{ - margin-left: 0; -} - -.input-group-focus .input-group-addon{ - border-color: $medium-dark-gray; -} diff --git a/frontend/assets/sass/nomad-ui/_labels.scss b/frontend/assets/sass/nomad-ui/_labels.scss deleted file mode 100644 index 353b6efa..00000000 --- a/frontend/assets/sass/nomad-ui/_labels.scss +++ /dev/null @@ -1,54 +0,0 @@ -/* Labels */ -.label{ - padding: 0.2em 0.6em 0.2em; - border: 1px solid #999999; - border-radius: 3px; - color: #999999; - background-color: #FFFFFF; - font-weight: 500; - font-size: 11px; - text-transform: uppercase; - display: inline-block; - margin-bottom: 3px; -} -.label-primary{ - border-color: #3472F7; - color: #3472F7; -} -.label-info{ - border-color: #2CA8FF; - color: #2CA8FF; -} -.label-success{ - border-color: #05AE0E; - color: #05AE0E; -} -.label-warning{ - border-color: #FF9500; - color: #FF9500; -} -.label-danger{ - border-color: #FF3B30; - color: #FF3B30; -} -.label.label-fill{ - color: #FFFFFF; -} -.label-primary.label-fill{ - background-color: #3472F7; -} -.label-info.label-fill{ - background-color: #2CA8FF; -} -.label-success.label-fill{ - background-color: #05AE0E; -} -.label-warning.label-fill{ - background-color: #FF9500; -} -.label-danger.label-fill{ - background-color: #FF3B30; -} -.label-default.label-fill{ - background-color: #999999; -} diff --git a/frontend/assets/sass/nomad-ui/_media.scss b/frontend/assets/sass/nomad-ui/_media.scss deleted file mode 100644 index f8ded151..00000000 --- a/frontend/assets/sass/nomad-ui/_media.scss +++ /dev/null @@ -1,80 +0,0 @@ -.media{ - border-bottom: 1px solid $medium-gray; - padding-bottom: 30px; - margin-top: 30px; - - .avatar{ - margin: 0 auto; - width: 64px; - height: 64px; - overflow: hidden; - border-radius: 50%; - margin-right: 15px; - border: 3px solid transparent; - - img{ - width: 100%; - } - } - .media-heading{ - margin-bottom: 10px; - margin-top: 5px; - display: inline-block; - } - .btn-simple{ - padding: 0px 5px; - } - .media{ - margin-top: 30px; - } - .media:last-child{ - border: 0; - } -} - -.media-post{ - color: #555; - border: 0; - .media-heading{ - display: block; - text-align: center; - } - .author{ - width: 15%; - } - .media-body{ - width: 85%; - float: left; - display: inline-block; - } - textarea{ - margin: $margin-bottom; - font-size: $font-paragraph; - } - .avatar{ - border-color: white; - } -} - - -.media-area{ - .media:last-child{ - border: 0; - } - .pagination-area{ - padding: 10px 0; - text-align: center; - } -} -.media-area-small{ - p{ - font-size: 14px; - } - .btn-simple{ - font-size: 14px; - } - .avatar{ - width: 58px; - height: 58px; - } -} diff --git a/frontend/assets/sass/nomad-ui/_misc.scss b/frontend/assets/sass/nomad-ui/_misc.scss deleted file mode 100755 index e0165e84..00000000 --- a/frontend/assets/sass/nomad-ui/_misc.scss +++ /dev/null @@ -1,87 +0,0 @@ -/* General overwrite */ -body, -.wrapper{ - min-height: 100vh; - position: relative; -} - -a{ - color: $color-nomad; - - &:hover, &:focus{ - color: $color-nomad-dark; - text-decoration: none; - } -} - -a:focus, a:active, -button::-moz-focus-inner, -input::-moz-focus-inner, -input[type="reset"]::-moz-focus-inner, -input[type="button"]::-moz-focus-inner, -input[type="submit"]::-moz-focus-inner, -select::-moz-focus-inner, -input[type="file"] > input[type="button"]::-moz-focus-inner{ - outline:0; -} -.ui-slider-handle:focus, -.navbar-toggle, -input:focus { - outline : 0 !important; -} - -/* Animations */ - -.animation-transition-general{ - @include transition($general-transition-time, $transition-linear); -} - -.animation-transition-fast{ - @include transition($fast-transition-time, $transition-linear); -} - -.animation-transition-ultra-fast{ - @include transition($ultra-fast-transition-time, $transition-ease-in); -} - -.form-control, -.input-group-addon, -.tagsinput, -.navbar .alert, -.panel-collapse.collapse-hover { - @include transition($general-transition-time, $transition-linear); -} - -.sidebar .nav a, -.table > tbody > tr .td-actions .btn, -.caret{ - @include transition($fast-transition-time, $transition-ease-in); -} - -.btn{ - @include transition($ultra-fast-transition-time, $transition-ease-in); -} -.fa{ - width: 18px; - text-align: center; -} -.margin-top{ - margin-top: 50px; -} - -a[data-toggle="collapse"][aria-expanded="true"] .caret, -.btn[data-toggle="collapse"][aria-expanded="true"] .caret, -a.dropdown-toggle[aria-expanded="true"] .caret{ - @include rotate-180(); -} - -legend{ - font-size: $font-size-h4; - font-weight: $font-weight-light; -} - -.full-screen-map{ - position:relative; - width:100%; - height: calc(100% - 60px); -} diff --git a/frontend/assets/sass/nomad-ui/_mixins.scss b/frontend/assets/sass/nomad-ui/_mixins.scss deleted file mode 100644 index c752a973..00000000 --- a/frontend/assets/sass/nomad-ui/_mixins.scss +++ /dev/null @@ -1,22 +0,0 @@ -//Utilities - -@import "mixins/transparency"; -@import "mixins/vendor-prefixes"; - - -//Components - -@import "mixins/buttons"; -@import "mixins/inputs"; -@import "mixins/labels"; -@import "mixins/tabs"; - -@import "mixins/navbars"; -@import "mixins/icons"; -@import "mixins/social-buttons"; - -@import "mixins/morphing-buttons"; - -@import "mixins/cards"; -@import "mixins/table-row"; -@import "mixins/chartist"; diff --git a/frontend/assets/sass/nomad-ui/_modal.scss b/frontend/assets/sass/nomad-ui/_modal.scss deleted file mode 100644 index 3e367c83..00000000 --- a/frontend/assets/sass/nomad-ui/_modal.scss +++ /dev/null @@ -1,79 +0,0 @@ -.modal-header { - border: 0 none; -} -.modal-content { - border: 0 none; - border-radius: 10px; - box-shadow: 0 0 15px rgba(0, 0, 0, 0.15), 0 0 1px 1px rgba(0, 0, 0, 0.1); -} -.modal-dialog { - padding-top: 60px; -} -.modal-footer { - border-top: 0 none; - padding: 10px 10px; -} -.modal-footer .modal-footer .btn-default.btn-simple{ - font-weight: 400; -} - -.modal.fade .modal-dialog { - transform: none; - -webkit-transform: none; - -moz-transform: none; -} -.modal.in .modal-dialog { - transform: none; - -webkit-transform: none; - -moz-transform: none; -} -.modal-small{ - .modal-dialog{ - max-width: 350px; - } -} -.modal-small{ - .divider{ - margin: 0 auto; - display: block; - width: 14px; - position: relative; - margin-top: 40px; - margin-bottom: 30px; - font-size: $font-paragraph; - } - .divider:after{ - position: absolute; - content: ""; - right: -140px; - top: 12px; - height: 1px; - width: 115px; - background-color: $light-gray; - } - .divider:before{ - position: absolute; - content: ""; - left: -140px; - top: 12px; - height: 1px; - width: 115px; - background-color: $light-gray; - } - .modal-footer{ - text-align: center; - } -} -.social-area{ - text-align: center; - - .btn-social{ - margin: 0 10px; - } -} -.modal-backdrop.in { - opacity: 0.25; -} - - - diff --git a/frontend/assets/sass/nomad-ui/_navbars.scss b/frontend/assets/sass/nomad-ui/_navbars.scss deleted file mode 100644 index 45df7edd..00000000 --- a/frontend/assets/sass/nomad-ui/_navbars.scss +++ /dev/null @@ -1,362 +0,0 @@ -.nav { - > li{ - > a:hover, - > a:focus{ - background-color: transparent; - } - } -} -.navbar{ - border: $none; - font-size: $font-size-navbar; - border-radius: 0; - - .navbar-minimize{ - float: left; - margin: 3px 15px; - } - - - .navbar-brand { - font-weight: $font-weight-normal; - margin: $navbar-margin-brand; - padding: $navbar-padding-brand; - font-size: $font-size-large-navbar; - } - .navbar-nav{ - > li > a { - padding: $navbar-padding-a; - margin: $navbar-margin-a; - position: relative; - - } - > li > a.btn{ - margin: $navbar-margin-a-btn; - padding: $padding-base-vertical $padding-base-horizontal; - } - > li > a.btn-round{ - margin: $navbar-margin-a-btn-round; - } - > li > a [class^="fa"]{ - font-size: $font-size-large + 1; - position: relative; - line-height: 16px; - top: 1px; - } - - p{ - display: inline-block; - padding-left: 10px; - margin-bottom: 0; - } - - .notification{ - position: absolute; - background-color: #FB404B; - text-align: center; - border-radius: 10px; - min-width: 18px; - padding: 0 5px; - height: 18px; - font-size: 12px; - color: #FFFFFF; - font-weight: bold; - line-height: 18px; - top: 2px; - left: 7px; - } - } - .btn{ - margin: $navbar-margin-btn; - font-size: $font-size-base; - } - .btn-simple{ - font-size: $font-size-medium; - } - .caret{ - // @include center-item(); - } - - &.fixed{ - width: calc(100% - $sidebar-width); - right: 0; - left: auto; - border-radius: 0; - } - - &.navbar-absolute{ - position: absolute; - width: 100%; - z-index: 1030; - } - -} - -.navbar-fixed{ - position: fixed; - width: 100%; - right: 0; - z-index: 1031; - - & ~ .main-panel{ - > .content{ - padding-top: 95px; - min-height: calc(100% - 71px); - } - } - -} - -.navbar-nav > li > .dropdown-menu{ - border-radius: $border-radius-extreme; - margin-top: -5px; -} - -.navbar-transparent, [class*="navbar-ct"]{ - .navbar-brand{ - color: $white-color; - @include opacity(.9); - - &:focus, - &:hover{ - background-color: transparent; - @include opacity(1); - } - } - - .navbar-nav{ - > li > a:not(.btn){ - color: $white-color; - border-color: $white-color; - @include opacity(0.8); - } - > .active > a:not(.btn), - > .active > a:hover:not(.btn), - > .active > a:focus:not(.btn), - > li > a:hover:not(.btn), - > li > a:focus:not(.btn){ - background-color: transparent; - border-radius: 3px; - color: $white-color; - @include opacity(1); - } - .nav > li > a.btn:hover{ - background-color: transparent; - } - - > .dropdown > a .caret, - > .dropdown > a:hover .caret, - > .dropdown > a:focus .caret{ - border-bottom-color: $white-color; - border-top-color: $white-color; - } - - > .open > a, - > .open > a:hover, - > .open > a:focus { - background-color: transparent; - color: $white-color; - @include opacity(1); - } - } - - .btn-default{ - color: $white-color; - border-color: $white-color; - } - .btn-default.btn-fill{ - color: $dark-gray; - background-color: $white-color; - @include opacity(.9); - } - .btn-default.btn-fill:hover, - .btn-default.btn-fill:focus, - .btn-default.btn-fill:active, - .btn-default.btn-fill.active, - .open .dropdown-toggle.btn-fill.btn-default{ - border-color: $white-color; - @include opacity(1); - } - -} -.navbar-transparent{ - .dropdown-menu .divider{ - background-color: rgba($white-color,.2); - } -} - -.nav-open .nav .caret{ - border-bottom-color: $white-color; - border-top-color: $white-color; -} - -.navbar-default { - background-color: $white-navbar; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); - - .navbar-nav{ - > li > a:not(.btn){ - color: $dark-gray; - } - - > .active > a, - > .active > a:not(.btn):hover, - > .active > a:not(.btn):focus, - > li > a:not(.btn):hover, - > li > a:not(.btn):focus { - background-color: transparent; - border-radius: 3px; - color: $info-color; - @include opacity(1); - } - - > .dropdown > a:hover .caret, - > .dropdown > a:focus .caret { - border-bottom-color: $info-color; - border-top-color: $info-color; - - } - - > .open > a, - > .open > a:hover, - > .open > a:focus{ - background-color: transparent; - color: $info-color; - } - - .navbar-toggle:hover,.navbar-toggle:focus { - background-color: transparent; - } - - } - - &:not(.navbar-transparent) .btn-default:hover{ - color: $info-color; - border-color: $info-color; - } - &:not(.navbar-transparent) .btn-neutral, - &:not(.navbar-transparent) .btn-neutral:hover, - &:not(.navbar-transparent) .btn-neutral:active{ - color: $dark-gray; - } -} - -/* Navbar with icons */ - -.navbar-icons{ - &.navbar .navbar-brand{ - margin-top: 12px; - margin-bottom: 12px; - } - .navbar-nav{ - > li > a{ - text-align: center; - padding: $navbar-padding-a-icons; - margin: $navbar-margin-a-icons; - } - - [class^="pe"] { - font-size: 30px; - position: relative; - } - p { - margin: 3px 0 0; - } - } -} - -.navbar-form{ - @include box-shadow(none); - .form-control{ - - @include input-size($padding-base-vertical, $padding-base-horizontal - 10, $height-base); - - border-radius: 0; - border: 0; - font-size: $font-size-navbar; - line-height: $line-height-general; - color: $light-gray; - } - .navbar-transparent & .form-control, - [class*="navbar-ct"] & .form-control, - .navbar-transparent & .input-group-addon, - [class*="navbar-ct"] & .input-group-addon{ - color: $white-color; - border: $none; - background-color: rgba(255,255,255,.13); - } - - [class*="navbar-ct"] & .form-control:focus, - [class*="navbar-ct"] & .input-group-focus .input-group-addon{ - background-color: rgba(255,255,255,.23); - color: $white-color; - } - - [class*="navbar-ct"] &{ - .form-control:-moz-placeholder{ - @include placeholder($white-color,1); - } - .form-control:-webkit-input-placeholder{ - @include placeholder($white-color,1); - } - .form-control:-ms-input-placeholder{ - @include placeholder($white-color,1); - } - } - - - .input-group-addon{ - @include light-form(); - color: $light-gray; - font-size: $font-size-navbar; - padding: 0 7px; - border-radius: $border-radius-base 0 0 $border-radius-base; - } - - & .input-group-focus .input-group-addon, - & .form-control:focus{ - color: $dark-gray; - } - -} - -.navbar-ct-blue{ - @include navbar-color($blue-navbar); -} -.navbar-ct-azure{ - @include navbar-color($azure-navbar); -} -.navbar-ct-green{ - @include navbar-color($green-navbar); -} -.navbar-ct-orange{ - @include navbar-color($orange-navbar); -} -.navbar-ct-red{ - @include navbar-color($red-navbar); -} - -.navbar-transparent{ - padding-top: 15px; - background-color: transparent; - border-bottom: 1px solid transparent; -} - -.navbar-toggle{ - margin-top: 19px; - margin-bottom: 19px; - border: $none; - - .icon-bar { - background-color: $white-color; - } - .navbar-collapse, - .navbar-form { - border-color: transparent; - } - - &.navbar-default .navbar-toggle:hover, - &.navbar-default .navbar-toggle:focus { - background-color: transparent; - } -} diff --git a/frontend/assets/sass/nomad-ui/_pages.scss b/frontend/assets/sass/nomad-ui/_pages.scss deleted file mode 100644 index db4aba3f..00000000 --- a/frontend/assets/sass/nomad-ui/_pages.scss +++ /dev/null @@ -1,215 +0,0 @@ -.wrapper{ - position: relative; - top: 0; - height: 100vh; - - &:after{ - display: table; - clear: both; - content: " "; - } - - &.wrapper-full-page{ - height: auto; - min-height: 100vh; - } -} - -.full-page{ - - &:after, - &:before{ - display: block; - content: ""; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - z-index: 2; - } - - &:before{ - opacity: .33; - background: #000000; - } - - &:after{ - @include line-gradient($black-color-top, rgba($black-color-bottom,.4)); - z-index: 3; - opacity: 1; - } - - > .content, - > .footer{ - position: relative; - z-index: 4; - } - - > .content{ - min-height: calc(100vh - 70px); - } - - .full-page-background{ - position: absolute; - z-index: 1; - height: 100%; - width: 100%; - display: block; - top: 0; - left: 0; - background-size: cover; - background-position: center center; - - } - - &[data-image]:after, - &.has-image:after{ - opacity: .9; - } - - &[data-color="blue"]:after{ - @include line-gradient($color-blue, rgba($blue-color-bottom,.6)); - } - &[data-color="azure"]:after{ - @include line-gradient($color-azure, rgba($azure-color-bottom,.6)); - } - &[data-color="green"]:after{ - @include line-gradient($color-green, rgba($green-color-bottom,.6)); - } - &[data-color="orange"]:after{ - @include line-gradient($color-orange, rgba($orange-color-bottom,.6)); - } - &[data-color="red"]:after{ - @include line-gradient($color-red, rgba($red-color-bottom,.6)); - } - &[data-color="purple"]:after{ - @include line-gradient($color-purple, rgba($purple-color-bottom,.6)); - } - - .footer nav > ul a:not(.btn), - .footer, - .footer .copyright a{ - color: $white-color; - font-size: $font-size-base; - } - -} - -.login-page, -.lock-page{ - > .content{ - padding-top: 22vh; - } -} - -.login-page{ - .card{ - box-shadow: 0 25px 30px -13px rgba(40, 40, 40, 0.4); - border-radius: $border-radius-extreme; - padding-top: $padding-default-horizontal * 2; - padding-bottom: $padding-default-horizontal * 2; - - @include transform-translate-y(0); - @extend .animation-transition-general; - - &.card-hidden{ - opacity: 0; - @include transform-translate-y(-60px); - } - - .header{ - padding-bottom: $padding-default-horizontal * 2; - } - - .btn-wd{ - min-width: 180px; - } - } -} - -.lock-page{ - - .user-profile{ - text-align: center; - width: 240px; - margin: 30px auto 0; - color: #FFFFFF; - position: absolute; - left: 50%; - margin-left: -120px; - display: block; - - &.with-animation{ - @include transition(300ms, $transition-ease-in); - } - - .author{ - border-radius: 50%; - width: 100px; - height: 100px; - border: 4px solid rgba($white-color,.3); - overflow: hidden; - margin: 0 auto; - @include transition(300ms, $transition-linear); - - img{ - width: 100%; - } - } - - h4{ - margin-top: $margin-base; - margin-bottom: ($margin-base * 2); - } - - } - -} - -.register-page{ - - .header-text{ - color: #FFFFFF; - text-align: center; - padding: ($padding-default-horizontal * 3) 0 ($padding-default-horizontal * 2); - - h4{ - margin-top: 10px; - } - - hr{ - opacity: .3; - margin-top: ($margin-base * 2); - } - } - - .media{ - color: $white-color; - margin-bottom: ($margin-base * 3); - - .icon{ - float: left; - margin-right: 5px; - } - - i{ - font-size: $font-size-h2; - } - - h4{ - margin: 0 0 5px 0; - } - } - - .form-group{ - margin-bottom: ($margin-base + 10px); - } - - .card{ - .content{ - padding-top: 0; - padding-bottom: 0; - } - } -} diff --git a/frontend/assets/sass/nomad-ui/_progress-bars.scss b/frontend/assets/sass/nomad-ui/_progress-bars.scss deleted file mode 100644 index 00e482bc..00000000 --- a/frontend/assets/sass/nomad-ui/_progress-bars.scss +++ /dev/null @@ -1,26 +0,0 @@ -.progress { - background-color: #E5E5E5; - border-radius: 3px; - box-shadow: none; - height: 4px; -} -.progress-thin{ - height: 2px; -} - -.progress-bar, -.progress-bar-primary{ - background-color: $primary-color; -} -.progress-bar-info{ - background-color: $info-color; -} -.progress-bar-success{ - background-color: $success-color; -} -.progress-bar-warning{ - background-color: $warning-color; -} -.progress-bar-danger{ - background-color: $danger-color; -} diff --git a/frontend/assets/sass/nomad-ui/_responsive.scss b/frontend/assets/sass/nomad-ui/_responsive.scss deleted file mode 100644 index 38e421af..00000000 --- a/frontend/assets/sass/nomad-ui/_responsive.scss +++ /dev/null @@ -1,688 +0,0 @@ -@media (min-width: $screen-lg-min) { - .tab-content { - padding-top: 15px !important; - } -} - -@media (min-width: $screen-md-min){ - .navbar-form { - margin: 12px 0; - padding-left: 10px; - padding-right: 10px; - } - - .dropdown-menu{ - .navbar-nav > li > &, - .dropdown &, - .dropup &, - &.bootstrap-datetimepicker-widget, - .bootstrap-table &{ - @include transition($fast-transition-time, $transition-linear); - margin-top: -20px; - visibility: hidden; - display: block; - @include opacity(0); - } - - .navbar-nav > li.open > &, - .dropdown.open &, - .dropup.open &, - .bootstrap-table .open &{ - @include opacity(1); - visibility: visible; - margin-top: 0px; - } - - &.bootstrap-datetimepicker-widget.open{ - @include opacity(1); - visibility: visible; - margin-top: 5px; - } - - .dropup &{ - margin-top: auto; - margin-bottom: -20px; - } - .dropup.open &{ - margin-top: auto; - margin-bottom: 5px; - } - } - - .navbar-nav > li > .dropdown-menu:before{ - border-bottom: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -11px; - } - .navbar-nav > li > .dropdown-menu:after { - border-bottom: 11px solid #FFFFFF; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -10px; - } - - .navbar-nav.navbar-right > li > .dropdown-menu:before{ - left: auto; - right: 12px; - } - - .navbar-nav.navbar-right > li > .dropdown-menu:after{ - left: auto; - right: 12px; - } - - .footer:not(.footer-big){ - nav > ul{ - li:first-child{ - margin-left: 0; - } - } - } - - body > .navbar-collapse.collapse{ - display: none !important; - } - - .card{ - form{ - [class*="col-"]{ - padding: 0 6px; - } - [class*="col-"]:first-child{ - padding-left: 15px; - } - [class*="col-"]:last-child{ - padding-right: 15px; - } - } - } - - .table-full-width{ - margin-left: -15px; - margin-right: -15px; - } - - .table-responsive{ - overflow: visible; - } - - .sidebar{ - .navbar-form{ - display: none !important; - } - .nav-mobile-menu{ - display: none; - } - } - - - .navbar-fixed{ - width: calc(100% - 260px); - } - -} - -/* Changes for small display */ - -@media (max-width: $screen-md){ - - .main-panel, - .wrapper-full-page{ - @include transform-translate-x(0px); - @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - left: 0; - - width: 100%; - - > .content{ - padding: 15px 0px; - } - - .card{ - .header { - padding-bottom: 15px; - } - - margin-bottom: 15px; - } - } - - .tab-content { - padding-right: 0 !important; - } - - .navbar-transparent{ - padding-top: 15px; - } - - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } - body { - position: relative; - } - - .wrapper{ - background-color: white; - - &.wrapper-full-page{ - height: auto; - } - } - - .card .content { - padding-left: 0; - padding-right: 0; - } - - .card .content.table-responsive { - padding: 0px; - } - .container-fluid { - padding-left: 0px; - padding-right: 0px; - } - .perfect-scrollbar-off .main-panel { - overflow-x: hidden; - } - .navbar > div{ - left: 0; - width: 100%; - @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - position: relative; - } - .navbar .navbar-collapse.collapse, - .navbar .navbar-collapse.collapse.in, - .navbar .navbar-collapse.collapsing{ - display: none !important; - } - - .navbar-nav > li{ - float: none; - position: relative; - display: block; - } - - .sidebar, - .bootstrap-navbar { - position: fixed; - display: block; - top: 0; - height: 100%; - width: 260px; - right: 0; - left: auto; - z-index: 1032; - visibility: visible; - overflow-y: visible; - padding: 0; - - @include transform-translate-x(260px); - @include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - - .user{ - .photo{ - width: 50px; - height: 50px; - border-width: 2px; - } - } - - .nav{ - i{ - font-size: $font-size-h4; - } - > li > a{ - padding-bottom: 5px; - padding-top: 5px; - color: #FFFFFF !important; - - &.dropdown-toggle{ - background: transparent; - } - } - } - - .navbar-form{ - float: none !important; - margin: $margin-base 0 0 0; - - .input-group{ - width: 100%; - - .form-control{ - background: rgba(255,255,255,.13); - border-radius: 0 $border-radius-base $border-radius-base 0; - padding-left: 0; - padding-right: 0; - color: $white-color; - - &:focus{ - background: rgba(255,255,255,.23); - } - } - - } - - .input-group-addon, - .input-group-focus .input-group-addon{ - color: #FFFFFF; - padding: 0 20px; - background: rgba(255,255,255,.13); - border-radius: $border-radius-base 0 0 $border-radius-base; - } - - .input-group-focus .input-group-addon{ - background: rgba(255,255,255,.23); - } - } - - .nav-mobile-menu{ - border-bottom: 1px solid rgba($white-color, 0.20); - margin-bottom: $margin-base; - padding-bottom: $margin-base; - padding-top: 5px; - - i{ - font-size: 18px; - } - - .notification{ - float: left; - line-height: 30px; - margin-right: 8px; - font-weight: 600; - } - - .open .dropdown-menu{ - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - - .dropdown-menu{ - li{ - a{ - padding-left: 60px; - } - } - } - - .dropdown-with-icons{ - li{ - a{ - padding-left: 15px; - } - } - } - } - - .dropdown-with-icons{ - > li > a{ - padding-left: $padding-default-horizontal; - padding-top: 2px; - padding-bottom: 2px; - } - - .dropdown-menu i[class^="pe-"]{ - width: 30px; - } - } - - - .dropdown-menu:after, - .dropdown-menu:before{ - display: none; - } - - } - - .bootstrap-navbar{ - .nav{ - position: relative; - z-index: 4; - border-top: none; - - >li{ - > a{ - color: #FFFFFF; - margin: 5px 15px; - opacity: .86; - border-radius: $border-radius-base; - line-height: 30px; - font-size: 12px; - font-weight: 600; - text-transform: uppercase; - } - - &:hover > a{ - background: rgba(255,255,255,0.13); - opacity: 1; - } - - &.active > a{ - color: #FFFFFF; - opacity: 1; - background: rgba(255,255,255,0.23); - - } - } - - p { - font-size: 12px; - font-weight: 600; - line-height: 30px; - margin: 0; - text-transform: uppercase; - display: inline-block; - } - - i { - float: left; - font-size: 28px; - line-height: 30px; - margin-right: 15px; - text-align: center; - width: 30px; - } - } - - - } - - .nav-open{ - .main-panel, - .wrapper-full-page{ - left: 0; - @include transform-translate-x(-260px); - } - - .navbar-fixed > div{ - @include transform-translate-x(-260px); - } - - .sidebar, - .bootstrap-navbar{ - @include transform-translate-x(0px); - } - - .navbar-default .navbar-toggle .icon-bar{ - background-color: #222222; - } - - } - - .navbar-minimize{ - display: none; - } - - - .navbar-toggle .icon-bar { - display: block; - position: relative; - background: #fff; - width: 24px; - height: 2px; - border-radius: 1px; - margin: 0 auto; - } - - - @include topbar-x-rotation(); - @include topbar-back-rotation(); - @include bottombar-x-rotation(); - @include bottombar-back-rotation(); - - .navbar-header { - padding-left: 15px - } - .navbar-header .navbar-toggle { - margin: 10px 15px 10px 0; - width: 40px; - height: 40px; - } - .navbar-toggle .icon-bar{ - outline: 1px solid transparent; - } - - .navbar-toggle .icon-bar:nth-child(2){ - top: 0px; - @include bar-animation($topbar-back); - } - .navbar-toggle .icon-bar:nth-child(3){ - opacity: 1; - } - .navbar-toggle .icon-bar:nth-child(4){ - bottom: 0px; - @include bar-animation($bottombar-back); - } - .toggled .icon-bar:nth-child(2){ - top: 6px; - @include bar-animation($topbar-x); - } - - .toggled .icon-bar:nth-child(3){ - opacity: 0; - } - .toggled .icon-bar:nth-child(4){ - bottom: 6px; - @include bar-animation($bottombar-x); - } - - @-webkit-keyframes fadeIn { - 0% {opacity: 0;} - 100% {opacity: 1;} - } - @-moz-keyframes fadeIn { - 0% {opacity: 0;} - 100% {opacity: 1;} - } - @keyframes fadeIn { - 0% {opacity: 0;} - 100% {opacity: 1;} - } - - .dropdown-menu .divider{ - background-color: rgba(229, 229, 229, 0.15); - } - - .navbar-nav { - margin: 1px 0; - - .open .dropdown-menu > li { - & > a{ - padding: 15px 15px 5px 50px; - } - - &:first-child > a{ - padding: 5px 15px 5px 50px; - } - - &:last-child > a { - padding: 15px 15px 25px 50px; - } - } - } - - - [class*="navbar-"] .navbar-nav { - & > li > a, - > li > a:hover, - > li > a:focus, - .active > a, - .active > a:hover, - .active > a:focus, - .open .dropdown-menu > li > a, - .open .dropdown-menu > li > a:hover, - .open .dropdown-menu > li > a:focus, - .navbar-nav .open .dropdown-menu > li > a:active { - color: white; - } - - & > li > a, - > li > a:hover, - > li > a:focus, - .open .dropdown-menu > li > a, - .open .dropdown-menu > li > a:hover, - .open .dropdown-menu > li > a:focus{ - opacity: .7; - background: transparent; - } - - &.navbar-nav .open .dropdown-menu > li > a:active { - opacity: 1; - } - - & .dropdown > a{ - &:hover .caret { - border-bottom-color: #777; - border-top-color: #777; - } - &:active .caret { - border-bottom-color: white; - border-top-color: white; - } - } - - } - - .dropdown-menu { - display: none; - } - .navbar-fixed-top { - -webkit-backface-visibility: hidden; - } - - .close-layer{ - height: 100%; - width: 100%; - position: absolute; - opacity: 0; - top: 0; - left: auto; - - content: ""; - z-index: 9999; - overflow-x: hidden; - background-color: rgba(0,0,0,.35); - - @include transition($slow-transition-time, $transition-ease-in); - - &.visible{ - opacity: 1; - } - } - - .social-line .btn{ - margin: $margin-bottom; - } - .subscribe-line .form-control{ - margin: $margin-bottom; - } - .social-line.pull-right{ - float: none; - } - .footer nav.pull-left{ - float: none !important; - } - .footer:not(.footer-big) nav > ul li{ - float: none; - } - .social-area.pull-right{ - float: none !important; - } - .form-control + .form-control-feedback{ - margin-top: -8px; - } - .navbar-toggle:hover,.navbar-toggle:focus { - background-color: transparent !important; - } - .btn.dropdown-toggle{ - margin-bottom: 0; - } - .media-post .author{ - width: 20%; - float: none !important; - display: block; - margin: 0 auto 10px; - } - .media-post .media-body{ - width: 100%; - } - - .navbar-collapse.collapse{ - height: 100% !important; - } - .navbar-collapse.collapse.in { - display: block; - } - .navbar-header .collapse, .navbar-toggle { - display:block !important; - } - .navbar-header { - float:none; - } - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse{ - .nav p{ - font-size: $font-size-base; - margin: 0; - } - - [class^="pe-7s-"]{ - float: left; - font-size: 20px; - margin-right: 10px; - } - } - - .table-responsive { - border: 0px; - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - -webkit-overflow-scrolling: touch; - } - - .sidebar .sidebar-wrapper{ - padding-bottom: 60px; - } - - .navbar-minimize{ - display: none; - } -} diff --git a/frontend/assets/sass/nomad-ui/_sidebar-and-main-panel.scss b/frontend/assets/sass/nomad-ui/_sidebar-and-main-panel.scss deleted file mode 100755 index 1f0c783f..00000000 --- a/frontend/assets/sass/nomad-ui/_sidebar-and-main-panel.scss +++ /dev/null @@ -1,575 +0,0 @@ -.sidebar{ - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 260px; - display: block; - z-index: 1; - color: #fff; - font-weight: 200; - - .sidebar-wrapper { - position: relative; - z-index: 4; - width: 260px; - height: calc(100vh - 64px); - - > .nav{ - margin-top: 20px; - } - - > .user ~ .nav{ - margin-top: 0; - } - - .dropdown .dropdown-backdrop{ - display: none !important; - } - - } - - .sidebar-background{ - background-image: url('../img/nomad.jpg'); - position: absolute; - z-index: 1; - height: 100%; - width: 100%; - display: block; - top: 0; - left: 0; - background-size: cover; - background-position: center center; - background-color: $color-nomad; - } - - .nav{ - - li{ - > a{ - margin: 5px 15px 0px; - border-radius: $border-radius-base; - color: #FFFFFF; - opacity: .86; - } - - &:hover > a{ - background: rgba(255,255,255,0.13); - opacity: 1; - color: #FFFFFF; - } - - &.active > a{ - color: #FFFFFF; - opacity: 1; - background: rgba(255,255,255,0.23); - - } - } - - [data-toggle="collapse"] ~ div > ul > li > a{ - padding-left: 60px; - } - - p{ - margin: 0; - line-height: 30px; - font-size: 12px; - font-weight: 600; - text-transform: uppercase; - white-space: nowrap; - position: relative; - @extend .animation-transition-general; - - .caret{ - top: 12px; - position: absolute; - right: 0; - } - } - - i{ - font-size: 28px; - float: left; - margin-right: 15px; - line-height: 30px; - width: 30px; - text-align: center; - } - } - - .logo-mini{ - display: none; - } - -} - -.sidebar, -.bootstrap-navbar{ - .logo{ - padding: $padding-default-vertical $padding-default-horizontal; - position: relative; - z-index: 4; - - p{ - float: left; - font-size: 20px; - margin: 10px 10px; - color: $white-color; - line-height: 20px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - } - - .logo-text{ - text-transform: uppercase; - padding: 7px $padding-zero; - display: block; - font-size: $font-size-large; - color: $white-color; - font-weight: $font-weight-normal; - line-height: 30px; - text-align: center; - white-space: nowrap; - overflow: hidden; - } - - .logo-image{ - float: left; - height: 40px; - width: 40px; - margin: 0 10px; - } - - .logo-round{ - border-radius: 50%; - display: block; - overflow: hidden; - - img{ - width: 100%; - } - } - - &:before{ - content: ""; - position: absolute; - bottom: -1px; - right: 10%; - width: 80%; - height: 1px; - background-color: rgba($white-color, 0.3); - } - - } - - .user{ - border-bottom: 1px solid rgba($white-color, 0.20); - padding-bottom: 20px; - margin-top: 20px; - - .photo{ - width: 80px; - height: 80px; - overflow: hidden; - border-radius: 50%; - border: 4px solid rgba($white-color, .3); - margin: 0 auto; - @extend .animation-transition-general; - - img{ - width: 100%; - } - } - - a{ - text-align: center; - color: $white-color; - padding: $padding-base-vertical $padding-large-vertical; - text-align: center; - display: block; - @extend .animation-transition-general; - } - } - - &:after, - &:before{ - display: block; - content: ""; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - z-index: 2; - } - - &:before{ - opacity: .33; - background: #000000; - } - - &:after{ - background: $color-nomad; - z-index: 3; - opacity: 0.8; - } - - &[data-image]:after, - &.has-image:after{ - opacity: .95; - } - - // colors for the sidebar with an image - &[data-color="blue"]:after{ - @include line-gradient($color-blue, rgba($blue-color-bottom,.7)); - } - &[data-color="azure"]:after{ - @include line-gradient($color-azure, rgba($azure-color-bottom,.7)); - } - &[data-color="green"]:after{ - @include line-gradient($color-green, rgba($green-color-bottom,.7)); - } - &[data-color="orange"]:after{ - @include line-gradient($color-orange, rgba($orange-color-bottom,.7)); - } - &[data-color="red"]:after{ - @include line-gradient($color-red, rgba($red-color-bottom,.7)); - } - &[data-color="purple"]:after{ - @include line-gradient($color-purple, rgba($purple-color-bottom,.7)); - } -} - - -.main-panel{ - background: $smoke-bg; - position: relative; - // z-index: 2; fix for Modals inside .main-panel - float: right; - width: $sidebar-width; - min-height: 100%; - - > .content{ - padding: 30px 15px; - min-height: calc(100vh - 136px); - } - - > .content-no-padding{ - padding: 0; - } - - > .footer{ - border-top: 1px solid #e7e7e7; - } - - .navbar{ - margin-bottom: 0; - } -} - -.sidebar, -.main-panel, -.sidebar-wrapper, -.navbar-fixed{ - -webkit-transition-property: top,bottom,width; - transition-property: top,bottom, width; - -webkit-transition-duration: .2s,.2s, .35s; - transition-duration: .2s,.2s, .35s; - -webkit-transition-timing-function: linear,linear,ease; - transition-timing-function: linear,linear,ease; - -webkit-overflow-scrolling: touch; -} - -.sidebar, -.main-panel{ - max-height: 100%; - height: 100%; -} - -// windows os settings for perfect scrollbar off -.sidebar .sidebar-wrapper, -.main-panel{ - .perfect-scrollbar-on &, - &{ - overflow: hidden; - } -} - -// regular settings for perfect scrollbar off -.perfect-scrollbar-off{ - .sidebar .sidebar-wrapper, - .main-panel{ - overflow: auto; - } -} - -.visible-on-sidebar-regular{ - display: inline-block !important; -} -.visible-on-sidebar-mini{ - display: none !important; -} - -@media (min-width: $screen-md) { - .hover-collapse{ - display: block; - position: absolute; - top: 0; - left: 81px; - background-color: $white-color; - border: 1px solid rgba(0,0,0,.15); - border: 1px solid #ccc; - border-radius: $border-radius-extreme; - padding: 0px; - - @include box-shadow($dropdown-shadow); - - } - - .sidebar-mini{ - .visible-on-sidebar-regular{ - display: none !important; - } - .visible-on-sidebar-mini{ - display: inline-block !important; - } - .sidebar{ - width: 80px; - display: block; - font-weight: 200; - z-index: 3; - - .sidebar-wrapper{ - overflow: inherit; - width: 80px; - box-shadow: none; - } - - .logo{ - display: none; - } - - .logo-mini{ - padding: 10px 0px; - display: block; - margin: 0px; - position: relative; - z-index: 4; - - &:before{ - content: ""; - position: absolute; - bottom: -1px; - right: 10%; - width: 80%; - height: 1px; - background-color: rgba($white-color, 0.3); - } - } - - .sidebar-wrapper > .nav{ - margin-top: 20px; - - li{ - - // a{ - // margin: 5px 10px; - // } - - &:hover, - &:focus{ - .collapse{ - @extend .hover-collapse; - } - } - > a{ - margin: 5px 10px; - - &:before, - &:after{ - display:none; - } - } - } - p{ - display: none; - } - - i{ - float: none; - } - - [data-toggle="collapse"] ~ div > ul > li > a { - color: $black-color; - padding: 8px 16px; - margin: 0; - border-radius: 0; - } - - [data-toggle="collapse"] ~ div > ul > li:last-child > a{ - margin-bottom: 5px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - } - - [data-toggle="collapse"] ~ div > ul > li:first-child > a{ - margin-top: 5px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - } - - } - - .info{ - - > a{ - height: 0; - padding: 0; - opacity: 0; - } - - .collapse .nav{ - li{ - >a{ - margin: 0; - border-radius: 0; - - - } - } - } - - [data-toggle="collapse"] ~ div > ul > li:last-child > a{ - margin-bottom: 5px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - } - - [data-toggle="collapse"] ~ div > ul > li:first-child > a{ - margin-top: 5px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - } - } - - .user{ - position: relative; - // margin-top: 20px; - // padding: $padding-zero; - // padding-bottom: 20px; - - .nav{ - - a{ - color: $black-color; - } - } - - .photo{ - width: 50px; - height: 50px; - border-width: 2px; - } - - &:hover{ - - .collapse{ - @extend .hover-collapse; - } - } - } - - .collapse .nav{ - width: 160px; - height: auto; - position: relative; - - li{ - & > a:hover, - & > a:focus{ - - background-color: $smoke-bg; - opacity: 1; - text-decoration: none; - } - } - &:after{ - border-right: 11px solid #fff; - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - position: absolute; - content: ""; - display: inline-block; - left:-10px; - top:8px; - } - - - li.active{ - > a{ - background-color: $smoke-bg; - opacity: 1; - text-decoration: none; - } - } - - &:before{ - border-right: 11px solid #ccc; - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - position: absolute; - content: ""; - display: inline-block; - left:-11px; - top:8px; - } - &:after{ - border-right: 11px solid #fff; - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - position: absolute; - content: ""; - display: inline-block; - left:-10px; - top:8px; - } - - } - - } - - .main-panel{ - width: calc(100% - 80px); - margin-left: 80px; - } - - .wrapper{ - height: auto; - } - - .sidebar, - .main-panel{ - overflow: visible; - max-height: none; - height: auto; - } - - .navbar-fixed{ - width: calc(100% - 80px); - } - } -} - -@media print{ - .sidebar{ - display: none !important; - } - .main-panel{ - width: 100% !important; - max-width: none !important; - max-height: none !important; - } - .wrapper{ - height: auto !important; - } -} diff --git a/frontend/assets/sass/nomad-ui/_sliders.scss b/frontend/assets/sass/nomad-ui/_sliders.scss deleted file mode 100644 index 1563e8ad..00000000 --- a/frontend/assets/sass/nomad-ui/_sliders.scss +++ /dev/null @@ -1,219 +0,0 @@ - -/*! - * jQuery UI Slider 1.10.4 - * http://jqueryui.com - * - * Copyright 2014 jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/slider/#theming - */ - -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* For IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: 4px; -} -.ui-slider-horizontal .ui-slider-handle { - margin-left: -10px; - top: -7px; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-size: 1.1em/*{fsDefault}*/; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-size: 1em; -} -.ui-widget-content { - background-color: #E5E5E5; -} -.ui-widget-content a { - color: #222222/*{fcContent}*/; -} -.ui-widget-header { - background: #999999; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -.slider-primary .ui-widget-header{ - background-color: $primary-color; -} -.slider-info .ui-widget-header{ - background-color: $info-color; -} -.slider-success .ui-widget-header{ - background-color: $success-color; -} -.slider-warning .ui-widget-header{ - background-color: $warning-color; -} -.slider-danger .ui-widget-header{ - background-color: $danger-color; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - background: rgb(255,255,255); /* Old browsers */ - background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(241,241,242,1) 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(241,241,242,1))); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(241,241,242,1) 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(241,241,242,1) 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(241,241,242,1) 100%); /* IE10+ */ - background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(241,241,242,1) 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f1f1f2',GradientType=0 ); /* IE6-9 */ - - border-radius: 50%; - box-shadow: 0 1px 1px #FFFFFF inset, 0 1px 2px rgba(0, 0, 0, 0.4); - height:15px; - width:15px; - cursor:pointer; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited { - color: #555555/*{fcDefault}*/; - text-decoration: none; -} - -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited { - color: #212121/*{fcHover}*/; - text-decoration: none; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121/*{fcActive}*/; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee; - color: #363636; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid $danger-color/*{borderColorError}*/; - background-color: $danger-color; - color: $danger-color/*{fcError}*/; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: $danger-color/*{fcError}*/; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: $danger-color/*{fcError}*/; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/_social-buttons.scss b/frontend/assets/sass/nomad-ui/_social-buttons.scss deleted file mode 100644 index 5e40c776..00000000 --- a/frontend/assets/sass/nomad-ui/_social-buttons.scss +++ /dev/null @@ -1,77 +0,0 @@ -.btn-social { - //@include btn-styles($default-color, $default-states-color); - opacity: 0.85; - padding: 8px 9px; - - .fa { - font-size: 18px; - width: 20px; - vertical-align: middle; - display: inline-block; - } - - &.btn-round { - padding: 8px; - } - - &.btn-simple { - padding: 8px 5px; - font-size: 16px; - - .fa{ - font-size: 20px; - position: relative; - top: -2px; - width: 24px; - } - } - -} - -.btn-facebook { - @include social-buttons-color($social-facebook); -} - -.btn-twitter { - @include social-buttons-color($social-twitter); -} - -.btn-pinterest { - @include social-buttons-color($social-pinterest); -} - -.btn-google { - @include social-buttons-color($social-google); -} - -.btn-linkedin { - @include social-buttons-color($social-linkedin); -} - -.btn-dribbble { - @include social-buttons-color($social-dribbble); -} - -.btn-github { - @include social-buttons-color($social-github); -} - -.btn-youtube { - @include social-buttons-color($social-youtube); -} - -.btn-stumbleupon { - @include social-buttons-color($social-stumbleupon); -} - -.btn-reddit { - @include social-buttons-color($social-reddit); -} - -.btn-tumblr { - @include social-buttons-color($social-tumblr); -} - -.btn-behance{ - @include social-buttons-color($social-behance); -} diff --git a/frontend/assets/sass/nomad-ui/_tables.scss b/frontend/assets/sass/nomad-ui/_tables.scss deleted file mode 100644 index cb33e48e..00000000 --- a/frontend/assets/sass/nomad-ui/_tables.scss +++ /dev/null @@ -1,120 +0,0 @@ -.table{ - - .radio, - .checkbox{ - position: relative; - height: 20px; - display: block; - width: 20px; - padding: 0px 0px; - margin: 0px 5px; - text-align: center; - - .icons{ - left: 5px; - } - } - > thead > tr > th, - > tbody > tr > th, - > tfoot > tr > th, - > thead > tr > td, - > tbody > tr > td, - > tfoot > tr > td{ - padding: 12px 8px; - vertical-align: middle; - border-color: $light-gray; - } - - > thead > tr > th{ - border-bottom-width: 1px; - font-size: $font-size-small; - text-transform: uppercase; - color: $dark-gray; - font-weight: $font-weight-normal; - padding-bottom: 5px; - } - - .td-actions .btn{ - @include opacity(0.36); - - &.btn-xs{ - padding-left: 3px; - padding-right: 3px; - } - } - .td-actions{ - min-width: 90px; - } - - > tbody > tr{ - position: relative; - - &:hover{ - .td-actions .btn{ - @include opacity(1); - } - } - } -} - -.table-bigboy{ - > thead > tr > th{ - font-size: $font-size-h6; - text-transform: uppercase; - color: $dark-gray; - font-weight: $font-weight-normal; - } - > tbody > tr > td{ - font-size: $font-size-base; - - b{ - display: block; - margin-bottom: 5px; - } - } - .td-name, - { - font-weight: $font-weight-light; - font-size: $font-size-h5; - } - .td-name{ - min-width: 240px; - } - .td-number{ - text-align: right; - min-width: 110px; - - small{ - margin-right: 3px; - } - } - - .td-actions{ - width: 60px; - min-width: auto; - - .btn{ - float: right; - } - } - .img-container{ - width: 180px; - height: 120px; - overflow: hidden; - display: block; - - border-radius: $border-radius-large; - - img{ - width: 100%; - } - } -} - -@include table-row-variant('success', $light-green); -@include table-row-variant('info', $light-azure); -@include table-row-variant('warning', $light-orange); -@include table-row-variant('danger', $light-red); - - - diff --git a/frontend/assets/sass/nomad-ui/_tabs-navs-pagination.scss b/frontend/assets/sass/nomad-ui/_tabs-navs-pagination.scss deleted file mode 100644 index 01701652..00000000 --- a/frontend/assets/sass/nomad-ui/_tabs-navs-pagination.scss +++ /dev/null @@ -1,302 +0,0 @@ -/* Navigation menu */ -.nav-pills { - > li + li { - margin-left: 0; - } - > li > a { - border: 1px solid $info-color; - border-radius: 0; - color: $info-color; - margin-left: -1px; - - &:hover, - &:focus{ - background-color: #F5F5F5; - } - } - > li.active > a, - > li.active > a:hover, - > li.active > a:focus { - background-color: $info-color; - color: #FFFFFF; - } - > li:first-child > a{ - border-radius: 4px 0 0 4px; - margin: 0; - } - > li:last-child > a{ - border-radius: 0 4px 4px 0; - } - -} - -.pagination > li.disabled{ - opacity: .4; -} - -.pagination.pagination-no-border > li > a, -.pagination.pagination-no-border > li > span{ - border: 0; -} -.pagination > li > a, -.pagination > li > span, -.pagination > li:first-child > a, -.pagination > li:first-child > span, -.pagination > li:last-child > a, -.pagination > li:last-child > span{ - border-radius: 50%; - margin: 0 2px; - color: $default-states-color; -} -.pagination > li.active > a, -.pagination > li.active > span, -.pagination > li.active > a:hover, -.pagination > li.active > span:hover, -.pagination > li.active > a:focus, -.pagination > li.active > span:focus { - background-color: $info-color; - border: 0; - color: #FFFFFF; - padding: 7px 13px; -} - -.nav-pills-blue{ - > li.active { - > a, - > a:hover, - > a:focus{ - background-color: $color-blue; - } - } -} - -.pagination-blue{ - > li.active{ - a, - a:hover, - a:focus, - span, - span:hover, - span:focus{ - background-color: $color-blue; - } - } -} - -.nav-pills-azure{ - > li.active { - > a, - > a:hover, - > a:focus{ - background-color: $color-azure; - } - } -} - -.pagination-azure{ - > li.active{ - a, - a:hover, - a:focus, - span, - span:hover, - span:focus{ - background-color: $color-azure; - } - } -} - -.nav-pills-green{ - > li.active { - > a, - > a:hover, - > a:focus{ - background-color: $color-green; - } - } -} - -.pagination-green{ - > li.active{ - a, - a:hover, - a:focus, - span, - span:hover, - span:focus{ - background-color: $color-green; - } - } -} - -.nav-pills-orange{ - > li.active { - > a, - > a:hover, - > a:focus{ - background-color: $color-orange; - } - } -} - -.pagination-orange{ - > li.active{ - a, - a:hover, - a:focus, - span, - span:hover, - span:focus{ - background-color: $color-orange; - } - } -} - -.nav-pills-red{ - > li.active { - > a, - > a:hover, - > a:focus{ - background-color: $color-red; - } - } -} - -.pagination-red{ - > li.active{ - a, - a:hover, - a:focus, - span, - span:hover, - span:focus{ - background-color: $color-red; - } - } -} - -.nav-pills-blue > li > a { - @include pill-style($color-blue); -} -.nav-pills-azure > li > a { - @include pill-style($color-azure); -} -.nav-pills-green > li > a { - @include pill-style($color-green); -} -.nav-pills-orange > li > a { - @include pill-style($color-orange); -} -.nav-pills-red > li > a { - @include pill-style($color-red); -} - -.nav-text, -.nav-icons{ - padding: $padding-default-vertical 0 0; - - > li > a{ - display: block; - padding: 0px $padding-base-horizontal; - color: $dark-gray; - text-align: center; - @include opacity(0.8); - - &:hover, - &:focus{ - background-color: $transparent-bg; - @include opacity(1); - } - } - > li:first-child a{ - padding-left: 0; - } - > li.active a{ - color: $info-color; - } -} - -.nav-icons > li{ - display: inline-block; - > a{ - padding: 0 10px; - margin-bottom: 10px; - } - > a i{ - font-size: $font-size-h4; - margin-bottom: 10px; - width: $font-size-h4; - } -} - -.nav-icons.nav-stacked > li{ - display: block; - > a { - margin-bottom: 20px; - } -} - -.nav-blue > li.active a{ - color: $primary-color; -} -.nav-azure > li.active a{ - color: $info-color; -} -.nav-green > li.active a{ - color: $success-color; -} -.nav-orange > li.active a{ - color: $warning-color; -} -.nav-red > li.active a{ - color: $danger-color; -} - -.nav-text{ - margin: $margin-bottom; - - > li > a{ - font-size: $font-size-h6; - text-transform: uppercase; - padding: 3px 0; - text-align: left; - font-weight: $font-weight-semi; - - } - > li:first-child > a{ - padding-top: 0; - } - h4{ - margin-top: 0; - } -} - -.nav-text:not(.nav-stacked){ - > li{ - display: inline-block; - } - > li > a{ - margin-right: 15px; - } -} - -.tab-pane { - padding: 15px 0; -} - -.nav-container{ - display: block; - width: 100%; - text-align: center; -} -.content-full-width{ - .nav-tabs{ - li:first-child{ - padding-left: $padding-default-horizontal; - } - } - .tab-pane{ - padding: $padding-default-horizontal; - } -} - diff --git a/frontend/assets/sass/nomad-ui/_tags.scss b/frontend/assets/sass/nomad-ui/_tags.scss deleted file mode 100644 index dd207dc2..00000000 --- a/frontend/assets/sass/nomad-ui/_tags.scss +++ /dev/null @@ -1,123 +0,0 @@ - -.tagsinput { - height: $height-base; - overflow-y: auto; - text-align: left; - .tag { - @extend .animation-transition-ultra-fast; - - cursor: pointer; - overflow: hidden; - position: relative; - margin: 5px 3px 5px 0; - @include label-style(); - } - - .tag:hover{ - padding-left: 10px; - padding-right: 14px; - } - - .tagsinput-add { - color: $black-color; - cursor: pointer; - display: inline-block; - font-size: 14px; - padding: 5px 6px; - margin: 5px 0 0; - vertical-align: top; - @include opacity(0.8); - - &:hover, - &:focus{ - @include opacity(1); - } - } - .tagsinput-add:before { - content: "\f067"; - font-family: "FontAwesome"; - } - - .tagsinput-remove-link { - @extend .animation-transition-ultra-fast; - - color: $default-color; - cursor: pointer; - font-size: 12px; - padding: 2px 0; - position: absolute; - right: 0; - opacity: 0; - text-align: right; - text-decoration: none; - top: 0; - width: 100%; - z-index: 2; - } - .tag:hover .tagsinput-remove-link { - opacity: 1; - padding-right: 6px; - } - .tagsinput-remove-link:before { - content: "\f00d"; - font-family: "FontAwesome"; - } - .tagsinput-add-container { - display: inline-block; - vertical-align: middle; - } - input{ - background: transparent; - border: none; - color: $black-color; - margin: 0; - outline: medium none !important; - padding: 0 0 0 5px; - vertical-align: top; - width: 30px; - height: 40px; - } - - &.tag-blue .tag, - &.tag-blue .tagsinput-remove-link{ - @include label-color($primary-color); - } - &.tag-azure .tag, - &.tag-azure .tagsinput-remove-link{ - @include label-color($info-color); - } - &.tag-green .tag, - &.tag-green .tagsinput-remove-link{ - @include label-color($success-color); - } - &.tag-orange .tag, - &.tag-orange .tagsinput-remove-link{ - @include label-color($warning-color); - } - &.tag-red .tag, - &.tag-red .tagsinput-remove-link{ - @include label-color($danger-color); - } - - &.tag-fill{ - &.tag-blue .tag{ - @include label-color-fill($primary-color); - } - &.tag-azure .tag{ - @include label-color-fill($info-color); - } - &.tag-green .tag{ - @include label-color-fill($success-color); - } - &.tag-orange .tag{ - @include label-color-fill($warning-color); - } - &.tag-red .tag{ - @include label-color-fill($danger-color); - } - } - &.tag-fill .tagsinput-remove-link{ - color: $white-color; - } - -} diff --git a/frontend/assets/sass/nomad-ui/_tooltips-and-popovers.scss b/frontend/assets/sass/nomad-ui/_tooltips-and-popovers.scss deleted file mode 100644 index 70547db5..00000000 --- a/frontend/assets/sass/nomad-ui/_tooltips-and-popovers.scss +++ /dev/null @@ -1,156 +0,0 @@ -.tooltip { - font-size: $font-size-base; - font-weight: $font-weight-bold; - - &.top { - margin-top: -11px; - padding: 0; - } - &.top .tooltip-inner:after { - border-top: 11px solid #FAE6A4; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - bottom: -10px; - } - &.top .tooltip-inner:before { - border-top: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - bottom: -11px; - } - &.bottom { - margin-top: 11px; - padding: 0; - } - &.bottom .tooltip-inner:after { - border-bottom: 11px solid #FAE6A4; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - top: -10px; - } - &.bottom .tooltip-inner:before { - border-bottom: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - top: -11px; - } - &.left{ - margin-left: -11px; - padding: 0; - } - &.left .tooltip-inner:after { - border-left: 11px solid #FAE6A4; - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - right: -10px; - left: auto; - margin-left: 0; - } - &.left .tooltip-inner:before { - border-left: 11px solid rgba(0, 0, 0, 0.2); - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - right: -11px; - left: auto; - margin-left: 0; - } - &.right{ - margin-left: 11px; - padding: 0; - } - &.right .tooltip-inner:after { - border-right: 11px solid #FAE6A4; - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - left: -10px; - top: 0; - margin-left: 0; - } - &.right .tooltip-inner:before { - border-right: 11px solid rgba(0, 0, 0, 0.2); - border-top: 11px solid rgba(0, 0, 0, 0); - border-bottom: 11px solid rgba(0, 0, 0, 0); - left: -11px; - top: 0; - margin-left: 0; - } -} - -.tooltip-arrow{ - display: none; - opacity: 0; -} -.tooltip-inner { - background-color: #FAE6A4; - border-radius: 4px; - box-shadow: 0 1px 13px rgba(0, 0, 0, 0.14), 0 0 0 1px rgba(115, 71, 38, 0.23); - color: #734726; - max-width: 280px; - min-width: 90px; - padding: 6px 10px; - text-align: center; - text-decoration: none; -} -.tooltip-inner:after { - content: ""; - display: inline-block; - left: 100%; - margin-left: -60%; - position: absolute; -} -.tooltip-inner:before { - content: ""; - display: inline-block; - left: 100%; - margin-left: -60%; - position: absolute; -} - -.popover{ - padding: 0; - border-radius: $border-radius-extreme; - z-index: 1031; - border: 0; - @include box-shadow(none); -} -.popover-title{ - font-size: $font-paragraph; - background-color: $azure-navbar; - font-weight: normal; - line-height: 22px; - padding: 8px 15px; - margin: 0; - color: $white-color; - text-align: center; - border-radius: $border-radius-extreme $border-radius-extreme 0 0; -} -.popover-content{ - padding: 9px 15px; -} -.popover .arrow{ - border: 0; -} -.popover.top .arrow{ - margin-left: 0; -} -.popover.bottom .arrow:after{ - border-bottom-color: $azure-navbar; -} -.popover-filter{ - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000000; - @include opacity(0); - visibility: hidden; - - transition: visibility 0s linear 0.3s,opacity 0.3s linear; -} -.popover-filter.in{ - visibility:visible; - @include opacity(0.2); - transition-delay: 0s; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/_typography.scss b/frontend/assets/sass/nomad-ui/_typography.scss deleted file mode 100644 index 6e181beb..00000000 --- a/frontend/assets/sass/nomad-ui/_typography.scss +++ /dev/null @@ -1,93 +0,0 @@ -/* Font Smoothing */ -body, -h1, .h1, -h2, .h2, -h3, .h3, -h4, .h4, -h5, .h5, -h6, .h6, -p, -.navbar, -.brand, -.btn-simple, -.alert, -a, -.td-name, -td, -button.close{ - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - font-family: "Roboto","Helvetica Neue",Arial,sans-serif; - font-weight: $font-weight-normal; -} - -h1, .h1, h2, .h2, h3, .h3, h4, .h4{ - font-weight: $font-weight-light; - margin: $margin-large-vertical 0 $margin-base-vertical; -} - -h1, .h1 { - font-size: $font-size-h1; -} -h2, .h2{ - font-size: $font-size-h2; -} -h3, .h3{ - font-size: $font-size-h3; - margin: 20px 0 10px; -} -h4, .h4{ - font-size: $font-size-h4; - line-height: 30px; -} -h5, .h5 { - font-size: $font-size-h5; - margin-bottom: 15px; -} -h6, .h6{ - font-size: $font-size-h6; - font-weight: $font-weight-bold; - text-transform: uppercase; -} -p{ - font-size: $font-paragraph; - line-height: $line-height-general; -} - -h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { - color: $dark-gray; - font-weight: $font-weight-light; - line-height: $line-height-general; -} - -h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { - font-size: 60%; -} - -h1 .subtitle{ - display: block; - margin: 0 0 $margin-large-vertical; -} - -.text-muted{ - color: #9A9A9A; -} -.text-primary, .text-primary:hover{ - color: #1D62F0 !important; -} -.text-info, .text-info:hover{ - color: $info-color !important; -} -.text-success, .text-success:hover{ - color: $success-color !important; -} -.text-warning, .text-warning:hover{ - color: $warning-color !important; -} -.text-danger, .text-danger:hover{ - color: $danger-color !important; -} - -.text-space{ - padding: 70px 0; -} diff --git a/frontend/assets/sass/nomad-ui/_variables.scss b/frontend/assets/sass/nomad-ui/_variables.scss deleted file mode 100644 index 2bb62212..00000000 --- a/frontend/assets/sass/nomad-ui/_variables.scss +++ /dev/null @@ -1,320 +0,0 @@ -// General Colors - - -$color-azure: #23CCEF; -$color-purple: #9368E9; -$color-red: #FB404B; -$color-green: #87CB16; -$color-orange: #FFA534; -$color-blue: #447DF7; -$color-black: #5e5e5e; -$color-nomad: #449b82; -$color-nomad-dark: darken($color-nomad, 20%) !default; - -/* light colors */ - -$light-blue: rgba($color-blue, .2); -$light-azure: rgba($color-azure, .2); -$light-green: rgba($color-green, .2); -$light-orange: rgba($color-orange, .2); -$light-red: rgba($color-red, .2); - - -$default-color: #888888 !default; - -$black-color: #333333 !default; -$black-hr: #444444 !default; - -$light-gray: #E3E3E3 !default; -$medium-gray: #DDDDDD !default; -$placeholder-gray: #C3C3C3 !default; -$medium-dark-gray: #AAAAAA !default; -$dark-gray: #9A9A9A !default; - -// Gradients colors - -$default-color-top: #d9d9d9; -$default-color-bottom: #909297; - -$blue-color-top: #4087ea; -$blue-color-bottom: #533ce1; - -$azure-color-top: #45c0fd; -$azure-color-bottom: #4091ff; - -$green-color-top: #a1eb3a; -$green-color-bottom: #6dc030; - -$orange-color-top: #ffb33b; -$orange-color-bottom: #ec1657; - -$red-color-top: #ff3b30; -$red-color-bottom: #bb0502; - -$purple-color-top: #df55e1; -$purple-color-bottom: #943bea; - -$pink-color-top: #ff2a63; -$pink-color-bottom: #ff2e2e; - -$black-color-top: #787878; -$black-color-bottom: #343434; - - -$social-facebook: #3b5998; -$social-twitter: #55acee; -$social-pinterest: #cc2127; -$social-google: #dd4b39; -$social-linkedin: #0976b4; -$social-dribbble: #ea4c89; -$social-github: #333333; -$social-youtube: #e52d27; -$social-stumbleupon: #eb4924; -$social-reddit: #ff4500; -$social-tumblr: #35465c; -$social-behance: #1769ff; - - -$filter-blue: darken($color-blue, 10%); -$filter-azure: darken($color-azure, 10%); -$filter-green: darken($color-green, 10%); -$filter-orange: darken($color-orange, 10%); -$filter-red: darken($color-red, 10%); - - -$white-navbar: rgba(#FFFFFF, .96); -$blue-navbar: lighten($color-blue, 10%); -$azure-navbar: lighten($color-azure, 15%); -$green-navbar: lighten($color-green, 10%); -$orange-navbar: lighten($color-orange, 10%); -$red-navbar: lighten($color-red, 10%); - - - - -//== Buttons -// -//## For each of Bootstrap's buttons, define text, background and border color. - -$none: 0 !default; -$border-thin: 1px !default; -$border-thick: 2px !default; - -$white-color: #FFFFFF !default; -$white-bg: #FFFFFF !default; - -$smoke-bg: #F5F5F5 !default; - -$black-bg: rgba(30,30,30,.97) !default; - -$transparent-bg: transparent !default; - - -$default-bg: $default-color !default; -$default-states-color: darken($default-color, 6%) !default; - -$primary-color: $color-blue !default; -$primary-bg: $color-blue !default; -$primary-states-color: darken($color-blue, 5%) !default; - -$info-color: $color-azure !default; -$info-bg: $color-azure !default; -$info-states-color: darken($info-bg, 5%) !default; - -$success-color: $color-green !default; -$success-bg: $color-green !default; -$success-states-color: darken($color-green, 5%) !default; - -$warning-color: $color-orange !default; -$warning-bg: $color-orange !default; -$warning-states-color: darken($color-orange, 7%) !default; - - -$danger-color: $color-red !default; -$danger-bg: $color-red !default; -$danger-states-color: darken($color-red, 8%) !default; - -$link-disabled-color: #666666 !default; - - -//== Components -// - -$padding-default-vertical: 10px !default; -$padding-default-horizontal: 15px !default; - - -$padding-base-vertical: 8px !default; -$padding-base-horizontal: 16px !default; - -$padding-round-vertical: 8px !default; -$padding-round-horizontal: 16px !default; - -$padding-simple-vertical: 9px !default; -$padding-simple-horizontal: 16px !default; - -$padding-large-vertical: 14px !default; -$padding-large-horizontal: 30px !default; - -$padding-small-vertical: 5px !default; -$padding-small-horizontal: 10px !default; - -$padding-xs-vertical: 1px !default; -$padding-xs-horizontal: 5px !default; - -$padding-label-vertical: 2px !default; -$padding-label-horizontal: 12px !default; - -$margin-large-vertical: 30px !default; -$margin-base-vertical: 15px !default; - -$margin-base: 15px !default; - -$padding-zero: 0px !default; - -$margin-bottom: 0 0 10px 0 !default; -$border-radius-small: 3px !default; -$border-radius-base: 4px !default; -$border-radius-large: 6px !default; -$border-radius-extreme: 10px !default; - -$border-radius-large-top: $border-radius-large $border-radius-large 0 0 !default; -$border-radius-large-bottom: 0 0 $border-radius-large $border-radius-large !default; - -$btn-round-radius: 30px !default; - -$height-base: 40px !default; - -$font-size-base: 14px !default; -$font-size-small: 12px !default; -$font-size-medium: 16px !default; -$font-size-large: 18px !default; -$font-size-large-navbar: 20px !default; - -$font-size-h1: 52px !default; -$font-size-h2: 36px !default; -$font-size-h3: 28px !default; -$font-size-h4: 22px !default; -$font-size-h5: 18px !default; -$font-size-h6: 14px !default; -$font-paragraph: 16px !default; -$font-size-navbar: 16px !default; -$font-size-small: 12px !default; - -$font-weight-light: 300 !default; -$font-weight-normal: 400 !default; -$font-weight-semi: 500 !default; -$font-weight-bold: 600 !default; - -$line-height-general: 1.5 !default; -$line-height: 20px !default; -$line-height-lg: 54px !default; - -$sidebar-width: calc(100% - 260px) !default; - - -$border-radius-top: 10px 10px 0 0 !default; -$border-radius-bottom: 0 0 10px 10px !default; - -$dropdown-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125); - -$general-transition-time: 300ms !default; - -$slow-transition-time: 370ms !default; -$dropdown-coordinates: 29px -50px !default; - -$fast-transition-time: 150ms !default; -$ultra-fast-transition-time: 60ms !default; - -$select-coordinates: 50% -40px !default; - -$transition-linear: linear !default; -$transition-bezier: cubic-bezier(0.34, 1.61, 0.7, 1) !default; -$transition-ease: ease 0s; -$transition-ease-in: ease-in !default; -$transition-ease-out: ease-out !default; - - -$navbar-padding-a: 10px 15px; -$navbar-margin-a: 10px 3px; - -$padding-social-a: 10px 5px; - -$navbar-margin-a-btn: 15px 3px; -$navbar-margin-a-btn-round: 16px 3px; - -$navbar-padding-a-icons: 6px 15px; -$navbar-margin-a-icons: 6px 3px; - -$navbar-padding-brand: 15px 15px; -$navbar-margin-brand: 7px 0px; - -$navbar-margin-brand-icons: 12px auto; - -$navbar-margin-btn: 10px 3px; - -$height-icon: 64px !default; -$width-icon: 64px !default; -$padding-icon: 12px !default; -$border-radius-icon: 15px !default; - -$size-icon: 64px; -$size-icon-sm: 32px; - -$height-icon-sm: 32px; -$width-icon-sm: 32px; -$padding-icon-sm: 4px; -$border-radius-icon-sm: 7px; - -$height-icon-message: 40px; -$width-icon-message: 40px; - -$height-icon-message-sm: 20px; -$width-icon-message-sm: 20px; - - - -$topbar-x: topbar-x !default; -$topbar-back: topbar-back !default; -$bottombar-x: bottombar-x !default; -$bottombar-back: bottombar-back !default; - - - -//== Media queries breakpoints -// -//## Define the breakpoints at which your layout will change, adapting to different screen sizes. - -// Extra small screen / phone -//** Deprecated `$screen-xs` as of v3.0.1 -$screen-xs: 480px !default; -//** Deprecated `$screen-xs-min` as of v3.2.0 -$screen-xs-min: $screen-xs !default; -//** Deprecated `$screen-phone` as of v3.0.1 -$screen-phone: $screen-xs-min !default; - -// Small screen / tablet -//** Deprecated `$screen-sm` as of v3.0.1 -$screen-sm: 768px !default; -$screen-sm-min: $screen-sm !default; -//** Deprecated `$screen-tablet` as of v3.0.1 -$screen-tablet: $screen-sm-min !default; - -// Medium screen / desktop -//** Deprecated `$screen-md` as of v3.0.1 -$screen-md: 992px !default; -$screen-md-min: $screen-md !default; -//** Deprecated `$screen-desktop` as of v3.0.1 -$screen-desktop: $screen-md-min !default; - -// Large screen / wide desktop -//** Deprecated `$screen-lg` as of v3.0.1 -$screen-lg: 1200px !default; -$screen-lg-min: $screen-lg !default; -//** Deprecated `$screen-lg-desktop` as of v3.0.1 -$screen-lg-desktop: $screen-lg-min !default; - -// So media queries don't overlap when required, provide a maximum -$screen-xs-max: ($screen-sm-min - 1) !default; -$screen-sm-max: ($screen-md-min - 1) !default; -$screen-md-max: ($screen-lg-min - 1) !default; diff --git a/frontend/assets/sass/nomad-ui/mixins/_buttons.scss b/frontend/assets/sass/nomad-ui/mixins/_buttons.scss deleted file mode 100644 index 21c0696a..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_buttons.scss +++ /dev/null @@ -1,74 +0,0 @@ -// Mixin for generating new styles -@mixin btn-styles($btn-color, $btn-states-color) { - border-color: $btn-color; - color: $btn-color; - - &:hover, - &:focus, - &:active, - &.active, - &:active:focus, - &:active:hover, - &.active:focus, - &.active:hover, - .open > &.dropdown-toggle { - background-color: $transparent-bg; - color: $btn-states-color; - border-color: $btn-states-color; - } - - &.disabled, - &:disabled, - &[disabled], - fieldset[disabled] & { - &, - &:hover, - &:focus, - &.focus, - &:active, - &.active { - background-color: $transparent-bg; - border-color: $btn-color; - } - } - - - &.btn-fill { - color: $white-color; - background-color: $btn-color; - @include opacity(1); - - &:hover, - &:focus, - &:active, - &.active, - .open > &.dropdown-toggle{ - background-color: $btn-states-color; - color: $white-color; - } - - .caret{ - border-top-color: $white-color; - } - } - - .caret{ - border-top-color: $btn-color; - } -} - - -@mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){ - font-size: $font-size; - border-radius: $border; - padding: $padding-vertical $padding-horizontal; - - &.btn-round{ - padding: $padding-vertical + 1 $padding-horizontal; - } - - &.btn-simple{ - padding: $padding-vertical + 2 $padding-horizontal; - } - -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_cards.scss b/frontend/assets/sass/nomad-ui/mixins/_cards.scss deleted file mode 100644 index af1f955a..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_cards.scss +++ /dev/null @@ -1,8 +0,0 @@ -@mixin filter($color){ - @if $color == #FFFFFF{ - background-color: rgba($color,.91); - } @else { - background-color: rgba($color,.69); - } -} - diff --git a/frontend/assets/sass/nomad-ui/mixins/_chartist.scss b/frontend/assets/sass/nomad-ui/mixins/_chartist.scss deleted file mode 100644 index 1e6b6c0e..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_chartist.scss +++ /dev/null @@ -1,85 +0,0 @@ -// Scales for responsive SVG containers -$ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default; -$ct-scales-names: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default; - -// Class names to be used when generating CSS -$ct-class-chart: ct-chart !default; -$ct-class-chart-line: ct-chart-line !default; -$ct-class-chart-bar: ct-chart-bar !default; -$ct-class-horizontal-bars: ct-horizontal-bars !default; -$ct-class-chart-pie: ct-chart-pie !default; -$ct-class-chart-donut: ct-chart-donut !default; -$ct-class-label: ct-label !default; -$ct-class-series: ct-series !default; -$ct-class-line: ct-line !default; -$ct-class-point: ct-point !default; -$ct-class-area: ct-area !default; -$ct-class-bar: ct-bar !default; -$ct-class-slice-pie: ct-slice-pie !default; -$ct-class-slice-donut: ct-slice-donut !default; -$ct-class-grid: ct-grid !default; -$ct-class-vertical: ct-vertical !default; -$ct-class-horizontal: ct-horizontal !default; -$ct-class-start: ct-start !default; -$ct-class-end: ct-end !default; - -// Container ratio -$ct-container-ratio: (1/1.618) !default; - -// Text styles for labels -$ct-text-color: rgba(0, 0, 0, 0.4) !default; -$ct-text-size: 1.3rem !default; -$ct-text-align: flex-start !default; -$ct-text-justify: flex-start !default; -$ct-text-line-height: 1; - -// Grid styles -$ct-grid-color: rgba(0, 0, 0, 0.2) !default; -$ct-grid-dasharray: 2px !default; -$ct-grid-width: 1px !default; - -// Line chart properties -$ct-line-width: 3px !default; -$ct-line-dasharray: false !default; -$ct-point-size: 8px !default; -// Line chart point, can be either round or square -$ct-point-shape: round !default; -// Area fill transparency between 0 and 1 -$ct-area-opacity: 0.8 !default; - -// Bar chart bar width -$ct-bar-width: 10px !default; - -// Donut width (If donut width is to big it can cause issues where the shape gets distorted) -$ct-donut-width: 60px !default; - -// If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you -// should set this property to false -$ct-include-classes: true !default; - -// If this is set to true the CSS will contain colored series. You can extend or change the color with the -// properties below -$ct-include-colored-series: $ct-include-classes !default; - -// If set to true this will include all responsive container variations using the scales defined at the top of the script -$ct-include-alternative-responsive-containers: $ct-include-classes !default; - -// Series names and colors. This can be extended or customized as desired. Just add more series and colors. -$ct-series-names: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) !default; -$ct-series-colors: ( - $color-azure, - $color-red, - $color-orange, - $color-purple, - $color-green, - $color-blue, - $color-black, - $social-google, - $social-tumblr, - $social-youtube, - $social-twitter, - $social-pinterest, - $social-behance, - #6188e2, - #a748ca -) !default; diff --git a/frontend/assets/sass/nomad-ui/mixins/_icons.scss b/frontend/assets/sass/nomad-ui/mixins/_icons.scss deleted file mode 100644 index 80df4dff..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_icons.scss +++ /dev/null @@ -1,13 +0,0 @@ -@mixin icon-background ($icon-url){ - background-image : url($icon-url); - -} - -@mixin icon-shape ($size, $padding, $border-radius) { - height: $size; - width: $size; - padding: $padding; - border-radius: $border-radius; - display: inline-table; - -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_inputs.scss b/frontend/assets/sass/nomad-ui/mixins/_inputs.scss deleted file mode 100644 index 870c918c..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_inputs.scss +++ /dev/null @@ -1,17 +0,0 @@ -@mixin input-size($padding-vertical, $padding-horizontal, $height){ - padding: $padding-vertical $padding-horizontal; - height: $height; -} - -@mixin placeholder($color, $opacity){ - color: $color; - @include opacity(1); -} - -@mixin light-form(){ - border-radius: 0; - border:0; - padding: 0; - background-color: transparent; - -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_labels.scss b/frontend/assets/sass/nomad-ui/mixins/_labels.scss deleted file mode 100644 index 8a2bdd5d..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_labels.scss +++ /dev/null @@ -1,21 +0,0 @@ -@mixin label-style(){ - padding: $padding-label-vertical $padding-label-horizontal; - border: 1px solid $default-color; - border-radius: $border-radius-small; - color: $default-color; - font-weight: $font-weight-semi; - font-size: $font-size-small; - text-transform: uppercase; - display: inline-block; - vertical-align: middle; -} - -@mixin label-color($color){ - border-color: $color; - color: $color; -} -@mixin label-color-fill($color){ - border-color: $color; - color: $white-color; - background-color: $color; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_morphing-buttons.scss b/frontend/assets/sass/nomad-ui/mixins/_morphing-buttons.scss deleted file mode 100644 index 1a4e986d..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_morphing-buttons.scss +++ /dev/null @@ -1,34 +0,0 @@ -$prefixes: ('', '-moz-', '-webkit-', '-ms-') !default; - -@mixin circle-animation(){ - @for $i from 0 to length($prefixes) { - @include circle-animation-details(nth($prefixes, $i + 1)); - } -} - -@mixin circle-animation-details($name){ - #{$name}animation-name: spin; - #{$name}animation-duration: 1250ms; - #{$name}animation-iteration-count: infinite; - #{$name}animation-timing-function: linear; - -} -@keyframes spin { - from { transform:rotate(0deg); } - to { transform:rotate(360deg); } -} - -@-webkit-keyframes spin { - from { -webkit-transform: rotate(0deg); } - to { -webkit-transform: rotate(360deg); } -} - -@-moz-keyframes spin { - from { -moz-transform: rotate(0deg); } - to { -moz-transform: rotate(360deg); } -} - -@-ms-keyframes spin { - from { -ms-transform: rotate(0deg); } - to { -ms-transform: rotate(360deg); } -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_navbars.scss b/frontend/assets/sass/nomad-ui/mixins/_navbars.scss deleted file mode 100644 index 6f500463..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_navbars.scss +++ /dev/null @@ -1,11 +0,0 @@ -@mixin navbar-color($color){ - background-color: $color; -} - -@mixin center-item(){ - left: 0; - right: 0; - margin-right: auto; - margin-left: auto; - position: absolute; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_social-buttons.scss b/frontend/assets/sass/nomad-ui/mixins/_social-buttons.scss deleted file mode 100644 index 38a7d4bd..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_social-buttons.scss +++ /dev/null @@ -1,43 +0,0 @@ -@mixin social-buttons-color ($color){ - - border-color: $color; - color: $color; - - &:hover, - &:focus, - &:active, - &.active, - .open > &.dropdown-toggle { - background-color: $transparent-bg; - color: $color; - border-color: $color; - opacity: 1; - } - - &:disabled, - &[disabled], - &.disabled { - background-color: $transparent-bg; - border-color: $color; - } - - &.btn-fill { - color: $white-color; - background-color: $color; - opacity: 0.9; - - &:hover, - &:focus, - &:active, - &.active, - .open > &.dropdown-toggle{ - background-color: $color; - color: $white-color; - opacity: 1; - } - - } - - -} - \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_table-row.scss b/frontend/assets/sass/nomad-ui/mixins/_table-row.scss deleted file mode 100644 index 30f99c3f..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_table-row.scss +++ /dev/null @@ -1,22 +0,0 @@ -@mixin table-row-variant($state, $background) { - .table > thead > tr, - .table > tbody > tr, - .table > tfoot > tr { - > td.#{$state}, - > th.#{$state}, - &.#{$state} > td, - &.#{$state} > th { - background-color: $background; - } - } - - .table-hover > tbody > tr { - > td.#{$state}:hover, - > th.#{$state}:hover, - &.#{$state}:hover > td, - &:hover > .#{$state}, - &.#{$state}:hover > th { - background-color: lighten($background, 3%); - } - } -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_tabs.scss b/frontend/assets/sass/nomad-ui/mixins/_tabs.scss deleted file mode 100644 index edf6f580..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_tabs.scss +++ /dev/null @@ -1,4 +0,0 @@ -@mixin pill-style($color){ - border: 1px solid $color; - color: $color; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_transparency.scss b/frontend/assets/sass/nomad-ui/mixins/_transparency.scss deleted file mode 100644 index da32b745..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_transparency.scss +++ /dev/null @@ -1,20 +0,0 @@ -// Opacity - -@mixin opacity($opacity) { - opacity: $opacity; - // IE8 filter - $opacity-ie: ($opacity * 100); - filter: #{alpha(opacity=$opacity-ie)}; -} - -@mixin black-filter($opacity){ - top: 0; - left: 0; - height: 100%; - width: 100%; - position: absolute; - background-color: rgba(17,17,17,$opacity); - display: block; - content: ""; - z-index: 1; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/mixins/_vendor-prefixes.scss b/frontend/assets/sass/nomad-ui/mixins/_vendor-prefixes.scss deleted file mode 100644 index 275c2fb0..00000000 --- a/frontend/assets/sass/nomad-ui/mixins/_vendor-prefixes.scss +++ /dev/null @@ -1,197 +0,0 @@ -// User select -// For selecting text on the page - -@mixin user-select($select) { - -webkit-user-select: $select; - -moz-user-select: $select; - -ms-user-select: $select; // IE10+ - user-select: $select; -} - -@mixin box-shadow($shadow...) { - -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1 - box-shadow: $shadow; -} - -// Box sizing -@mixin box-sizing($boxmodel) { - -webkit-box-sizing: $boxmodel; - -moz-box-sizing: $boxmodel; - box-sizing: $boxmodel; -} - - -@mixin transition($time, $type){ - -webkit-transition: all $time $type; - -moz-transition: all $time $type; - -o-transition: all $time $type; - -ms-transition: all $time $type; - transition: all $time $type; -} - -@mixin transform-scale($value){ - -webkit-transform: scale($value); - -moz-transform: scale($value); - -o-transform: scale($value); - -ms-transform: scale($value); - transform: scale($value); -} - -@mixin transform-translate-x($value){ - -webkit-transform: translate3d($value, 0, 0); - -moz-transform: translate3d($value, 0, 0); - -o-transform: translate3d($value, 0, 0); - -ms-transform: translate3d($value, 0, 0); - transform: translate3d($value, 0, 0); -} - -@mixin transform-translate-y($value){ - -webkit-transform: translate3d(0, $value, 0); - -moz-transform: translate3d(0, $value, 0); - -o-transform: translate3d(0, $value, 0); - -ms-transform: translate3d(0, $value, 0); - transform: translate3d(0, $value, 0); -} - -@mixin transform-origin($coordinates){ - -webkit-transform-origin: $coordinates; - -moz-transform-origin: $coordinates; - -o-transform-origin: $coordinates; - -ms-transform-origin: $coordinates; - transform-origin: $coordinates; -} - -@mixin line-gradient($top-color, $bottom-color){ - background: $top-color; - background: -moz-linear-gradient(top, $top-color 0%, $bottom-color 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$top-color), color-stop(100%,$bottom-color)); - background: -webkit-linear-gradient(top, $top-color 0%,$bottom-color 100%); - background: -o-linear-gradient(top, $top-color 0%,$bottom-color 100%); - background: -ms-linear-gradient(top, $top-color 0%,$bottom-color 100%); - background: linear-gradient(to bottom, $top-color 0%,$bottom-color 100%); - background-size: 150% 150%; -} - -@mixin radial-gradient($extern-color, $center-color){ - background: $extern-color; - background: -moz-radial-gradient(center, ellipse cover, $center-color 0%, $extern-color 100%); /* FF3.6+ */ - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,$center-color), color-stop(100%,$extern-color)); /* Chrome,Safari4+ */ - background: -webkit-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Chrome10+,Safari5.1+ */ - background: -o-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Opera 12+ */ - background: -ms-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* IE10+ */ - background: radial-gradient(ellipse at center, $center-color 0%,$extern-color 100%); /* W3C */ - background-size: 550% 450%; -} - -@mixin vertical-align { - position: relative; - top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); -} - -@mixin rotate-180(){ - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -@mixin bar-animation($type){ - -webkit-animation: $type 500ms linear 0s; - -moz-animation: $type 500ms linear 0s; - animation: $type 500ms 0s; - -webkit-animation-fill-mode: forwards; - -moz-animation-fill-mode: forwards; - animation-fill-mode: forwards; -} - -@mixin topbar-x-rotation(){ - @keyframes topbar-x { - 0% {top: 0px; transform: rotate(0deg); } - 45% {top: 6px; transform: rotate(145deg); } - 75% {transform: rotate(130deg); } - 100% {transform: rotate(135deg); } - } - @-webkit-keyframes topbar-x { - 0% {top: 0px; -webkit-transform: rotate(0deg); } - 45% {top: 6px; -webkit-transform: rotate(145deg); } - 75% {-webkit-transform: rotate(130deg); } - 100% { -webkit-transform: rotate(135deg); } - } - @-moz-keyframes topbar-x { - 0% {top: 0px; -moz-transform: rotate(0deg); } - 45% {top: 6px; -moz-transform: rotate(145deg); } - 75% {-moz-transform: rotate(130deg); } - 100% { -moz-transform: rotate(135deg); } - } -} - -@mixin topbar-back-rotation(){ - @keyframes topbar-back { - 0% { top: 6px; transform: rotate(135deg); } - 45% { transform: rotate(-10deg); } - 75% { transform: rotate(5deg); } - 100% { top: 0px; transform: rotate(0); } - } - - @-webkit-keyframes topbar-back { - 0% { top: 6px; -webkit-transform: rotate(135deg); } - 45% { -webkit-transform: rotate(-10deg); } - 75% { -webkit-transform: rotate(5deg); } - 100% { top: 0px; -webkit-transform: rotate(0); } - } - - @-moz-keyframes topbar-back { - 0% { top: 6px; -moz-transform: rotate(135deg); } - 45% { -moz-transform: rotate(-10deg); } - 75% { -moz-transform: rotate(5deg); } - 100% { top: 0px; -moz-transform: rotate(0); } - } -} - -@mixin bottombar-x-rotation(){ - @keyframes bottombar-x { - 0% {bottom: 0px; transform: rotate(0deg);} - 45% {bottom: 6px; transform: rotate(-145deg);} - 75% {transform: rotate(-130deg);} - 100% {transform: rotate(-135deg);} - } - @-webkit-keyframes bottombar-x { - 0% {bottom: 0px; -webkit-transform: rotate(0deg);} - 45% {bottom: 6px; -webkit-transform: rotate(-145deg);} - 75% {-webkit-transform: rotate(-130deg);} - 100% {-webkit-transform: rotate(-135deg);} - } - @-moz-keyframes bottombar-x { - 0% {bottom: 0px; -moz-transform: rotate(0deg);} - 45% {bottom: 6px; -moz-transform: rotate(-145deg);} - 75% {-moz-transform: rotate(-130deg);} - 100% {-moz-transform: rotate(-135deg);} - } -} - -@mixin bottombar-back-rotation(){ - @keyframes bottombar-back { - 0% { bottom: 6px;transform: rotate(-135deg);} - 45% { transform: rotate(10deg);} - 75% { transform: rotate(-5deg);} - 100% { bottom: 0px;transform: rotate(0);} - } - @-webkit-keyframes bottombar-back { - 0% {bottom: 6px;-webkit-transform: rotate(-135deg);} - 45% {-webkit-transform: rotate(10deg);} - 75% {-webkit-transform: rotate(-5deg);} - 100% {bottom: 0px;-webkit-transform: rotate(0);} - } - @-moz-keyframes bottombar-back { - 0% {bottom: 6px;-moz-transform: rotate(-135deg);} - 45% {-moz-transform: rotate(10deg);} - 75% {-moz-transform: rotate(-5deg);} - 100% {bottom: 0px;-moz-transform: rotate(0);} - } - -} - - diff --git a/frontend/assets/sass/nomad-ui/plugins/_animate.scss b/frontend/assets/sass/nomad-ui/plugins/_animate.scss deleted file mode 100644 index a019f044..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_animate.scss +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - - - - - - -// This file was modified by Creative Tim to keep only the animation that we need for Bootstrap Notify - - - - - - - - - - - - - - - -@charset "UTF-8"; - -/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - http://opensource.org/licenses/MIT - -Copyright (c) 2015 Daniel Eden -*/ - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.animated.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} - -.animated.bounceIn, -.animated.bounceOut { - -webkit-animation-duration: .75s; - animation-duration: .75s; -} - -.animated.flipOutX, -.animated.flipOutY { - -webkit-animation-duration: .75s; - animation-duration: .75s; -} - -@-webkit-keyframes shake { - from, to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -@keyframes shake { - from, to { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translate3d(-10px, 0, 0); - transform: translate3d(-10px, 0, 0); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translate3d(10px, 0, 0); - transform: translate3d(10px, 0, 0); - } -} - -.shake { - -webkit-animation-name: shake; - animation-name: shake; -} - - - -@-webkit-keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -@keyframes fadeInDown { - from { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } - - to { - opacity: 1; - -webkit-transform: none; - transform: none; - } -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - - -@-webkit-keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - -@keyframes fadeOut { - from { - opacity: 1; - } - - to { - opacity: 0; - } -} - -.fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -@-webkit-keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -@keyframes fadeOutDown { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, 100%, 0); - transform: translate3d(0, 100%, 0); - } -} - -.fadeOutDown { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -@-webkit-keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -@keyframes fadeOutUp { - from { - opacity: 1; - } - - to { - opacity: 0; - -webkit-transform: translate3d(0, -100%, 0); - transform: translate3d(0, -100%, 0); - } -} - -.fadeOutUp { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - diff --git a/frontend/assets/sass/nomad-ui/plugins/_bootstrap-select.scss b/frontend/assets/sass/nomad-ui/plugins/_bootstrap-select.scss deleted file mode 100644 index 55b1d97c..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_bootstrap-select.scss +++ /dev/null @@ -1,308 +0,0 @@ -/*! - * Bootstrap-select v1.8.1 (http://silviomoreto.github.io/bootstrap-select) - * - * Copyright 2013-2015 bootstrap-select - * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) - */ - -.bootstrap-select { - width: 220px \0; - /*IE9 and below*/ -} -.bootstrap-select > .dropdown-toggle { - width: 100%; - padding-right: 25px; - z-index: 1; -} -.bootstrap-select > select { - position: absolute; - bottom: 0; - left: 50%; - width: 0.11px; - height: 100%; - opacity: 0; - border: none; -} -.bootstrap-select > select.mobile-device { - position: absolute !important; - top: 0; - left: 0; - display: block !important; - width: 100%; - height: 100% !important; - opacity: 0; - z-index: 2; -} -.has-error .bootstrap-select .dropdown-toggle, -.error .bootstrap-select .dropdown-toggle { - border-color: #b94a48; -} -.bootstrap-select.fit-width { - width: auto !important; -} -.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { - width: 100%; -} - -.bootstrap-select.form-control { - margin-bottom: 0; - padding: 0; - border: none; -} -.bootstrap-select.form-control:not([class*="col-"]) { - width: 100%; -} -.bootstrap-select.form-control.input-group-btn { - z-index: auto; -} -.bootstrap-select.btn-group:not(.input-group-btn), -.bootstrap-select.btn-group[class*="col-"] { - float: none; - display: inline-block; - margin-left: 0; -} -.bootstrap-select.btn-group.dropdown-menu-right, -.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right, -.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right { - float: right; -} -.form-inline .bootstrap-select.btn-group, -.form-horizontal .bootstrap-select.btn-group, -.form-group .bootstrap-select.btn-group { - margin-bottom: 0; -} -.form-group-lg .bootstrap-select.btn-group.form-control, -.form-group-sm .bootstrap-select.btn-group.form-control { - padding: 0; -} -.form-inline .bootstrap-select.btn-group .form-control { - width: 100%; -} -.bootstrap-select.btn-group.disabled, -.bootstrap-select.btn-group > .disabled { - cursor: not-allowed; -} -.bootstrap-select.btn-group.disabled:focus, -.bootstrap-select.btn-group > .disabled:focus { - outline: none !important; -} -.bootstrap-select.btn-group.bs-container { - position: absolute; -} -.bootstrap-select.btn-group.bs-container .dropdown-menu { - z-index: 1060; -} -.bootstrap-select.btn-group .dropdown-toggle .filter-option { - display: inline-block; - overflow: hidden; - width: 100%; - text-align: left; -} -.bootstrap-select.btn-group .dropdown-toggle .caret { - position: absolute; - top: 50%; - right: 12px; - margin-top: -2px; - vertical-align: middle; -} -.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle { - width: 100%; -} -.bootstrap-select.btn-group .dropdown-menu { - min-width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bootstrap-select.btn-group .dropdown-menu.inner { - position: static; - float: none; - border: 0; - padding: 0; - margin: 0; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; - -ms-overflow-style: scrollbar; // fix for IE issues when we are on Windows and have Perfect Scrollbar ON -} -.bootstrap-select.btn-group .dropdown-menu li { - position: relative; -} -.bootstrap-select.btn-group .dropdown-menu li.active small { - color: #fff; -} -.bootstrap-select.btn-group .dropdown-menu li.disabled a { - cursor: not-allowed; -} -.bootstrap-select.btn-group .dropdown-menu li a { - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.bootstrap-select.btn-group .dropdown-menu li a.opt { - position: relative; - padding-left: 2.25em; -} -.bootstrap-select.btn-group .dropdown-menu li a span.check-mark { - display: none; -} -.bootstrap-select.btn-group .dropdown-menu li a span.text { - display: inline-block; -} -.bootstrap-select.btn-group .dropdown-menu li small { - padding-left: 0.5em; -} -.bootstrap-select.btn-group .dropdown-menu .notify { - position: absolute; - bottom: 5px; - width: 96%; - margin: 0 2%; - min-height: 26px; - padding: 3px 5px; - background: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - pointer-events: none; - opacity: 0.9; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bootstrap-select.btn-group .no-results { - padding: 3px; - background: #f5f5f5; - margin: 0 5px; - white-space: nowrap; -} -.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option { - position: static; -} -.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret { - position: static; - top: auto; - margin-top: -1px; -} -.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark { - position: absolute; - display: inline-block; - right: 15px; - margin-top: 2px; -} -.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text { - margin-right: 34px; -} -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle { - z-index: 1061; -} -.bootstrap-select.show-menu-arrow .dropdown-toggle:before { - content: ''; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid rgba(204, 204, 204, 0.2); - position: absolute; - bottom: -4px; - left: 9px; - display: none; -} -.bootstrap-select.show-menu-arrow .dropdown-toggle:after { - content: ''; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid white; - position: absolute; - bottom: -4px; - left: 10px; - display: none; -} -.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before { - bottom: auto; - top: -3px; - border-top: 7px solid rgba(204, 204, 204, 0.2); - border-bottom: 0; -} -.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after { - bottom: auto; - top: -3px; - border-top: 6px solid white; - border-bottom: 0; -} -.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before { - right: 12px; - left: auto; -} -.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after { - right: 13px; - left: auto; -} -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before, -.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after { - display: block; -} -.bs-searchbox, -.bs-actionsbox, -.bs-donebutton { - padding: 8px 8px; -} -.bs-actionsbox { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bs-actionsbox .btn-group button { - width: 50%; -} -.bs-donebutton { - float: left; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.bs-donebutton .btn-group button { - width: 100%; -} -.bs-searchbox + .bs-actionsbox { - padding: 0 8px 4px; -} -.bs-searchbox .form-control { - margin-bottom: 0; - width: 100%; - float: none; -} - -.bootstrap-select{ - .dropdown-menu{ - border-radius: $border-radius-bottom; - @include box-shadow(none); - @include transform-origin($select-coordinates); - @include transform-scale(1); - @include transition($fast-transition-time, $transition-linear); - margin-top: -20px; - } - - &.open .dropdown-menu{ - margin-top: -1px; - } - - &.dropup .dropdown-menu{ - border-radius: $border-radius-top; - margin-bottom: -20px; - } - - &.dropup.open .dropdown-menu{ - margin-bottom: -1px; - } -} - -.btn-group.bootstrap-select .dropdown-menu{ - min-width: 100%; -} - -.bootstrap-select .dropdown-menu > li:first-child > a{ - border-radius: 0; - border-bottom: 0 none; -} diff --git a/frontend/assets/sass/nomad-ui/plugins/_bootstrap-table.scss b/frontend/assets/sass/nomad-ui/plugins/_bootstrap-table.scss deleted file mode 100644 index 4859b7b5..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_bootstrap-table.scss +++ /dev/null @@ -1,328 +0,0 @@ -/** - * @author zhixin wen - * version: 1.8.1 - * https://github.com/wenzhixin/bootstrap-table/ - */ - -.bootstrap-table .table { - margin-bottom: 0 !important; - border-bottom: 1px solid #dddddd; - border-collapse: collapse !important; - border-radius: 1px; -} - -.bootstrap-table .table, -.bootstrap-table .table > tbody > tr > th, -.bootstrap-table .table > tfoot > tr > th, -.bootstrap-table .table > thead > tr > td, -.bootstrap-table .table > tbody > tr > td, -.bootstrap-table .table > tfoot > tr > td { - padding: 8px !important; -} - -.bootstrap-table .table > tbody > .selected{ - background-color: $light-blue; -} -.bootstrap-table .table.table-no-bordered > thead > tr > th, -.bootstrap-table .table.table-no-bordered > tbody > tr > td { - border-right: 2px solid transparent; -} - -.fixed-table-container { - position: relative; - clear: both; -} - -.fixed-table-container.table-no-bordered { - border: 1px solid transparent; -} - -.fixed-table-footer, -.fixed-table-header { - overflow: hidden; -} - -.fixed-table-footer { - border-top: 1px solid #dddddd; -} - -.fixed-table-body { - height: 100%; - overflow: auto; -} - -.fixed-table-container table { - width: 100%; -} - -.fixed-table-container thead th { - height: 0; - padding: 0; - margin: 0; -} - -.fixed-table-container thead th:first-child { - border-left: none; -} - -.fixed-table-container thead th .th-inner { - padding: 0 8px; - line-height: 24px; - vertical-align: top; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.fixed-table-container thead th .sortable { - cursor: pointer; - background-repeat: no-repeat; - padding-right: 30px; -} - -.fixed-table-container thead th .both { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); - background-position: right 2px; -} - -.fixed-table-container thead th .asc { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA+swAAIT6AAB5gQAA/RMAADBtAAASKQ0eJk4AAACASURBVHja7NKhDcJQFIbRV1MSEqaoYwYMYyARR6HZowzAHqguUolHYEgxD9MmTYPpA1JEb/KZK476Q4wxfKvwc6x/WKJE3v+nYkc8cfgIwxpXRNQokjBkOLdQ1wlZCrbFbYDdsRmFYYVqAHVdsBiD7dHg8aYGu2l2NmMz9s/YawDpU8qkYQTHqgAAAABJRU5ErkJggg=='); - background-position: right 5px; -} - -.fixed-table-container thead th .desc { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA+swAAIT6AAB5gQAA/RMAADBtAAASKQ0eJk4AAACFSURBVHja7NKhDcJQFIbRWwMJCVPgmKGGMZCIo9DsAQOwRxWLIPEIDCnmYR4JaSp4DYKQis/8NznqRkopvlWM2Ij9BYY1Wtx7arEpwaZokHo6Yf4xFhGBGrcOdMUqIqIUq3DoYEdUxVgGFzhn6ILl61aMZXCLB3bv+1Bsgj1mg7CfeNrnAMXSyqQtsCNeAAAAAElFTkSuQmCC'); - background-position: right 0px; -} - - -.fixed-table-container th.detail { - width: 30px; -} - -.fixed-table-container tbody tr:first-child td { - border-top: none; -} - -.fixed-table-container tbody td:first-child { - border-left: none; -} - -/* the same color with .active */ -.fixed-table-container tbody .selected td { - background-color: rgba(245, 245, 245, 0.34); -} - -.fixed-table-container .bs-checkbox { - text-align: center; -} - -.fixed-table-container .bs-checkbox .th-inner { - padding: 8px 0; -} - -.fixed-table-container input[type="radio"], -.fixed-table-container input[type="checkbox"] { - margin: 0 auto !important; - cursor: pointer; -} - -.fixed-table-container .no-records-found { - text-align: center; - background-color: #FFFFFF !important; - height: 340px; - border-radius: 10px; - width: 100%; - vertical-align: middle; -} -.fixed-table-container .no-records-found td{ - font-weight: $font-weight-light; - font-size: $font-size-h4; -} -.fixed-table-pagination div.pagination, -.fixed-table-pagination .pagination-detail { - margin-top: 10px; - margin-bottom: 10px; -} - -.fixed-table-pagination div.pagination .pagination { - margin: 0; -} - -.fixed-table-pagination .pagination a { - padding: 6px 12px; - line-height: 1.428571429; -} - -.fixed-table-pagination .pagination-info { - line-height: 34px; - margin-right: 5px; -} - -.fixed-table-pagination .btn-group { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.fixed-table-pagination .page-list { - display: inline-block; -} - -.fixed-table-toolbar{ - padding: 5px 15px; -} - -.fixed-table-toolbar .columns-left { - margin-right: 5px; -} - -.fixed-table-toolbar .columns-right { - margin-left: 5px; -} - -.fixed-table-toolbar .columns .btn{ - margin: 0 2px; - border-radius: $btn-round-radius; -} -.fixed-table-toolbar .columns label { - display: block; - padding: 10px 20px; - border-bottom: 1px solid #eee; - clear: both; - margin-bottom: 0; - font-weight: normal; - line-height: 1.428571429; -} -.fixed-table-toolbar .columns li:last-child label{ - border-bottom: none; -} - -.fixed-table-toolbar .bars, -.fixed-table-toolbar .search, -.fixed-table-toolbar .columns { - position: relative; - margin-top: 10px; - margin-bottom: 10px; - line-height: 34px; -} - -.fixed-table-pagination li.disabled a { - pointer-events: none; - cursor: default; -} - -.fixed-table-loading { - display: none; - position: absolute; - top: 42px; - right: 0; - bottom: 0; - left: 0; - z-index: 99; - background-color: #fff; - text-align: center; -} - -.fixed-table-body .card-view .title { - font-weight: bold; - display: inline-block; - min-width: 30%; - text-align: left !important; -} - -/* support bootstrap 2 */ -.fixed-table-body thead th .th-inner { - box-sizing: border-box; -} - -.table th, .table td { - vertical-align: middle; - box-sizing: border-box; -} - -.fixed-table-toolbar .btn-group > .btn-group { - display: inline-block; - margin-left: -1px !important; -} - -.fixed-table-toolbar .dropdown-menu label{ - cursor: pointer; -} - -.fixed-table-toolbar .btn-group > .btn-group > .btn { - border-radius: 0; -} - -.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -/* support bootstrap 3 */ -.bootstrap-table .table thead > tr > th { - padding: 0; - margin: 0; -} - -.pull-right .dropdown-menu { - right: 0; - left: auto; -} - -/* calculate scrollbar width */ -p.fixed-table-scroll-inner { - width: 100%; - height: 200px; -} - -div.fixed-table-scroll-outer { - top: 0; - left: 0; - visibility: hidden; - width: 200px; - height: 150px; - overflow: hidden; -} - - -.bootstrap-table{ - .fixed-table-pagination{ - margin: 0 10px; - - &:after{ - display: table; - content: ""; - clear: both; - } - - .page-list{ - .btn{ - border-radius: $btn-round-radius; - } - .btn-group{ - margin-right: 5px; - } - } - div.pagination, - .pagination-detail{ - margin-top: 15px; - margin-bottom: 15px; - } - } - - .table{ - &.table-striped > thead > tr > td, - &.table-striped > tbody > tr >td, - &.table-striped > tfoot > tr >td{ - border: none; - } - - } - -} diff --git a/frontend/assets/sass/nomad-ui/plugins/_chartist.scss b/frontend/assets/sass/nomad-ui/plugins/_chartist.scss deleted file mode 100644 index ec47902c..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_chartist.scss +++ /dev/null @@ -1,247 +0,0 @@ -@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) { - display: block; - position: relative; - width: $width; - - &:before { - display: block; - float: left; - content: ""; - width: 0; - height: 0; - padding-bottom: $ratio * 100%; - } - - &:after { - content: ""; - display: table; - clear: both; - } - - > svg { - display: block; - position: absolute; - top: 0; - left: 0; - } -} - -@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) { - -webkit-box-align: $ct-text-align; - -webkit-align-items: $ct-text-align; - -ms-flex-align: $ct-text-align; - align-items: $ct-text-align; - -webkit-box-pack: $ct-text-justify; - -webkit-justify-content: $ct-text-justify; - -ms-flex-pack: $ct-text-justify; - justify-content: $ct-text-justify; - // Fallback to text-align for non-flex browsers - @if($ct-text-justify == 'flex-start') { - text-align: left; - } @else if ($ct-text-justify == 'flex-end') { - text-align: right; - } @else { - text-align: center; - } -} - -@mixin ct-flex() { - // Fallback to block - display: block; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; -} - -@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) { - fill: $ct-text-color; - color: $ct-text-color; - font-size: $ct-text-size; - line-height: $ct-text-line-height; -} - -@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) { - stroke: $ct-grid-color; - stroke-width: $ct-grid-width; - - @if ($ct-grid-dasharray) { - stroke-dasharray: $ct-grid-dasharray; - } -} - -@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) { - stroke-width: $ct-point-size; - stroke-linecap: $ct-point-shape; -} - -@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) { - fill: none; - stroke-width: $ct-line-width; - - @if ($ct-line-dasharray) { - stroke-dasharray: $ct-line-dasharray; - } -} - -@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) { - stroke: none; - fill-opacity: $ct-area-opacity; -} - -@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) { - fill: none; - stroke-width: $ct-bar-width; -} - -@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) { - fill: none; - stroke-width: $ct-donut-width; -} - -@mixin ct-chart-series-color($color) { - .#{$ct-class-point}, .#{$ct-class-line}, .#{$ct-class-bar}, .#{$ct-class-slice-donut} { - stroke: $color; - } - - .#{$ct-class-slice-pie}, .#{$ct-class-area} { - fill: $color; - } -} - -@mixin ct-chart($ct-container-ratio: $ct-container-ratio, $ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray, $ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape, $ct-line-width: $ct-line-width, $ct-bar-width: $ct-bar-width, $ct-donut-width: $ct-donut-width, $ct-series-names: $ct-series-names, $ct-series-colors: $ct-series-colors) { - - .#{$ct-class-label} { - @include ct-chart-label($ct-text-color, $ct-text-size); - } - - .#{$ct-class-chart-line} .#{$ct-class-label}, - .#{$ct-class-chart-bar} .#{$ct-class-label} { - @include ct-flex(); - } - - .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} { - @include ct-align-justify(flex-end, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} { - @include ct-align-justify(flex-start, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} { - @include ct-align-justify(flex-end, flex-end); - // Fallback for browsers that don't support foreignObjects - text-anchor: end; - } - - .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} { - @include ct-align-justify(flex-end, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} { - @include ct-align-justify(flex-end, center); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} { - @include ct-align-justify(flex-start, center); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} { - @include ct-align-justify(flex-end, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} { - @include ct-align-justify(flex-start, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: start; - } - - .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} { - //@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify); - @include ct-align-justify(center, flex-end); - // Fallback for browsers that don't support foreignObjects - text-anchor: end; - } - - .#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} { - @include ct-align-justify(center, flex-start); - // Fallback for browsers that don't support foreignObjects - text-anchor: end; - } - - .#{$ct-class-grid} { - @include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray); - } - - .#{$ct-class-point} { - @include ct-chart-point($ct-point-size, $ct-point-shape); - } - - .#{$ct-class-line} { - @include ct-chart-line($ct-line-width); - } - - .#{$ct-class-area} { - @include ct-chart-area(); - } - - .#{$ct-class-bar} { - @include ct-chart-bar($ct-bar-width); - } - - .#{$ct-class-slice-donut} { - @include ct-chart-donut($ct-donut-width); - } - - @if $ct-include-colored-series { - @for $i from 0 to length($ct-series-names) { - .#{$ct-class-series}-#{nth($ct-series-names, $i + 1)} { - $color: nth($ct-series-colors, $i + 1); - - @include ct-chart-series-color($color); - } - } - } -} - -@if $ct-include-classes { - @include ct-chart(); - - @if $ct-include-alternative-responsive-containers { - @for $i from 0 to length($ct-scales-names) { - .#{nth($ct-scales-names, $i + 1)} { - @include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1)); - } - } - } -} - - -.ct-blue{ - stroke: $color-blue !important; -} -.ct-azure{ - stroke: $color-azure !important; -} -.ct-green{ - stroke: $color-green !important; -} -.ct-orange{ - stroke: $color-orange !important; -} -.ct-red{ - stroke: $color-red !important; -} \ No newline at end of file diff --git a/frontend/assets/sass/nomad-ui/plugins/_datatable.scss b/frontend/assets/sass/nomad-ui/plugins/_datatable.scss deleted file mode 100644 index 4859b7b5..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_datatable.scss +++ /dev/null @@ -1,328 +0,0 @@ -/** - * @author zhixin wen - * version: 1.8.1 - * https://github.com/wenzhixin/bootstrap-table/ - */ - -.bootstrap-table .table { - margin-bottom: 0 !important; - border-bottom: 1px solid #dddddd; - border-collapse: collapse !important; - border-radius: 1px; -} - -.bootstrap-table .table, -.bootstrap-table .table > tbody > tr > th, -.bootstrap-table .table > tfoot > tr > th, -.bootstrap-table .table > thead > tr > td, -.bootstrap-table .table > tbody > tr > td, -.bootstrap-table .table > tfoot > tr > td { - padding: 8px !important; -} - -.bootstrap-table .table > tbody > .selected{ - background-color: $light-blue; -} -.bootstrap-table .table.table-no-bordered > thead > tr > th, -.bootstrap-table .table.table-no-bordered > tbody > tr > td { - border-right: 2px solid transparent; -} - -.fixed-table-container { - position: relative; - clear: both; -} - -.fixed-table-container.table-no-bordered { - border: 1px solid transparent; -} - -.fixed-table-footer, -.fixed-table-header { - overflow: hidden; -} - -.fixed-table-footer { - border-top: 1px solid #dddddd; -} - -.fixed-table-body { - height: 100%; - overflow: auto; -} - -.fixed-table-container table { - width: 100%; -} - -.fixed-table-container thead th { - height: 0; - padding: 0; - margin: 0; -} - -.fixed-table-container thead th:first-child { - border-left: none; -} - -.fixed-table-container thead th .th-inner { - padding: 0 8px; - line-height: 24px; - vertical-align: top; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.fixed-table-container thead th .sortable { - cursor: pointer; - background-repeat: no-repeat; - padding-right: 30px; -} - -.fixed-table-container thead th .both { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); - background-position: right 2px; -} - -.fixed-table-container thead th .asc { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA+swAAIT6AAB5gQAA/RMAADBtAAASKQ0eJk4AAACASURBVHja7NKhDcJQFIbRV1MSEqaoYwYMYyARR6HZowzAHqguUolHYEgxD9MmTYPpA1JEb/KZK476Q4wxfKvwc6x/WKJE3v+nYkc8cfgIwxpXRNQokjBkOLdQ1wlZCrbFbYDdsRmFYYVqAHVdsBiD7dHg8aYGu2l2NmMz9s/YawDpU8qkYQTHqgAAAABJRU5ErkJggg=='); - background-position: right 5px; -} - -.fixed-table-container thead th .desc { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA+swAAIT6AAB5gQAA/RMAADBtAAASKQ0eJk4AAACFSURBVHja7NKhDcJQFIbRWwMJCVPgmKGGMZCIo9DsAQOwRxWLIPEIDCnmYR4JaSp4DYKQis/8NznqRkopvlWM2Ij9BYY1Wtx7arEpwaZokHo6Yf4xFhGBGrcOdMUqIqIUq3DoYEdUxVgGFzhn6ILl61aMZXCLB3bv+1Bsgj1mg7CfeNrnAMXSyqQtsCNeAAAAAElFTkSuQmCC'); - background-position: right 0px; -} - - -.fixed-table-container th.detail { - width: 30px; -} - -.fixed-table-container tbody tr:first-child td { - border-top: none; -} - -.fixed-table-container tbody td:first-child { - border-left: none; -} - -/* the same color with .active */ -.fixed-table-container tbody .selected td { - background-color: rgba(245, 245, 245, 0.34); -} - -.fixed-table-container .bs-checkbox { - text-align: center; -} - -.fixed-table-container .bs-checkbox .th-inner { - padding: 8px 0; -} - -.fixed-table-container input[type="radio"], -.fixed-table-container input[type="checkbox"] { - margin: 0 auto !important; - cursor: pointer; -} - -.fixed-table-container .no-records-found { - text-align: center; - background-color: #FFFFFF !important; - height: 340px; - border-radius: 10px; - width: 100%; - vertical-align: middle; -} -.fixed-table-container .no-records-found td{ - font-weight: $font-weight-light; - font-size: $font-size-h4; -} -.fixed-table-pagination div.pagination, -.fixed-table-pagination .pagination-detail { - margin-top: 10px; - margin-bottom: 10px; -} - -.fixed-table-pagination div.pagination .pagination { - margin: 0; -} - -.fixed-table-pagination .pagination a { - padding: 6px 12px; - line-height: 1.428571429; -} - -.fixed-table-pagination .pagination-info { - line-height: 34px; - margin-right: 5px; -} - -.fixed-table-pagination .btn-group { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.fixed-table-pagination .page-list { - display: inline-block; -} - -.fixed-table-toolbar{ - padding: 5px 15px; -} - -.fixed-table-toolbar .columns-left { - margin-right: 5px; -} - -.fixed-table-toolbar .columns-right { - margin-left: 5px; -} - -.fixed-table-toolbar .columns .btn{ - margin: 0 2px; - border-radius: $btn-round-radius; -} -.fixed-table-toolbar .columns label { - display: block; - padding: 10px 20px; - border-bottom: 1px solid #eee; - clear: both; - margin-bottom: 0; - font-weight: normal; - line-height: 1.428571429; -} -.fixed-table-toolbar .columns li:last-child label{ - border-bottom: none; -} - -.fixed-table-toolbar .bars, -.fixed-table-toolbar .search, -.fixed-table-toolbar .columns { - position: relative; - margin-top: 10px; - margin-bottom: 10px; - line-height: 34px; -} - -.fixed-table-pagination li.disabled a { - pointer-events: none; - cursor: default; -} - -.fixed-table-loading { - display: none; - position: absolute; - top: 42px; - right: 0; - bottom: 0; - left: 0; - z-index: 99; - background-color: #fff; - text-align: center; -} - -.fixed-table-body .card-view .title { - font-weight: bold; - display: inline-block; - min-width: 30%; - text-align: left !important; -} - -/* support bootstrap 2 */ -.fixed-table-body thead th .th-inner { - box-sizing: border-box; -} - -.table th, .table td { - vertical-align: middle; - box-sizing: border-box; -} - -.fixed-table-toolbar .btn-group > .btn-group { - display: inline-block; - margin-left: -1px !important; -} - -.fixed-table-toolbar .dropdown-menu label{ - cursor: pointer; -} - -.fixed-table-toolbar .btn-group > .btn-group > .btn { - border-radius: 0; -} - -.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -/* support bootstrap 3 */ -.bootstrap-table .table thead > tr > th { - padding: 0; - margin: 0; -} - -.pull-right .dropdown-menu { - right: 0; - left: auto; -} - -/* calculate scrollbar width */ -p.fixed-table-scroll-inner { - width: 100%; - height: 200px; -} - -div.fixed-table-scroll-outer { - top: 0; - left: 0; - visibility: hidden; - width: 200px; - height: 150px; - overflow: hidden; -} - - -.bootstrap-table{ - .fixed-table-pagination{ - margin: 0 10px; - - &:after{ - display: table; - content: ""; - clear: both; - } - - .page-list{ - .btn{ - border-radius: $btn-round-radius; - } - .btn-group{ - margin-right: 5px; - } - } - div.pagination, - .pagination-detail{ - margin-top: 15px; - margin-bottom: 15px; - } - } - - .table{ - &.table-striped > thead > tr > td, - &.table-striped > tbody > tr >td, - &.table-striped > tfoot > tr >td{ - border: none; - } - - } - -} diff --git a/frontend/assets/sass/nomad-ui/plugins/_datatables.net.scss b/frontend/assets/sass/nomad-ui/plugins/_datatables.net.scss deleted file mode 100644 index 388e6f68..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_datatables.net.scss +++ /dev/null @@ -1,513 +0,0 @@ -table.dataTable { - clear: both; - margin-top: 6px !important; - margin-bottom: 6px !important; - max-width: none !important; - border-collapse: separate !important; -} -table.dataTable td, -table.dataTable th { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -table.dataTable td.dataTables_empty, -table.dataTable th.dataTables_empty { - text-align: center; -} -table.dataTable.nowrap th, -table.dataTable.nowrap td { - white-space: nowrap; -} - -div.dataTables_wrapper div.dataTables_length label { - font-weight: normal; - text-align: left; - white-space: nowrap; -} -div.dataTables_wrapper div.dataTables_length select { - width: 75px; - display: inline-block; -} -div.dataTables_wrapper div.dataTables_filter { - text-align: right; -} -div.dataTables_wrapper div.dataTables_filter label { - font-weight: normal; - white-space: nowrap; - text-align: left; -} -div.dataTables_wrapper div.dataTables_filter input { - margin-left: 0.5em; - display: inline-block; - width: auto; -} -div.dataTables_wrapper div.dataTables_info { - padding-top: 8px; - white-space: nowrap; -} -div.dataTables_wrapper div.dataTables_paginate { - margin: 0; - white-space: nowrap; - text-align: right; -} -div.dataTables_wrapper div.dataTables_paginate ul.pagination { - margin: 2px 0; - white-space: nowrap; -} -div.dataTables_wrapper div.dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 200px; - margin-left: -100px; - margin-top: -26px; - text-align: center; - padding: 1em 0; -} - -table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, -table.dataTable thead > tr > td.sorting_asc, -table.dataTable thead > tr > td.sorting_desc, -table.dataTable thead > tr > td.sorting { - padding-right: 30px; -} -table.dataTable thead > tr > th:active, -table.dataTable thead > tr > td:active { - outline: none; -} -table.dataTable thead .sorting, -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc, -table.dataTable thead .sorting_asc_disabled, -table.dataTable thead .sorting_desc_disabled { - cursor: pointer; - position: relative; -} -table.dataTable thead .sorting:after, -table.dataTable thead .sorting_asc:after, -table.dataTable thead .sorting_desc:after, -table.dataTable thead .sorting_asc_disabled:after, -table.dataTable thead .sorting_desc_disabled:after { - position: absolute; - bottom: 8px; - right: 8px; - display: block; - font-family: 'Glyphicons Halflings'; - opacity: 0.5; -} -table.dataTable thead .sorting:after { - opacity: 0.2; - content: "\e150"; - /* sort */ -} -table.dataTable thead .sorting_asc:after { - content: "\e155"; - /* sort-by-attributes */ -} -table.dataTable thead .sorting_desc:after { - content: "\e156"; - /* sort-by-attributes-alt */ -} -table.dataTable thead .sorting_asc_disabled:after, -table.dataTable thead .sorting_desc_disabled:after { - color: #eee; -} - -div.dataTables_scrollHead table.dataTable { - margin-bottom: 0 !important; -} - -div.dataTables_scrollBody table { - border-top: none; - margin-top: 0 !important; - margin-bottom: 0 !important; -} -div.dataTables_scrollBody table thead .sorting:after, -div.dataTables_scrollBody table thead .sorting_asc:after, -div.dataTables_scrollBody table thead .sorting_desc:after { - display: none; -} -div.dataTables_scrollBody table tbody tr:first-child th, -div.dataTables_scrollBody table tbody tr:first-child td { - border-top: none; -} - -div.dataTables_scrollFoot table { - margin-top: 0 !important; - border-top: none; -} - -@media screen and (max-width: 767px) { - div.dataTables_wrapper div.dataTables_length, - div.dataTables_wrapper div.dataTables_filter, - div.dataTables_wrapper div.dataTables_info, - div.dataTables_wrapper div.dataTables_paginate { - text-align: center; - } -} -table.dataTable.table-condensed > thead > tr > th { - padding-right: 20px; -} -table.dataTable.table-condensed .sorting:after, -table.dataTable.table-condensed .sorting_asc:after, -table.dataTable.table-condensed .sorting_desc:after { - top: 6px; - right: 6px; -} - -table.table-bordered.dataTable th, -table.table-bordered.dataTable td { - border-left-width: 0; -} -table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, -table.table-bordered.dataTable td:last-child, -table.table-bordered.dataTable td:last-child { - border-right-width: 0; -} -table.table-bordered.dataTable tbody th, -table.table-bordered.dataTable tbody td { - border-bottom-width: 0; -} - -div.dataTables_scrollHead table.table-bordered { - border-bottom-width: 0; -} - -div.table-responsive > div.dataTables_wrapper > div.row { - margin: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { - padding-left: 0; -} -div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { - padding-right: 0; -} - - -table.dataTable{ - - .btn-simple.btn-icon{ - padding: 3px; - } - - thead{ - .sorting, - .sorting_asc, - .sorting_desc, - .sorting_asc_disabled, - .sorting_desc_disabled{ - - &:after{ - position: relative; - display: inline-block; - bottom: 0px; - right: -7px; - font-family: 'FontAwesome'; - opacity: 0.8; - } - - } - - .disabled-sorting.sorting, - .disabled-sorting.sorting_asc, - .disabled-sorting.sorting_desc, - .disabled-sorting.sorting_asc_disabled, - .disabled-sorting.sorting_desc_disabled{ - &:after{ - display: none; - } - - } - - .sorting{ - &:after{ - opacity: 0.4; - content: "\f0dc"; - } - } - - .sorting_asc{ - &:after{ - content: "\f0de"; - top: 3px; - } - } - - .sorting_desc{ - &:after{ - content: "\f0dd"; - top: -3px; - } - } - } - - > thead > tr > th, - > tbody > tr > th, - > tfoot > tr > th, - > thead > tr > td, - > tbody > tr > td, - > tfoot > tr > td{ - padding: 8px !important; - outline: 0; - } - - > thead > tr > th{ - border: none; - } -} - -.fresh-datatables{ - .pagination { - > li > a, - > li:first-child > a, - > li:first-child > span, - > li:last-child > a, - > li:last-child > span{ - border-radius: 25px; - } - } -} - - - -.dataTables_paginate{ - a{ - outline: 0; - } -} - -table.dataTable.dtr-inline.collapsed { - > tbody > tr > td.child, - > tbody > tr > th.child, - > tbody > tr > td.dataTables_empty{ - cursor: default !important; - } - - > tbody > tr > td.child, - > tbody > tr > th.child, - > tbody > tr > td.dataTables_empty{ - &:before{ - display: none !important; - } - } - - > tbody > tr > td:first-child, - > tbody > tr > th:first-child{ - position: relative; - padding-left: 30px; - cursor: pointer; - } - - > tbody > tr > td:first-child, - > tbody > tr > th:first-child{ - &:before{ - top: 50%; - margin-top: -9px; - left: 4px; - height: 18px; - width: 18px; - display: block; - position: absolute; - color: #518607; - border: 0px solid white; - border-radius: 14px; - box-shadow: 0 0 3px #444; - box-sizing: content-box; - text-align: center; - font-family: 'Courier New', Courier, monospace; - line-height: 18px; - content: '+'; - background-color: #FFF; - } - } - - > tbody > tr.parent > td:first-child, - > tbody > tr.parent > th:first-child{ - &:before{ - content: '-'; - color: #ED362C; - } - } - - > tbody > tr.child td{ - &:before{ - display: none; - } - } -} - - -table.dataTable.dtr-inline.collapsed.compact{ - > tbody > tr > td, - > tbody > tr > th{ - &:first-child{ - padding-left: 27px; - } - } - - > tbody > tr > td, - > tbody > tr > th{ - &:first-child:before{ - top: 5px; - left: 4px; - height: 14px; - width: 14px; - border-radius: 14px; - line-height: 14px; - text-indent: 3px; - } - } -} - -table.dataTable.dtr-column{ - > tbody > tr > td.control, - > tbody > tr > th.control{ - position: relative; - cursor: pointer; - } - - > tbody > tr > td.control, - > tbody > tr > th.control{ - &:before{ - top: 50%; - left: 50%; - height: 16px; - width: 16px; - margin-top: -10px; - margin-left: -10px; - display: block; - position: absolute; - color: white; - border: 2px solid white; - border-radius: 14px; - box-shadow: 0 0 3px #444; - box-sizing: content-box; - text-align: center; - font-family: 'Courier New', Courier, monospace; - line-height: 14px; - content: '+'; - background-color: #31b131; - } - } - - > tbody > tr.parent td.control, - > tbody > tr.parent th.control{ - &:before{ - content: '-'; - background-color: #d33333; - } - } -} - -table.dataTable{ - > tbody > tr.child { - padding: 0.5em 1em; - } - - > tbody > tr.child{ - &:hover{ - background: transparent !important; - } - } - - > tbody > tr.child ul { - display: inline-block; - list-style-type: none; - margin: 0; - padding: 0; - } - - > tbody > tr.child ul li { - border-bottom: 1px solid #efefef; - padding: 0.5em 0; - } - - > tbody > tr.child ul li{ - &:first-child{ - padding-top: 0; - } - } - - > tbody > tr.child ul li{ - &:last-child{ - border-bottom: none; - } - } - - > tbody > tr.child span.dtr-title { - display: inline-block; - min-width: 75px; - font-weight: bold; - } -} - -div.dtr-modal { - position: fixed; - box-sizing: border-box; - top: 0; - left: 0; - height: 100%; - width: 100%; - z-index: 100; - padding: 10em 1em; - - div.dtr-modal-display { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - width: 50%; - height: 50%; - overflow: auto; - margin: auto; - z-index: 102; - overflow: auto; - background-color: #f5f5f7; - border: 1px solid black; - border-radius: 0.5em; - box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6); - } - - div.dtr-modal-content { - position: relative; - padding: 1em; - } - - div.dtr-modal-close { - position: absolute; - top: 6px; - right: 6px; - width: 22px; - height: 22px; - border: 1px solid #eaeaea; - background-color: #f9f9f9; - text-align: center; - border-radius: 3px; - cursor: pointer; - z-index: 12; - } - - div.dtr-modal-close{ - &:hover{ - background-color: #eaeaea; - } - } - - div.dtr-modal-background { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 101; - background: rgba(0, 0, 0, 0.6); - } -} - -@media screen and (max-width: 767px) { - div.dtr-modal div.dtr-modal-display { - width: 95%; - } -} diff --git a/frontend/assets/sass/nomad-ui/plugins/_datetime-picker.scss b/frontend/assets/sass/nomad-ui/plugins/_datetime-picker.scss deleted file mode 100644 index 2a9ccfde..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_datetime-picker.scss +++ /dev/null @@ -1,440 +0,0 @@ -/*! - * Datetimepicker for Bootstrap 3 - * ! version : 4.7.14 - * https://github.com/Eonasdan/bootstrap-datetimepicker/ - */ -$bs-datetimepicker-timepicker-font-size: 1.2em !default; -$bs-datetimepicker-active-bg: $info-color !default; -$bs-datetimepicker-active-color: $white-color !default; -$bs-datetimepicker-border-radius: $border-radius-base; -$bs-datetimepicker-btn-hover-bg: $light-gray !default; -$bs-datetimepicker-disabled-color: $medium-gray !default; -$bs-datetimepicker-alternate-color: $medium-gray !default; -$bs-datetimepicker-secondary-border-color: #ccc !default; -$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default; -$bs-datetimepicker-primary-border-color: white !default; -$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default; - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - border: 0; -} - - -.bootstrap-datetimepicker-widget { - list-style: none; - - - &.dropdown-menu { - padding: 4px; - width: 19em; - - &.timepicker-sbs { - @media (min-width: $screen-sm-min) { - width: 38em; - } - - @media (min-width: $screen-md-min) { - width: 38em; - } - - @media (min-width: $screen-lg-min) { - width: 38em; - } - } - - &.bottom { - - &:before { - border-bottom: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -11px; - } - - &:after { - border-bottom: 11px solid #FFFFFF; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - content: ""; - display: inline-block; - position: absolute; - left: 12px; - top: -10px; - } - } - - &.top { - margin-top: auto; - margin-bottom: -20px; - - &.open{ - margin-top: auto; - margin-bottom: 5px; - } - - &:before { - border-top: 11px solid rgba(0, 0, 0, 0.2); - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - border-bottom: none; - content: ""; - display: inline-block; - position: absolute; - left: 12px; - bottom: -11px; - top: auto; - } - - &:after { - border-top: 11px solid #FFFFFF; - border-left: 11px solid rgba(0, 0, 0, 0); - border-right: 11px solid rgba(0, 0, 0, 0); - border-bottom: none; - content: ""; - display: inline-block; - position: absolute; - left: 12px; - bottom: -10px; - top: auto; - } - } - - - - &.pull-right { - &:before { - left: auto; - right: 6px; - } - - &:after { - left: auto; - right: 7px; - } - } - } - - .list-unstyled { - margin: 0; - } - - a[data-action] { - padding: 6px 0; - border-width: 0; - } - - a[data-action]:active { - box-shadow: none; - } - - .timepicker-hour, .timepicker-minute, .timepicker-second { - width: 56px; - height: 56px; - font-weight: $font-weight-light; - font-size: $font-size-h4; - margin: 3px; - border-radius: 50%; - } - - button[data-action] { - padding: 6px; - } - - .btn[data-action="incrementHours"]::after { - @extend .sr-only; - content: "Increment Hours"; - } - - .btn[data-action="incrementMinutes"]::after { - @extend .sr-only; - content: "Increment Minutes"; - } - - .btn[data-action="decrementHours"]::after { - @extend .sr-only; - content: "Decrement Hours"; - } - - .btn[data-action="decrementMinutes"]::after { - @extend .sr-only; - content: "Decrement Minutes"; - } - - .btn[data-action="showHours"]::after { - @extend .sr-only; - content: "Show Hours"; - } - - .btn[data-action="showMinutes"]::after { - @extend .sr-only; - content: "Show Minutes"; - } - - .btn[data-action="togglePeriod"]::after { - @extend .sr-only; - content: "Toggle AM/PM"; - } - - .btn[data-action="clear"]::after { - @extend .sr-only; - content: "Clear the picker"; - } - - .btn[data-action="today"]::after { - @extend .sr-only; - content: "Set the date to today"; - } - - .picker-switch { - text-align: center; - border-radius: $bs-datetimepicker-border-radius; - - &::after { - @extend .sr-only; - content: "Toggle Date and Time Screens"; - } - - td { - padding: 0; - margin: 0; - height: auto; - width: auto; - line-height: inherit; - - span { - line-height: 2.5; - height: 2.5em; - width: 100%; - border-radius: $bs-datetimepicker-border-radius; - margin: 2px 0px !important; - } - } - } - - table { - width: 100%; - margin: 0; - - - & td > div, - & th > div { - @extend .animation-transition-fast; - text-align: center; - - } - - - & th { - @extend .animation-transition-fast; - - height: 20px; - line-height: 20px; - width: 20px; - - &.picker-switch { - width: 145px; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - &.prev span, - &.next span{ - border-radius: $bs-datetimepicker-border-radius; - height: 27px; - width: 27px; - line-height: 28px; - font-size: 12px; - border-radius: 50%; - text-align: center; - - } - - &.prev::after { - @extend .sr-only; - content: "Previous Month"; - } - - &.next::after { - @extend .sr-only; - content: "Next Month"; - } - - &.dow{ - text-align: center; - border-bottom: 1px solid $light-gray; - font-size: $font-size-small; - text-transform: uppercase; - color: $dark-gray; - font-weight: $font-weight-normal; - padding-bottom: 5px; - padding-top: $padding-default-vertical; - } - } - - & thead tr:first-child th{ - cursor: pointer; - - &:hover span, - &.picker-switch:hover{ - background: $bs-datetimepicker-btn-hover-bg; - } - } - - & td{ - > div { - border-radius: $bs-datetimepicker-border-radius; - - height: 54px; - line-height: 54px; - width: 54px; - text-align: center; - } - - &.cw > div { - font-size: .8em; - height: 20px; - line-height: 20px; - color: $bs-datetimepicker-alternate-color; - } - - &.day > div { - height: 30px; - line-height: 30px; - width: 30px; - text-align: center; - padding: 0px; - border-radius: 50%; - } - - &.minute > div, - &.hour > div{ - border-radius: 50%; - } - - &.day:hover > div, - &.hour:hover > div, - &.minute:hover > div, - &.second:hover > div { - background: $bs-datetimepicker-btn-hover-bg; - cursor: pointer; - } - - &.old > div, - &.new > div{ - color: $bs-datetimepicker-alternate-color; - } - - &.today > div{ - position: relative; - - &:before { - content: ''; - display: inline-block; - border: 0 0 7px 7px solid transparent; - border-bottom-color: $bs-datetimepicker-active-bg; - border-top-color: $bs-datetimepicker-secondary-border-color-rgba; - position: absolute; - bottom: 4px; - right: 4px; - } - } - - &.active > div, - &.active:hover > div { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - - } - - &.active.today:before > div{ - border-bottom-color: #fff; - } - - &.disabled > div, - &.disabled:hover > div { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - - span { - @extend .animation-transition-fast; - - display: inline-block; - width: 56px; - height: 56px; - line-height: 56px; - margin: 3px 3px; - cursor: pointer; - border-radius: 50%; - text-align: center; - - &:hover { - background: $bs-datetimepicker-btn-hover-bg; - } - - &.active { - background-color: $bs-datetimepicker-active-bg; - color: $bs-datetimepicker-active-color; - } - - &.old { - color: $bs-datetimepicker-alternate-color; - } - - &.disabled, - &.disabled:hover { - background: none; - color: $bs-datetimepicker-disabled-color; - cursor: not-allowed; - } - } - } - } - - .timepicker-picker, - .timepicker-hours, - .timepicker-minutes{ - span{ - border-radius: 50% !important; - } - } - - &.usetwentyfour { - td.hour { - height: 27px; - line-height: 27px; - } - } -} - -.input-group.date { - & .input-group-addon { - cursor: pointer; - } -} - -.table-condensed>tbody>tr>td, -.table-condensed>tbody>tr>th, -.table-condensed>tfoot>tr>td, -.table-condensed>tfoot>tr>th, -.table-condensed>thead>tr>td, -.table-condensed>thead>tr>th{ - padding: 1px; -} diff --git a/frontend/assets/sass/nomad-ui/plugins/_fullcalendar.scss b/frontend/assets/sass/nomad-ui/plugins/_fullcalendar.scss deleted file mode 100644 index d359c684..00000000 --- a/frontend/assets/sass/nomad-ui/plugins/_fullcalendar.scss +++ /dev/null @@ -1,1114 +0,0 @@ -/*! - * FullCalendar v2.4.0 Stylesheet - * Docs & License: http://fullcalendar.io/ - * (c) 2015 Adam Shaw - */ - - -.fc { - direction: ltr; - text-align: left; -} - -.fc-rtl { - text-align: right; -} - -body .fc { /* extra precedence to overcome jqui */ - font-size: 1em; -} - - -/* Colors ---------------------------------------------------------------------------------------------------*/ - -.fc-unthemed th, -.fc-unthemed td, -.fc-unthemed thead, -.fc-unthemed tbody, -.fc-unthemed .fc-divider, -.fc-unthemed .fc-row, -.fc-unthemed .fc-popover { - border-color: #ddd; -} - -.fc-unthemed .fc-popover { - background-color: #fff; -} - -.fc-unthemed .fc-divider, -.fc-unthemed .fc-popover .fc-header { - background: #eee; -} - -.fc-unthemed .fc-popover .fc-header .fc-close { - color: #666; -} - -.fc-unthemed .fc-today { - background: $smoke-bg; -} - -.fc-highlight { /* when user is selecting cells */ - background: #bce8f1; - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-bgevent { /* default look for background events */ - background: rgb(143, 223, 130); - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-nonbusiness { /* default look for non-business-hours areas */ - /* will inherit .fc-bgevent's styles */ - background: #d7d7d7; -} - - -/* Icons (inline elements with styled text that mock arrow icons) ---------------------------------------------------------------------------------------------------*/ - -.fc-icon { - display: inline-block; - width: 1em; - height: 1em; - line-height: 1em; - font-size: 1em; - text-align: center; - overflow: hidden; - font-family: "Courier New", Courier, monospace; - - /* don't allow browser text-selection */ - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - } - -/* -Acceptable font-family overrides for individual icons: - "Arial", sans-serif - "Times New Roman", serif - -NOTE: use percentage font sizes or else old IE chokes -*/ - -.fc-icon:after { - position: relative; - margin: 0 -1em; /* ensures character will be centered, regardless of width */ -} - -.fc-icon-left-single-arrow:after { - content: "\02039"; - font-weight: bold; - font-size: 200%; - top: -7%; - left: 3%; -} - -.fc-icon-right-single-arrow:after { - content: "\0203A"; - font-weight: bold; - font-size: 200%; - top: -7%; - left: -3%; -} - -.fc-icon-left-double-arrow:after { - content: "\000AB"; - font-size: 160%; - top: -7%; -} - -.fc-icon-right-double-arrow:after { - content: "\000BB"; - font-size: 160%; - top: -7%; -} - -.fc-icon-left-triangle:after { - content: "\25C4"; - font-size: 125%; - top: 3%; - left: -2%; -} - -.fc-icon-right-triangle:after { - content: "\25BA"; - font-size: 125%; - top: 3%; - left: 2%; -} - -.fc-icon-down-triangle:after { - content: "\25BC"; - font-size: 125%; - top: 2%; -} - -.fc-icon-x:after { - content: "\000D7"; - font-size: 200%; - top: 6%; -} - - -/* Buttons (styled - ; - - return ( -
-
-
-
-
Path: { this.props.location.query.path || '/' }
-
- - - - -
-
-
File: { fileName } - { downloadBtn } -
- -
-
{ this.content = c; } }> - { this.state.contents } -
-
-
- - - ); - } -} - -function mapStateToProps({ allocation, nodes, node, directory, file }) { - return { allocation, nodes, node, directory, file }; -} - -AllocationFiles.propTypes = { - node: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - allocation: PropTypes.object.isRequired, - dispatch: PropTypes.func.isRequired, - file: PropTypes.object.isRequired, - directory: PropTypes.array.isRequired, - history: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(AllocationFiles); diff --git a/frontend/src/components/allocation/info.js b/frontend/src/components/allocation/info.js deleted file mode 100644 index 78dc8be4..00000000 --- a/frontend/src/components/allocation/info.js +++ /dev/null @@ -1,141 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { Panel, Accordion, Table } from 'react-bootstrap'; -import { connect } from 'react-redux'; -import NomadLink from '../link'; -import Meta from '../meta'; -import FormatTime from '../format/time'; - -const allocProps = [ - 'ID', - 'Name', - 'ClientStatus', - 'ClientDescription', - 'DesiredStatus', - 'DesiredDescription', -]; - -class AllocationInfo extends Component { - - static taskState(allocation, name, states) { - const title = ( -

- Task state for {allocation.JobID}.{allocation.TaskGroup}.{name} (final state: {states.State}) -

- ); - let lastEventTime = null; - - return ( - -
-
- - - - - - - - - - - - { states.Events.map((element, index) => { - if (!lastEventTime) { - lastEventTime = element.Time; - } - - const output = ( - - - - - - - - - ); - - lastEventTime = element.Time; - return output; - })} - -
WhenDurationTypeMessage / ReasonSignalCode
- - { element.Type } - { - element.Message - || element.SetupError - || element.DriverError - || element.KillError - || element.DownloadError - || element.ValidationError - || element.VaultError - || element.RestartReason - || element.KillReason - || element.TaskSignalReason - } - { element.Signal || element.TaskSignal }{ element.ExitCode }
-
- - ); - } - - render() { - const allocation = this.props.allocation; - const jobId = allocation.JobID; - const nodeId = allocation.NodeID; - const taskGroupId = allocation.TaskGroupId; - - const allocValues = {}; - allocProps.map((allocProp) => { - allocValues[allocProp] = allocation[allocProp]; - return null; - }); - - allocValues.Job = ; - allocValues.TaskGroup = ( - - {allocation.TaskGroup} - - ); - allocValues.Node = ; - - const states = []; - Object.keys(allocation.TaskStates || {}).forEach((key) => { - states.push(AllocationInfo.taskState(allocation, key, allocation.TaskStates[key])); - }); - - return ( -
-
-
- Allocation Properties - -
-
-
-
- Task States - { states } -
-
-
- ); - } -} - -function mapStateToProps({ allocation, nodes }) { - return { allocation, nodes }; -} - -AllocationInfo.propTypes = { - allocation: PropTypes.object.isRequired, - nodes: PropTypes.array.isRequired, -}; - -export default connect(mapStateToProps)(AllocationInfo); diff --git a/frontend/src/components/allocation/list.js b/frontend/src/components/allocation/list.js deleted file mode 100644 index 13683daa..00000000 --- a/frontend/src/components/allocation/list.js +++ /dev/null @@ -1,278 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { DropdownButton, Glyphicon } from 'react-bootstrap'; -import { Link } from 'react-router'; -import NomadLink from '../link'; -import FormatTime from '../format/time'; -import shortUUID from '../../helpers/uuid'; -import { renderDesiredStatus, renderClientStatus } from '../../helpers/render/allocation'; - -const getAllocationNumberFromName = (allocationName) => { - const match = /[\d+]/.exec(allocationName); - return match[0]; -}; - -const optionsGlyph = ; - -const jobHeaderColumn = display => - (display ? Job : null); - -const jobColumn = (allocation, display) => - (display ? : null); - -const clientHeaderColumn = display => - (display ? Client : null); - -const clientColumn = (allocation, nodes, display) => - (display ? : null); - -let nodeIdToNameCache = {}; - -class AllocationList extends Component { - - componentWillReceiveProps(nextProps) { - if (nextProps.nodes !== this.props.nodes) { - nodeIdToNameCache = {}; - } - } - - findNodeNameById(nodeId) { - if (nodeId in nodeIdToNameCache) { - return nodeIdToNameCache[nodeId]; - } - - const r = Object.keys(this.props.nodes) - .filter(node => - this.props.nodes[node].ID === nodeId - ); - - if (r.length !== 0) { - nodeIdToNameCache[nodeId] = this.props.nodes[r].Name; - } else { - nodeIdToNameCache[nodeId] = nodeId; - } - - return nodeIdToNameCache[nodeId]; - } - - filteredAllocations() { - const query = this.props.location.query || {}; - let allocations = this.props.allocations; - - if ('status' in query) { - allocations = allocations.filter(allocation => allocation.ClientStatus === query.status); - } - - if ('client' in query) { - allocations = allocations.filter(allocation => allocation.NodeID === query.client); - } - - if ('job' in query) { - allocations = allocations.filter(allocation => allocation.JobID === query.job); - } - - return allocations; - } - - clientStatusFilter() { - const location = this.props.location; - const query = this.props.location.query || {}; - - let title = 'Client Status'; - if ('status' in query) { - title = {title}: { query.status }; - } - - return ( - -
  • - Any -
  • -
  • Running
  • -
  • Complete
  • -
  • Lost
  • -
  • Failed
  • -
    - ); - } - - jobIdFilter() { - const location = this.props.location; - const query = this.props.location.query || {}; - - let title = 'Job'; - if ('job' in query) { - title = {title}: { query.job }; - } - - const jobs = this.props.allocations - .map((allocation) => { - return allocation.JobID; - }) - .filter((v, i, a) => { - return a.indexOf(v) === i; - }) - .map((job) => { - return ( -
  • - { job } -
  • - ); - }); - - jobs.unshift( -
  • - Any -
  • - ); - - return ( - - { jobs } - - ); - } - - clientFilter() { - const location = this.props.location; - const query = this.props.location.query || {}; - - let title = 'Client'; - if ('client' in query) { - title = {title}: { this.findNodeNameById(query.client) }; - } - - const clients = this.props.allocations - .map((allocation) => { - return allocation.NodeID; - }) - .filter((v, i, a) => { - return a.indexOf(v) === i; - }) - .map((client) => { - return ( -
  • - { this.findNodeNameById(client) } -
  • - ); - }); - - clients.unshift( -
  • - - Any - -
  • - ); - - return ( - - { clients } - - ); - } - - render() { - const showJobColumn = this.props.showJobColumn; - const showClientColumn = this.props.showClientColumn; - const allocations = this.props.allocations; - const nodes = this.props.nodes; - const className = this.props.containerClassName; - - return ( -
    -
    - { this.clientFilter() } -   - { this.clientStatusFilter() } -   - { this.jobIdFilter() } -
    -
    - - - - - - { jobHeaderColumn(showJobColumn) } - - - { clientHeaderColumn(showClientColumn) } - - - - - - {this.filteredAllocations().map((allocation, index) => { - return ( - - - - { jobColumn(allocation, showJobColumn, nodes) } - - - { clientColumn(allocation, nodes, showClientColumn) } - - - - ); - })} - -
    IDTask GroupStatusAgeActions
    { renderClientStatus(allocation) } - - { allocation.TaskGroup } (#{ getAllocationNumberFromName(allocation.Name) }) - - { renderDesiredStatus(allocation) } - - - - - allocations.length - 4 } - className="btn btn-xs btn-simple pull-right" - title={ optionsGlyph } - key={ allocation.Name } - id={ `actions-${allocation.Name}` } - > -
  • - - Allocation { shortUUID(allocation.EvalID) } - -
  • -
  • - - Files - -
  • -
  • - Task States -
  • -
    -
    -
    -
    ); - } -} - -AllocationList.defaultProps = { - allocations: [], - nodes: [], - location: {}, - - showJobColumn: true, - showClientColumn: true, - - containerClassName: '', -}; - -AllocationList.propTypes = { - allocations: PropTypes.array.isRequired, - nodes: PropTypes.array.isRequired, - location: PropTypes.object.isRequired, - - showJobColumn: PropTypes.bool.isRequired, - showClientColumn: PropTypes.bool.isRequired, - - containerClassName: PropTypes.string.isRequired, -}; - -export default AllocationList; diff --git a/frontend/src/components/allocation/raw.js b/frontend/src/components/allocation/raw.js deleted file mode 100644 index 8fad70ca..00000000 --- a/frontend/src/components/allocation/raw.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Json from '../json'; - -const AllocationRaw = ({ allocation }) => -
    - -
    ; - -function mapStateToProps({ allocation }) { - return { allocation }; -} - -AllocationRaw.propTypes = { - allocation: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(AllocationRaw); diff --git a/frontend/src/components/app.js b/frontend/src/components/app.js index 5d687f6c..b1f39d9c 100644 --- a/frontend/src/components/app.js +++ b/frontend/src/components/app.js @@ -1,29 +1,43 @@ -import React, { PureComponent, PropTypes } from 'react'; -import Sidebar from './sidebar'; -import Topbar from './topbar'; +import React, { PureComponent, PropTypes } from 'react' +import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider' +import injectTapEventPlugin from 'react-tap-event-plugin' +import { green800, green900 } from 'material-ui/styles/colors' +import getMuiTheme from 'material-ui/styles/getMuiTheme' +import AppTopbar from './AppTopbar/AppTopbar' + +const muiTheme = getMuiTheme({ + palette: { + primary1Color: '#4b9a7d', + primary2Color: green800, + primary3Color: green900 + }, + appBar: { + height: 50 + } +}) class App extends PureComponent { - render() { - return ( -
    - -
    - -
    -
    - { this.props.children } -
    -
    -
    -
    - ); - } + constructor (props) { + super(props) + + injectTapEventPlugin() + } + + render () { + return ( + +
    + + { this.props.children } +
    +
    + ) + } } App.propTypes = { - location: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + children: PropTypes.object.isRequired +} -export default App; +export default App diff --git a/frontend/src/components/charts/progressbar.js b/frontend/src/components/charts/progressbar.js deleted file mode 100644 index 620dd971..00000000 --- a/frontend/src/components/charts/progressbar.js +++ /dev/null @@ -1,85 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { ProgressBar } from 'react-bootstrap'; - -class Progressbar extends Component { - - colorIndex(index) { - return { - // client status - ready: 'success', - initializing: 'warning', - down: 'danger', - - // server status - alive: 'success', - leaving: 'warning', - left: 'danger', - shutdown: 'danger', - - // job status - running: 'success', - pending: 'warning', - dead: 'info', - - // job type - service: 'success', - batch: 'info', - system: 'primary', - - // task states - // running: 'success', - starting: 'warning', - queued: 'info', - failed: 'danger', - lost: 'danger', - }[index]; - } - - render() { - const keys = Object.keys(this.props.data); - const normalizedValues = {}; - keys.forEach(key => (normalizedValues[key.toLowerCase()] = this.props.data[key])); - const normalizedKeys = keys.map(string => string.toLowerCase()); - const sum = normalizedKeys.reduce((previous, currentValue) => { - return previous + normalizedValues[currentValue]; - }, 0); - - return ( -
    -
    -
    { this.props.title }
    - - - {normalizedKeys.map((index) => { - return ( - - ); - })} - - - {normalizedKeys.map((index) => { - return ( - - - { index } ({ normalizedValues[index] }) - - ); - })} -
    -
    - ); - } -} - -Progressbar.propTypes = { - data: PropTypes.object.isRequired, - title: PropTypes.string.isRequired, -}; - -export default Progressbar; diff --git a/frontend/src/components/client/allocations.js b/frontend/src/components/client/allocations.js deleted file mode 100644 index a5974297..00000000 --- a/frontend/src/components/client/allocations.js +++ /dev/null @@ -1,40 +0,0 @@ -import React, { PureComponent, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import AllocationList from '../allocation/list'; - -class ClientAllocations extends PureComponent { - - render() { - const nodeId = this.props.params.nodeId; - const allocs = this.props.allocations.filter(allocation => allocation.NodeID === nodeId); - - return ( -
    - -
    - ); - } -} - -function mapStateToProps({ allocations }) { - return { allocations }; -} - -ClientAllocations.defaultProps = { - allocations: [], - params: {}, - location: {}, -}; - -ClientAllocations.propTypes = { - allocations: PropTypes.array.isRequired, - params: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ClientAllocations); diff --git a/frontend/src/components/client/evaluations.js b/frontend/src/components/client/evaluations.js deleted file mode 100644 index bd38b7d8..00000000 --- a/frontend/src/components/client/evaluations.js +++ /dev/null @@ -1,33 +0,0 @@ -import React, { PureComponent, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import EvaluationList from '../evaluation/list'; - -class ClientEvaluations extends PureComponent { - - render() { - const nodeId = this.props.params.nodeId; - const evals = this.props.evaluations.filter(evaluation => evaluation.NodeID === nodeId); - - return ( -
    - -
    - ); - } -} - -function mapStateToProps({ evaluations }) { - return { evaluations }; -} - -ClientEvaluations.defaultProps = { - evaluations: [], - params: {}, -}; - -ClientEvaluations.propTypes = { - evaluations: PropTypes.array.isRequired, - params: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ClientEvaluations); diff --git a/frontend/src/components/client/info.js b/frontend/src/components/client/info.js deleted file mode 100644 index ef9cb370..00000000 --- a/frontend/src/components/client/info.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import MetaDisplay from '../meta'; - -const nodeProps = [ - 'ID', - 'Name', - 'Status', - 'Datacenter', - 'Drain', - 'HTTPAddr', - 'NodeClass', -]; - -const withPrefix = function withPrefix(obj, prefix) { - const result = {}; - - Object.keys(obj || {}).forEach((key) => { - if (key.startsWith(prefix)) { - result[key.replace(prefix, '')] = obj[key]; - } - }); - - return result; -}; - -const ClientInfo = ({ node }) => -
    -
    -
    - Client Properties -
    - { nodeProps.map(nodeProp => -
    -
    { nodeProp }
    -
    { node[nodeProp] }
    -
    - )} -
    -
    -
    - Meta Properties - -
    -
    -
    -
    - CPU Attributes - -
    -
    - Driver Attributes - -
    -
    - Kernel Attributes - -
    -
    - Unique Attributes - -
    -
    - Nomad Attributes - -
    -
    -
    ; - -function mapStateToProps({ node }) { - return { node }; -} - -ClientInfo.propTypes = { - node: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ClientInfo); diff --git a/frontend/src/components/client/raw.js b/frontend/src/components/client/raw.js deleted file mode 100644 index 0cb1936d..00000000 --- a/frontend/src/components/client/raw.js +++ /dev/null @@ -1,21 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Json from '../json'; - -const ClientRaw = ({ node }) => -
    -
    - -
    -
    ; - -function mapStateToProps({ node }) { - return { node }; -} - -ClientRaw.propTypes = { - node: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ClientRaw); diff --git a/frontend/src/components/constraint/row.js b/frontend/src/components/constraint/row.js deleted file mode 100644 index 01ff5d4e..00000000 --- a/frontend/src/components/constraint/row.js +++ /dev/null @@ -1,30 +0,0 @@ -import React, { PropTypes } from 'react'; - -const ConstraintRow = ({ constraint }) => { - // unique case as it does not expose any LTarget or RTarget - if (constraint.Operand === 'distinct_hosts') { - return ( - - Distinct Hosts - - ); - } - - return ( - - { constraint.LTarget } - { constraint.Operand } - { constraint.RTarget } - - ); -}; - -ConstraintRow.defaultProps = { - constraint: {}, -}; - -ConstraintRow.propTypes = { - constraint: PropTypes.object.isRequired, -}; - -export default ConstraintRow; diff --git a/frontend/src/components/constraint/table.js b/frontend/src/components/constraint/table.js deleted file mode 100644 index f3e3a40d..00000000 --- a/frontend/src/components/constraint/table.js +++ /dev/null @@ -1,64 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import ReactTooltip from 'react-tooltip'; -import ConstraintRow from './row'; - -class ConstraintTable extends Component { - - render() { - function getUniqueKeyForConstraint(constraint) { - return (`${constraint.LTarget}@${constraint.RTarget}@${constraint.Operand}`); - } - - if (this.props.constraints === null || this.props.constraints.length === 0) { - return -; - } - - const table = ( - - - - - - - - - - { this.props.constraints.map(constraint => - - )} - -
    KeyOperandValue
    - ); - - if (this.props.asTooltip) { - return ( -
    - { table } - - { this.props.constraints.length } constraints - -
    - ); - } - - return table; - } -} - -ConstraintTable.defaultProps = { - constraints: [], - asTooltip: false, - idPrefix: null, -}; - -ConstraintTable.propTypes = { - constraints: PropTypes.array, - idPrefix: PropTypes.string, - asTooltip: PropTypes.bool.isRequired, -}; - -export default ConstraintTable; diff --git a/frontend/src/components/evaluation/allocs.js b/frontend/src/components/evaluation/allocs.js deleted file mode 100644 index 2ada1988..00000000 --- a/frontend/src/components/evaluation/allocs.js +++ /dev/null @@ -1,23 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import AllocationList from '../allocation/list'; - -const EvaluationAllocs = ({ allocations, evaluation, nodes }) => { - const allocs = allocations.filter(allocation => allocation.EvalID === evaluation.ID); - - return ( - - ); -}; - -function mapStateToProps({ evaluation, allocations, nodes }) { - return { evaluation, allocations, nodes }; -} - -EvaluationAllocs.propTypes = { - allocations: PropTypes.array.isRequired, - evaluation: PropTypes.object.isRequired, - nodes: PropTypes.array.isRequired, -}; - -export default connect(mapStateToProps)(EvaluationAllocs); diff --git a/frontend/src/components/evaluation/info.js b/frontend/src/components/evaluation/info.js deleted file mode 100644 index 5db33cd1..00000000 --- a/frontend/src/components/evaluation/info.js +++ /dev/null @@ -1,38 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -const evaluationProps = [ - 'ID', - 'Status', - 'Priority', - 'Type', - 'JobID', - 'TriggeredBy', -]; - -const EvaluationInfo = ({ evaluation }) => -
    -
    -
    - Evaluation Properties -
    - { evaluationProps.map(evalProp => -
    -
    { evalProp }
    -
    { evaluation[evalProp] }
    -
    - )} -
    -
    -
    -
    ; - -function mapStateToProps({ evaluation }) { - return { evaluation }; -} - -EvaluationInfo.propTypes = { - evaluation: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(EvaluationInfo); diff --git a/frontend/src/components/evaluation/list.js b/frontend/src/components/evaluation/list.js deleted file mode 100644 index 7bb2cc2f..00000000 --- a/frontend/src/components/evaluation/list.js +++ /dev/null @@ -1,48 +0,0 @@ -import React, { PropTypes } from 'react'; -import NomadLink from '../link'; - -const EvaluationList = ({ evaluations, containerClassName }) => -
    -
    - - - - - - - - - - - - - - - { evaluations.map(evaluation => - - - - - - - - - - - )} - -
    IDJobTypePriorityStatusStatus DescriptionParentTriggered by
    { evaluation.Type }{ evaluation.Priority }{ evaluation.Status }{ evaluation.StatusDescription }{ evaluation.TriggeredBy }
    -
    -
    ; - -EvaluationList.defaultProps = { - evaluations: [], - containerClassName: '', -}; - -EvaluationList.propTypes = { - evaluations: PropTypes.array.isRequired, - containerClassName: PropTypes.string.isRequired, -}; - -export default EvaluationList; diff --git a/frontend/src/components/evaluation/raw.js b/frontend/src/components/evaluation/raw.js deleted file mode 100644 index 10b65153..00000000 --- a/frontend/src/components/evaluation/raw.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Json from '../json'; - -const EvaluationRaw = ({ evaluation }) => -
    - -
    ; - -function mapStateToProps({ evaluation }) { - return { evaluation }; -} - -EvaluationRaw.propTypes = { - evaluation: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(EvaluationRaw); diff --git a/frontend/src/components/format/boolean.js b/frontend/src/components/format/boolean.js deleted file mode 100644 index 26ce5dc5..00000000 --- a/frontend/src/components/format/boolean.js +++ /dev/null @@ -1,66 +0,0 @@ -import React, { PropTypes } from 'react'; -import { Glyphicon } from 'react-bootstrap'; - -const FormatBoolean = ({ - title, - value, - withIcon, - withText, - withColor, - trueText, - falseText, - falseIcon, - trueIcon, -}) => { - let colorClass; - let icon; - let text; - - if (withColor) { - colorClass = value ? 'text-success' : 'text-danger'; - } - - if (withIcon) { - icon = ; - } - - if (withText) { - text = { value ? trueText : falseText }; - } - - return ( - { icon } { text } - ); -}; - -FormatBoolean.defaultProps = { - value: null, - title: null, - - withColor: true, - withIcon: true, - withText: false, - - trueText: 'yes', - trueIcon: 'ok', - - falseText: 'no', - falseIcon: 'remove', -}; - -FormatBoolean.propTypes = { - value: PropTypes.bool.isRequired, - title: PropTypes.string, - - withColor: PropTypes.bool.isRequired, - withIcon: PropTypes.bool.isRequired, - withText: PropTypes.bool.isRequired, - - trueText: PropTypes.string.isRequired, - trueIcon: PropTypes.string.isRequired, - - falseText: PropTypes.string.isRequired, - falseIcon: PropTypes.string.isRequired, -}; - -export default FormatBoolean; diff --git a/frontend/src/components/format/time.js b/frontend/src/components/format/time.js deleted file mode 100644 index 5d905fe3..00000000 --- a/frontend/src/components/format/time.js +++ /dev/null @@ -1,68 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import ReactTooltip from 'react-tooltip'; -// eslint-disable-next-line no-unused-vars -import momentDurationFormat from 'moment-duration-format'; -import moment from 'moment'; -import uuid from 'node-uuid'; -import getMoment from '../../helpers/time'; - -class FormatTime extends Component { - - getTimeDiff(time, now) { - if (this.props.durationInterval && this.props.durationFormat) { - return moment - .duration(time.diff(now), this.props.durationInterval) - .format(this.props.durationFormat, { forceLength: true }); - } - - return time.from(now, true); - } - - render() { - const time = getMoment(this.props.time); - const now = getMoment(this.props.now); - const format = this.props.timeFormat; - const uuidValue = uuid.v1(); - - if (this.props.display === 'relative') { - return ( - - { time.format(format) } - - {this.getTimeDiff(time, now)} - - - ); - } - - return ( - - { this.getTimeDiff(time, now) } - { time.format(format) } - - ); - } -} - -FormatTime.defaultProps = { - time: null, - now: 'now', - display: 'relative', - timeFormat: 'DD-MM-YYYY H:mm:ss', - durationInterval: null, - durationFormat: null, -}; - -FormatTime.propTypes = { - time: PropTypes.number.isRequired, - now: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - ]), - display: PropTypes.string.isRequired, - timeFormat: PropTypes.string.isRequired, - durationInterval: PropTypes.string, - durationFormat: PropTypes.string, -}; - -export default FormatTime; diff --git a/frontend/src/components/job/allocs.js b/frontend/src/components/job/allocs.js deleted file mode 100644 index 33372905..00000000 --- a/frontend/src/components/job/allocs.js +++ /dev/null @@ -1,45 +0,0 @@ -import React, { PureComponent, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import AllocationList from '../allocation/list'; - -class JobAllocs extends PureComponent { - - render() { - const jobId = this.props.params.jobId; - const allocs = this.props.allocations.filter(allocation => - allocation.JobID === jobId - ); - - return ( -
    - -
    - ); - } -} - -function mapStateToProps({ allocations, nodes }) { - return { allocations, nodes }; -} - -JobAllocs.defaultProps = { - allocations: [], - nodes: [], - params: {}, - location: {}, -}; - -JobAllocs.propTypes = { - allocations: PropTypes.array.isRequired, - params: PropTypes.object.isRequired, - nodes: PropTypes.array.isRequired, - location: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobAllocs); diff --git a/frontend/src/components/job/evals.js b/frontend/src/components/job/evals.js deleted file mode 100644 index fd80540a..00000000 --- a/frontend/src/components/job/evals.js +++ /dev/null @@ -1,33 +0,0 @@ -import React, { PureComponent, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import EvaluationList from '../evaluation/list'; - -class JobEvals extends PureComponent { - - render() { - const jobId = this.props.params.jobId; - const evals = this.props.evaluations.filter(evaluation => evaluation.JobID === jobId); - - return ( -
    - -
    - ); - } -} - -function mapStateToProps({ evaluations }) { - return { evaluations }; -} - -JobEvals.defaultProps = { - evaluations: [], - params: {}, -}; - -JobEvals.propTypes = { - evaluations: PropTypes.array.isRequired, - params: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobEvals); diff --git a/frontend/src/components/job/info.js b/frontend/src/components/job/info.js deleted file mode 100644 index 694dec30..00000000 --- a/frontend/src/components/job/info.js +++ /dev/null @@ -1,141 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../link'; -import Table from '../table'; -import MetaDisplay from '../meta'; -import ConstraintTable from '../constraint/table'; - -const jobProps = ['ID', 'Name', 'Region', 'Datacenters', 'Status', 'Priority']; - -class JobInfo extends Component { - - render() { - const tasks = []; - const job = this.props.job; - const jobMetaBag = job.Meta || {}; - - // Build the task groups table - const taskGroups = job.TaskGroups.map((taskGroup) => { - taskGroup.Tasks.map((task) => { - tasks.push( - - - - { taskGroup.Name } - - - - - { task.Name } - - - { task.Driver } - { task.Resources.CPU } - { task.Resources.MemoryMB } - { task.Resources.DiskMB } - - - ); - return null; - }); - - const taskGroupMeta = taskGroup.Meta || {}; - return ( - - - - { taskGroup.Name } - - - { taskGroup.Count } - { taskGroup.Tasks.length } - - { taskGroup.RestartPolicy.Mode } - - - ); - }); - - return ( -
    -
    -
    - Job Properties -
    - { jobProps.map((jobProp) => { - let jobPropValue = this.props.job[jobProp]; - if (Array.isArray(jobPropValue)) { - jobPropValue = jobPropValue.join(', '); - } - - const result = []; - result.push(
    { jobProp }
    ); - result.push(
    { jobPropValue }
    ); - - return result; - }, this)} -
    -
    -
    - Meta Properties - -
    -
    - -
    -
    - Constraints - -
    -
    - -
    -
    - Task Groups - { (taskGroups.length > 0) ? - - : null - } - - - -
    -
    - Tasks - { (tasks.length > 0) ? -
    - : null - } - - - - ); - } -} - -JobInfo.defaultProps = { - job: { - constraints: [], - }, - allocations: {}, - evaluations: {}, -}; - - -function mapStateToProps({ job, allocations, evaluations }) { - return { job, allocations, evaluations }; -} - -JobInfo.propTypes = { - job: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobInfo); diff --git a/frontend/src/components/job/raw.js b/frontend/src/components/job/raw.js deleted file mode 100644 index 3cd03e79..00000000 --- a/frontend/src/components/job/raw.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Json from '../json'; - -const JobRaw = ({ job }) => -
    - -
    ; - -function mapStateToProps({ job }) { - return { job }; -} - -JobRaw.propTypes = { - job: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobRaw); diff --git a/frontend/src/components/job/taskGroups.js b/frontend/src/components/job/taskGroups.js deleted file mode 100644 index eddd869f..00000000 --- a/frontend/src/components/job/taskGroups.js +++ /dev/null @@ -1,73 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../link'; -import Table from '../table'; -import Json from '../json'; -import MetaDisplay from '../meta'; - -const taskGroupHeaders = [ - 'ID', - 'Name', - 'Count', - 'Meta', - 'Restart Policy', -]; - -const JobTaskGroups = ({ job, location }) => { - const taskGroups = []; - - job.TaskGroups.forEach((taskGroup) => { - taskGroups.push( - - - - - - - - ); - }); - - let taskGroupId = location.query.taskGroupId; - - // Auto-select first task group if only one is available. - if (!taskGroupId && job.TaskGroups.length === 1) { - taskGroupId = job.TaskGroups[0].ID; - } - return ( -
    -
    -
    - Task Groups - { (taskGroups.length > 0) ? -
    { taskGroup.Name }{ taskGroup.Count }{ taskGroup.RestartPolicy.Mode }
    - : null - } - -
    - Task Group: { taskGroupId } - { job.TaskGroups - .filter(taskGroup => taskGroup.ID === taskGroupId) - .map(taskGroup => ) - .pop() - } -
    - - - ); -}; - -function mapStateToProps({ job }) { - return { job }; -} - -JobTaskGroups.propTypes = { - job: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobTaskGroups); diff --git a/frontend/src/components/job/tasks.js b/frontend/src/components/job/tasks.js deleted file mode 100644 index 6904a21b..00000000 --- a/frontend/src/components/job/tasks.js +++ /dev/null @@ -1,96 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../link'; -import Table from '../table'; -import Json from '../json'; - -const taskHeaders = [ - 'ID', - 'Name', - 'Group', - 'Driver', - 'CPU', - 'Memory', - 'Disk', -]; - -const JobTasks = ({ job, location }) => { - const tasks = []; - job.TaskGroups.forEach((taskGroup) => { - taskGroup.Tasks.forEach((task) => { - tasks.push( - - - - - - - - - - ); - }); - }); - - let taskGroupId = location.query.taskGroupId; - let taskId = location.query.taskId; - - // Auto-select first task if only one is available. - if (!taskGroupId && !taskId && tasks.length === 1) { - job.TaskGroups.forEach((taskGroup) => { - taskGroup.Tasks.forEach((task) => { - taskGroupId = taskGroup.ID; - taskId = task.ID; - }); - }); - } - return ( -
    -
    -
    - Tasks - { (tasks.length > 0) ? -
    - - {task.Name} - - { taskGroup.Name } - - { task.Driver }{ task.Resources.CPU }{ task.Resources.MemoryMB }{ task.Resources.DiskMB }
    - : null - } - -
    - Task: { (taskGroupId && taskId) ? `${taskGroupId}/${taskId}` : null} - { job.TaskGroups - .filter(taskGroup => taskGroup.ID === taskGroupId) - .map(taskGroup => taskGroup.Tasks - .filter(task => task.ID === taskId) - .map(task => ) - .pop()) - .pop()} -
    - - - ); -}; - -function mapStateToProps({ job }) { - return { job }; -} - -JobTasks.propTypes = { - job: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(JobTasks); diff --git a/frontend/src/components/json.js b/frontend/src/components/json.js deleted file mode 100644 index 49bf1580..00000000 --- a/frontend/src/components/json.js +++ /dev/null @@ -1,41 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import JSONFormatter from 'json-formatter-js'; - -class Json extends Component { - - componentDidMount() { - const formatter = new JSONFormatter(this.props.json, 2, { - hoverPreviewEnabled: true, - hoverPreviewArrayCount: 100, - hoverPreviewFieldCount: 5, - }); - this.json.appendChild(formatter.render()); - } - - componentDidUpdate() { - const formatter = new JSONFormatter(this.props.json, 2, { - hoverPreviewEnabled: true, - hoverPreviewArrayCount: 100, - hoverPreviewFieldCount: 5, - }); - - // Remove the old JSON - if (this.json.hasChildNodes()) { - this.json.removeChild(this.json.childNodes[0]); - } - // Add the new JSON - this.json.appendChild(formatter.render()); - } - - render() { - return ( -
    { this.json = c; } }>
    - ); - } -} - -Json.propTypes = { - json: PropTypes.object.isRequired, -}; - -export default Json; diff --git a/frontend/src/components/link.js b/frontend/src/components/link.js deleted file mode 100644 index 47292e43..00000000 --- a/frontend/src/components/link.js +++ /dev/null @@ -1,172 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { Link } from 'react-router'; -import shortUUID from '../helpers/uuid'; - -let nodeIdToNameCache = {}; - -export default class NomadLink extends Component { - - componentWillReceiveProps(nextProps) { - if (nextProps.nodeList !== this.props.nodeList) { - nodeIdToNameCache = {}; - } - } - - findNodeNameById(nodeId) { - if (nodeId in nodeIdToNameCache) { - return nodeIdToNameCache[nodeId]; - } - - const r = Object.keys(this.props.nodeList) - .filter(node => - this.props.nodeList[node].ID === nodeId - ); - - if (r.length !== 0) { - nodeIdToNameCache[nodeId] = this.props.nodeList[r].Name; - } else { - nodeIdToNameCache[nodeId] = false; - } - - return nodeIdToNameCache[nodeId]; - } - - render() { - const short = this.props.short === 'true'; - const linkAppend = this.props.linkAppend || ''; - - let children = this.props.children; - const linkProps = Object.assign({}, this.props); - Object.keys(linkProps).filter(key => key.endsWith('Id')).forEach((key) => { - delete linkProps[key]; - }); - delete linkProps.short; - delete linkProps.nodeList; - delete linkProps.linkAppend; - - // member - if (this.props.memberId !== undefined) { - const memberId = this.props.memberId; - if (children === undefined) { - children = short ? shortUUID(memberId) : memberId; - } - return ( - { children } - ); - } - - // node - if (this.props.nodeId !== undefined) { - const nodeId = this.props.nodeId; - if (children === undefined) { - if (this.props.nodeList) { - children = this.findNodeNameById(this.props.nodeId); - } - - if (!children) { - children = short ? shortUUID(nodeId) : nodeId; - } - } - - return ( - { children } - ); - } - - // eval - if (this.props.evalId !== undefined) { - const evalId = this.props.evalId; - if (children === undefined) { - children = short ? shortUUID(evalId) : evalId; - } - return ( - { children } - ); - } - - // alloc - if (this.props.allocId !== undefined) { - const allocId = this.props.allocId; - if (children === undefined) { - children = short ? shortUUID(allocId) : allocId; - } - - return ( - { children } - ); - } - - // tasks - if (this.props.taskId !== undefined) { - if (this.props.jobId !== undefined && this.props.taskGroupId !== undefined) { - const jobId = this.props.jobId; - const jobIdUrl = encodeURIComponent(jobId); - const taskGroupId = this.props.taskGroupId; - const taskId = this.props.taskId; - - if (children === undefined) { - children = short ? shortUUID(taskId) : taskId; - } - return ( - - { children } - - ); - } - console.error('NomadLink: You must also provide taskGroupId and jobId for task links!'); - } - - // taskGroup (must be after task) - if (this.props.taskGroupId !== undefined) { - if (this.props.jobId !== undefined) { - const jobId = this.props.jobId; - const jobIdUrl = encodeURIComponent(jobId); - const taskGroupId = this.props.taskGroupId; - - if (children === undefined) { - children = short ? shortUUID(taskGroupId) : taskGroupId; - } - return ( - - { children } - - ); - } - console.error('NomadLink: You must also provide jobId for taskGroup links!'); - } - - // job (must be after task & taskGroup - if (this.props.jobId !== undefined) { - const jobId = this.props.jobId; - const jobIdUrl = encodeURIComponent(jobId); - - if (children === undefined) { - children = short ? shortUUID(jobId) : jobId; - } - return ( - { children } - ); - } - - // nothing by default - return null; - } -} - -NomadLink.propTypes = { - nodeList: PropTypes.array, - short: PropTypes.string, - children: PropTypes.oneOfType([ - PropTypes.array, - PropTypes.string, - React.PropTypes.node, - ]), - memberId: PropTypes.string, - nodeId: PropTypes.string, - evalId: PropTypes.string, - allocId: PropTypes.string, - taskId: PropTypes.string, - jobId: PropTypes.string, - linkAppend: PropTypes.string, - taskGroupId: PropTypes.string, -}; diff --git a/frontend/src/components/meta.js b/frontend/src/components/meta.js deleted file mode 100644 index 3b522986..00000000 --- a/frontend/src/components/meta.js +++ /dev/null @@ -1,62 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import ReactTooltip from 'react-tooltip'; -import uuid from 'node-uuid'; - -class Meta extends Component { - - render() { - const metaBag = this.props.metaBag || {}; - const dtWithClass = this.props.dtWithClass; - const sortKeys = this.props.sortKeys; - const asTooltip = this.props.asTooltip; - - let keys = Object.keys(metaBag || {}); - if (keys.length === 0) { - return (
    - No data found -
    ); - } - - const identifier = uuid.v1(); - const meta = []; - let metaTag = null; - - if (sortKeys) { - keys = keys.sort(); - } - - keys.forEach((key) => { - meta.push(
    { key }
    ); - meta.push(
    { metaBag[key] }
    ); - }); - - if (meta.length > 0) { - metaTag =
    { meta }
    ; - } - - if (asTooltip) { - return ( -
    - { metaTag } - { keys.length } keys -
    - ); - } - - return metaTag; - } -} - -Meta.defaultProps = { - metaBag: {}, - dtWithClass: 'default', - sortKeys: true, - asTooltip: false, -}; - -Meta.propTypes = { - metaBag: PropTypes.object, - dtWithClass: PropTypes.string.isRequired, - sortKeys: PropTypes.bool.isRequired, - asTooltip: PropTypes.bool.isRequired, -}; - -export default Meta; diff --git a/frontend/src/components/node/status.js b/frontend/src/components/node/status.js deleted file mode 100644 index 623ea2b7..00000000 --- a/frontend/src/components/node/status.js +++ /dev/null @@ -1,28 +0,0 @@ -import React, { PropTypes } from 'react'; -import FormatBoolean from '../format/boolean'; - -const NodeStatus = ({ value }) => { - switch (value) { - case 'initializing': - return (initializing); - - case 'ready': - return (); - - case 'down': - return (); - - default: - return ({value}); - } -}; - -NodeStatus.defaultProps = { - value: null, -}; - -NodeStatus.propTypes = { - value: PropTypes.string.isRequired, -}; - -export default NodeStatus; diff --git a/frontend/src/components/server/info.js b/frontend/src/components/server/info.js deleted file mode 100644 index 310f21a7..00000000 --- a/frontend/src/components/server/info.js +++ /dev/null @@ -1,60 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Table from '../table'; - -const memberProps = [ - 'ID', - 'Name', - 'Address', - 'Port', - 'Status', -]; - -const ServerInfo = ({ member }) => { - const tags = member.Tags; - - const memberTags = Object.keys(tags).map((key) => { - const name = key; - const value = tags[key]; - - return ( - - - - - ); - }); - - return ( -
    -
    - Server Properties -
    - { memberProps.map(memberProp => -
    -
    { memberProp }
    -
    { member[memberProp] }
    -
    - )} -
    -
    - Server Tags - { (memberTags.length > 0) ? -
    { name }{ value }
    - : null - } - - - ); -}; - -function mapStateToProps({ member }) { - return { member }; -} - -ServerInfo.propTypes = { - member: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ServerInfo); diff --git a/frontend/src/components/server/raw.js b/frontend/src/components/server/raw.js deleted file mode 100644 index e95a68da..00000000 --- a/frontend/src/components/server/raw.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Json from '../json'; - -const ServerRaw = ({ member }) => -
    - -
    ; - -function mapStateToProps({ member }) { - return { member }; -} - -ServerRaw.propTypes = { - member: PropTypes.object.isRequired, -}; - -export default connect(mapStateToProps)(ServerRaw); diff --git a/frontend/src/components/sidebar.js b/frontend/src/components/sidebar.js deleted file mode 100644 index d0703eb3..00000000 --- a/frontend/src/components/sidebar.js +++ /dev/null @@ -1,80 +0,0 @@ -import React, { PropTypes, PureComponent } from 'react'; -import { Link } from 'react-router'; - -class Sidebar extends PureComponent { - - /* eslint class-methods-use-this: 0*/ - onClickMenu() { - window.document.querySelector('html').classList.toggle('sidebar-mini'); - } - - onLinkClick() { - window.document.querySelector('html').classList.remove('nav-open'); - } - - render() { - return ( -
    -
    - - Nomad - - - - -
    -
    - N - -
    -
    -
      -
    • - - -

      Cluster

      - -
    • -
    • - - -

      Jobs

      - -
    • -
    • - - -

      Allocations

      - -
    • -
    • - - -

      Evaluations

      - -
    • -
    • - - -

      Clients

      - -
    • -
    • - - -

      Servers

      - -
    • -
    -
    -
    -
    - ); - } -} - -Sidebar.propTypes = { - location: PropTypes.object.isRequired, -}; - -export default Sidebar; diff --git a/frontend/src/components/table.js b/frontend/src/components/table.js deleted file mode 100644 index 8a208cf5..00000000 --- a/frontend/src/components/table.js +++ /dev/null @@ -1,23 +0,0 @@ -import React, { PropTypes } from 'react'; - -const Table = ({ classes, headers, body }) => -
    -
    - - - { headers.map(header => ) } - - - - { body } - -
    { header }
    -
    ; - -Table.propTypes = { - classes: PropTypes.string.isRequired, - headers: PropTypes.array.isRequired, - body: PropTypes.array.isRequired, -}; - -export default Table; diff --git a/frontend/src/components/tabs.js b/frontend/src/components/tabs.js deleted file mode 100644 index f1469162..00000000 --- a/frontend/src/components/tabs.js +++ /dev/null @@ -1,31 +0,0 @@ -import React, { PropTypes } from 'react'; -import { Link } from 'react-router'; - -const Tabs = ({ children, tabs, tabSlug, basePath }) => -
    -
      - {tabs.map(tab => -
    • - - { tab.name } - -
    • ) - } -
    -
    - {children} -
    -
    ; - -Tabs.propTypes = { - tabs: PropTypes.array.isRequired, - tabSlug: PropTypes.string.isRequired, - basePath: PropTypes.string.isRequired, - children: PropTypes.object.isRequired, -}; - -export default Tabs; diff --git a/frontend/src/components/topbar.js b/frontend/src/components/topbar.js deleted file mode 100644 index 6e2ca2ff..00000000 --- a/frontend/src/components/topbar.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, { PureComponent } from 'react'; - -class Topbar extends PureComponent { - - /* eslint class-methods-use-this: 0*/ - onClick() { - window.document.querySelector('html').classList.toggle('nav-open'); - } - - render() { - return ( -
    - ); - } -} - -// Topbar.propTypes = { -// location: PropTypes.object.isRequired, -// }; - -export default Topbar; diff --git a/frontend/src/containers/allocation.js b/frontend/src/containers/allocation.js index 82f08d92..3600fc55 100644 --- a/frontend/src/containers/allocation.js +++ b/frontend/src/containers/allocation.js @@ -1,87 +1,55 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Tabs from '../components/tabs'; - -import { WATCH_ALLOC, UNWATCH_ALLOC } from '../sagas/event'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import AllocationTopbar from '../components/AllocationTopbar/AllocationTopbar' +import { WATCH_ALLOC, UNWATCH_ALLOC } from '../sagas/event' class Allocation extends Component { - constructor(props) { - super(props); - - this.state = { - tabs: [ - { - name: 'Info', - path: 'info', - }, - { - name: 'Files', - path: 'files', - }, - { - name: 'Logs', - path: 'logs', - }, - { - name: 'Raw', - path: 'raw', - }, - ], - }; - } - - componentWillMount() { - this.props.dispatch({ - type: WATCH_ALLOC, - payload: this.props.params.allocId, - }); + componentWillMount () { + this.props.dispatch({ + type: WATCH_ALLOC, + payload: this.props.params.allocId + }) + } + + componentWillUnmount () { + this.props.dispatch({ + type: UNWATCH_ALLOC, + payload: this.props.params.allocId + }) + } + + render () { + if (this.props.allocation == null) { + return null } - componentWillUnmount() { - this.props.dispatch({ - type: UNWATCH_ALLOC, - payload: this.props.params.allocId, - }); - } + return ( +
    + - render() { - if (this.props.allocation == null) return (null); +
    +

    Allocation: { this.props.allocation.Name }

    - const path = this.props.location.pathname; - const tabSlug = path.split('/').pop(); - const basePath = path.substring(0, path.lastIndexOf('/')); +
    - return ( -
    -
    -
    -
    -

    Allocation: { this.props.allocation.Name }

    -
    -
    - - { this.props.children } - -
    -
    -
    -
    - ); - } + { this.props.children } +
    +
    + ) + } } -function mapStateToProps({ allocation }) { - return { allocation }; +function mapStateToProps ({ allocation }) { + return { allocation } } Allocation.propTypes = { - dispatch: PropTypes.func.isRequired, - params: PropTypes.object.isRequired, - allocation: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + dispatch: PropTypes.func.isRequired, + params: PropTypes.object.isRequired, + allocation: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, // eslint-disable-line no-unused-vars + children: PropTypes.object.isRequired +} -export default connect(mapStateToProps)(Allocation); +export default connect(mapStateToProps)(Allocation) diff --git a/frontend/src/containers/allocations.js b/frontend/src/containers/allocations.js index 2a9ca43a..acb4ce97 100644 --- a/frontend/src/containers/allocations.js +++ b/frontend/src/containers/allocations.js @@ -1,37 +1,33 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import AllocationList from '../components/allocation/list'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import AllocationList from '../components/AllocationList/AllocationList' +import { WATCH_ALLOCS, UNWATCH_ALLOCS, WATCH_NODES, UNWATCH_NODES } from '../sagas/event' class Allocations extends Component { - render() { - return ( -
    -
    -
    -
    -

    Allocations

    -
    - -
    -
    -
    - ); - } + componentDidMount() { + this.props.dispatch({type: WATCH_ALLOCS }) + this.props.dispatch({type: WATCH_NODES }) + } + + componentWillUnmount() { + this.props.dispatch({type: UNWATCH_ALLOCS }) + this.props.dispatch({type: UNWATCH_NODES }) + } + + render () { + return + } } -function mapStateToProps({ allocations, nodes }) { - return { allocations, nodes }; +function mapStateToProps ({ allocations, nodes }) { + return { allocations, nodes } } Allocations.propTypes = { - allocations: PropTypes.array.isRequired, - nodes: PropTypes.array.isRequired, -}; + allocations: PropTypes.array.isRequired, // eslint-disable-line no-unused-vars + nodes: PropTypes.array.isRequired, // eslint-disable-line no-unused-vars + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Allocations); +export default connect(mapStateToProps)(Allocations) diff --git a/frontend/src/containers/client.js b/frontend/src/containers/client.js index 542511d9..67078fe6 100644 --- a/frontend/src/containers/client.js +++ b/frontend/src/containers/client.js @@ -1,87 +1,49 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Tabs from '../components/tabs'; - -import { WATCH_NODE, UNWATCH_NODE } from '../sagas/event'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import ClientTopbar from '../components/ClientTopbar/ClientTopbar' +import { WATCH_NODE, UNWATCH_NODE } from '../sagas/event' class Client extends Component { - constructor(props) { - super(props); + componentWillMount () { + this.props.dispatch({ type: WATCH_NODE, payload: this.props.params.nodeId }) + } - this.state = { - tabs: [ - { - name: 'Info', - path: 'info', - }, - { - name: 'Allocations', - path: 'allocations', - }, - { - name: 'Evaluations', - path: 'evaluations', - }, - { - name: 'Raw', - path: 'raw', - }, - ], - }; - } + componentWillUnmount () { + this.props.dispatch({ type: UNWATCH_NODE, payload: this.props.params.nodeId }) + } - componentWillMount() { - this.props.dispatch({ - type: WATCH_NODE, - payload: this.props.params.nodeId, - }); + render () { + if (this.props.node == null) { + return null } - componentWillUnmount() { - this.props.dispatch({ - type: UNWATCH_NODE, - payload: this.props.params.nodeId, - }); - } + return ( +
    + - render() { - if (this.props.node == null) return (null); +
    +

    Client: { this.props.node.Name }

    - const path = this.props.location.pathname; - const tabSlug = path.split('/').pop(); - const basePath = path.substring(0, path.lastIndexOf('/')); +
    - return ( -
    -
    -
    -
    -

    Client: { this.props.node.Name }

    -
    -
    - - { this.props.children } - -
    -
    -
    -
    - ); - } + { this.props.children } +
    +
    + ) + } } -function mapStateToProps({ node }) { - return { node }; +function mapStateToProps ({ node }) { + return { node } } Client.propTypes = { - dispatch: PropTypes.func.isRequired, - params: PropTypes.object.isRequired, - node: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + dispatch: PropTypes.func.isRequired, + params: PropTypes.object.isRequired, + node: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, + children: PropTypes.object.isRequired +} -export default connect(mapStateToProps)(Client); +export default connect(mapStateToProps)(Client) diff --git a/frontend/src/containers/clients.js b/frontend/src/containers/clients.js index a062eb98..89017104 100644 --- a/frontend/src/containers/clients.js +++ b/frontend/src/containers/clients.js @@ -1,52 +1,69 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../components/link'; -import FormatBoolean from '../components/format/boolean'; -import NodeStatus from '../components/node/status'; - -const Clients = ({ nodes }) => -
    -
    -
    -
    -

    Clients

    -
    -
    - - - - - - - - - - - - - { nodes.map(node => - - - - - - - - - )} - -
    IDNameStatusDrainDatacenterClass
    { node.Name }{ node.Datacenter }{ node.NodeClass ? node.NodeClass : ''}
    -
    +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import { Card, CardText } from 'material-ui/Card' +import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from '../components/Table' +import { WATCH_NODES, UNWATCH_NODES } from '../sagas/event' +import ClientLink from '../components/ClientLink/ClientLink' +import FormatBoolean from '../components/FormatBoolean/FormatBoolean' +import NodeStatus from '../components/NodeStatus/NodeStatus' + +class Clients extends Component { + + componentDidMount() { + this.props.dispatch({ type: WATCH_NODES }) + } + + componentWillUnmount() { + this.props.dispatch({ type: UNWATCH_NODES }) + } + + render() { + return ( +
    + + + + + + ID + Name + Status + Drain + Datacenter + Class + + + + { this.props.nodes.map((node) => { + return ( + + + { node.Name } + + + { node.Datacenter } + { node.NodeClass ? node.NodeClass : ''} + + + ) + }) + } + +
    +
    +
    -
    -
    ; + ) + } +} -function mapStateToProps({ nodes }) { - return { nodes }; +function mapStateToProps ({ nodes }) { + return { nodes } } Clients.propTypes = { - nodes: PropTypes.array.isRequired, -}; + nodes: PropTypes.array.isRequired, + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Clients); +export default connect(mapStateToProps)(Clients) diff --git a/frontend/src/containers/cluster.js b/frontend/src/containers/cluster.js index 20e2b579..fbd9996f 100644 --- a/frontend/src/containers/cluster.js +++ b/frontend/src/containers/cluster.js @@ -1,86 +1,113 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import Progressbar from '../components/charts/progressbar'; -import Events from './events'; -import Statistics from './statistics'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import Progressbar from '../components/Progressbar/Progressbar' +import ClusterEvents from '../components/ClusterEvents/ClusterEvents' +import ClusterStatistics from '../components/ClusterStatistics/ClusterStatistics' +import { Grid, Row, Col } from 'react-flexbox-grid' +import { + WATCH_JOBS, UNWATCH_JOBS, + WATCH_NODES, UNWATCH_NODES, + WATCH_MEMBERS, UNWATCH_MEMBERS +} from '../sagas/event' class Cluster extends Component { - getChartData() { - const stats = { - jobStatus: { - running: 0, - pending: 0, - dead: 0, - }, - jobTypes: { - service: 0, - batch: 0, - system: 0, - }, - nodeStatus: { - ready: 0, - initializing: 0, - down: 0, - }, - memberStatus: { - alive: 0, - leaving: 0, - left: 0, - shutdown: 0, - }, - }; + componentWillMount () { + this.props.dispatch({ type: WATCH_JOBS }) + this.props.dispatch({ type: WATCH_NODES }) + this.props.dispatch({ type: WATCH_MEMBERS }) + } - for (const job of this.props.jobs) { - stats.jobStatus[job.Status] += 1; - stats.jobTypes[job.Type] += 1; - } + componentWillUnmount () { + this.props.dispatch({ type: UNWATCH_JOBS }) + this.props.dispatch({ type: UNWATCH_NODES }) + this.props.dispatch({ type: UNWATCH_MEMBERS }) + } - for (const node of this.props.nodes) { - stats.nodeStatus[node.Status] += 1; - } - - for (const member of this.props.members) { - stats.memberStatus[member.Status] += 1; - } + getChartData () { + const stats = { + jobStatus: { + running: 0, + pending: 0, + dead: 0 + }, + jobTypes: { + service: 0, + batch: 0, + system: 0 + }, + nodeStatus: { + ready: 0, + initializing: 0, + down: 0 + }, + memberStatus: { + alive: 0, + leaving: 0, + left: 0, + shutdown: 0 + } + } - return stats; + for (const job of this.props.jobs) { + stats.jobStatus[job.Status] += 1 + stats.jobTypes[job.Type] += 1 } - render() { - const data = this.getChartData(); + for (const node of this.props.nodes) { + stats.nodeStatus[node.Status] += 1 + } - return ( -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - - -
    - ); + for (const member of this.props.members) { + stats.memberStatus[member.Status] += 1 } + + return stats + } + + render () { + const data = this.getChartData() + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } } -function mapStateToProps({ jobs, nodes, members }) { - return { jobs, nodes, members }; +function mapStateToProps ({ jobs, nodes, members }) { + return { jobs, nodes, members } } Cluster.propTypes = { - jobs: PropTypes.array.isRequired, - nodes: PropTypes.array.isRequired, - members: PropTypes.array.isRequired, -}; + jobs: PropTypes.array.isRequired, + nodes: PropTypes.array.isRequired, + members: PropTypes.array.isRequired, + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Cluster); +export default connect(mapStateToProps)(Cluster) diff --git a/frontend/src/containers/evaluation.js b/frontend/src/containers/evaluation.js index b7a1aece..55cfd7eb 100644 --- a/frontend/src/containers/evaluation.js +++ b/frontend/src/containers/evaluation.js @@ -1,83 +1,50 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Tabs from '../components/tabs'; - -import { WATCH_EVAL, UNWATCH_EVAL } from '../sagas/event'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import EvaluationTopbar from '../components/EvaluationTopbar/EvaluationTopbar' +import { WATCH_EVAL, UNWATCH_EVAL, WATCH_ALLOCS, UNWATCH_ALLOCS } from '../sagas/event' class Evaluation extends Component { - constructor(props) { - super(props); + componentWillMount () { + this.props.dispatch({ type: WATCH_EVAL, payload: this.props.params.evalId }) + this.props.dispatch({ type: WATCH_ALLOCS }) + } - this.state = { - tabs: [ - { - name: 'Info', - path: 'info', - }, - { - name: 'Allocations', - path: 'allocations', - }, - { - name: 'Raw', - path: 'raw', - }, - ], - }; - } + componentWillUnmount () { + this.props.dispatch({ type: UNWATCH_EVAL, payload: this.props.params.evalId }) + this.props.dispatch({ type: UNWATCH_ALLOCS }) + } - componentWillMount() { - this.props.dispatch({ - type: WATCH_EVAL, - payload: this.props.params.evalId, - }); + render () { + if (this.props.evaluation == null) { + return (null) } - componentWillUnmount() { - this.props.dispatch({ - type: UNWATCH_EVAL, - payload: this.props.params.evalId, - }); - } + return ( +
    + - render() { - if (this.props.evaluation == null) return (null); +
    +

    Evaluation: { this.props.evaluation.ID }

    - const path = this.props.location.pathname; - const tabSlug = path.split('/').pop(); - const basePath = path.substring(0, path.lastIndexOf('/')); +
    - return ( -
    -
    -
    -
    -

    Evaluation: { this.props.evaluation.ID }

    -
    -
    - - { this.props.children } - -
    -
    -
    -
    - ); - } + { this.props.children } +
    +
    + ) + } } -function mapStateToProps({ evaluation }) { - return { evaluation }; +function mapStateToProps ({ evaluation }) { + return { evaluation } } Evaluation.propTypes = { - dispatch: PropTypes.func.isRequired, - params: PropTypes.object.isRequired, - evaluation: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + dispatch: PropTypes.func.isRequired, + params: PropTypes.object.isRequired, + evaluation: PropTypes.object.isRequired, + children: PropTypes.object.isRequired +} -export default connect(mapStateToProps)(Evaluation); +export default connect(mapStateToProps)(Evaluation) diff --git a/frontend/src/containers/evaluations.js b/frontend/src/containers/evaluations.js index 28bec03b..c783d5fd 100644 --- a/frontend/src/containers/evaluations.js +++ b/frontend/src/containers/evaluations.js @@ -1,29 +1,34 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import EvaluationList from '../components/evaluation/list'; - -const Evaluations = ({ evaluations }) => -
    -
    -
    -
    -

    Evaluations

    -
    - -
    -
    -
    ; - -function mapStateToProps({ evaluations }) { - return { evaluations }; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import { WATCH_EVALS, UNWATCH_EVALS } from '../sagas/event' +import EvaluationList from '../components/EvaluationList/EvaluationList' + +class Evaluations extends Component { + + componentDidMount() { + this.props.dispatch({ type: WATCH_EVALS }) + } + + componentWillUnmount() { + this.props.dispatch({ type: UNWATCH_EVALS }) + } + + render() { + return + } +} + +function mapStateToProps ({ evaluations }) { + return { evaluations } } Evaluations.defaultProps = { - evaluations: {}, -}; + evaluations: {} +} Evaluations.propTypes = { - evaluations: PropTypes.array.isRequired, -}; + evaluations: PropTypes.array.isRequired, + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Evaluations); +export default connect(mapStateToProps)(Evaluations) diff --git a/frontend/src/containers/events.js b/frontend/src/containers/events.js deleted file mode 100644 index 27b757e4..00000000 --- a/frontend/src/containers/events.js +++ /dev/null @@ -1,78 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../components/link'; -import FormatTime from '../components/format/time'; - -class Events extends Component { - - render() { - const taskEvents = []; - this.props.allocations.forEach((allocation) => { - if (allocation.TaskStates != null) { - Object.keys(allocation.TaskStates).forEach((task) => { - allocation.TaskStates[task].Events.reverse().forEach((event) => { - if (taskEvents.length === 10) return; - const eventID = `${task}.${event.Time}`; - taskEvents.push( - - - - { allocation.JobID }.{ task } - - - { event.Type } - { - event.KillError || - event.DriverError || - event.DownloadError || - event.RestartReason || - event.Message || - '' - } - - - - ); - }); - }); - } - }); - - return ( -
    -
    -
    -
    -

    Task Events

    -
    -
    - - - - - - - - - - - { taskEvents } - -
    TaskTypeMessageTime
    -
    -
    -
    -
    - ); - } -} - -function mapStateToProps({ allocations }) { - return { allocations }; -} - -Events.propTypes = { - allocations: PropTypes.array.isRequired, -}; - -export default connect(mapStateToProps)(Events); diff --git a/frontend/src/containers/job.js b/frontend/src/containers/job.js index 7f42d1f6..1f7ed416 100644 --- a/frontend/src/containers/job.js +++ b/frontend/src/containers/job.js @@ -1,95 +1,49 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Tabs from '../components/tabs'; - -import { WATCH_JOB, UNWATCH_JOB } from '../sagas/event'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import JobTopbar from '../components/JobTopbar/JobTopbar' +import { WATCH_JOB, UNWATCH_JOB } from '../sagas/event' class Job extends Component { - constructor(props) { - super(props); + componentWillMount () { + this.props.dispatch({ type: WATCH_JOB, payload: this.props.params.jobId }) + } - this.state = { - tabs: [ - { - name: 'Info', - path: 'info', - }, - { - name: 'Allocations', - path: 'allocations', - }, - { - name: 'Evaluations', - path: 'evaluations', - }, - { - name: 'Tasks Groups', - path: 'taskGroups', - }, - { - name: 'Tasks', - path: 'tasks', - }, - { - name: 'Raw', - path: 'raw', - }, - ], - }; - } + componentWillUnmount () { + this.props.dispatch({ type: UNWATCH_JOB, payload: this.props.params.jobId }) + } - componentWillMount() { - this.props.dispatch({ - type: WATCH_JOB, - payload: this.props.params.jobId, - }); + render () { + if (this.props.job == null) { + return null } - componentWillUnmount() { - this.props.dispatch({ - type: UNWATCH_JOB, - payload: this.props.params.jobId, - }); - } + return ( +
    + - render() { - if (this.props.job == null) return (null); +
    +

    Job: { this.props.job.Name }

    - const path = this.props.location.pathname; - const tabSlug = path.split('/').pop(); - const basePath = path.substring(0, path.lastIndexOf('/')); +
    - return ( -
    -
    -
    -
    -

    Job: { this.props.job.ID }

    -
    -
    - - { this.props.children } - -
    -
    -
    -
    - ); - } + { this.props.children } +
    +
    + ) + } } -function mapStateToProps({ job }) { - return { job }; +function mapStateToProps ({ job }) { + return { job } } Job.propTypes = { - dispatch: PropTypes.func.isRequired, - params: PropTypes.object.isRequired, - job: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + dispatch: PropTypes.func.isRequired, + params: PropTypes.object.isRequired, + job: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, + children: PropTypes.object.isRequired +} -export default connect(mapStateToProps)(Job); +export default connect(mapStateToProps)(Job) diff --git a/frontend/src/containers/jobs.js b/frontend/src/containers/jobs.js index e8ad0b18..bcdd7cee 100644 --- a/frontend/src/containers/jobs.js +++ b/frontend/src/containers/jobs.js @@ -1,138 +1,176 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; -import { Link } from 'react-router'; -import { DropdownButton } from 'react-bootstrap'; -import { getJobStatisticsHeader, getJobStatisticsRow } from '../helpers/statistics'; -import NomadLink from '../components/link'; - -const jobStatusColors = { - running: '', - pending: 'warning', - dead: 'danger', -}; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import { Card, CardHeader, CardText } from 'material-ui/Card' +import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from '../components/Table' +import JobStatusFilter from '../components/JobStatusFilter/JobStatusFilter' +import JobTypeFilter from '../components/JobTypeFilter/JobTypeFilter' +import JobLink from '../components/JobLink/JobLink' +import { WATCH_JOBS, UNWATCH_JOBS } from '../sagas/event' + +const columnFormat = { + width: 50, + maxWidth: 50, + overflow: 'inherit', + whiteSpace: 'normal' +} -class Jobs extends Component { +const summaryLabels = [ + 'Starting', + 'Running', + 'Queued', + 'Complete', + 'Failed', + 'Lost' +] + +const getJobStatisticsHeader = () => { + const output = [] + + summaryLabels.forEach((key) => { + output.push( + + { key } + + ) + }) + + return output +} + +const getJobStatisticsRow = (job) => { + const counter = { + Queued: 0, + Complete: 0, + Failed: 0, + Running: 0, + Starting: 0, + Lost: 0 + } + + if (job.JobSummary !== null) { + const summary = job.JobSummary.Summary + Object.keys(summary).forEach((taskGroupID) => { + counter.Queued += summary[taskGroupID].Queued + counter.Complete += summary[taskGroupID].Complete + counter.Failed += summary[taskGroupID].Failed + counter.Running += summary[taskGroupID].Running + counter.Starting += summary[taskGroupID].Starting + counter.Lost += summary[taskGroupID].Lost + }) + } else { + Object.keys(counter).forEach(key => (counter[key] = 'N/A')) + } + + const output = [] + summaryLabels.forEach((key) => { + output.push( + + {counter[key]} + + ) + }) + + return output +} - filteredJobs() { - const query = this.props.location.query || {}; - let jobs = this.props.jobs; +class Jobs extends Component { - if ('job_type' in query) { - jobs = jobs.filter(job => job.Type === query.job_type); - } + componentDidMount() { + this.props.dispatch({type: WATCH_JOBS}) + } - if ('job_status' in query) { - jobs = jobs.filter(job => job.Status === query.job_status); - } + componentWillUnmount() { + this.props.dispatch({type: UNWATCH_JOBS}) + } - return jobs; - } + filteredJobs () { + const query = this.props.location.query || {} + let jobs = this.props.jobs - jobTypeFilter() { - const location = this.props.location; - const query = this.props.location.query || {}; - - let title = 'Job Type'; - if ('job_type' in query) { - title = {title}: { query.job_type }; - } - - return ( - -
  • - Any -
  • -
  • System
  • -
  • Batch
  • -
  • Service
  • -
    - ); + if ('job_type' in query) { + jobs = jobs.filter(job => job.Type === query.job_type) } - jobStatusFilter() { - const location = this.props.location; - const query = this.props.location.query || {}; - - let title = 'Job Status'; - if ('job_status' in query) { - title = {title}: { query.job_status }; - } - - return ( - -
  • - Any -
  • -
  • Running
  • -
  • Pending
  • -
  • Dead
  • -
    - ); + if ('job_status' in query) { + jobs = jobs.filter(job => job.Status === query.job_status) } - taskGroupCount(job) { - let taskGroupCount = 'N/A'; + return jobs + } - if (job.JobSummary !== null) { - taskGroupCount = Object.keys(job.JobSummary.Summary).length; - } + taskGroupCount (job) { + let taskGroupCount = 'N/A' - return taskGroupCount; + if (job.JobSummary !== null) { + taskGroupCount = Object.keys(job.JobSummary.Summary).length } - render() { - return ( -
    -
    -
    -
    -

    Jobs

    - {this.jobStatusFilter()} -   - {this.jobTypeFilter()} -
    - -
    - - - - - - - - - { getJobStatisticsHeader() } - - - - { this.filteredJobs().map(job => - - - - - - - { getJobStatisticsRow(job) } - - )} - -
    IDStatusTypePriorityTask Groups
    { job.Status }{ job.Type }{ job.Priority }{ this.taskGroupCount(job) }
    -
    -
    -
    -
    - ); - } + return taskGroupCount + } + + render () { + const flexibleWidth = { width: 300, minWidth: 300, overflow: 'display', whiteSpace: 'normal' } + + return ( +
    + + + + +   + + + + + + + + + + ID + Status + Type + Priority + Task Groups + { getJobStatisticsHeader() } + + + + { this.filteredJobs().map((job) => { + return ( + + + { job.Status } + { job.Type } + { job.Priority } + { this.taskGroupCount(job) } + { getJobStatisticsRow(job) } + + ) + }) + } + +
    +
    +
    +
    + ) + } } -function mapStateToProps({ jobs }) { - return { jobs }; +function mapStateToProps ({ jobs }) { + return { jobs } } Jobs.defaultProps = { - jobs: [], - location: {}, -}; + jobs: [], + location: {} +} Jobs.propTypes = { - jobs: PropTypes.array.isRequired, - location: PropTypes.object.isRequired, -}; + jobs: PropTypes.array.isRequired, + location: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Jobs); +export default connect(mapStateToProps)(Jobs) diff --git a/frontend/src/containers/server.js b/frontend/src/containers/server.js index 6166f0fb..00fdc654 100644 --- a/frontend/src/containers/server.js +++ b/frontend/src/containers/server.js @@ -1,79 +1,49 @@ -import React, { Component, PropTypes } from 'react'; -import { connect } from 'react-redux'; - -import Tabs from '../components/tabs'; - -import { WATCH_MEMBER, UNWATCH_MEMBER } from '../sagas/event'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import ServerTopbar from '../components/ServerTopbar/ServerTopbar' +import { WATCH_MEMBER, UNWATCH_MEMBER } from '../sagas/event' class Server extends Component { - constructor(props) { - super(props); + componentWillMount () { + this.props.dispatch({ type: WATCH_MEMBER, payload: this.props.params.memberId }) + } - this.state = { - tabs: [ - { - name: 'Info', - path: 'info', - }, - { - name: 'Raw', - path: 'raw', - }, - ], - }; - } + componentWillUnmount () { + this.props.dispatch({ type: UNWATCH_MEMBER, payload: this.props.params.memberId }) + } - componentWillMount() { - this.props.dispatch({ - type: WATCH_MEMBER, - payload: this.props.params.memberId, - }); + render () { + if (this.props.member == null) { + return 'Loading ...'; } - componentWillUnmount() { - this.props.dispatch({ - type: UNWATCH_MEMBER, - payload: this.props.params.memberId, - }); - } + return ( +
    + - render() { - if (this.props.member == null) return (null); +
    +

    Server: { this.props.member.Name }

    - const path = this.props.location.pathname; - const tabSlug = path.split('/').pop(); - const basePath = path.substring(0, path.lastIndexOf('/')); +
    - return ( -
    -
    -
    -
    -

    Server: { this.props.member.Name }

    -
    -
    - - { this.props.children } - -
    -
    -
    -
    - ); - } + { this.props.children } +
    +
    + ) + } } -function mapStateToProps({ member }) { - return { member }; +function mapStateToProps ({ member }) { + return { member } } Server.propTypes = { - dispatch: PropTypes.func.isRequired, - params: PropTypes.object.isRequired, - location: PropTypes.object.isRequired, - member: PropTypes.object.isRequired, - children: PropTypes.object.isRequired, -}; + dispatch: PropTypes.func.isRequired, + params: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, + member: PropTypes.object.isRequired, + children: PropTypes.object.isRequired +} -export default connect(mapStateToProps)(Server); +export default connect(mapStateToProps)(Server) diff --git a/frontend/src/containers/servers.js b/frontend/src/containers/servers.js index 2c4f4550..cb4fcb7b 100644 --- a/frontend/src/containers/servers.js +++ b/frontend/src/containers/servers.js @@ -1,65 +1,75 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import NomadLink from '../components/link'; -import FormatBoolean from '../components/format/boolean'; +import React, { Component, PropTypes } from 'react' +import { connect } from 'react-redux' +import { Card, CardText } from 'material-ui/Card' +import { WATCH_MEMBERS, UNWATCH_MEMBERS } from '../sagas/event' +import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from '../components/Table' +import ServerLink from '../components/ServerLink/ServerLink' +import FormatBoolean from '../components/FormatBoolean/FormatBoolean' -const Servers = ({ members }) => { +class Servers extends Component { + + componentDidMount() { + this.props.dispatch({ type: WATCH_MEMBERS }) + } + + componentWillUnmount() { + this.props.dispatch({ type: UNWATCH_MEMBERS }) + } + + render() { return ( -
    -
    -
    -
    -

    Servers

    -
    -
    - - - - - - - - - - - - - - - - - { members.map((member) => { - return ( - - - - - - - - - - - - - ); - }) - } - -
    IDNameAddressPortStatusLeaderProtocolBuildDatacenterRegion
    { member.Name }{ member.Addr }{ member.Port }{ member.Status }{ member.ProtocolCur }{ member.Tags.build }{ member.Tags.dc }{ member.Tags.region }
    -
    -
    -
    +
    + + + + + + ID + Name + Address + Port + Status + Leader + Protocol + Build + Datacenter + Region + + + + { this.props.members.map((member) => { + return ( + + + { member.Name } + { member.Addr } + { member.Port } + { member.Status } + + { member.ProtocolCur } + { member.Tags.build } + { member.Tags.dc } + { member.Tags.region } + + ) + }) + } + +
    +
    +
    - ); -}; + ) + } +} -function mapStateToProps({ members }) { - return { members }; +function mapStateToProps ({ members }) { + return { members } } Servers.propTypes = { - members: PropTypes.array.isRequired, -}; + members: PropTypes.array.isRequired, + dispatch: PropTypes.func.isRequired, +} -export default connect(mapStateToProps)(Servers); +export default connect(mapStateToProps)(Servers) diff --git a/frontend/src/containers/statistics.js b/frontend/src/containers/statistics.js deleted file mode 100644 index 03732094..00000000 --- a/frontend/src/containers/statistics.js +++ /dev/null @@ -1,53 +0,0 @@ -import React, { PropTypes } from 'react'; -import { connect } from 'react-redux'; -import Progressbar from '../components/charts/progressbar'; - -const Statistics = ({ jobs }) => { - const clientStatus = { - Running: 0, - Starting: 0, - }; - - let hasJobSummary = true; - Object.values(jobs).forEach((job) => { - // Guard against releases < 0.4.1 which don't have job summaries - if (job.JobSummary === null) { - hasJobSummary = false; - return; - } - - Object.keys(job.JobSummary.Summary).forEach((taskGroup) => { - Object.keys(job.JobSummary.Summary[taskGroup]).forEach((stat) => { - if (!(stat in clientStatus)) { - clientStatus[stat] = 0; - } - - clientStatus[stat] += job.JobSummary.Summary[taskGroup][stat]; - }); - }); - }); - - if (!hasJobSummary) { - return
    ; - } - - delete clientStatus.Complete; - - return ( -
    -
    - -
    -
    - ); -}; - -function mapStateToProps({ jobs }) { - return { jobs }; -} - -Statistics.propTypes = { - jobs: PropTypes.array.isRequired, -}; - -export default connect(mapStateToProps)(Statistics); diff --git a/frontend/src/helpers/render/allocation.js b/frontend/src/helpers/render/allocation.js deleted file mode 100644 index d822f9b2..00000000 --- a/frontend/src/helpers/render/allocation.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import ReactTooltip from 'react-tooltip'; -import { Glyphicon } from 'react-bootstrap'; - -const clientStatusIcon = { - complete: , - running: , - lost: , - failed: , -}; - -export function renderDesiredStatus(allocation) { - if (allocation.DesiredDescription) { - return ( -
    - {allocation.DesiredDescription} - - {allocation.DesiredStatus} - -
    - ); - } - - return
    {allocation.DesiredStatus}
    ; -} - -export function renderClientStatus(allocation) { - let icon = null; - - if (allocation.ClientStatus in clientStatusIcon) { - icon = clientStatusIcon[allocation.ClientStatus]; - } - - return ( -
    - {allocation.ClientStatus} - {icon} -
    - ); -} diff --git a/frontend/src/helpers/statistics.js b/frontend/src/helpers/statistics.js deleted file mode 100644 index 2bb37fbb..00000000 --- a/frontend/src/helpers/statistics.js +++ /dev/null @@ -1,45 +0,0 @@ -import React from 'react'; - -const summaryLabels = ['Starting', 'Running', 'Queued', 'Complete', 'Failed', 'Lost']; - -export function getJobStatisticsHeader() { - const output = []; - - summaryLabels.forEach((key) => { - output.push({ key }); - }); - - return output; -} - -export function getJobStatisticsRow(job) { - const counter = { - Queued: 0, - Complete: 0, - Failed: 0, - Running: 0, - Starting: 0, - Lost: 0, - }; - - if (job.JobSummary !== null) { - const summary = job.JobSummary.Summary; - Object.keys(summary).forEach((taskGroupID) => { - counter.Queued += summary[taskGroupID].Queued; - counter.Complete += summary[taskGroupID].Complete; - counter.Failed += summary[taskGroupID].Failed; - counter.Running += summary[taskGroupID].Running; - counter.Starting += summary[taskGroupID].Starting; - counter.Lost += summary[taskGroupID].Lost; - }); - } else { - Object.keys(counter).forEach(key => (counter[key] = 'N/A')); - } - - const output = []; - summaryLabels.forEach((key) => { - output.push({counter[key]}); - }); - - return output; -} diff --git a/frontend/src/helpers/time.js b/frontend/src/helpers/time.js index 7704ccad..df31c9be 100644 --- a/frontend/src/helpers/time.js +++ b/frontend/src/helpers/time.js @@ -1,21 +1,21 @@ -import moment from 'moment'; +import moment from 'moment' -const nanosecondLength = 19; +const nanosecondLength = 19 -function normalizeTime(time) { - const length = time.toString().length; +function normalizeTime (time) { + const length = time.toString().length - if (length >= nanosecondLength) { - return time / 1000000; - } + if (length >= nanosecondLength) { + return time / 1000000 + } - return time; + return time } -export default function getMoment(time) { - if (time === 'now' || time === null) { - return moment(); - } +export default function getMoment (time) { + if (time === 'now' || time === null) { + return moment() + } - return moment(normalizeTime(time), 'x'); + return moment(normalizeTime(time), 'x') } diff --git a/frontend/src/helpers/uuid.js b/frontend/src/helpers/uuid.js index d763c0a1..893602e9 100644 --- a/frontend/src/helpers/uuid.js +++ b/frontend/src/helpers/uuid.js @@ -1,11 +1,5 @@ -function shortUUID(ID) { - const re = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - - if (ID.match(re)) { - return ID.substring(0, 8); - } - - return ID; +function shortUUID (ID) { + return ID.substring(0, 8) } -export default shortUUID; +export default shortUUID diff --git a/frontend/src/main.js b/frontend/src/main.js index ee33bcdc..8f3ce1f0 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -1,22 +1,26 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { browserHistory } from 'react-router'; -import { Provider } from 'react-redux'; -import 'bootstrap/dist/css/bootstrap.min.css'; +import React from 'react' +import ReactDOM from 'react-dom' +import { browserHistory } from 'react-router' +import { Provider } from 'react-redux' -import AppRouter from './router'; -import configureStore from './store'; +// import Perf from 'react-addons-perf' -import '../assets/css/pe-icon-7-stroke.css'; -import '../assets/sass/nomad-ui.scss'; +import AppRouter from './router' +import configureStore from './store' + +import '../assets/nomad-ui.css' + +// Perf.start() configureStore().then((store) => { - ReactDOM.render( - - - , + ReactDOM.render( + + + , document.getElementById('app') - ); + ) }).catch((err) => { - console.log(err); -}); + console.log(err) +}) + +// window.Perf = Perf diff --git a/frontend/src/reducers/allocation.js b/frontend/src/reducers/allocation.js index db20019c..9939cc51 100644 --- a/frontend/src/reducers/allocation.js +++ b/frontend/src/reducers/allocation.js @@ -1,29 +1,29 @@ -import { FETCHED_ALLOCS, FETCHED_ALLOC } from '../sagas/event'; +import { FETCHED_ALLOCS, FETCHED_ALLOC } from '../sagas/event' -export function AllocInfoReducer(state = {}, action) { - switch (action.type) { - case FETCHED_ALLOC: { - const allocation = action.payload; - allocation.TaskGroupId = `${allocation.JobID}.${allocation.TaskGroup}`; - return allocation; - } - default: - } +export function AllocInfoReducer (state = {}, action) { + switch (action.type) { + case FETCHED_ALLOC: { + const allocation = action.payload + allocation.TaskGroupId = `${allocation.JobID}.${allocation.TaskGroup}` + return allocation + } + default: + } - return state; + return state } -export function AllocListReducer(state = [], action) { - switch (action.type) { - case FETCHED_ALLOCS: { - const allocations = action.payload.map(allocation => +export function AllocListReducer (state = [], action) { + switch (action.type) { + case FETCHED_ALLOCS: { + const allocations = action.payload.map(allocation => Object.assign({}, allocation, { TaskGroupId: `${allocation.JobID}.${allocation.TaskGroup}` }) - ); + ) - return allocations; - } - default: - } + return allocations + } + default: + } - return state; + return state } diff --git a/frontend/src/reducers/evaluation.js b/frontend/src/reducers/evaluation.js index 1de55d54..957e29fe 100644 --- a/frontend/src/reducers/evaluation.js +++ b/frontend/src/reducers/evaluation.js @@ -1,19 +1,19 @@ -import { FETCHED_EVALS, FETCHED_EVAL } from '../sagas/event'; +import { FETCHED_EVALS, FETCHED_EVAL } from '../sagas/event' -export function EvalInfoReducer(state = {}, action) { - switch (action.type) { - case FETCHED_EVAL: - return action.payload; - default: - } - return state; +export function EvalInfoReducer (state = {}, action) { + switch (action.type) { + case FETCHED_EVAL: + return action.payload + default: + } + return state } -export function EvalListReducer(state = [], action) { - switch (action.type) { - case FETCHED_EVALS: - return action.payload; - default: - } - return state; +export function EvalListReducer (state = [], action) { + switch (action.type) { + case FETCHED_EVALS: + return action.payload + default: + } + return state } diff --git a/frontend/src/reducers/filesystem.js b/frontend/src/reducers/filesystem.js index 7dcc72e0..5f1e0756 100644 --- a/frontend/src/reducers/filesystem.js +++ b/frontend/src/reducers/filesystem.js @@ -1,23 +1,23 @@ -import { FETCHED_DIR, FETCHED_FILE, CLEAR_FILE_PATH, CLEAR_RECEIVED_FILE_DATA } from '../sagas/event'; +import { FETCHED_DIR, FETCHED_FILE, CLEAR_FILE_PATH, CLEAR_RECEIVED_FILE_DATA } from '../sagas/event' -export function DirectoryReducer(state = [], action) { - switch (action.type) { - case FETCHED_DIR: - return action.payload; - default: - } - return state; +export function DirectoryReducer (state = [], action) { + switch (action.type) { + case FETCHED_DIR: + return action.payload + default: + } + return state } -export function FileReducer(state = { File: '' }, action) { - switch (action.type) { - case CLEAR_FILE_PATH: - return Object.assign({}, state, { File: '', Data: '' }); - case CLEAR_RECEIVED_FILE_DATA: - return Object.assign({}, state, { Data: '' }); - case FETCHED_FILE: - return action.payload; - default: - } - return state; +export function FileReducer (state = { File: '' }, action) { + switch (action.type) { + case CLEAR_FILE_PATH: + return Object.assign({}, state, { File: '', Data: '' }) + case CLEAR_RECEIVED_FILE_DATA: + return Object.assign({}, state, { Data: '' }) + case FETCHED_FILE: + return action.payload + default: + } + return state } diff --git a/frontend/src/reducers/job.js b/frontend/src/reducers/job.js index b5252853..57ade3a4 100644 --- a/frontend/src/reducers/job.js +++ b/frontend/src/reducers/job.js @@ -1,30 +1,30 @@ -import { FETCHED_JOB, FETCHED_JOBS } from '../sagas/event'; +import { FETCHED_JOB, FETCHED_JOBS } from '../sagas/event' -export function JobInfoReducer(state = { TaskGroups: [] }, action) { - switch (action.type) { - case FETCHED_JOB: { - const job = action.payload; - job.TaskGroups.forEach((group, gidx) => { - job.TaskGroups[gidx].ID = `${job.ID}.${group.Name}`; - }); - job.TaskGroups.forEach((group, gidx) => { - group.Tasks.forEach((task, tidx) => { - job.TaskGroups[gidx].Tasks[tidx].ID = `${group.ID}.${task.Name}`; - }); - }); - return job; - } - default: - } +export function JobInfoReducer (state = { TaskGroups: [] }, action) { + switch (action.type) { + case FETCHED_JOB: { + const job = action.payload + job.TaskGroups.forEach((group, gidx) => { + job.TaskGroups[gidx].ID = `${job.ID}.${group.Name}` + }) + job.TaskGroups.forEach((group, gidx) => { + group.Tasks.forEach((task, tidx) => { + job.TaskGroups[gidx].Tasks[tidx].ID = `${group.ID}.${task.Name}` + }) + }) + return job + } + default: + } - return state; + return state } -export function JobListReducer(state = [], action) { - switch (action.type) { - case FETCHED_JOBS: - return action.payload; - default: - } - return state; +export function JobListReducer (state = [], action) { + switch (action.type) { + case FETCHED_JOBS: + return action.payload + default: + } + return state } diff --git a/frontend/src/reducers/member.js b/frontend/src/reducers/member.js index 61360b74..ca4aab71 100644 --- a/frontend/src/reducers/member.js +++ b/frontend/src/reducers/member.js @@ -1,19 +1,19 @@ -import { FETCHED_MEMBERS, FETCHED_MEMBER } from '../sagas/event'; +import { FETCHED_MEMBERS, FETCHED_MEMBER } from '../sagas/event' -export function MemberInfoReducer(state = { Tags: {} }, action) { - switch (action.type) { - case FETCHED_MEMBER: - return action.payload; - default: - } - return state; +export function MemberInfoReducer (state = { Tags: {} }, action) { + switch (action.type) { + case FETCHED_MEMBER: + return action.payload + default: + } + return state } -export function MemberListReducer(state = [], action) { - switch (action.type) { - case FETCHED_MEMBERS: - return action.payload; - default: - } - return state; +export function MemberListReducer (state = [], action) { + switch (action.type) { + case FETCHED_MEMBERS: + return action.payload + default: + } + return state } diff --git a/frontend/src/reducers/node.js b/frontend/src/reducers/node.js index c764e0c4..c89b7546 100644 --- a/frontend/src/reducers/node.js +++ b/frontend/src/reducers/node.js @@ -1,19 +1,19 @@ -import { FETCHED_NODES, FETCHED_NODE } from '../sagas/event'; +import { FETCHED_NODES, FETCHED_NODE } from '../sagas/event' -export function NodeInfoReducer(state = {}, action) { - switch (action.type) { - case FETCHED_NODE: - return action.payload; - default: - } - return state; +export function NodeInfoReducer (state = {}, action) { + switch (action.type) { + case FETCHED_NODE: + return action.payload + default: + } + return state } -export function NodeListReducer(state = [], action) { - switch (action.type) { - case FETCHED_NODES: - return action.payload; - default: - } - return state; +export function NodeListReducer (state = [], action) { + switch (action.type) { + case FETCHED_NODES: + return action.payload + default: + } + return state } diff --git a/frontend/src/reducers/root.js b/frontend/src/reducers/root.js index ab64e3f9..494b070f 100644 --- a/frontend/src/reducers/root.js +++ b/frontend/src/reducers/root.js @@ -1,25 +1,25 @@ -import { combineReducers } from 'redux'; +import { combineReducers } from 'redux' -import { MemberInfoReducer, MemberListReducer } from './member'; -import { JobInfoReducer, JobListReducer } from './job'; -import { AllocInfoReducer, AllocListReducer } from './allocation'; -import { EvalInfoReducer, EvalListReducer } from './evaluation'; -import { NodeInfoReducer, NodeListReducer } from './node'; -import { DirectoryReducer, FileReducer } from './filesystem'; +import { MemberInfoReducer, MemberListReducer } from './member' +import { JobInfoReducer, JobListReducer } from './job' +import { AllocInfoReducer, AllocListReducer } from './allocation' +import { EvalInfoReducer, EvalListReducer } from './evaluation' +import { NodeInfoReducer, NodeListReducer } from './node' +import { DirectoryReducer, FileReducer } from './filesystem' const rootReducer = combineReducers({ - member: MemberInfoReducer, - members: MemberListReducer, - job: JobInfoReducer, - jobs: JobListReducer, - node: NodeInfoReducer, - nodes: NodeListReducer, - allocation: AllocInfoReducer, - allocations: AllocListReducer, - evaluation: EvalInfoReducer, - evaluations: EvalListReducer, - directory: DirectoryReducer, - file: FileReducer, -}); + member: MemberInfoReducer, + members: MemberListReducer, + job: JobInfoReducer, + jobs: JobListReducer, + node: NodeInfoReducer, + nodes: NodeListReducer, + allocation: AllocInfoReducer, + allocations: AllocListReducer, + evaluation: EvalInfoReducer, + evaluations: EvalListReducer, + directory: DirectoryReducer, + file: FileReducer +}) -export default rootReducer; +export default rootReducer diff --git a/frontend/src/router.js b/frontend/src/router.js index e7c67590..5dfd338d 100644 --- a/frontend/src/router.js +++ b/frontend/src/router.js @@ -1,100 +1,100 @@ -import React, { PropTypes } from 'react'; -import { Router, Route, Redirect, IndexRedirect, browserHistory } from 'react-router'; +import React, { PropTypes } from 'react' +import { Router, Route, Redirect, IndexRedirect, browserHistory } from 'react-router' -import App from './components/app'; -import Cluster from './containers/cluster'; +import App from './components/app' +import Cluster from './containers/cluster' -import Jobs from './containers/jobs'; -import Job from './containers/job'; -import JobInfo from './components/job/info'; -import JobAllocs from './components/job/allocs'; -import JobEvals from './components/job/evals'; -import JobTasks from './components/job/tasks'; -import JobTaskGroups from './components/job/taskGroups'; -import JobRaw from './components/job/raw'; +import Jobs from './containers/jobs' +import Job from './containers/job' +import JobInfo from './components/JobInfo/JobInfo' +import JobAllocs from './components/JobAllocations/JobAllocations' +import JobEvals from './components/JobEvaluations/JobEvaluations' +import JobTasks from './components/JobTasks/JobTasks' +import JobTaskGroups from './components/JobTaskGroups/JobTaskGroups' +import JobRaw from './components/JobRaw/JobRaw' -import Allocations from './containers/allocations'; -import Allocation from './containers/allocation'; -import AllocInfo from './components/allocation/info'; -import AllocFiles from './components/allocation/files'; -import AllocRaw from './components/allocation/raw'; +import Allocations from './containers/allocations' +import Allocation from './containers/allocation' +import AllocInfo from './components/AllocationInfo/AllocationInfo' +import AllocFiles from './components/AllocationFiles/AllocationFiles' +import AllocRaw from './components/AllocationRaw/AllocationRaw' -import Evaluations from './containers/evaluations'; -import Evaluation from './containers/evaluation'; -import EvalInfo from './components/evaluation/info'; -import EvalAlloc from './components/evaluation/allocs'; -import EvalRaw from './components/evaluation/raw'; +import Evaluations from './containers/evaluations' +import Evaluation from './containers/evaluation' +import EvalInfo from './components/EvaluationInfo/EvaluationInfo' +import EvalAllocations from './components/EvaluationAllocations/EvaluationAllocations' +import EvalRaw from './components/EvaluationRaw/EvaluationRaw' -import Clients from './containers/clients'; -import Client from './containers/client'; -import ClientInfo from './components/client/info'; -import ClientAllocations from './components/client/allocations'; -import ClientEvaluations from './components/client/evaluations'; -import ClientRaw from './components/client/raw'; +import Clients from './containers/clients' +import Client from './containers/client' +import ClientInfo from './components/ClientInfo/ClientInfo' +import ClientAllocations from './components/ClientAllocations/ClientAllocations' +import ClientEvaluations from './components/ClientEvaluations/ClientEvaluations' +import ClientRaw from './components/ClientRaw/ClientRaw' -import Servers from './containers/servers'; -import Server from './containers/server'; -import ServerInfo from './components/server/info'; -import ServerRaw from './components/server/raw'; +import Servers from './containers/servers' +import Server from './containers/server' +import ServerInfo from './components/ServerInfo/ServerInfo' +import ServerRaw from './components/ServerRaw/ServerRaw' const AppRouter = ({ history }) => - - - + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - - - - - + + + + + + - ; + AppRouter.propTypes = { - history: PropTypes.instanceOf(browserHistory.constructor).isRequired, -}; + history: PropTypes.instanceOf(browserHistory.constructor).isRequired +} -export default AppRouter; +export default AppRouter diff --git a/frontend/src/sagas/event.js b/frontend/src/sagas/event.js index f8df0d03..6a4ed67b 100644 --- a/frontend/src/sagas/event.js +++ b/frontend/src/sagas/event.js @@ -1,138 +1,175 @@ -import { delay, eventChannel } from 'redux-saga'; -import { fork, take, call, put } from 'redux-saga/effects'; - -export const FETCHED_JOBS = 'FETCHED_JOBS'; -export const FETCHED_JOB = 'FETCHED_JOB'; -export const WATCH_JOB = 'WATCH_JOB'; -export const UNWATCH_JOB = 'UNWATCH_JOB'; - -export const FETCHED_MEMBERS = 'FETCHED_MEMBERS'; -export const FETCHED_MEMBER = 'FETCHED_MEMBER'; -export const FETCH_MEMBER = 'FETCH_MEMBER'; -export const WATCH_MEMBER = 'WATCH_MEMBER'; -export const UNWATCH_MEMBER = 'UNWATCH_MEMBER'; - -export const FETCHED_NODES = 'FETCHED_NODES'; -export const FETCHED_NODE = 'FETCHED_NODE'; -export const FETCH_NODE = 'FETCH_NODE'; -export const WATCH_NODE = 'WATCH_NODE'; -export const UNWATCH_NODE = 'UNWATCH_NODE'; - -export const FETCHED_EVALS = 'FETCHED_EVALS'; -export const FETCHED_EVAL = 'FETCHED_EVAL'; -export const WATCH_EVAL = 'WATCH_EVAL'; -export const UNWATCH_EVAL = 'UNWATCH_EVAL'; - -export const FETCHED_ALLOCS = 'FETCHED_ALLOCS'; -export const FETCHED_ALLOC = 'FETCHED_ALLOC'; -export const WATCH_ALLOC = 'WATCH_ALLOC'; -export const UNWATCH_ALLOC = 'UNWATCH_ALLOC'; - -export const FETCH_DIR = 'FETCH_DIR'; -export const FETCHED_DIR = 'FETCHED_DIR'; - -export const WATCH_FILE = 'WATCH_FILE'; -export const UNWATCH_FILE = 'UNWATCH_FILE'; -export const FETCHED_FILE = 'FETCHED_FILE'; - -export const CLEAR_FILE_PATH = 'CLEAR_FILE_PATH'; -export const CLEAR_RECEIVED_FILE_DATA = 'CLEAR_RECEIVED_FILE_DATA'; - -function subscribe(socket) { - return eventChannel((emit) => { - // eslint-disable-next-line no-param-reassign - socket.onmessage = (event) => { - const data = JSON.parse(event.data); - emit({ - type: data.Type, - payload: data.Payload, - }); - }; - return () => {}; - }); +import { delay, eventChannel } from 'redux-saga' +import { fork, take, call, put } from 'redux-saga/effects' + +export const WATCH_JOBS = 'WATCH_JOBS'; +export const FETCHED_JOBS = 'FETCHED_JOBS' +export const UNWATCH_JOBS = 'UNWATCH_JOBS' + +export const WATCH_JOB = 'WATCH_JOB' +export const FETCHED_JOB = 'FETCHED_JOB' +export const UNWATCH_JOB = 'UNWATCH_JOB' + +export const FETCHED_MEMBERS = 'FETCHED_MEMBERS' +export const WATCH_MEMBERS = 'WATCH_MEMBERS' +export const UNWATCH_MEMBERS = 'UNWATCH_MEMBERS' + +export const FETCHED_MEMBER = 'FETCHED_MEMBER' +export const FETCH_MEMBER = 'FETCH_MEMBER' +export const WATCH_MEMBER = 'WATCH_MEMBER' +export const UNWATCH_MEMBER = 'UNWATCH_MEMBER' + +export const WATCH_NODES = 'WATCH_NODES'; +export const FETCHED_NODES = 'FETCHED_NODES' +export const UNWATCH_NODES = 'UNWATCH_NODES'; + +export const FETCHED_NODE = 'FETCHED_NODE' +export const FETCH_NODE = 'FETCH_NODE' +export const WATCH_NODE = 'WATCH_NODE' +export const UNWATCH_NODE = 'UNWATCH_NODE' + +export const WATCH_EVALS = 'WATCH_EVALS'; +export const UNWATCH_EVALS = 'UNWATCH_EVALS'; +export const FETCHED_EVALS = 'FETCHED_EVALS' + +export const WATCH_EVAL = 'WATCH_EVAL' +export const UNWATCH_EVAL = 'UNWATCH_EVAL' +export const FETCHED_EVAL = 'FETCHED_EVAL' + +export const WATCH_ALLOCS = 'WATCH_ALLOCS' +export const FETCHED_ALLOCS = 'FETCHED_ALLOCS' +export const UNWATCH_ALLOCS = 'UNWATCH_ALLOCS' + +export const FETCHED_ALLOC = 'FETCHED_ALLOC' +export const WATCH_ALLOC = 'WATCH_ALLOC' +export const UNWATCH_ALLOC = 'UNWATCH_ALLOC' + +export const FETCH_DIR = 'FETCH_DIR' +export const FETCHED_DIR = 'FETCHED_DIR' + +export const WATCH_FILE = 'WATCH_FILE' +export const UNWATCH_FILE = 'UNWATCH_FILE' +export const FETCHED_FILE = 'FETCHED_FILE' + +export const CLEAR_FILE_PATH = 'CLEAR_FILE_PATH' +export const CLEAR_RECEIVED_FILE_DATA = 'CLEAR_RECEIVED_FILE_DATA' + +function subscribe (socket) { + return eventChannel((emit) => { + // eslint-disable-next-line no-param-reassign + socket.onmessage = (event) => { + const data = JSON.parse(event.data) + emit({ + type: data.Type, + payload: data.Payload + }) + } + return () => {} + }) } -function* read(socket) { - const channel = yield call(subscribe, socket); - while (true) { - const action = yield take(channel); - yield put(action); - } +function* read (socket) { + const channel = yield call(subscribe, socket) + while (true) { + const action = yield take(channel) + yield put(action) + } } -function* write(socket) { - while (true) { - const action = yield take([ - WATCH_JOB, - UNWATCH_JOB, - WATCH_ALLOC, - UNWATCH_ALLOC, - WATCH_EVAL, - UNWATCH_EVAL, - WATCH_NODE, - UNWATCH_NODE, - FETCH_NODE, - WATCH_MEMBER, - UNWATCH_MEMBER, - FETCH_MEMBER, - FETCH_DIR, - WATCH_FILE, - UNWATCH_FILE, - ]); - socket.send(JSON.stringify(action)); - } +function* write (socket) { + while (true) { + const action = yield take([ + WATCH_JOBS, + UNWATCH_JOBS, + + WATCH_JOB, + UNWATCH_JOB, + + WATCH_ALLOCS, + UNWATCH_ALLOCS, + + WATCH_ALLOC, + UNWATCH_ALLOC, + + WATCH_EVAL, + UNWATCH_EVAL, + + WATCH_EVALS, + UNWATCH_EVALS, + + WATCH_NODES, + UNWATCH_NODES, + + WATCH_NODE, + UNWATCH_NODE, + FETCH_NODE, + + WATCH_MEMBERS, + UNWATCH_MEMBERS, + + WATCH_MEMBER, + UNWATCH_MEMBER, + FETCH_MEMBER, + + FETCH_DIR, + + WATCH_FILE, + UNWATCH_FILE + ]) + + socket.send(JSON.stringify(action)) + } } -function* transport(socket) { - yield fork(read, socket); - yield fork(write, socket); +function* transport (socket) { + yield fork(read, socket) + yield fork(write, socket) } -function connectTo(url) { - const socket = new WebSocket(url); +function connectTo (url) { + const socket = new WebSocket(url) - const resolver = (resolve, reject) => { - const timeout = setTimeout(() => { - reject('Unable to connect to the backend...'); - }, 2000); + const resolver = (resolve, reject) => { + const timeout = setTimeout(() => { + reject('Unable to connect to the backend...') + }, 2000) - socket.onopen = () => { - resolve(socket); - clearTimeout(timeout); - }; - }; + socket.onopen = () => { + resolve(socket) + clearTimeout(timeout) + } + } - return new Promise(resolver.bind(socket)); + return new Promise(resolver.bind(socket)) } -function* events(socket) { - while (true) { - yield call(transport, socket); - yield delay(5000); - } +function* events (socket) { + while (true) { + yield call(transport, socket) + yield delay(5000) + } } -export default function eventSaga() { - return new Promise((resolve, reject) => { - const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:'; - - // If we build production page, assume /ws run inside the go-binary - // and such on same host+port otherwise assume development, where we - // re-use the hostname but use GO_PORT end with fallback to :3000. - let hostname; - if (process.env.NODE_ENV === 'production') { - hostname = location.host; - } else { - hostname = `${location.hostname}:${process.env.GO_PORT}` || 3000; - } - - const url = `${protocol}//${hostname}/ws`; - const p = connectTo(url); - - return p.then((socket) => { - resolve(function* eventGenerator() { yield fork(events, socket); }); - }).catch((err) => { - reject(err); - }); - }); +export default function eventSaga () { + return new Promise((resolve, reject) => { + const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:' + + // If we build production page, assume /ws run inside the go-binary + // and such on same host+port otherwise assume development, where we + // re-use the hostname but use GO_PORT end with fallback to :3000. + let hostname + if (process.env.NODE_ENV === 'production') { + hostname = location.host + } else { + hostname = `${location.hostname}:${process.env.GO_PORT}` || 3000 + } + + const url = `${protocol}//${hostname}/ws` + const p = connectTo(url) + + return p.then((socket) => { + resolve(function* eventGenerator () { yield fork(events, socket) }) + }).catch((err) => { + reject(err) + }) + }) } diff --git a/frontend/src/store.js b/frontend/src/store.js index 0eaf7446..d651aaaa 100644 --- a/frontend/src/store.js +++ b/frontend/src/store.js @@ -1,12 +1,12 @@ -import { createStore, applyMiddleware, compose } from 'redux'; -import createSagaMiddleware, { END } from 'redux-saga'; -import rootReducer from './reducers/root'; -import eventSaga from './sagas/event'; +import { createStore, applyMiddleware, compose } from 'redux' +import createSagaMiddleware, { END } from 'redux-saga' +import rootReducer from './reducers/root' +import eventSaga from './sagas/event' -export default function configureStore(initialState) { - const sagaMiddleware = createSagaMiddleware(); +export default function configureStore (initialState) { + const sagaMiddleware = createSagaMiddleware() - const store = createStore( + const store = createStore( rootReducer, initialState, compose( @@ -19,27 +19,27 @@ export default function configureStore(initialState) { typeof window === 'object' && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : f => f ) - ); + ) - if (module.hot) { + if (module.hot) { // Enable Webpack hot module replacement for reducers - module.hot.accept('./reducers/root', () => { + module.hot.accept('./reducers/root', () => { // eslint-disable-next-line global-require - const nextRootReducer = require('./reducers/root').default; + const nextRootReducer = require('./reducers/root').default - store.replaceReducer(nextRootReducer); - }); - } + store.replaceReducer(nextRootReducer) + }) + } - store.runSaga = sagaMiddleware.run; - store.close = () => store.dispatch(END); + store.runSaga = sagaMiddleware.run + store.close = () => store.dispatch(END) - return new Promise((resolve, reject) => { - eventSaga().then((gen) => { - sagaMiddleware.run(gen); - resolve(store); - }).catch((err) => { - reject(err); - }); - }); + return new Promise((resolve, reject) => { + eventSaga().then((gen) => { + sagaMiddleware.run(gen) + resolve(store) + }).catch((err) => { + reject(err) + }) + }) } diff --git a/frontend/webpack-base.config.js b/frontend/webpack-base.config.js index e407f584..12d5cd8e 100644 --- a/frontend/webpack-base.config.js +++ b/frontend/webpack-base.config.js @@ -2,51 +2,25 @@ const path = require('path'); const autoprefixer = require('autoprefixer'); module.exports = { - output: { - path: path.join(__dirname, 'build/'), - publicPath: '/' - }, - resolve: { - extensions: ['', '.js', '.jsx', '.css', '.scss'] - }, - module: { - preLoaders: [ - { - test: /\.js$/, - loader: 'eslint' - } - ], - loaders: [ - { - test: /\.png$/, - loader: "url?limit=100000&name=static/[hash].[ext]&path=/static/" - }, - { - test: /\.jpg$/, - loader: "file?name=static/[hash].[ext]&path=/static/" - }, - { - test: /\.(woff|woff2)/, - loader: 'url?limit=10000&mimetype=application/font-woff&name=static/[hash].[ext]&path=/static/' - }, - { - test: /\.ttf/, - loader: 'url?limit=10000&mimetype=application/octet-stream&name=static/[hash].[ext]&path=/static/' - }, - { - test: /\.eot/, - loader: 'file?name=static/[hash].[ext]&path=/static/' - }, - { - test: /\.svg/, - loader: 'url?limit=10000&mimetype=image/svg+xml&name=static/[hash].[ext]&path=/static/' - } - ] - }, - eslint: { - useEslintrc: true - }, - postcss: function() { - return [autoprefixer]; - } + output: { + path: path.join(__dirname, 'build/'), + publicPath: '/' + }, + resolve: { + extensions: ['', '.js', '.jsx', '.css', '.scss'] + }, + module: { + preLoaders: [ + { + test: /\.js$/, + loader: 'eslint' + } + ] + }, + eslint: { + useEslintrc: true + }, + postcss: function() { + return [autoprefixer]; + } }; diff --git a/frontend/webpack-prod.config.js b/frontend/webpack-prod.config.js index cef624ed..e05c6e2e 100644 --- a/frontend/webpack-prod.config.js +++ b/frontend/webpack-prod.config.js @@ -6,79 +6,82 @@ const ExtractTextPlugin = require("extract-text-webpack-plugin"); const HtmlWebpackPlugin = require('html-webpack-plugin'); var webpackConfig = require("./webpack-base.config.js"); + webpackConfig = merge(webpackConfig, { - output: { - filename: 'static/[name].[chunkhash].js', - chunkFilename: 'static/[name].[chunkhash].chunks.js' - }, - bail: true, - entry: [ - 'babel-polyfill', - './src/main.js' - ], - devtool: 'source-map', - module: { - loaders: [ - { - test: /\.css$/, - loader: ExtractTextPlugin.extract( - 'style', - 'css?-autoprefixer!postcss' - ) - }, - { - test: /\.jsx?$/, - exclude: /node_modules/, - loader: 'babel', - query: require('./config/babel.prod') - }, - { - test: /\.scss$/, - loader: ExtractTextPlugin.extract( - 'style', - 'css?-autprefixer!postcss!sass?outputStyle=expanded' - ) - } - ] - }, - plugins: [ - new ExtractTextPlugin('static/[name].[contenthash].css'), - new webpack.optimize.OccurenceOrderPlugin(), - new webpack.optimize.DedupePlugin(), - new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"'}), - new webpack.optimize.UglifyJsPlugin({ - compressor: { - screw_ie8: true, - warnings: false - }, - mangle: { - screw_ie8: true - }, - output: { - comments: false, - screw_ie8: true - } - }), - new HtmlWebpackPlugin({ - title: 'Nomad UI', - inject: false, - favicon: './assets/img/favicon.png', - template: './index.html.ejs', - appMountId: 'app', - minify: { - removeComments: true, - collapseWhitespace: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - removeStyleLinkTypeAttributes: true, - keepClosingSlash: true, - minifyJS: true, - minifyCSS: true, - minifyURLs: true - } - }) + output: { + filename: 'static/[name].[chunkhash].js', + chunkFilename: 'static/[name].[chunkhash].chunks.js' + }, + bail: true, + entry: [ + 'babel-polyfill', + './src/main.js' + ], + devtool: 'source-map', + module: { + loaders: [ + { + test: /(\.scss|\.css)$/, + loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass'), + exclude: /flexboxgrid|assets/, + }, + { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'), + include: /flexboxgrid/, + exclude: /assets/, + }, + { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style', 'css?importLoaders=1'), + include: /assets/, + }, + { + test: /\.jsx?$/, + exclude: /node_modules/, + loader: 'babel', + query: require('./config/babel.prod'), + } ] + }, + plugins: [ + new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"'}), + new ExtractTextPlugin('static/[name].[contenthash].css'), + new webpack.optimize.OccurenceOrderPlugin(), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin({ + compressor: { + screw_ie8: true, + warnings: false + }, + mangle: { + screw_ie8: true + }, + output: { + comments: false, + screw_ie8: true + } + }), + new HtmlWebpackPlugin({ + title: 'Nomad UI', + inject: false, + favicon: './assets/img/favicon.png', + template: './index.html.ejs', + appMountId: 'app', + minify: { + removeComments: true, + collapseWhitespace: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + removeStyleLinkTypeAttributes: true, + keepClosingSlash: true, + minifyJS: true, + minifyCSS: true, + minifyURLs: true + } + }) + ] }); module.exports = webpackConfig; diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index 7125b957..23a83e2d 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -1,62 +1,78 @@ const merge = require('webpack-merge'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); var webpackConfig = require("./webpack-base.config.js"); webpackConfig = merge(webpackConfig, { - output: { - filename: 'static/bundle.js' - }, - entry: [ - 'webpack-dev-server/client?http://localhost:3333', - 'webpack/hot/only-dev-server', - 'babel-polyfill', - './src/main.js' - ], - devtool: 'cheap-module-eval-source-map', - plugins: [ - new HtmlWebpackPlugin({ - title: 'Nomad UI', - inject: false, - template: './index.html.ejs', - favicon: './assets/img/favicon.png', - appMountId: 'app' - }), - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"' }), - new webpack.DefinePlugin({ 'process.env.GO_PORT': process.env.GO_PORT || 3000 }), - new webpack.HotModuleReplacementPlugin() - ], - devServer: { - port: 3333, - hot: true, - historyApiFallback: true, - publicPath: webpackConfig.output.publicPath - }, - module: { + output: { + filename: 'static/bundle.js' + }, + + entry: [ + 'webpack-dev-server/client?http://localhost:3333', + 'webpack/hot/only-dev-server', + 'babel-polyfill', + './src/main.js' + ], + + devtool: 'cheap-module-eval-source-map', + + plugins: [ + new HtmlWebpackPlugin({ + title: 'Nomad UI', + inject: false, + template: './index.html.ejs', + favicon: './assets/img/favicon.png', + appMountId: 'app' + }), + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"' }), + new webpack.DefinePlugin({ 'process.env.GO_PORT': process.env.GO_PORT || 3000 }), + new ExtractTextPlugin('bundle.css', { allChunks: true }), + new webpack.HotModuleReplacementPlugin() + ], + + devServer: { + port: 3333, + hot: true, + historyApiFallback: true, + publicPath: webpackConfig.output.publicPath + }, + + module: { + loaders: [ + { + test: /(\.scss|\.css)$/, + loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass'), + exclude: /flexboxgrid|assets/, + }, + { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'), + include: /flexboxgrid/, + exclude: /assets/, + }, + { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style', 'css?importLoaders=1'), + include: /assets/, + }, + { + test: /\.jsx?$/, + exclude: /node_modules/, loaders: [ - { - test: /\.css$/, - loader: 'style!css!postcss' - }, - { - test: /\.jsx?$/, - exclude: /node_modules/, - loaders: [ - 'react-hot', - 'babel?presets[]=es2015,presets[]=es2016,presets[]=react,plugins[]=syntax-trailing-function-commas,plugins[]=transform-runtime,plugins[]=transform-class-properties,plugins[]=transform-object-rest-spread' - ] - }, - { - test: /\.scss$/, - loader: 'style!css?-autprefixer!postcss!sass' - } + 'react-hot', + 'babel?presets[]=es2015&presets[]=es2016&presets[]=react&presets[]=react-optimize&plugins[]=transform-react-inline-elements&plugins[]=syntax-trailing-function-commas&plugins[]=transform-runtime&plugins[]=transform-class-properties&plugins[]=transform-object-rest-spread' ] - }, - externals: { - 'react/addons': true, - 'react/lib/ExecutionEnvironment': true, - 'react/lib/ReactContext': true - } + } + ] + }, + + externals: { + 'react/addons': true, + 'react/lib/ExecutionEnvironment': true, + 'react/lib/ReactContext': true + } }); module.exports = webpackConfig; diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 00000000..4be2159c --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,4994 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + +abbrev@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.0, acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" + +ajv-keywords@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.2.0.tgz#676c4f087bfe1e8b12dca6fda2f3c74f417b099c" + +ajv@^4.7.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.9.1.tgz#08e1b0a5fddc8b844d28ca7b03510e78812ee3a0" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-index@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" + dependencies: + debug "^2.2.0" + es6-symbol "^3.0.2" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async@^0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@^1.3.0, async@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +autoprefixer@^6.3.1, autoprefixer@^6.3.7: + version "6.5.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.3.tgz#2d853af66d04449fcf50db3066279ab54c3e4b01" + dependencies: + browserslist "~1.4.0" + caniuse-db "^1.0.30000578" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.5" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^2.0.0" + +babel-core@^6.18.0, babel-core@^6.18.2: + version "6.18.2" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b" + dependencies: + babel-code-frame "^6.16.0" + babel-generator "^6.18.0" + babel-helpers "^6.16.0" + babel-messages "^6.8.0" + babel-register "^6.18.0" + babel-runtime "^6.9.1" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" + dependencies: + babel-code-frame "^6.16.0" + babel-traverse "^6.15.0" + babel-types "^6.15.0" + babylon "^6.13.0" + lodash.pickby "^4.6.0" + +babel-generator@^6.18.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.19.0.tgz#9b2f244204777a3d6810ec127c673c87b349fac5" + dependencies: + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.19.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" + dependencies: + babel-helper-explode-assignable-expression "^6.18.0" + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-builder-react-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.18.0.tgz#ab02f19a2eb7ace936dd87fa55896d02be59bf71" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.18.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" + dependencies: + babel-helper-hoist-variables "^6.18.0" + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" + dependencies: + babel-helper-function-name "^6.18.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" + dependencies: + babel-runtime "^6.0.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" + dependencies: + babel-helper-get-function-arity "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-get-function-arity@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-hoist-variables@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-is-react-class@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-helper-is-react-class/-/babel-helper-is-react-class-1.0.0.tgz#ef6f3678b05c76dbdeedadead7af98c2724d8431" + +babel-helper-optimise-call-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-helper-regex@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" + dependencies: + babel-helper-optimise-call-expression "^6.18.0" + babel-messages "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helpers@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" + dependencies: + babel-runtime "^6.0.0" + babel-template "^6.16.0" + +babel-loader@^6.2.8: + version "6.2.8" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.8.tgz#30d7183aef60afc140b36443676b7acb4c12ac9c" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^0.2.11" + mkdirp "^0.5.1" + object-assign "^4.0.1" + +babel-messages@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-check-es2015-constants@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541" + +babel-plugin-transform-class-properties@^6.18.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" + dependencies: + babel-helper-function-name "^6.18.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.9.1" + babel-template "^6.15.0" + +babel-plugin-transform-es2015-arrow-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoping@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af" + dependencies: + babel-runtime "^6.9.0" + babel-template "^6.15.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" + dependencies: + babel-helper-define-map "^6.18.0" + babel-helper-function-name "^6.18.0" + babel-helper-optimise-call-expression "^6.18.0" + babel-helper-replace-supers "^6.18.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-template "^6.14.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-computed-properties@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" + dependencies: + babel-helper-define-map "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-destructuring@^6.18.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-for-of@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-function-name@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" + dependencies: + babel-helper-function-name "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.9.0" + +babel-plugin-transform-es2015-literals@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-modules-amd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" + dependencies: + babel-plugin-transform-strict-mode "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.18.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6" + dependencies: + babel-helper-hoist-variables "^6.18.0" + babel-runtime "^6.11.6" + babel-template "^6.14.0" + +babel-plugin-transform-es2015-modules-umd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-object-super@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" + dependencies: + babel-helper-replace-supers "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-parameters@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1" + dependencies: + babel-helper-call-delegate "^6.18.0" + babel-helper-get-function-arity "^6.18.0" + babel-runtime "^6.9.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-plugin-transform-es2015-spread@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-sticky-regex@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-template-literals@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-unicode-regex@^6.3.13: + version "6.11.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-flow-strip-types@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.18.0.tgz#4d3e642158661e9b40db457c004a30817fa32592" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-object-rest-spread@^6.19.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.19.0.tgz#f6ac428ee3cb4c6aa00943ed1422ce813603b34c" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-react-constant-elements@^6.5.0, babel-plugin-transform-react-constant-elements@^6.9.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.9.1.tgz#125b86d96cb322e2139b607fd749ad5fbb17f005" + dependencies: + babel-runtime "^6.9.1" + +babel-plugin-transform-react-display-name@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-react-inline-elements@^6.6.5: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.8.0.tgz#fc2d8fec1f2f87e5c4961ac367610039f325bbe6" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-react-jsx-self@^6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.9.0" + +babel-plugin-transform-react-jsx-source@^6.3.13: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.9.0" + +babel-plugin-transform-react-jsx@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" + dependencies: + babel-helper-builder-react-jsx "^6.8.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-react-pure-class-to-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-pure-class-to-function/-/babel-plugin-transform-react-pure-class-to-function-1.0.1.tgz#32a649c97d653250b419cfd1489331b0290d9ee4" + dependencies: + babel-helper-is-react-class "^1.0.0" + +babel-plugin-transform-react-remove-prop-types@^0.2.5: + version "0.2.11" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.11.tgz#05eb7cc4670d6506d801680576589c7abcd51b00" + +babel-plugin-transform-regenerator@^6.16.0: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.16.0" + private "~0.1.5" + +babel-plugin-transform-runtime@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-strict-mode@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + +babel-polyfill@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" + dependencies: + babel-runtime "^6.9.1" + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-preset-es2015@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" + dependencies: + babel-plugin-check-es2015-constants "^6.3.13" + babel-plugin-transform-es2015-arrow-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoping "^6.18.0" + babel-plugin-transform-es2015-classes "^6.18.0" + babel-plugin-transform-es2015-computed-properties "^6.3.13" + babel-plugin-transform-es2015-destructuring "^6.18.0" + babel-plugin-transform-es2015-duplicate-keys "^6.6.0" + babel-plugin-transform-es2015-for-of "^6.18.0" + babel-plugin-transform-es2015-function-name "^6.9.0" + babel-plugin-transform-es2015-literals "^6.3.13" + babel-plugin-transform-es2015-modules-amd "^6.18.0" + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" + babel-plugin-transform-es2015-modules-systemjs "^6.18.0" + babel-plugin-transform-es2015-modules-umd "^6.18.0" + babel-plugin-transform-es2015-object-super "^6.3.13" + babel-plugin-transform-es2015-parameters "^6.18.0" + babel-plugin-transform-es2015-shorthand-properties "^6.18.0" + babel-plugin-transform-es2015-spread "^6.3.13" + babel-plugin-transform-es2015-sticky-regex "^6.3.13" + babel-plugin-transform-es2015-template-literals "^6.6.0" + babel-plugin-transform-es2015-typeof-symbol "^6.18.0" + babel-plugin-transform-es2015-unicode-regex "^6.3.13" + babel-plugin-transform-regenerator "^6.16.0" + +babel-preset-es2016@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.16.0.tgz#c7daf5feedeee99c867813bdf0d573d94ca12812" + dependencies: + babel-plugin-transform-exponentiation-operator "^6.3.13" + +babel-preset-react-optimize@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz#c23509fba7cbc76d7de7050e7d26bcd22bc304e8" + dependencies: + babel-plugin-transform-react-constant-elements "^6.5.0" + babel-plugin-transform-react-inline-elements "^6.6.5" + babel-plugin-transform-react-pure-class-to-function "^1.0.1" + babel-plugin-transform-react-remove-prop-types "^0.2.5" + +babel-preset-react@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" + dependencies: + babel-plugin-syntax-flow "^6.3.13" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.3.13" + babel-plugin-transform-react-display-name "^6.3.13" + babel-plugin-transform-react-jsx "^6.3.13" + babel-plugin-transform-react-jsx-self "^6.11.0" + babel-plugin-transform-react-jsx-source "^6.3.13" + +babel-register@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" + dependencies: + babel-core "^6.18.0" + babel-runtime "^6.11.6" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" + dependencies: + babel-runtime "^6.9.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.19.0.tgz#68363fb821e26247d52a519a84b2ceab8df4f55a" + dependencies: + babel-code-frame "^6.16.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.19.0" + babylon "^6.11.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.8.0, babel-types@^6.9.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.19.0.tgz#8db2972dbed01f1192a8b602ba1e1e4c516240b9" + dependencies: + babel-runtime "^6.9.1" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" + +balanced-match@^0.4.1, balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" + +bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.4.6: + version "3.4.6" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bowser@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browserify-zlib@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserslist@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.4.0.tgz#9cfdcf5384d9158f5b70da2aa00b30e8ff019049" + dependencies: + caniuse-db "^1.0.30000539" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer@^4.9.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +bytes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000578: + version "1.0.30000592" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000592.tgz#7b916023941df4063d9d946a1f9ad0d5edaf2bcd" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +change-emitter@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.2.tgz#6b88ca4d5d864e516f913421b11899a860aee8db" + +chart.js@^2.1.6: + version "2.4.0" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.4.0.tgz#44198073f0f43e5e16662e108420d92652a3c9a3" + dependencies: + chartjs-color "^2.0.0" + moment "^2.10.6" + +chartjs-color-string@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.4.0.tgz#57748d4530ae28d8db0a5492182ba06dfdf2f468" + dependencies: + color-name "^1.0.0" + +chartjs-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.0.0.tgz#7f60c7256589b24914814ece757659117381e35b" + dependencies: + chartjs-color-string "^0.4.0" + color-convert "^0.5.3" + +chokidar@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +circular-json@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +clap@^1.0.9: + version "1.1.2" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed" + dependencies: + chalk "^1.1.3" + +classnames@^2.2.0, classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + +clean-css@3.4.x: + version "3.4.21" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.21.tgz#2101d5dbd19d63dbc16a75ebd570e7c33948f65b" + dependencies: + commander "2.8.x" + source-map "0.4.x" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + +color-convert@^1.3.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@2.8.x: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@2.9.x, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +compressible@~2.0.8: + version "2.0.9" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" + dependencies: + mime-db ">= 1.24.0 < 2" + +compression@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" + dependencies: + accepts "~1.3.3" + bytes "2.3.0" + compressible "~2.0.8" + debug "~2.2.0" + on-headers "~1.0.1" + vary "~1.1.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +content-disposition@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +cookiejar@^2.0.6: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0, core-js@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" + dependencies: + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@~3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189" + dependencies: + pbkdf2-compat "2.0.1" + ripemd160 "0.2.0" + sha.js "2.2.6" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.1.tgz#2ba7f20131b93597496b3e9bb500785a49cd29ea" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.7.0" + cssnano ">=2.6.1 <4" + loader-utils "~0.2.2" + lodash.camelcase "^4.3.0" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.4" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.8.1" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.8.1.tgz#008a482148ee948cf0af2ee6e44bd97c53f886ec" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.2.1.tgz#51fbb5347e50e81e6ed51668a48490ae6fe2afe2" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d3-array@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.0.2.tgz#174237bf356a852fadd6af87743d928631de7655" + +d3-collection@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.2.tgz#df5acb5400443e9eabe9c1379896c67e52426b39" + +d3-color@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.2.tgz#83cb4b3a9474e40795f009d97e97a15649830bbc" + +d3-format@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.0.2.tgz#138618320b4bbeb43b5c0ff30519079fbbd7375e" + +d3-interpolate@1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.2.tgz#b52e6927a04fe1fe2a4cffc139e5389ed3e5e790" + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.3.tgz#60103d0dea9a6cd6ca58de86c6d56724002d3fde" + +d3-scale@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.4.tgz#50e28bf6a193b706745528515ed9b3d44205a033" + dependencies: + d3-array "1" + d3-collection "1" + d3-color "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-shape@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.0.4.tgz#145ee100ccbec42f8e3f1996cd05c786f79fe1c6" + dependencies: + d3-path "1" + +d3-time-format@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.0.3.tgz#3241569b74ddc9c42e0689c0e8a903579fd6280a" + dependencies: + d3-time "1" + +d3-time@1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.4.tgz#2ceba09a76b7450c992a1ded4e10fc6195e69649" + +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +damerau-levenshtein@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@^2.1.1, debug@^2.2.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +doctrine@1.5.0, doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-helpers@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-2.4.0.tgz#9bb4b245f637367b1fa670274272aa28fe06c367" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: + version "0.10.12" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" + dependencies: + d "^0.1.1" + es5-ext "^0.10.7" + es6-symbol "3" + +es6-map@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-set "~0.1.3" + es6-symbol "~3.1.0" + event-emitter "~0.3.4" + +es6-set@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-symbol "3" + event-emitter "~0.3.4" + +es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + +es6-weak-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + dependencies: + d "^0.1.1" + es5-ext "^0.10.8" + es6-iterator "2" + es6-symbol "3" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-standard-jsx@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.2.0.tgz#c240e26ed919a11a42aa4de8059472b38268d620" + +eslint-config-standard-react@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-react/-/eslint-config-standard-react-4.2.0.tgz#d15fd25e837e20aff0db32f64fb55d11880eb8d0" + dependencies: + eslint-config-standard-jsx "^3.0.0" + +eslint-config-standard@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-loader@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.6.1.tgz#96c47c812772eeb077e3a81681818e671a2cabf5" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^0.2.7" + object-assign "^4.0.1" + object-hash "^1.1.4" + +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-jsx-a11y@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.1.tgz#38f22742a5752a8e72db693d7cd86e13a357da25" + dependencies: + damerau-levenshtein "^1.0.0" + jsx-ast-utils "^1.0.0" + object-assign "^4.0.1" + +eslint-plugin-promise@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.4.0.tgz#6ba9048c2df57be77d036e0c68918bc9b4fc4195" + +eslint-plugin-react@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.8.0.tgz#741ab5438a094532e5ce1bbb935d6832356f492d" + dependencies: + doctrine "^1.2.2" + jsx-ast-utils "^1.3.4" + +eslint-plugin-standard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz#3589699ff9c917f2c25f76a916687f641c369ff3" + +eslint@^3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.11.1.tgz#408be581041385cba947cd8d1cd2227782b55dbf" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.2" + escope "^3.6.0" + espree "^3.3.1" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.2.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~1.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c" + dependencies: + acorn "^4.0.1" + acorn-jsx "^3.0.0" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-emitter@~0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.7" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@~0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@^4.13.3: + version "4.14.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.1" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "~2.2.0" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + finalhandler "0.5.0" + fresh "0.3.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.2" + qs "6.2.0" + range-parser "~1.2.0" + send "0.14.1" + serve-static "~1.11.1" + type-is "~1.6.13" + utils-merge "1.0.0" + vary "~1.1.0" + +extend@^3.0.0, extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extract-text-webpack-plugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c" + dependencies: + async "^1.5.0" + loader-utils "^0.2.3" + webpack-sources "^0.1.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.0.tgz#d9ccf0e789e7db725d74bc4877d23aa42972ac50" + dependencies: + websocket-driver ">=0.5.1" + +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: + version "0.8.6" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.6.tgz#7eb67d6986b2d5007a9b6e92e0e7cb6f75cad290" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + ua-parser-js "^0.7.9" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +file-loader@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42" + dependencies: + loader-utils "~0.2.5" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + statuses "~1.3.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff" + dependencies: + circular-json "^0.3.0" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +flexboxgrid@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/flexboxgrid/-/flexboxgrid-6.3.1.tgz#e99898afc07b7047722bb81a958a5fba4d4e20fd" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@^2.1.1, form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formidable@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.0.15" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gauge@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-color "^0.1.7" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gauge@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + supports-color "^0.2.0" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + 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" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0, globals@^9.2.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" + dependencies: + glob "~7.1.1" + lodash "~4.16.4" + minimatch "~3.0.2" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-color@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@1.1.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" + +history@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/history/-/history-3.2.1.tgz#71c7497f4e6090363d19a6713bb52a1bfcdd99aa" + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + query-string "^4.2.2" + warning "^3.0.0" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoist-non-react-statics@^1.0.0, hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-minifier@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.2.3.tgz#d2ff536e24d95726c332493d8f77d84dbed85372" + dependencies: + camel-case "3.0.x" + clean-css "3.4.x" + commander "2.9.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "2.7.x" + +html-webpack-plugin@^2.24.1: + version "2.24.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.24.1.tgz#7f45fc678f66eac2d433f22336b4399da023b57e" + dependencies: + bluebird "^3.4.6" + html-minifier "^3.1.0" + loader-utils "^0.2.16" + lodash "^4.16.4" + pretty-error "^2.0.2" + toposort "^1.0.0" + +html-webpack-template@^5.4.2: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-template/-/html-webpack-template-5.5.0.tgz#336bbdaafcd6c04ba947a83c2e72b9e8404cf2e0" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-browserify@^1.3.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.1: + version "0.17.2" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.2.tgz#572d517a6d2fb1063a469de294eed96066352007" + dependencies: + http-proxy "^1.15.1" + is-glob "^3.0.0" + lodash "^4.16.2" + micromatch "^2.3.11" + +http-proxy@^1.15.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.1.tgz#734b32de6ca0e36e51b59c1e0115ff860d7668fd" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd" + +hyphenate-style-name@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ignore@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" + +immutability-helper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.0.0.tgz#371657666eacf96f731f9f97e5cccd920b13a5d4" + dependencies: + invariant "^2.2.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inline-style-prefixer@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz#c153c7e88fd84fef5c602e95a8168b2770671fe7" + dependencies: + bowser "^1.0.0" + hyphenate-style-name "^1.0.1" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" + +interpret@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + +invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ipaddr.js@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" + +is-absolute-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.0.0.tgz#9c4b20b0e5c0cbef9a479a367ede6f991679f359" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.0.tgz#33411a482b046bf95e6b0cb27ee2711af4cf15ad" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + +js-tokens@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" + +js-yaml@^3.4.3, js-yaml@^3.5.1: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +js-yaml@~3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-formatter-js@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-1.3.0.tgz#a6577ac03ae7876d492b0954bd4eff33c38cbc09" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.4.tgz#0257ed1cc4b1e65b39d7d9940f9fb4f20f7ba0a9" + dependencies: + acorn-jsx "^3.0.1" + object-assign "^4.1.0" + +keycode@^2.1.1, keycode@^2.1.2: + version "2.1.7" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.7.tgz#7b9255919f6cff562b09a064d222dca70b020f5c" + +kind-of@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + dependencies: + is-buffer "^1.0.2" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5: + version "0.2.16" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +lodash-es@^4.2.1: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.2.tgz#59011b585166e613eb9dd5fc256b2cd1a30f3712" + +lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.differencewith@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz#bafafbc918b55154e179176a00bb0aefaac854b7" + +lodash.indexof@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" + +lodash.isequal@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.4.0.tgz#6295768e98e14dc15ce8d362ef6340db82852031" + +lodash.isfunction@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz#4db709fc81bc4a8fd7127a458a5346c5cdce2c6b" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.merge@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.mergewith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + +lodash.unionwith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.unionwith/-/lodash.unionwith-4.6.0.tgz#74d140b5ca8146e6c643c3724f5152538d9ac1f0" + +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.16.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" + +lodash@~4.16.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8" + dependencies: + js-tokens "^2.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" + +lru-cache@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +material-ui@^0.16.4: + version "0.16.4" + resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.16.4.tgz#b1ff4ea57069a89611b7e02a83d47c649e13c798" + dependencies: + babel-runtime "^6.11.6" + inline-style-prefixer "^2.0.1" + keycode "^2.1.1" + lodash.merge "^4.6.0" + lodash.throttle "^4.1.1" + react-addons-create-fragment "^15.0.0" + react-addons-transition-group "^15.0.0" + react-event-listener "^0.4.0" + recompose "^0.20.2" + simple-assign "^0.1.0" + warning "^3.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.14" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab" + dependencies: + lodash.indexof "^4.0.5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + +memory-fs@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +"mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + dependencies: + mime-db "~1.25.0" + +mime@1.2.x: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +mime@1.3.4, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +moment-duration-format@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-1.3.0.tgz#541771b5f87a049cc65540475d3ad966737d6908" + +moment@^2.10.6, moment@^2.15.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@^2.3.0, nan@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +ncname@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + dependencies: + xml-char-classes "^1.0.0" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +no-case@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164" + dependencies: + lower-case "^1.1.1" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3" + osenv "0" + path-array "^1.0.0" + request "2" + rimraf "2" + semver "2.x || 3.x || 4 || 5" + tar "^2.0.0" + which "1" + +node-libs-browser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c" + dependencies: + assert "^1.1.1" + browserify-zlib "~0.1.4" + buffer "^4.9.0" + console-browserify "^1.1.0" + constants-browserify "0.0.1" + crypto-browserify "~3.2.6" + domain-browser "^1.1.1" + events "^1.0.0" + http-browserify "^1.3.2" + https-browserify "0.0.0" + os-browserify "~0.1.2" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "~0.2.0" + readable-stream "^1.1.13" + stream-browserify "^1.0.0" + string_decoder "~0.10.25" + timers-browserify "^1.0.1" + tty-browserify "0.0.0" + url "~0.10.1" + util "~0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.29: + version "0.6.32" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.1" + rc "~1.1.6" + request "^2.79.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + +node-sass@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.0.tgz#d08b95bdebf40941571bd2c16a9334b980f8924f" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "^2.61.0" + sass-graph "^2.1.1" + +node-uuid@^1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +"nopt@2 || 3", nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.8.0.tgz#a9550b079aa3523c85d78df24eef1959fce359ab" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize.css@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-4.2.0.tgz#21d66cc557154d4379fd1e079ec7de58a379b099" + +"npmlog@0 || 1 || 2 || 3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.6.0" + set-blocking "~2.0.0" + +npmlog@^4.0.0, npmlog@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +object-hash@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.1.5.tgz#bdd844e030d0861b692ca175c6cab6868ec233d7" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +open@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" + +optimist@~0.6.0, optimist@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +param-case@2.1.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" + dependencies: + no-case "^2.2.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-array@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" + dependencies: + array-index "^1.0.0" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2-compat@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" + +performance-now@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.1.tgz#dc5421b6ae6f779ef6bfd47352b94abe59d0316b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.5.0.tgz#570aceb04b3061fb25f6f46bd0329e7ab6263c0b" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-load-config@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.0.0.tgz#1399f60dcd6bd9c3124b2eb22960f77f9dc08b3d" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.0.2" + postcss-load-plugins "^2.0.0" + +postcss-load-options@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.0.2.tgz#b99eb5759a588f4b2dd8b6471c6985f72060e7b0" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.1.0.tgz#dbb6f46271df8d16e19b5d691ebda5175ce424a0" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-loader@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.0.tgz#42f29c5526e0fafac7100a4aab4d7d4acb5143e9" + dependencies: + loader-utils "^0.2.16" + object-assign "^4.1.0" + postcss "^5.2.6" + postcss-load-config "^1.0.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.1.tgz#ff59b5dec6d586ce2cea183138f55c5876fa9cdc" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.0.10" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.10.tgz#54b360be804e7e69a5c7222635247b92a3569e9b" + dependencies: + postcss "^5.0.4" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.0.5.tgz#82d602643b8616a61fb3634d7ede0289836d67f9" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.7.tgz#bfb9248fe14db33770f036572de6b4897c48d81c" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + dependencies: + postcss "^5.0.4" + +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + dependencies: + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.7.tgz#6bd90d0a4bc5a1df22c26ea65c53257dc3829f4e" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.2.tgz#be8b511741fab2dac8e614a2302e9d10267b0771" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.1.tgz#024e8e219f52773313408573db9645ba62d2d2fe" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.0.tgz#8f739b938289ef2e48936d7101783e4741ca9bbb" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.5" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.5.tgz#46fc0363f01bab6a36a9abb01c229fcc45363094" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.5, postcss@^5.2.6: + version "5.2.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.6.tgz#a252cd67cd52585035f17e9ad12b35137a7bdd9e" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.1.2" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-error@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.0.2.tgz#a7db19cbb529ca9f0af3d3a2f77d5caf8e5dec23" + dependencies: + renderkid "~2.0.0" + utila "~0.4" + +private@^0.1.6, private@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0, process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.1.1" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +qs@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" + +qs@^6.1.0, qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + +query-string@^4.1.0, query-string@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +raf@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.3.0.tgz#93845eeffc773f8129039f677f80a36044eee2c3" + dependencies: + performance-now "~0.2.0" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + +react-addons-create-fragment@^15.0.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.4.1.tgz#596fde66cf7f375b5dad3c36ff6efe19c0ac47e7" + +react-addons-css-transition-group@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-css-transition-group/-/react-addons-css-transition-group-15.4.1.tgz#60b133fac5116e4009e56ab0674dc2ddcc1a18f6" + +react-addons-perf@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-perf/-/react-addons-perf-15.4.1.tgz#c6dd5a7011f43cd3222f47b7cb1aebe9d4174cb0" + +"react-addons-shallow-compare@^0.14.0 || ^15.0.0": + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.4.1.tgz#b68103dd4d13144cb221065f6021de1822bd435a" + +react-addons-test-utils@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.1.tgz#1e4caab151bf27cce26df5f9cb714f4fd8359ae1" + +"react-addons-transition-group@^0.14.0 || ^15.0.0", react-addons-transition-group@^15.0.0, react-addons-transition-group@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-transition-group/-/react-addons-transition-group-15.4.1.tgz#27d92717089c5e2db202e654a85b76a41b703acc" + +react-bootstrap@^0.30.7: + version "0.30.7" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.30.7.tgz#39da80088693ecb71e8e63b5bdc313571fd993d1" + dependencies: + babel-runtime "^6.11.6" + classnames "^2.2.5" + dom-helpers "^2.4.0" + invariant "^2.2.1" + keycode "^2.1.2" + react-overlays "^0.6.10" + react-prop-types "^0.4.0" + uncontrollable "^4.0.1" + warning "^3.0.0" + +react-css-themr@^1.6.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/react-css-themr/-/react-css-themr-1.6.1.tgz#928f38d96f02f28f5b00f46a0bf160ff43d91bad" + dependencies: + invariant "^2.2.1" + +react-dom@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.1.tgz#d54c913261aaedb17adc20410d029dcc18a1344a" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react-event-listener@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.4.0.tgz#26c40ab18f9f0e0d8d1fed9c3465e79c0a99c9a5" + dependencies: + react-addons-shallow-compare "^0.14.0 || ^15.0.0" + warning "^3.0.0" + +react-flexbox-grid@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/react-flexbox-grid/-/react-flexbox-grid-0.10.2.tgz#9de9b5d0b065adbb3b3b7e26033515abf9a9a2b4" + +react-hot-api@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" + +react-hot-loader@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" + dependencies: + react-hot-api "^0.4.5" + source-map "^0.4.4" + +react-overlays@^0.6.10: + version "0.6.10" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.6.10.tgz#e7e52dad47f00a0fc784eb044428c3a9e874bfa3" + dependencies: + classnames "^2.2.5" + dom-helpers "^2.4.0" + react-prop-types "^0.4.0" + warning "^3.0.0" + +react-prop-types@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0" + dependencies: + warning "^3.0.0" + +react-redux@^4.4.6: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" + dependencies: + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + loose-envify "^1.1.0" + +react-resize-detector@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-0.3.3.tgz#ca07443072324843586666d9443a6356da7c0501" + +react-router@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff" + dependencies: + history "^3.0.0" + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + warning "^3.0.0" + +react-smooth@^0.1.15: + version "0.1.17" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-0.1.17.tgz#0810990fdcbb5a5ceaf1fc4ebcb00f255f8e8935" + dependencies: + lodash "^4.16.4" + raf "^3.2.0" + react-addons-transition-group "^0.14.0 || ^15.0.0" + +react-tap-event-plugin@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz#316beb3bc6556e29ec869a7293e89c826a9074d2" + dependencies: + fbjs "^0.8.6" + +react-toolbox@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-toolbox/-/react-toolbox-1.3.0.tgz#408f4cabb7011e51a365eeda2c223bc903aea476" + dependencies: + classnames "^2.2.5" + core-js "^2.4.0" + normalize.css "^4.2.0" + react-css-themr "^1.6.0" + +react-tooltip@^3.1.8: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-3.2.2.tgz#3a599c0eabbd9eb9597aa2d72b217fd7ba358767" + dependencies: + classnames "^2.2.0" + +react@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.4.1.tgz#498e918602677a3983cd0fd206dfe700389a0dd6" + dependencies: + fbjs "^0.8.4" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^1.0.27-1, readable-stream@^1.1.13: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +recharts-scale@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.2.1.tgz#378f543ed17c3245e4d9afb10aaf6298240d2fcb" + +recharts@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-0.19.0.tgz#228ac3558a60c48a14f54f087baafdb5d856398a" + dependencies: + classnames "^2.2.5" + core-js "^2.4.1" + d3-scale "^1.0.3" + d3-shape "^1.0.3" + lodash "^4.16.4" + react-resize-detector "^0.3.3" + react-smooth "^0.1.15" + recharts-scale "^0.2.1" + reduce-css-calc "^1.3.0" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +recompose@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.20.2.tgz#113d6ac7e29ca664cfffec16b681ddddf15250bc" + dependencies: + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^1.0.0" + symbol-observable "^0.2.4" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +reduce-css-calc@^1.2.6, reduce-css-calc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +redux-saga@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-0.13.0.tgz#9294386550deb0d56bc9a1b3c90a613e7ddb6593" + +redux@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.2" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.9.5: + version "0.9.6" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +renderkid@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.0.tgz#1859753e7a5adbf35443aba0d4e4579e78abee85" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2, request@^2.61.0, request@^2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@1.0.x, requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +ripemd160@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +sass-graph@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + yargs "^4.7.1" + +sass-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.0.2.tgz#a616eb770366543e64f547c8630f39c4da75f15d" + dependencies: + async "^2.0.1" + loader-utils "^0.2.15" + object-assign "^4.1.0" + +sax@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.5.0" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.0" + +serve-index@^1.7.2: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-static@~1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.14.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" + +sha.js@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" + +shelljs@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +simple-assign@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sockjs-client@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.1.tgz#284843e9a9784d7c474b1571b3240fca9dda4bb0" + dependencies: + debug "^2.2.0" + eventsource "~0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.1" + +sockjs@^0.3.15: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^0.1.4, source-list-map@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" + +source-map-support@^0.4.2: + version "0.4.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb" + dependencies: + source-map "^0.5.3" + +source-map@0.4.x, source-map@^0.4.4, source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" + dependencies: + inherits "~2.0.1" + readable-stream "^1.0.27-1" + +stream-cache@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string_decoder@~0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~1.0.1, strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +style-loader@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9" + dependencies: + loader-utils "^0.2.7" + +superagent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.1.0.tgz#e05a03b630cd7b0a0e17c26543977fd4a35c3296" + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.0.6" + debug "^2.2.0" + extend "^3.0.0" + form-data "^2.1.1" + formidable "^1.0.17" + methods "^1.1.1" + mime "^1.3.4" + qs "^6.1.0" + readable-stream "^2.0.5" + +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@^3.1.1, supports-color@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +svgo@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.1.tgz#287320fed972cb097e72c2bb1685f96fe08f8034" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.2.1" + js-yaml "~3.6.1" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +symbol-observable@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + +symbol-observable@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tapable@^0.1.8, tapable@~0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + +tar@^2.0.0, tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +toposort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.0.tgz#b66cf385a1a8a8e68e45b8259e7f55875e8b06ef" + +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.4" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.4.tgz#8c9dbfb52795686f166cd2023794bcf103d13c2b" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.13: + version "1.6.14" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.13" + +typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uglify-js@2.7.x, uglify-js@~2.7.3: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uncontrollable@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.0.3.tgz#06ec76cb9e02914756085d9cea0354fc746b09b4" + dependencies: + invariant "^2.1.0" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.0.tgz#33d9679f65022f48988a03fd24e7dcaf8f109eca" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +url-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.7.tgz#67e8779759f8000da74994906680c943a9b0925d" + dependencies: + loader-utils "0.2.x" + mime "1.2.x" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@~0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vary@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +watchpack@^0.2.1: + version "0.2.9" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" + dependencies: + async "^0.9.0" + chokidar "^1.0.0" + graceful-fs "^4.1.2" + +webpack-core@~0.6.0: + version "0.6.8" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a" + dependencies: + source-list-map "~0.1.0" + source-map "~0.4.1" + +webpack-dev-middleware@^1.4.0: + version "1.8.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d" + dependencies: + memory-fs "~0.3.0" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-dev-server@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.2.tgz#8bebc2c4ce1c45a15c72dd769d9ba08db306a793" + dependencies: + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + express "^4.13.3" + http-proxy-middleware "~0.17.1" + open "0.0.5" + optimist "~0.6.1" + serve-index "^1.7.2" + sockjs "^0.3.15" + sockjs-client "^1.0.3" + stream-cache "~0.0.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.4.0" + +webpack-merge@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-1.0.2.tgz#b28f4c895361f1a985a96952760d7170679779b4" + dependencies: + lodash.clonedeep "^4.5.0" + lodash.differencewith "^4.5.0" + lodash.isequal "^4.4.0" + lodash.isfunction "^3.0.8" + lodash.isplainobject "^4.0.6" + lodash.mergewith "^4.6.0" + lodash.unionwith "^4.6.0" + +webpack-sources@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.3.tgz#15ce2fb79d0a1da727444ba7c757bf164294f310" + dependencies: + source-list-map "~0.1.0" + source-map "~0.5.3" + +webpack@^1.13.1: + version "1.13.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.3.tgz#e79c46fe5a37c5ca70084ba0894c595cdcb42815" + dependencies: + acorn "^3.0.0" + async "^1.3.0" + clone "^1.0.2" + enhanced-resolve "~0.9.0" + interpret "^0.6.4" + loader-utils "^0.2.11" + memory-fs "~0.3.0" + mkdirp "~0.5.0" + node-libs-browser "^0.6.0" + optimist "~0.6.0" + supports-color "^3.1.0" + tapable "~0.1.8" + uglify-js "~2.7.3" + watchpack "^0.2.1" + webpack-core "~0.6.0" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + +whatwg-fetch@>=0.10.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@1, which@^1.2.9: + version "1.2.12" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + dependencies: + isexe "^1.1.1" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xml-char-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" + +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"