Giter Club home page Giter Club logo

mozaik's Introduction

MOZAÏK

License Travis CI NPM version mozaïk channel on discord

Mozaïk is a tool based on nodejs / react / redux / d3 to easily craft beautiful dashboards. See demo

preview

Features:

  • Scalable layout
  • Themes support
  • Extendable by modules
  • Grid positioning
  • Optimized backend communication
  • Rotation support (with smooth transition)

Getting started

Installation instructions:

Visit the website for further information/doc.

mozaik's People

Contributors

ansgarm avatar arturgajowy avatar benediktvaldez avatar bitdeli-chef avatar danielw92 avatar gitter-badger avatar ierceg avatar ilarijuu avatar jasonbellamy avatar jbdietrich avatar josex2r avatar juhamust avatar kurtextrem avatar phw avatar plouc avatar tomav avatar volnistov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mozaik's Issues

error on npm install

everytime i try and load the npm install i come across this error. any idea what to do?

/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-generator.js:275
        throw new Error('Invalid mapping: ' + JSON.stringify({
Error: Invalid mapping: {"generated":{"line":33220,"column":10},"source":"Branch.jsx","original":{},"name":null}
    at SourceMapGenerator_validateMapping [as _validateMapping] (/Users/work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-generator.js:275:15)
    at SourceMapGenerator_addMapping [as addMapping] (/Users/work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/node_modules/source-map/lib/source-map/source-map-generator.js:105:14)
    at /Users/work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/index.js:40:15
    at Array.forEach (native)
    at Generator.addMappings (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/node_modules/inline-source-map/index.js:38:12)
    at Combiner._addExistingMap (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/index.js:33:18)
    at Combiner.addFile (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/combine-source-map/index.js:58:12)
    at Transform.write [as _transform] (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/index.js:62:23)
    at Transform._read (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:184:10)
    at Transform._write (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js:172:12)
    at doWrite (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:237:10)
    at writeOrBuffer (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:227:5)
    at Transform.Writable.write (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:194:11)
    at write (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:623:24)
    at flow (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:632:7)
    at Transform.pipeOnReadable (/Users//work/mozaik-demo/node_modules/mozaik/node_modules/browserify/node_modules/browser-pack/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:664:5)

Generic loading of moazik-ext-* stuff

My situation is that node_modules is not located in the same folder as my code, but your built-in gulp build assumes otherwise (understandably I suppose)

Ideally we could find a way to load all modules that start with mozaik-ext- regardless of where node_modules is located

One example

Not sure how we could solve this - just throwing this out there for now 😸

Problems using useWssConnection:true

We are serving the dashboard via https, ofc 😄, and enabled the useWssConnection: true in our config.js, but can't seem to get it working, seeing this error message

WebSocket connection to 'wss://dashboard.our-domain.com/' failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED

Should I be doing something else to get this working?

gulp not finding reflux module

Hi,

I tried to set up a new dashboard using the Yeoman approach, but I ran into this error when executing gulp build

[11:14:06] Using gulpfile ~/Development/node/unaboard/gulpfile.js
[11:14:06] Starting 'copy:fonts'...
[11:14:06] Copying fonts
[11:14:06] Starting 'copy:styles'...
[11:14:06] Copying styles
[11:14:06] Starting 'copy:imgs'...
[11:14:06] Copying images from extensions and themes
[11:14:06] Starting 'collect:styles'...
[11:14:06] Collecting extensions styles
[11:14:06] Finished 'collect:styles' after 5.75 ms
[11:14:06] Starting 'styles:dev'...
[11:14:06] Compiling stylus code using theme '/Users/torvatn/Development/node/unaboard/node_modules/mozaik/src/themes/bordeau'
[11:14:06] Starting 'js:dev'...
[11:14:06] Finished 'copy:imgs' after 46 ms
[11:14:06] Finished 'copy:styles' after 287 ms
[11:14:06] Finished 'styles:dev' after 277 ms
[11:14:06] Starting 'styles'...
[11:14:06] Finished 'styles' after 5.38 μs
[11:14:06] Finished 'copy:fonts' after 426 ms
[11:14:06] Starting 'copy'...
[11:14:06] Finished 'copy' after 7.66 μs
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: Cannot find module 'reflux' from '/Users/torvatn/Development/node/unaboard/node_modules/mozaik-ext-twitter/lib/components'
    at /Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:46:17
    at process (/Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:173:43)
    at ondir (/Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:188:17)
    at load (/Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
    at onex (/Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
    at /Users/torvatn/Development/node/unaboard/node_modules/mozaik/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
    at FSReqWrap.oncomplete (fs.js:82:15)

Any ideas on how to fix this?

I'm using node v4.1.2 and npm v2.14.6 by the way

[ERROR] node app.js command

sudo node app.js
/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/transformation/file/options/option-manager.js:126
if (!option) this.log.error("Unknown option: " + alias + "." + key, ReferenceError);
^

TypeError: Cannot read property 'error' of undefined
at OptionManager.mergeOptions (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/transformation/file/options/option-manager.js:126:28)
at OptionManager.addConfig (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/transformation/file/options/option-manager.js:107:10)
at OptionManager.findConfigs (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/transformation/file/options/option-manager.js:168:35)
at OptionManager.init (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/transformation/file/options/option-manager.js:229:12)
at compile (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/api/register/node.js:117:22)
at normalLoader (/home/abenathmane/Desktop/mozaik/node_modules/babel-core/lib/api/register/node.js:199:14)
at Object.require.extensions.(anonymous function) as .js
at Module.load (module.js:456:32)
at tryModuleLoad (module.js:415:12)
at Function.Module._load (module.js:407:3)

Node 4.0 support / ws dependency

I'm currently developing a dashboard using Mozaik and I am considering upgrading to the latest version of Node.
Everything seems to work fine using Node 4.1.0, with one exception: the ws dependency won't compile on my system. I changed its version via npm shrinkwrap from ^0.6.3 to 0.8.0 and it looks like everything works. Are you aware of any problems with that version of ws or Mozaik with Node 4.0 in general? If not, would you consider updating that dependency? Thank you!

Docker image

Hi @plouc,

More a question about an enhancement than an issue.
I know you are think about a docker image to run mozaik dashboards.

I quickly built one using this Dockerfile template:

FROM node:onbuild
RUN npm install -g gulp
RUN gulp build
CMD [ "node", "app.js" ]
EXPOSE 5000

The image is 700MB+ which is HUGE.
If you have any thought to share here, do not hesitate.

Thank you.

Error when running node app.js

info: registered API 'mozaik' (mode: poll)
info: registered API 'github' (mode: poll)
info: registered API 'travis' (mode: poll)
info: registered API 'weather' (mode: poll)
info: serving static contents from /Users/eochola/Desktop/dashboard/build
events.js:141
throw er; // Unhandled 'error' event
^

Error: listen EADDRINUSE 0.0.0.0:5000
at Object.exports._errnoException (util.js:860:11)
at exports._exceptionWithHostPort (util.js:883:20)
at Server._listen2 (net.js:1234:14)
at listen (net.js:1270:10)
at net.js:1379:9
at doNTCallback3 (node.js:461:9)
at process._tickCallback (node.js:367:17)
at Function.Module.runMain (module.js:459:11)
at startup (node.js:136:18)
at node.js:972:3

Let's get a chat room!

This is awesome, saw it from daily.js email list!

I was digging around to see if I had to build it from scratch, and I'm glad I found this place! Bonus it's in my favorite languages, react and node.js.

We need an IRC or something! Where do you guys currently chat?

Wrong positioning of widget content

Hey folks,

I have encountered an issue that the widget content isn't centered in the widget body. Can anyone else reproduce this? I think it's because of the absolute positioning from the .widget__body
bildschirmfoto 2015-11-22 um 11 31 31

Warnings & Errors during fresh installation

Node: v6.2.1
Npm: v3.9.3

A number of warnings, deprecations, and unmet peer dependency. Still haven't been able to get the app to run at all, as per #82 .

$ yo mozaik
(node:30134) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.
? What's the name of your awesome Mozaïk dashboard? Lightcloud
? Application host localhost
? Application port 5000
? Choose a theme for your dashboard night-blue
? Choose an interval for dashboard rotation 4000
? Select an extension to install or select `none` to continue AWS
? Select an extension to install or select `none` to continue github
? Select an extension to install or select `none` to continue google analytics
? Select an extension to install or select `none` to continue google calendar
? Select an extension to install or select `none` to continue jenkins
? Select an extension to install or select `none` to continue time
? Select an extension to install or select `none` to continue none
   create package.json
   create .gitignore
   create gulpfile.js
   create .env
   create config.js
   create app.js
   create src/App.jsx
Endymion:Mozaik tedhayes$ npm install
npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated [email protected]: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN deprecated [email protected]: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN prefer global [email protected] should be installed with -g

> [email protected] install /Users/tedhayes/Projects/Mozaik/node_modules/fsevents
> node-pre-gyp install --fallback-to-build

  SOLINK_MODULE(target) Release/.node
  CXX(target) Release/obj.target/fse/fsevents.o
  SOLINK_MODULE(target) Release/fse.node
  COPY /Users/tedhayes/Projects/Mozaik/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node
  TOUCH Release/obj.target/action_after_build.stamp
[email protected] /Users/tedhayes/Projects/Mozaik
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   ├─┬ [email protected] 
│ │ │ │   │ └─┬ [email protected] 
│ │ │ │   │   └── [email protected] 
│ │ │ │   ├── [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └─┬ [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   └── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   └─┬ [email protected] 
│ │ │     ├── [email protected] 
│ │ │     └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └─┬ [email protected] 
│ │ │   │   ├── [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ ├── [email protected] 
│ │ │   │   │ └── [email protected] 
│ │ │   │   ├── [email protected] 
│ │ │   │   └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └─┬ [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   └── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ ├─┬ [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ ├─┬ [email protected] 
│ │ │   │ │ │ │ └── [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ └── [email protected] 
│ │ │   │ │ ├─┬ [email protected] 
│ │ │   │ │ │ └── [email protected] 
│ │ │   │ │ ├─┬ [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ ├─┬ [email protected] 
│ │ │   │ │ │ │ └── [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ └── [email protected] 
│ │ │   │ │ └─┬ [email protected] 
│ │ │   │ │   └── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ ├── [email protected] 
│ │ │   │ │ ├── [email protected] 
│ │ │   │ │ ├── [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ ├── [email protected] 
│ │ │   │ │ ├─┬ [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ ├── [email protected] 
│ │ │   │ │ │ └── [email protected] 
│ │ │   │ │ └─┬ [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   ├─┬ [email protected] 
│ │ │   │ │   │ └── [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   ├── [email protected] 
│ │ │   │ │   └── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └─┬ [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ └── [email protected] 
│ │ │   │   ├── [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ └─┬ [email protected] 
│ │ │   │   │   ├── [email protected] 
│ │ │   │   │   └── [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ └── [email protected] 
│ │ │   │   └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   └─┬ [email protected] 
│ │ │     ├─┬ [email protected] 
│ │ │     │ └── [email protected] 
│ │ │     ├─┬ [email protected] 
│ │ │     │ └─┬ [email protected] 
│ │ │     │   └─┬ [email protected] 
│ │ │     │     ├── [email protected] 
│ │ │     │     └── [email protected] 
│ │ │     ├─┬ [email protected] 
│ │ │     │ └── [email protected] 
│ │ │     ├─┬ [email protected] 
│ │ │     │ ├── [email protected] 
│ │ │     │ ├── [email protected] 
│ │ │     │ ├── [email protected] 
│ │ │     │ ├── [email protected] 
│ │ │     │ └── [email protected] 
│ │ │     └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├── [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └─┬ [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ └── [email protected] 
│ │ │   │   └─┬ [email protected] 
│ │ │   │     └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └─┬ [email protected] 
│ │ │   │   ├─┬ [email protected] 
│ │ │   │   │ ├─┬ [email protected] 
│ │ │   │   │ │ └─┬ [email protected] 
│ │ │   │   │ │   └── [email protected] 
│ │ │   │   │ └── [email protected] 
│ │ │   │   └── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └─┬ [email protected] 
│ │ │     └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └─┬ [email protected] 
│ │   ├── [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ └─┬ [email protected] 
│   ├── [email protected] 
│   ├─┬ [email protected] 
│   │ ├── [email protected] 
│   │ ├─┬ [email protected] 
│   │ │ └── [email protected] 
│   │ ├── [email protected] 
│   │ ├─┬ [email protected] 
│   │ │ └─┬ [email protected] 
│   │ │   └── [email protected] 
│   │ └── [email protected] 
│   ├─┬ [email protected] 
│   │ └─┬ [email protected] 
│   │   └─┬ [email protected] 
│   │     ├─┬ [email protected] 
│   │     │ ├── [email protected] 
│   │     │ └── [email protected] 
│   │     ├── [email protected] 
│   │     └─┬ [email protected] 
│   │       ├── [email protected] 
│   │       └── [email protected] 
│   ├── [email protected] 
│   ├─┬ [email protected] 
│   │ ├── [email protected] 
│   │ └── [email protected] 
│   ├─┬ [email protected] 
│   │ └─┬ [email protected] 
│   │   └── [email protected] 
│   └─┬ [email protected] 
│     └── [email protected] 
├── [email protected] 
├─┬ [email protected] 
│ ├── UNMET PEER DEPENDENCY [email protected]
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └─┬ [email protected] 
│ │ │ │ │   └── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ ├── [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │   ├─┬ [email protected] 
│ │   │ └── [email protected] 
│ │   ├─┬ [email protected] 
│ │   │ └─┬ [email protected] 
│ │   │   └── [email protected] 
│ │   ├── [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ ├─┬ [email protected] 
│ │ │   │ │ │ └── [email protected] 
│ │ │   │ │ └── [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ └── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   ├── [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ └─┬ [email protected] 
│ │   ├── [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ └─┬ [email protected] 
│   ├── [email protected] 
│   └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   └─┬ [email protected] 
│ │ │     ├─┬ [email protected] 
│ │ │     │ ├── [email protected] 
│ │ │     │ └── [email protected] 
│ │ │     └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├─┬ [email protected] 
│ │ │   │ ├─┬ [email protected] 
│ │ │   │ │ └─┬ [email protected] 
│ │ │   │ │   └── [email protected] 
│ │ │   │ └─┬ [email protected] 
│ │ │   │   ├── [email protected] 
│ │ │   │   ├── [email protected] 
│ │ │   │   └── [email protected] 
│ │ │   └─┬ [email protected] 
│ │ │     ├── [email protected] 
│ │ │     ├── [email protected] 
│ │ │     └─┬ [email protected] 
│ │ │       └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ ├── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └─┬ [email protected] 
│   ├── [email protected] 
│   ├── [email protected] 
│   ├─┬ [email protected] 
│   │ └── [email protected] 
│   └─┬ [email protected] 
│     └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   ├── [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └─┬ [email protected] 
│ │ │ │ │   └── [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └─┬ [email protected] 
│ │ │ │   └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └── [email protected] 
│ │ └─┬ [email protected] 
│ │   ├─┬ [email protected] 
│ │   │ └── [email protected] 
│ │   ├─┬ [email protected] 
│ │   │ └─┬ [email protected] 
│ │   │   └── [email protected] 
│ │   ├─┬ [email protected] 
│ │   │ └── [email protected] 
│ │   └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ ├─┬ [email protected] 
│ │ │ │ │ └── [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └─┬ [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├─┬ [email protected] 
│ │ │ │ └── [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├── UNMET PEER DEPENDENCY [email protected]
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ └─┬ [email protected] 
│ │ │   └── [email protected] 
│ │ └── [email protected] 
│ ├── UNMET PEER DEPENDENCY [email protected]
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │   └─┬ [email protected] 
│ │     └── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
  └─┬ [email protected] 
    ├─┬ [email protected] 
    │ ├── [email protected] 
    │ ├── [email protected] 
    │ └── [email protected] 
    └── [email protected] 

npm WARN [email protected] requires a peer of [email protected] but none was installed.

How to update an existing project ?

I runned npm update and after your refactoring with ES6 the app crash.

╰─$ node app.js                                                                                                   1 ↵
/Users/thibz/Documents/github/dashboard/node_modules/mozaik/src/Mozaik.js:6
class Mozaik {
^^^^^
SyntaxError: Unexpected reserved word
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/thibz/Documents/github/dashboard/app.js:1:81)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

Is there a recommended way to update mozaik for an existing project ?

Add support for switching between widgets

While switching between dashboards is nice, sometimes one wants to switch only certain widgets (while keeping the others). Thus, Mozaik should support defining multiple widgets per region.

Ideally it would be as easy as:

{
  type: ['github.user_badge', 'heroku.app_info'],
  user: 'plouc',
  app: 'mozaik',
  columns: 1, rows: 1,
  x: 0, y: 0
}

As for the widget params, both should be defined. Naturally this can be challenging with conflicting names, but it could use same array approach:

{
  type: ['weather.weather', 'weather.weather'],
  city: ['Tokyo', 'London'],
  country: ['JP', 'EN'],
  lang: 'en',
  limit: 2,
  columns: 1, rows: 1,
  x: 0, y: 1
}

I've implemented similar feature in Dashing, but I'm not yet that familiar with Flux and/or Mozaik so that I could create a PR at this point.

Create a new theme

Hello,

I was wondering if there was any specific files or setup to do to create a new theme. Based on the already available themes, they all have the same files defined.

Once the new theme is created, how do I register it on the Mosaik config file ?

I'll probably make a PR once I finish it so that anyone can use it ;)

Cheers,

Does Mozaik require reflux?

First.. Thanks for this project. It looks amazing.
I'm wonder whether it works with other flux implementations like Redux.
My question is because including Reflux on my bundle would make it even bigger.
Thanks

Demo currently failing

I get a blank screen on the demo app (https://mozaik.herokuapp.com/).

It seems to be because Chrome doesn't allow cross-protocol websocket access (as in https with ws or http with wss).

Mixed Content: The page at 'https://mozaik.herokuapp.com/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://mozaik.herokuapp.com/'. This request has been blocked; this endpoint must be available over WSS.r.default.createStore.initWs @ mozaik.min.js:14
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.

How do you handle build of widgets when creating new widget ?

Hi and thanks for your work on Mozaik !

Quick question, how do you handle the build of new widgets using ES6 syntax ?
For example I forked your github widget and used npm link, then I got an error when starting the app as the ES6 syntax if not valid:

/Users/.../mozaik-ext-github/src/client.js:1
(function (exports, require, module, __filename, __dirname) { import request f
                                                              ^^^^^^
SyntaxError: Unexpected reserved word

Prefer Webpack over Gulp

As stated in #52 (comment), the project should move to Webpack. I took an initial steps towards Webpack based building, to initiate the communication and perhaps contribute with the effort:

Warning: Many rough edges, bugs and missing functionality included! But I won't waste my time if my work is heading into wrong direction / there is already work in progress.

Any thoughts?

Widget instance can be configured only once

Perhaps I'm doing something wrong, but it seems that the one widget type can be configured only once as the second instance gets the same location parameter value despite the config:

config.js

{
    type: 'mywidget',
    location: 'foo',
    columns: 1, rows: 1,
    x: 2, y: 0
},
{
    type: 'mywidget',
    location: 'bar',
    columns: 1, rows: 1,
    x: 1, y: 0
},

In both cases, the location value is foo in params.

Add support for loading widgets from external modules

Provide an easy way to develop, publish and install new widgets as separate npm modules.

Also, it should be possible to install Mozaïk as dependency while having dashboard config and related resources (like theme?) maintained in own repository.

gulp build failure

Running gulp build gives me the following. I'm using the install/setup instructions in the README.

module.js:340
    throw err;
    ^

Error: Cannot find module 'mozaik/gulpfile'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:289:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (/path/to/gulpfile.js:5:10)
    at Module._compile (module.js:425:26)
    at Object.Module._extensions..js (module.js:432:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)

"publish" is not in your gulpfile

Installed the mozaik yeoman generator and ran it. Ran into a peerDep issue (unrelated I think) and then I was unable to run gulp publish like it says to in the docs.

Steps to reproduce:
  1. run yo mozaik to generate the base files.
  2. run npm i to install dependencies.
  3. Fix the following peerDependency issue by specifying ^0.13.0 for react in the package.json:
    screen shot 2015-07-29 at 11 21 06 am
  4. Run npm i again to install that package (I'm lazy & didn't feel like typing out npm i [email protected] or whatever it is.
  5. Run gulp publish, as it says to in the docs. Get error:
    screen shot 2015-07-29 at 11 18 40 am
  6. Running the default gulp task will run through some tasks, none of which is publish. Attempting to run node app.js afterwards results in the following error:
    screen shot 2015-07-29 at 11 28 37 am
Tested with:

node: 0.10.32 & 0.12.7
npm: 1.4.28 & 2.11.3

Add simple widget to add hyperlinks

Can add simple links which are useful across the team , so there is just one dashboard to go to and can reach other links from this page itself

WebSocket does not support secured connection

Even if dashboard is located behind proxy, that handles and terminates the SSL connection, the client has the protocol tied into unencrypted one.

As I see it, there should be a config option like useSSL=true that would switch the ws: to wss:.

// extensibility/src/browser/stores/ApiStore.js
ws = new WebSocket('ws://' + window.document.location.host);

Agreed?

Supported node versions should be specified

I had forgotten I had iojs-v1.1.0 installed--build failed. So I switched back to the latest stable node, v0.10.36. The build succeeded but when I ran node mozaik.js, I received the following error:

$ node mozaik.js
dyld: lazy symbol binding failed: Symbol not found: _node_module_register
  Referenced from: /Users/cluebcke/projects/tools/mozaik/node_modules/ws/build/Release/bufferutil.node
  Expected in: dynamic lookup

dyld: Symbol not found: _node_module_register
  Referenced from: /Users/cluebcke/projects/tools/mozaik/node_modules/ws/build/Release/bufferutil.node
  Expected in: dynamic lookup

Trace/BPT trap: 5

So I switched to v0.11.16 (yay nvm!) and now everything is fine.

Mozaïk should provide a way to define dashboard templates

We should be able to use extension templates, for example, given you already installed mozaik-ext-github, you should be able to use a repository dashboard template by just providing a repo ID.

The API should be something like :

Mozaik.templates.add('github', templates);

where templates is an object composed of various predefined dashboard components.

Jenkins views

I would like to suggest one Jenkins Widget to monitor views, Providing information about percentage of time that view spent blue, yellow and green for instance.

What you think about this idea ? And expand to aggregate other metrics from views ?

Unexpected "indent" in src/core/styl/_mixins.styl

When running gulp publish for the first time, I encountered the following error:

[12:49:08] Starting 'react'...
Potentially unhandled rejection [2] ParseError: /Users/cluebcke/projects/tools/mozaik/src/core/styl/_mixins.styl:3:21
   1| transition($value)
   2|   -webkit-transition $value; /* Saf3.2+, Chrome */
   3|      -moz-transition $value; /* FF4+ */
--------------------------^
   4|       -ms-transition $value;
   5|        -o-transition $value; /* Opera 10.5+ */
   6|           transition $value;

unexpected "indent"

    at Parser.error (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:257:11)
    at Parser.stmt (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:798:32)
    at Parser.statement (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:669:21)
    at Parser.block (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:840:21)
    at Parser.functionDefinition (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:1714:21)
    at Parser [as function] (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:1655:18)
    at Parser.stmt (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:762:26)
    at Parser.statement (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:669:21)
    at Parser.parse (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/parser.js:234:25)
    at Evaluator.importFile (/Users/cluebcke/projects/tools/mozaik/node_modules/gulp-stylus/node_modules/stylus/lib/visitor/evaluator.js:73:20)

I've fixed it (pull request coming), but I don't know why this would be happening for me and not others. My platform information is below:

OS: OS X 10.10.1
Python: 2.7.6
Node: v0.11.16

startup error with yo-configured time widget

Following the instructions at https://github.com/plouc/mozaik I used yo mozaik, which prompted me to select widgets. I selected the time widget, plus a few others. However node app.js produced an error:

module.js:322
    throw err;
          ^
Error: Cannot find module 'mozaik-ext-time/components/index'
    at Function.Module._resolveFilename (module.js:320:15)
    at Function.Module._load (module.js:262:25)
    at Module.require (module.js:349:17)
    at require (module.js:368:17)
    at Object.<anonymous> (/Users/mblakele/Source/mozaik-test/app.js:3:33)
    at Module._compile (module.js:444:26)
    at Object.Module._extensions..js (module.js:462:10)
    at Module.load (module.js:339:32)
    at Function.Module._load (module.js:294:12)
    at Function.Module.runMain (module.js:485:10)

The problem seems to be this line that yo mozaik added to my app.js:

mozaik.bus.registerApi('time',  require('mozaik-ext-time/client'));

However the time widget doesn't have a backend.

Workaround: comment out the line for time/client in app.js.

Add support for real-time communication

Current polling model work nicely most of the cases. However, if more accurate data is needed, the approach no longer. Thus, it should be possible for client to communicate with the client whenever needed.

Example scenario: Server side client creates a WebSocket or MQTT connection to data source. Whenever a message is received, client communicates it to all the interested widgets.

@plouc: I'm sure you have an idea how to implement this without affecting too much on the API.

Add support for LineChart in Framework

Hi, I am trying to create a burndown chart and would like to know if it's possible to add Line Chart as component in the framework. It would be very helpful.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.