├── .github
└── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
├── dist
├── UILandingBot.css
├── UILandingBot.js
├── uilb.min.css
└── uilb.min.js
├── examples
└── welcome
│ ├── index.css
│ ├── index.html
│ └── index.js
├── index.html
├── package-lock.json
├── package.json
└── src
├── UILandingBot.css
└── UILandingBot.js
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [ThibaultJanBeyer]
4 | custom: ['https://www.blockchain.com/btc/address/1LdweSpjgSeJC8XxX3swrohBMBLUzg6cmC']
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Thibault Jan Beyer
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ```
2 | __ ________ ___ ____ __
3 | / / / / _/ / ____ _____ ____/ (_)___ ____ _/ __ )____ / /_
4 | / / / // // / / __ `/ __ \/ __ / / __ \/ __ `/ __ / __ \/ __/
5 | / /_/ // // /___/ /_/ / / / / /_/ / / / / / /_/ / /_/ / /_/ / /_
6 | \____/___/_____/\__,_/_/ /_/\__,_/_/_/ /_/\__, /_____/\____/\__/
7 | /____/
8 |
9 | ```
10 | # UILandingBot
11 |
12 | landbot clone written in native Vanilla JavaScript. Dead simple & no dependencies, just pure joy!
13 |
14 | # Example
15 |
16 | temporarily:
17 | https://codepen.io/ThibaultJanBeyer/pen/NzPVVX?editors=0110
18 |
19 | # Key Features
20 |
21 | - No dependencies.
22 | - Full HTML Support.
23 | - Extremely easy to use.
24 | - Vanilla Javascript.
25 | - Less than 80 lines of code.
26 | - Ultra-Lightweight, less than ~1KB gzipped.
27 | - Ultra-Fast.
28 |
29 | # Browser Support
30 |
31 | It works on all the latest browsers. However, as I’m using native classes other ES6 functionality:
32 | - \>=Edge 16
33 |
34 | # Why?
35 |
36 | Well, I stumbled upon the commercial tool https://www.landbot.io/ and wanted to use it. However ~the pricing is crazily inhuman~, as time of writing, landbot.io would cost you ~30€/month which is insane~ (they have a free tier now). So I quickly searched the web and quickly found [botui](https://github.com/botui/botui) which is basically what I was searching for. I started using it, but figured out that it is overcomplicated: Firstly, regarding messages, they wrote their own subset of markup language. Wait what?… No idea. Secondly, it seems abandoned, it has currently ~20~ 60 open issues. Lastly, and that was the reason why I did not contribute to the project but wrote my own: it has a dependency to vue.js! Why in the world would you need a library for such a small tool?… Also, more precisely, requires vuejs version 2.0.5, a newer version won’t work and break the tool. As, this is some core decision, I would not want to participate in developing it further. So here it is, a dead simple landing bot alternative that consists of less than 80 lines of code. Enjoy 🧀
37 |
38 | # Installation
39 |
40 | ## Easy
41 |
42 | Just download the file and add it to your document:
43 | ```
44 |
45 | ```
46 | If you want to add the default styling add the CSS file as well:
47 | ```
48 |
49 | ```
50 |
51 | # Usage
52 |
53 | Pass the node that you want to have the bot rendered into:
54 | ```
55 | const uilb = new UILandingBot(document.body);
56 | ```
57 | That’s it! Now you can use it to create awesome stories that get visitors hooked.
58 |
59 | ## Messages
60 |
61 | ### Syntax
62 |
63 | ```
64 | uilb.message({options})
65 | ```
66 |
67 | ### Example:
68 | ```
69 | uilb.message({
70 | content: "Hey! 👋",
71 | delay: 1000
72 | })
73 | ```
74 | Will write `Hey! 👋` on behalf of the bot after 1 Second delay.
75 | A message returns a promise. So, you can chain multiple messages onto another:
76 |
77 | ```
78 | uilb.message({
79 | content: "Hey! 👋",
80 | cssClass: "no-icon",
81 | delay: 1000
82 | })
83 | .then(ok =>
84 | uilb.message({
85 | content: "How are you?",
86 | delay: 1000
87 | })
88 | );
89 | ```
90 | Will write `Hey! 👋` on behalf of the bot after 1 second, then after another second the bot will write `How are you?`.
91 | If you want to write on behalf of the user just set `human: true` like so:
92 |
93 | ```
94 | uilb.message({
95 | content: "Hey! 👋",
96 | cssClass: "no-icon",
97 | delay: 1000
98 | })
99 | .then(ok =>
100 | uilb.message({
101 | content: "How are you?",
102 | delay: 1000
103 | })
104 | )
105 | .then(ok =>
106 | uilb.message({
107 | content: "Good",
108 | human: true,
109 | delay: 2000
110 | })
111 | );
112 | ```
113 | Hurray! This already makes up a fine conversation between bot and human!
114 |
115 | ## Actions
116 |
117 | ### Syntax
118 |
119 | ```
120 | uilb.action({options})
121 | ```
122 |
123 | ### Example:
124 |
125 | Actions add interactivity for the user. For example you could, like this, let the user choose an answer:
126 | ```
127 | uilb.message({
128 | content: "Hey! 👋
How are you?",
129 | delay: 1000
130 | })
131 | .then(ok =>
132 | uilb.action({
133 | type: "button",
134 | items: [
135 | {
136 | text: "cat",
137 | value: "meow!"
138 | },
139 | {
140 | text: "awesome",
141 | value: "awesum!"
142 | }
143 | ]
144 | })
145 | )
146 | .then( answer => console.log(answer) );
147 | ```
148 |
149 | This will display two buttons. One with the text `cat` and the other one reading `awesome`. When the user clicks on `cat` the `console.log` will be `meow!`. Because it resolves the value of the clicked button.
150 |
151 |
152 | # Properties:
153 | | property | type | usage |
154 | |--- |--- |--- |
155 | |node |Node |The DOM element where the chat will be rendered to. |
156 |
157 | # Methods:
158 |
159 | ## .message
160 | | properties | type | usage |
161 | |--- |--- |--- |
162 | |content |String |the text that will be written. HTML can be used. |
163 | |cssClass |String |adds one or multiple custom CSS Class to the container and also the message |
164 | |delay |Integer |the time it waits before displaying the message. In Milliseconds. |
165 | |human |Boolean |whether or not it is the human speaking |
166 |
167 | ## .action
168 | | properties | type | usage |
169 | |--- |--- |--- |
170 | |type |String |the type of action. Currently only `"button"` is supported. |
171 | |items |Array |the items that will be rendered. |
172 | |> items.text |String |the readable text inside the button. |
173 | |> items.value |String |the value the button. Will get resolved in promise. |
174 | |> items.cssClass |String |One or multiple classes that will be added to the button. |
175 | |cssClass |String |adds one or multiple custom CSS Class to the container and also the message |
176 | |delay |Integer |the time it waits before displaying the message. In Milliseconds. |
177 | |human |Boolean |whether or not it is the human speaking |
178 |
179 |
180 | # Classes
181 | | name | trigger |
182 | |--- |--- |
183 | |.uilb |added to the initialization node on create |
184 | |.uilb-container |is a container that holds the messages, it is used to add pseudoelements as the speech bubble arror and the bot/user face. It will also start with an opacity of 0 and a translate in order to create this “fly-in” animation |
185 | |.uilb-message |is added to the container of the actual message |
186 | |.uilb-action |is added to action form |
187 | |.uilb-button |is added to the actions buttons |
188 | |.human |is added to the container and the message of the human speech bubble |
189 | |.no-icon |you can use this custom class to hide the bot/user icon |
190 | |.fill-img |you can use this custom class to have this message element covering the whole speech bubble |
191 |
192 | # Have Fun!
193 |
194 | [](http://thibaultjanbeyer.com/)
195 |
--------------------------------------------------------------------------------
/dist/UILandingBot.css:
--------------------------------------------------------------------------------
1 | .uilb {
2 | max-width: 600px;
3 | margin: auto;
4 | width: calc( 100% - 100px );
5 | }
6 |
7 | .uilb-container {
8 | margin: 10px;
9 | transition: opacity 400ms ease-in-out, transform 300ms ease-in-out;
10 | }
11 |
12 | .uilb-message {
13 | background-color: #fff;
14 | border-radius: 25px;
15 | color: black;
16 | display: inline-block;
17 | padding: 15px;
18 | position: relative;
19 | }
20 |
21 | .uilb-container:not(.no-icon)::before {
22 | content: "";
23 | position: absolute;
24 | left: -4px;
25 | bottom: -4px;
26 | height: 0;
27 | border-style: solid;
28 | border-width: 20px 20px 10px 0;
29 | border-color: transparent #fff transparent transparent;
30 | transform: rotate(-30deg);
31 | }
32 |
33 | .uilb-container:not(.no-icon)::after {
34 | align-items: flex-end;
35 | background: linear-gradient(to bottom right, #3494e6, #ec6ead);
36 | border-radius: 50%;
37 | content: "🤖";
38 | display: flex;
39 | font-size: 2rem;
40 | height: 50px;
41 | justify-content: flex-end;
42 | line-height: 0;
43 | position: absolute;
44 | right: calc(100% + 15px);
45 | bottom: -5px;
46 | width: 50px;
47 | }
48 |
49 | .uilb-container.human {
50 | display: flex;
51 | justify-content: flex-end;
52 | opacity: 0.85;
53 | }
54 |
55 | .uilb-container.human:not(.no-icon)::before {
56 | left: auto;
57 | right: 5px;
58 | }
59 |
60 | .uilb-container.human:not(.no-icon)::after {
61 | content: "👩🚀";
62 | left: 100%;
63 | top: 0;
64 | background: transparent;
65 | }
66 |
67 | .uilb-message.fill-img {
68 | padding: 0;
69 | overflow: hidden;
70 | height: 200px;
71 | }
72 |
73 | .uilb-message.fill-img * {
74 | object-fit: cover;
75 | height: 100%;
76 | width: 100%;
77 | }
78 |
--------------------------------------------------------------------------------
/dist/UILandingBot.js:
--------------------------------------------------------------------------------
1 | class UILandingBot {
2 | constructor(node) {
3 | this.domNode = node;
4 | this.domNode.classList.add("uilb");
5 | }
6 |
7 | createContainer({ human, cssClass, delay, resolve }) {
8 | var container = document.createElement("div");
9 | container.className = `uilb-container ${
10 | human ? "human" : "bot"
11 | } ${cssClass}`;
12 | container.style.opacity = 0;
13 | container.style.transform = `translateX(${human ? "" : "-"}8%)`;
14 |
15 | setTimeout(() => {
16 | this.domNode.appendChild(container);
17 | }, 50);
18 |
19 | setTimeout(() => {
20 | container.style.opacity = 1;
21 | container.style.transform = "translateX(0)";
22 | if (resolve) {
23 | console.log(resolve);
24 | resolve(container);
25 | }
26 | }, delay || 100);
27 |
28 | return container;
29 | }
30 |
31 | message({ content, cssClass, delay, human }) {
32 | return new Promise((resolve, reject) => {
33 | var container = this.createContainer({ human, cssClass, delay, resolve });
34 |
35 | var message = document.createElement("div");
36 | message.className = `uilb-message ${
37 | human ? "human" : "bot"
38 | } ${cssClass}`;
39 | message.innerHTML = content;
40 | container.appendChild(message);
41 | });
42 | }
43 |
44 | action(obj) {
45 | return this[`${obj.type}Action`](obj);
46 | }
47 |
48 | buttonAction({ items, delay, human, cssClass }) {
49 | return new Promise((resolve, reject) => {
50 | var container = this.createContainer({
51 | human,
52 | delay,
53 | cssClass: "no-icon"
54 | });
55 | container.style.position = 'absolute';
56 |
57 | var form = document.createElement("form");
58 | form.className = `uilb-action ${human ? "human" : "bot"} ${cssClass}`;
59 | form.addEventListener('submit', e => e.preventDefault);
60 |
61 | items.forEach(item => {
62 | var button = document.createElement("button");
63 | button.className = `uilb-button ${item.cssClass}`;
64 | button.type = 'button';
65 | button.innerHTML = item.text;
66 | button.addEventListener("click", () => {
67 | resolve(item.value);
68 | container.style.opacity = 0;
69 | setTimeout(() => this.domNode.removeChild(container), 300);
70 | });
71 | form.appendChild(button);
72 | });
73 |
74 | container.appendChild(form);
75 | });
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/dist/uilb.min.css:
--------------------------------------------------------------------------------
1 | .uilb{max-width:600px;margin:auto;width:calc(100% - 100px)}.uilb-container{margin:10px;transition:opacity 400ms ease-in-out,transform 300ms ease-in-out}.uilb-message{background-color:#fff;border-radius:25px;color:black;display:inline-block;padding:15px;position:relative}.uilb-container:not(.no-icon)::before{content:"";position:absolute;left:-4px;bottom:-4px;height:0;border-style:solid;border-width:20px 20px 10px 0;border-color:transparent #fff transparent transparent;transform:rotate(-30deg)}.uilb-container:not(.no-icon)::after{align-items:flex-end;background:linear-gradient(to bottom right,#3494e6,#ec6ead);border-radius:50%;content:"🤖";display:flex;font-size:2rem;height:50px;justify-content:flex-end;line-height:0;position:absolute;right:calc(100% + 15px);bottom:-5px;width:50px}.uilb-container.human{display:flex;justify-content:flex-end;opacity:.85}.uilb-container.human:not(.no-icon)::before{left:auto;right:5px}.uilb-container.human:not(.no-icon)::after{content:"👩🚀";left:100%;top:0;background:transparent}.uilb-message.fill-img{padding:0;overflow:hidden;height:200px}.uilb-message.fill-img *{object-fit:cover;height:100%;width:100%}
2 |
--------------------------------------------------------------------------------
/dist/uilb.min.js:
--------------------------------------------------------------------------------
1 | class UILandingBot{constructor(node){this.domNode=node,this.domNode.classList.add("uilb")}createContainer({human:human,cssClass:cssClass,delay:delay,resolve:resolve}){var container=document.createElement("div");return container.className=`uilb-container ${human?"human":"bot"} ${cssClass}`,container.style.opacity=0,container.style.transform=`translateX(${human?"":"-"}8%)`,setTimeout(()=>{this.domNode.appendChild(container)},50),setTimeout(()=>{container.style.opacity=1,container.style.transform="translateX(0)",resolve&&(console.log(resolve),resolve(container))},delay||100),container}message({content:content,cssClass:cssClass,delay:delay,human:human}){return new Promise((resolve,reject)=>{var container=this.createContainer({human:human,cssClass:cssClass,delay:delay,resolve:resolve}),message=document.createElement("div");message.className=`uilb-message ${human?"human":"bot"} ${cssClass}`,message.innerHTML=content,container.appendChild(message)})}action(obj){return this[`${obj.type}Action`](obj)}buttonAction({items:items,delay:delay,human:human,cssClass:cssClass}){return new Promise((resolve,reject)=>{var container=this.createContainer({human:human,delay:delay,cssClass:"no-icon"});container.style.position="absolute";var form=document.createElement("form");form.className=`uilb-action ${human?"human":"bot"} ${cssClass}`,form.addEventListener("submit",e=>e.preventDefault),items.forEach(item=>{var button=document.createElement("button");button.className=`uilb-button ${item.cssClass}`,button.type="button",button.innerHTML=item.text,button.addEventListener("click",()=>{resolve(item.value),container.style.opacity=0,setTimeout(()=>this.domNode.removeChild(container),300)}),form.appendChild(button)}),container.appendChild(form)})}}
--------------------------------------------------------------------------------
/examples/welcome/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | background: linear-gradient(to bottom right, #00ffba, #00ffde);
3 | width: 100%;
4 | height: 100%;
5 | color: #fff;
6 | }
--------------------------------------------------------------------------------
/examples/welcome/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | UI Landing Bot – Simple Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/examples/welcome/index.js:
--------------------------------------------------------------------------------
1 | var uilb = new UILandingBot(document.body);
2 |
3 | uilb
4 | .message({
5 | content: "Hey! 👋",
6 | cssClass: "no-icon",
7 | delay: 1000
8 | })
9 | .then(ok =>
10 | uilb.message({
11 | content:
12 | "I’m the friendly bot and I’m here to make you feel good!",
13 | delay: 1000
14 | })
15 | )
16 | .then(ok =>
17 | uilb.message({
18 | cssClass: "fill-img no-icon",
19 | content:
20 | '
',
21 | delay: 1000
22 | })
23 | )
24 | .then(ok =>
25 | uilb.message({
26 | content: "How do you feel?",
27 | delay: 1000
28 | })
29 | )
30 | .then(ok =>
31 | uilb.action({
32 | type: "button",
33 | items: [
34 | {
35 | text: "cat",
36 | value: "meow!"
37 | },
38 | {
39 | text: "awesome",
40 | value: "awesum!"
41 | }
42 | ]
43 | })
44 | )
45 | .then(ok =>
46 | uilb.message({
47 | human: true,
48 | content: ok
49 | })
50 | )
51 | .then(ok =>
52 | uilb.message({
53 | content: 'Feeling good now? Well, check out my documentation on Github and leave me a Star now 🌟😎🌟',
54 | delay: 1000
55 | })
56 | )
57 | .then(ok =>
58 | uilb.message({
59 | human: true,
60 | content: "I love you! 😍",
61 | delay: 2000
62 | })
63 | )
64 | .catch(error => console.log('error', error));
65 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | UI Landing Bot
8 |
9 |
10 | Welcome. Check out the github repo. Thanks
11 |
12 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui-landing-bot",
3 | "version": "0.1.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@mrmlnc/readdir-enhanced": {
8 | "version": "2.2.1",
9 | "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
10 | "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
11 | "requires": {
12 | "call-me-maybe": "^1.0.1",
13 | "glob-to-regexp": "^0.3.0"
14 | }
15 | },
16 | "@nodelib/fs.stat": {
17 | "version": "1.1.0",
18 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz",
19 | "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A=="
20 | },
21 | "aglob": {
22 | "version": "3.0.1",
23 | "resolved": "https://registry.npmjs.org/aglob/-/aglob-3.0.1.tgz",
24 | "integrity": "sha512-e4vMXbTIKRb8l7E4N7K5L7R1XF+JBR77+avKn3G6ZAyNcW0vC5ycWOESPNRrhnuvtfr9Tz0YNYa4XNvHU/GnJQ==",
25 | "requires": {
26 | "glob": "^7.1.1"
27 | }
28 | },
29 | "align-text": {
30 | "version": "0.1.4",
31 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
32 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
33 | "requires": {
34 | "kind-of": "^3.0.2",
35 | "longest": "^1.0.1",
36 | "repeat-string": "^1.5.2"
37 | }
38 | },
39 | "argx": {
40 | "version": "3.0.2",
41 | "resolved": "https://registry.npmjs.org/argx/-/argx-3.0.2.tgz",
42 | "integrity": "sha1-G6qI0WCrb1Rrbs4OB1lswrs0JKk=",
43 | "requires": {
44 | "iftype": "^3.0.0"
45 | }
46 | },
47 | "arr-diff": {
48 | "version": "4.0.0",
49 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
50 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
51 | },
52 | "arr-flatten": {
53 | "version": "1.1.0",
54 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
55 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
56 | },
57 | "arr-union": {
58 | "version": "3.1.0",
59 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
60 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
61 | },
62 | "array-find-index": {
63 | "version": "1.0.2",
64 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
65 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
66 | },
67 | "array-union": {
68 | "version": "1.0.2",
69 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
70 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
71 | "requires": {
72 | "array-uniq": "^1.0.1"
73 | }
74 | },
75 | "array-uniq": {
76 | "version": "1.0.3",
77 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
78 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
79 | },
80 | "array-unique": {
81 | "version": "0.3.2",
82 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
83 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
84 | },
85 | "arrify": {
86 | "version": "1.0.1",
87 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
88 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
89 | },
90 | "assign-symbols": {
91 | "version": "1.0.0",
92 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
93 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
94 | },
95 | "atob": {
96 | "version": "2.1.1",
97 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
98 | "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio="
99 | },
100 | "babel-runtime": {
101 | "version": "6.26.0",
102 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
103 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
104 | "requires": {
105 | "core-js": "^2.4.0",
106 | "regenerator-runtime": "^0.11.0"
107 | }
108 | },
109 | "balanced-match": {
110 | "version": "1.0.0",
111 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
112 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
113 | },
114 | "base": {
115 | "version": "0.11.2",
116 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
117 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
118 | "requires": {
119 | "cache-base": "^1.0.1",
120 | "class-utils": "^0.3.5",
121 | "component-emitter": "^1.2.1",
122 | "define-property": "^1.0.0",
123 | "isobject": "^3.0.1",
124 | "mixin-deep": "^1.2.0",
125 | "pascalcase": "^0.1.1"
126 | },
127 | "dependencies": {
128 | "define-property": {
129 | "version": "1.0.0",
130 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
131 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
132 | "requires": {
133 | "is-descriptor": "^1.0.0"
134 | }
135 | },
136 | "is-accessor-descriptor": {
137 | "version": "1.0.0",
138 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
139 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
140 | "requires": {
141 | "kind-of": "^6.0.0"
142 | }
143 | },
144 | "is-data-descriptor": {
145 | "version": "1.0.0",
146 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
147 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
148 | "requires": {
149 | "kind-of": "^6.0.0"
150 | }
151 | },
152 | "is-descriptor": {
153 | "version": "1.0.2",
154 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
155 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
156 | "requires": {
157 | "is-accessor-descriptor": "^1.0.0",
158 | "is-data-descriptor": "^1.0.0",
159 | "kind-of": "^6.0.2"
160 | }
161 | },
162 | "kind-of": {
163 | "version": "6.0.2",
164 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
165 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
166 | }
167 | }
168 | },
169 | "brace-expansion": {
170 | "version": "1.1.11",
171 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
172 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
173 | "requires": {
174 | "balanced-match": "^1.0.0",
175 | "concat-map": "0.0.1"
176 | }
177 | },
178 | "braces": {
179 | "version": "2.3.2",
180 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
181 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
182 | "requires": {
183 | "arr-flatten": "^1.1.0",
184 | "array-unique": "^0.3.2",
185 | "extend-shallow": "^2.0.1",
186 | "fill-range": "^4.0.0",
187 | "isobject": "^3.0.1",
188 | "repeat-element": "^1.1.2",
189 | "snapdragon": "^0.8.1",
190 | "snapdragon-node": "^2.0.1",
191 | "split-string": "^3.0.2",
192 | "to-regex": "^3.0.1"
193 | },
194 | "dependencies": {
195 | "extend-shallow": {
196 | "version": "2.0.1",
197 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
198 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
199 | "requires": {
200 | "is-extendable": "^0.1.0"
201 | }
202 | }
203 | }
204 | },
205 | "builtin-modules": {
206 | "version": "1.1.1",
207 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
208 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
209 | },
210 | "cache-base": {
211 | "version": "1.0.1",
212 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
213 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
214 | "requires": {
215 | "collection-visit": "^1.0.0",
216 | "component-emitter": "^1.2.1",
217 | "get-value": "^2.0.6",
218 | "has-value": "^1.0.0",
219 | "isobject": "^3.0.1",
220 | "set-value": "^2.0.0",
221 | "to-object-path": "^0.3.0",
222 | "union-value": "^1.0.0",
223 | "unset-value": "^1.0.0"
224 | }
225 | },
226 | "call-me-maybe": {
227 | "version": "1.0.1",
228 | "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
229 | "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
230 | },
231 | "camelcase": {
232 | "version": "1.2.1",
233 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
234 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
235 | },
236 | "camelcase-keys": {
237 | "version": "4.2.0",
238 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
239 | "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
240 | "requires": {
241 | "camelcase": "^4.1.0",
242 | "map-obj": "^2.0.0",
243 | "quick-lru": "^1.0.0"
244 | },
245 | "dependencies": {
246 | "camelcase": {
247 | "version": "4.1.0",
248 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
249 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
250 | }
251 | }
252 | },
253 | "center-align": {
254 | "version": "0.1.3",
255 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
256 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
257 | "requires": {
258 | "align-text": "^0.1.3",
259 | "lazy-cache": "^1.0.3"
260 | }
261 | },
262 | "class-utils": {
263 | "version": "0.3.6",
264 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
265 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
266 | "requires": {
267 | "arr-union": "^3.1.0",
268 | "define-property": "^0.2.5",
269 | "isobject": "^3.0.0",
270 | "static-extend": "^0.1.1"
271 | },
272 | "dependencies": {
273 | "define-property": {
274 | "version": "0.2.5",
275 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
276 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
277 | "requires": {
278 | "is-descriptor": "^0.1.0"
279 | }
280 | }
281 | }
282 | },
283 | "cliui": {
284 | "version": "2.1.0",
285 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
286 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
287 | "requires": {
288 | "center-align": "^0.1.1",
289 | "right-align": "^0.1.1",
290 | "wordwrap": "0.0.2"
291 | }
292 | },
293 | "collection-visit": {
294 | "version": "1.0.0",
295 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
296 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
297 | "requires": {
298 | "map-visit": "^1.0.0",
299 | "object-visit": "^1.0.0"
300 | }
301 | },
302 | "commander": {
303 | "version": "2.15.1",
304 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
305 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
306 | },
307 | "component-emitter": {
308 | "version": "1.2.1",
309 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
310 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
311 | },
312 | "concat-map": {
313 | "version": "0.0.1",
314 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
315 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
316 | },
317 | "copy-descriptor": {
318 | "version": "0.1.1",
319 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
320 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
321 | },
322 | "core-js": {
323 | "version": "2.5.7",
324 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
325 | "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
326 | },
327 | "cp-file": {
328 | "version": "6.0.0",
329 | "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.0.0.tgz",
330 | "integrity": "sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg==",
331 | "requires": {
332 | "graceful-fs": "^4.1.2",
333 | "make-dir": "^1.0.0",
334 | "nested-error-stacks": "^2.0.0",
335 | "pify": "^3.0.0",
336 | "safe-buffer": "^5.0.1"
337 | }
338 | },
339 | "cpy": {
340 | "version": "7.0.0",
341 | "resolved": "https://registry.npmjs.org/cpy/-/cpy-7.0.0.tgz",
342 | "integrity": "sha512-TrCxDbSjKZyz/jgmelcIh3meeSiiwzb561m3pYEDnzkAN4J6OijAt8cL1j3vvHG4ER/HgM4YMHKb5kyR5y5Hqw==",
343 | "requires": {
344 | "arrify": "^1.0.1",
345 | "cp-file": "^6.0.0",
346 | "globby": "^8.0.1",
347 | "nested-error-stacks": "^2.0.0"
348 | }
349 | },
350 | "cpy-cli": {
351 | "version": "2.0.0",
352 | "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-2.0.0.tgz",
353 | "integrity": "sha512-LzrtY3lBWvFZcw4lXgkEbbDUd7y78juC3C5l7gj3UyezMEZF0Be9fjCVLN1HoZAzdMDeC3KHehWpHBJvgVAPkw==",
354 | "requires": {
355 | "cpy": "^7.0.0",
356 | "meow": "^5.0.0"
357 | }
358 | },
359 | "currently-unhandled": {
360 | "version": "0.4.1",
361 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
362 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
363 | "requires": {
364 | "array-find-index": "^1.0.1"
365 | }
366 | },
367 | "debug": {
368 | "version": "2.6.9",
369 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
370 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
371 | "requires": {
372 | "ms": "2.0.0"
373 | }
374 | },
375 | "decamelize": {
376 | "version": "1.2.0",
377 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
378 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
379 | },
380 | "decamelize-keys": {
381 | "version": "1.1.0",
382 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
383 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
384 | "requires": {
385 | "decamelize": "^1.1.0",
386 | "map-obj": "^1.0.0"
387 | },
388 | "dependencies": {
389 | "map-obj": {
390 | "version": "1.0.1",
391 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
392 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
393 | }
394 | }
395 | },
396 | "decode-uri-component": {
397 | "version": "0.2.0",
398 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
399 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
400 | },
401 | "define-property": {
402 | "version": "2.0.2",
403 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
404 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
405 | "requires": {
406 | "is-descriptor": "^1.0.2",
407 | "isobject": "^3.0.1"
408 | },
409 | "dependencies": {
410 | "is-accessor-descriptor": {
411 | "version": "1.0.0",
412 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
413 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
414 | "requires": {
415 | "kind-of": "^6.0.0"
416 | }
417 | },
418 | "is-data-descriptor": {
419 | "version": "1.0.0",
420 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
421 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
422 | "requires": {
423 | "kind-of": "^6.0.0"
424 | }
425 | },
426 | "is-descriptor": {
427 | "version": "1.0.2",
428 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
429 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
430 | "requires": {
431 | "is-accessor-descriptor": "^1.0.0",
432 | "is-data-descriptor": "^1.0.0",
433 | "kind-of": "^6.0.2"
434 | }
435 | },
436 | "kind-of": {
437 | "version": "6.0.2",
438 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
439 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
440 | }
441 | }
442 | },
443 | "dir-glob": {
444 | "version": "2.0.0",
445 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
446 | "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
447 | "requires": {
448 | "arrify": "^1.0.1",
449 | "path-type": "^3.0.0"
450 | }
451 | },
452 | "error-ex": {
453 | "version": "1.3.1",
454 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
455 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
456 | "requires": {
457 | "is-arrayish": "^0.2.1"
458 | }
459 | },
460 | "expand-brackets": {
461 | "version": "2.1.4",
462 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
463 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
464 | "requires": {
465 | "debug": "^2.3.3",
466 | "define-property": "^0.2.5",
467 | "extend-shallow": "^2.0.1",
468 | "posix-character-classes": "^0.1.0",
469 | "regex-not": "^1.0.0",
470 | "snapdragon": "^0.8.1",
471 | "to-regex": "^3.0.1"
472 | },
473 | "dependencies": {
474 | "define-property": {
475 | "version": "0.2.5",
476 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
477 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
478 | "requires": {
479 | "is-descriptor": "^0.1.0"
480 | }
481 | },
482 | "extend-shallow": {
483 | "version": "2.0.1",
484 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
485 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
486 | "requires": {
487 | "is-extendable": "^0.1.0"
488 | }
489 | }
490 | }
491 | },
492 | "extend-shallow": {
493 | "version": "3.0.2",
494 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
495 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
496 | "requires": {
497 | "assign-symbols": "^1.0.0",
498 | "is-extendable": "^1.0.1"
499 | },
500 | "dependencies": {
501 | "is-extendable": {
502 | "version": "1.0.1",
503 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
504 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
505 | "requires": {
506 | "is-plain-object": "^2.0.4"
507 | }
508 | }
509 | }
510 | },
511 | "extglob": {
512 | "version": "2.0.4",
513 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
514 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
515 | "requires": {
516 | "array-unique": "^0.3.2",
517 | "define-property": "^1.0.0",
518 | "expand-brackets": "^2.1.4",
519 | "extend-shallow": "^2.0.1",
520 | "fragment-cache": "^0.2.1",
521 | "regex-not": "^1.0.0",
522 | "snapdragon": "^0.8.1",
523 | "to-regex": "^3.0.1"
524 | },
525 | "dependencies": {
526 | "define-property": {
527 | "version": "1.0.0",
528 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
529 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
530 | "requires": {
531 | "is-descriptor": "^1.0.0"
532 | }
533 | },
534 | "extend-shallow": {
535 | "version": "2.0.1",
536 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
537 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
538 | "requires": {
539 | "is-extendable": "^0.1.0"
540 | }
541 | },
542 | "is-accessor-descriptor": {
543 | "version": "1.0.0",
544 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
545 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
546 | "requires": {
547 | "kind-of": "^6.0.0"
548 | }
549 | },
550 | "is-data-descriptor": {
551 | "version": "1.0.0",
552 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
553 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
554 | "requires": {
555 | "kind-of": "^6.0.0"
556 | }
557 | },
558 | "is-descriptor": {
559 | "version": "1.0.2",
560 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
561 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
562 | "requires": {
563 | "is-accessor-descriptor": "^1.0.0",
564 | "is-data-descriptor": "^1.0.0",
565 | "kind-of": "^6.0.2"
566 | }
567 | },
568 | "kind-of": {
569 | "version": "6.0.2",
570 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
571 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
572 | }
573 | }
574 | },
575 | "fast-glob": {
576 | "version": "2.2.2",
577 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz",
578 | "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==",
579 | "requires": {
580 | "@mrmlnc/readdir-enhanced": "^2.2.1",
581 | "@nodelib/fs.stat": "^1.0.1",
582 | "glob-parent": "^3.1.0",
583 | "is-glob": "^4.0.0",
584 | "merge2": "^1.2.1",
585 | "micromatch": "^3.1.10"
586 | }
587 | },
588 | "filecopy": {
589 | "version": "4.0.1",
590 | "resolved": "https://registry.npmjs.org/filecopy/-/filecopy-4.0.1.tgz",
591 | "integrity": "sha512-R+MUG6JsmcwQ1Af69A4njeRZAuCYQ4Rr48d1Qn1oxNVh6I05opEFVQLPbgvZQg56u2wF5bJtf8yrF5mvvYxEcg==",
592 | "requires": {
593 | "aglob": "^3.0.0",
594 | "argx": "^3.0.0",
595 | "mkdirp": "^0.5.1"
596 | }
597 | },
598 | "fill-range": {
599 | "version": "4.0.0",
600 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
601 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
602 | "requires": {
603 | "extend-shallow": "^2.0.1",
604 | "is-number": "^3.0.0",
605 | "repeat-string": "^1.6.1",
606 | "to-regex-range": "^2.1.0"
607 | },
608 | "dependencies": {
609 | "extend-shallow": {
610 | "version": "2.0.1",
611 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
612 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
613 | "requires": {
614 | "is-extendable": "^0.1.0"
615 | }
616 | }
617 | }
618 | },
619 | "find-up": {
620 | "version": "2.1.0",
621 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
622 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
623 | "requires": {
624 | "locate-path": "^2.0.0"
625 | }
626 | },
627 | "for-in": {
628 | "version": "1.0.2",
629 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
630 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
631 | },
632 | "fragment-cache": {
633 | "version": "0.2.1",
634 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
635 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
636 | "requires": {
637 | "map-cache": "^0.2.2"
638 | }
639 | },
640 | "fs.realpath": {
641 | "version": "1.0.0",
642 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
643 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
644 | },
645 | "get-value": {
646 | "version": "2.0.6",
647 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
648 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
649 | },
650 | "glob": {
651 | "version": "7.1.2",
652 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
653 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
654 | "requires": {
655 | "fs.realpath": "^1.0.0",
656 | "inflight": "^1.0.4",
657 | "inherits": "2",
658 | "minimatch": "^3.0.4",
659 | "once": "^1.3.0",
660 | "path-is-absolute": "^1.0.0"
661 | }
662 | },
663 | "glob-parent": {
664 | "version": "3.1.0",
665 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
666 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
667 | "requires": {
668 | "is-glob": "^3.1.0",
669 | "path-dirname": "^1.0.0"
670 | },
671 | "dependencies": {
672 | "is-glob": {
673 | "version": "3.1.0",
674 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
675 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
676 | "requires": {
677 | "is-extglob": "^2.1.0"
678 | }
679 | }
680 | }
681 | },
682 | "glob-to-regexp": {
683 | "version": "0.3.0",
684 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
685 | "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
686 | },
687 | "globby": {
688 | "version": "8.0.1",
689 | "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
690 | "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
691 | "requires": {
692 | "array-union": "^1.0.1",
693 | "dir-glob": "^2.0.0",
694 | "fast-glob": "^2.0.2",
695 | "glob": "^7.1.2",
696 | "ignore": "^3.3.5",
697 | "pify": "^3.0.0",
698 | "slash": "^1.0.0"
699 | }
700 | },
701 | "graceful-fs": {
702 | "version": "4.1.11",
703 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
704 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
705 | },
706 | "has-value": {
707 | "version": "1.0.0",
708 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
709 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
710 | "requires": {
711 | "get-value": "^2.0.6",
712 | "has-values": "^1.0.0",
713 | "isobject": "^3.0.0"
714 | }
715 | },
716 | "has-values": {
717 | "version": "1.0.0",
718 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
719 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
720 | "requires": {
721 | "is-number": "^3.0.0",
722 | "kind-of": "^4.0.0"
723 | },
724 | "dependencies": {
725 | "kind-of": {
726 | "version": "4.0.0",
727 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
728 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
729 | "requires": {
730 | "is-buffer": "^1.1.5"
731 | }
732 | }
733 | }
734 | },
735 | "hosted-git-info": {
736 | "version": "2.6.0",
737 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
738 | "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw=="
739 | },
740 | "iftype": {
741 | "version": "3.0.2",
742 | "resolved": "https://registry.npmjs.org/iftype/-/iftype-3.0.2.tgz",
743 | "integrity": "sha1-V3EmHmT7NaaA0yDTZox1Kfklq3Q=",
744 | "requires": {
745 | "babel-runtime": "^6.11.6"
746 | }
747 | },
748 | "ignore": {
749 | "version": "3.3.8",
750 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz",
751 | "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg=="
752 | },
753 | "indent-string": {
754 | "version": "3.2.0",
755 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
756 | "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok="
757 | },
758 | "inflight": {
759 | "version": "1.0.6",
760 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
761 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
762 | "requires": {
763 | "once": "^1.3.0",
764 | "wrappy": "1"
765 | }
766 | },
767 | "inherits": {
768 | "version": "2.0.3",
769 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
770 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
771 | },
772 | "is-accessor-descriptor": {
773 | "version": "0.1.6",
774 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
775 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
776 | "requires": {
777 | "kind-of": "^3.0.2"
778 | }
779 | },
780 | "is-arrayish": {
781 | "version": "0.2.1",
782 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
783 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
784 | },
785 | "is-buffer": {
786 | "version": "1.1.6",
787 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
788 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
789 | },
790 | "is-builtin-module": {
791 | "version": "1.0.0",
792 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
793 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
794 | "requires": {
795 | "builtin-modules": "^1.0.0"
796 | }
797 | },
798 | "is-data-descriptor": {
799 | "version": "0.1.4",
800 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
801 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
802 | "requires": {
803 | "kind-of": "^3.0.2"
804 | }
805 | },
806 | "is-descriptor": {
807 | "version": "0.1.6",
808 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
809 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
810 | "requires": {
811 | "is-accessor-descriptor": "^0.1.6",
812 | "is-data-descriptor": "^0.1.4",
813 | "kind-of": "^5.0.0"
814 | },
815 | "dependencies": {
816 | "kind-of": {
817 | "version": "5.1.0",
818 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
819 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
820 | }
821 | }
822 | },
823 | "is-extendable": {
824 | "version": "0.1.1",
825 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
826 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
827 | },
828 | "is-extglob": {
829 | "version": "2.1.1",
830 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
831 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
832 | },
833 | "is-glob": {
834 | "version": "4.0.0",
835 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
836 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
837 | "requires": {
838 | "is-extglob": "^2.1.1"
839 | }
840 | },
841 | "is-number": {
842 | "version": "3.0.0",
843 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
844 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
845 | "requires": {
846 | "kind-of": "^3.0.2"
847 | }
848 | },
849 | "is-odd": {
850 | "version": "2.0.0",
851 | "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
852 | "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
853 | "requires": {
854 | "is-number": "^4.0.0"
855 | },
856 | "dependencies": {
857 | "is-number": {
858 | "version": "4.0.0",
859 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
860 | "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
861 | }
862 | }
863 | },
864 | "is-plain-obj": {
865 | "version": "1.1.0",
866 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
867 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
868 | },
869 | "is-plain-object": {
870 | "version": "2.0.4",
871 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
872 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
873 | "requires": {
874 | "isobject": "^3.0.1"
875 | }
876 | },
877 | "is-windows": {
878 | "version": "1.0.2",
879 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
880 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
881 | },
882 | "isarray": {
883 | "version": "1.0.0",
884 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
885 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
886 | },
887 | "isobject": {
888 | "version": "3.0.1",
889 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
890 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
891 | },
892 | "json-parse-better-errors": {
893 | "version": "1.0.2",
894 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
895 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
896 | },
897 | "kind-of": {
898 | "version": "3.2.2",
899 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
900 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
901 | "requires": {
902 | "is-buffer": "^1.1.5"
903 | }
904 | },
905 | "lazy-cache": {
906 | "version": "1.0.4",
907 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
908 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
909 | },
910 | "load-json-file": {
911 | "version": "4.0.0",
912 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
913 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
914 | "requires": {
915 | "graceful-fs": "^4.1.2",
916 | "parse-json": "^4.0.0",
917 | "pify": "^3.0.0",
918 | "strip-bom": "^3.0.0"
919 | }
920 | },
921 | "locate-path": {
922 | "version": "2.0.0",
923 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
924 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
925 | "requires": {
926 | "p-locate": "^2.0.0",
927 | "path-exists": "^3.0.0"
928 | }
929 | },
930 | "longest": {
931 | "version": "1.0.1",
932 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
933 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
934 | },
935 | "loud-rejection": {
936 | "version": "1.6.0",
937 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
938 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
939 | "requires": {
940 | "currently-unhandled": "^0.4.1",
941 | "signal-exit": "^3.0.0"
942 | }
943 | },
944 | "make-dir": {
945 | "version": "1.3.0",
946 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
947 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
948 | "requires": {
949 | "pify": "^3.0.0"
950 | }
951 | },
952 | "map-cache": {
953 | "version": "0.2.2",
954 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
955 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
956 | },
957 | "map-obj": {
958 | "version": "2.0.0",
959 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
960 | "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk="
961 | },
962 | "map-visit": {
963 | "version": "1.0.0",
964 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
965 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
966 | "requires": {
967 | "object-visit": "^1.0.0"
968 | }
969 | },
970 | "meow": {
971 | "version": "5.0.0",
972 | "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
973 | "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
974 | "requires": {
975 | "camelcase-keys": "^4.0.0",
976 | "decamelize-keys": "^1.0.0",
977 | "loud-rejection": "^1.0.0",
978 | "minimist-options": "^3.0.1",
979 | "normalize-package-data": "^2.3.4",
980 | "read-pkg-up": "^3.0.0",
981 | "redent": "^2.0.0",
982 | "trim-newlines": "^2.0.0",
983 | "yargs-parser": "^10.0.0"
984 | }
985 | },
986 | "merge2": {
987 | "version": "1.2.2",
988 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz",
989 | "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg=="
990 | },
991 | "micromatch": {
992 | "version": "3.1.10",
993 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
994 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
995 | "requires": {
996 | "arr-diff": "^4.0.0",
997 | "array-unique": "^0.3.2",
998 | "braces": "^2.3.1",
999 | "define-property": "^2.0.2",
1000 | "extend-shallow": "^3.0.2",
1001 | "extglob": "^2.0.4",
1002 | "fragment-cache": "^0.2.1",
1003 | "kind-of": "^6.0.2",
1004 | "nanomatch": "^1.2.9",
1005 | "object.pick": "^1.3.0",
1006 | "regex-not": "^1.0.0",
1007 | "snapdragon": "^0.8.1",
1008 | "to-regex": "^3.0.2"
1009 | },
1010 | "dependencies": {
1011 | "kind-of": {
1012 | "version": "6.0.2",
1013 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
1014 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
1015 | }
1016 | }
1017 | },
1018 | "minimatch": {
1019 | "version": "3.0.4",
1020 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1021 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1022 | "requires": {
1023 | "brace-expansion": "^1.1.7"
1024 | }
1025 | },
1026 | "minimist": {
1027 | "version": "0.0.8",
1028 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1029 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
1030 | },
1031 | "minimist-options": {
1032 | "version": "3.0.2",
1033 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
1034 | "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
1035 | "requires": {
1036 | "arrify": "^1.0.1",
1037 | "is-plain-obj": "^1.1.0"
1038 | }
1039 | },
1040 | "mixin-deep": {
1041 | "version": "1.3.1",
1042 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
1043 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
1044 | "requires": {
1045 | "for-in": "^1.0.2",
1046 | "is-extendable": "^1.0.1"
1047 | },
1048 | "dependencies": {
1049 | "is-extendable": {
1050 | "version": "1.0.1",
1051 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
1052 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
1053 | "requires": {
1054 | "is-plain-object": "^2.0.4"
1055 | }
1056 | }
1057 | }
1058 | },
1059 | "mkdirp": {
1060 | "version": "0.5.1",
1061 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1062 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1063 | "requires": {
1064 | "minimist": "0.0.8"
1065 | }
1066 | },
1067 | "ms": {
1068 | "version": "2.0.0",
1069 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1070 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1071 | },
1072 | "nanomatch": {
1073 | "version": "1.2.9",
1074 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
1075 | "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
1076 | "requires": {
1077 | "arr-diff": "^4.0.0",
1078 | "array-unique": "^0.3.2",
1079 | "define-property": "^2.0.2",
1080 | "extend-shallow": "^3.0.2",
1081 | "fragment-cache": "^0.2.1",
1082 | "is-odd": "^2.0.0",
1083 | "is-windows": "^1.0.2",
1084 | "kind-of": "^6.0.2",
1085 | "object.pick": "^1.3.0",
1086 | "regex-not": "^1.0.0",
1087 | "snapdragon": "^0.8.1",
1088 | "to-regex": "^3.0.1"
1089 | },
1090 | "dependencies": {
1091 | "kind-of": {
1092 | "version": "6.0.2",
1093 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
1094 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
1095 | }
1096 | }
1097 | },
1098 | "nested-error-stacks": {
1099 | "version": "2.0.1",
1100 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz",
1101 | "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A=="
1102 | },
1103 | "normalize-package-data": {
1104 | "version": "2.4.0",
1105 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
1106 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
1107 | "requires": {
1108 | "hosted-git-info": "^2.1.4",
1109 | "is-builtin-module": "^1.0.0",
1110 | "semver": "2 || 3 || 4 || 5",
1111 | "validate-npm-package-license": "^3.0.1"
1112 | }
1113 | },
1114 | "object-copy": {
1115 | "version": "0.1.0",
1116 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
1117 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
1118 | "requires": {
1119 | "copy-descriptor": "^0.1.0",
1120 | "define-property": "^0.2.5",
1121 | "kind-of": "^3.0.3"
1122 | },
1123 | "dependencies": {
1124 | "define-property": {
1125 | "version": "0.2.5",
1126 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
1127 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
1128 | "requires": {
1129 | "is-descriptor": "^0.1.0"
1130 | }
1131 | }
1132 | }
1133 | },
1134 | "object-visit": {
1135 | "version": "1.0.1",
1136 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
1137 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
1138 | "requires": {
1139 | "isobject": "^3.0.0"
1140 | }
1141 | },
1142 | "object.pick": {
1143 | "version": "1.3.0",
1144 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
1145 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
1146 | "requires": {
1147 | "isobject": "^3.0.1"
1148 | }
1149 | },
1150 | "once": {
1151 | "version": "1.4.0",
1152 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1153 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1154 | "requires": {
1155 | "wrappy": "1"
1156 | }
1157 | },
1158 | "p-limit": {
1159 | "version": "1.2.0",
1160 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
1161 | "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
1162 | "requires": {
1163 | "p-try": "^1.0.0"
1164 | }
1165 | },
1166 | "p-locate": {
1167 | "version": "2.0.0",
1168 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
1169 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
1170 | "requires": {
1171 | "p-limit": "^1.1.0"
1172 | }
1173 | },
1174 | "p-try": {
1175 | "version": "1.0.0",
1176 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
1177 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
1178 | },
1179 | "parse-json": {
1180 | "version": "4.0.0",
1181 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1182 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1183 | "requires": {
1184 | "error-ex": "^1.3.1",
1185 | "json-parse-better-errors": "^1.0.1"
1186 | }
1187 | },
1188 | "pascalcase": {
1189 | "version": "0.1.1",
1190 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
1191 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
1192 | },
1193 | "path-dirname": {
1194 | "version": "1.0.2",
1195 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
1196 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
1197 | },
1198 | "path-exists": {
1199 | "version": "3.0.0",
1200 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1201 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
1202 | },
1203 | "path-is-absolute": {
1204 | "version": "1.0.1",
1205 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1206 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
1207 | },
1208 | "path-type": {
1209 | "version": "3.0.0",
1210 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
1211 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
1212 | "requires": {
1213 | "pify": "^3.0.0"
1214 | }
1215 | },
1216 | "pify": {
1217 | "version": "3.0.0",
1218 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1219 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
1220 | },
1221 | "posix-character-classes": {
1222 | "version": "0.1.1",
1223 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
1224 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
1225 | },
1226 | "quick-lru": {
1227 | "version": "1.1.0",
1228 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
1229 | "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g="
1230 | },
1231 | "read-pkg": {
1232 | "version": "3.0.0",
1233 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
1234 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
1235 | "requires": {
1236 | "load-json-file": "^4.0.0",
1237 | "normalize-package-data": "^2.3.2",
1238 | "path-type": "^3.0.0"
1239 | }
1240 | },
1241 | "read-pkg-up": {
1242 | "version": "3.0.0",
1243 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
1244 | "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
1245 | "requires": {
1246 | "find-up": "^2.0.0",
1247 | "read-pkg": "^3.0.0"
1248 | }
1249 | },
1250 | "redent": {
1251 | "version": "2.0.0",
1252 | "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
1253 | "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
1254 | "requires": {
1255 | "indent-string": "^3.0.0",
1256 | "strip-indent": "^2.0.0"
1257 | }
1258 | },
1259 | "regenerator-runtime": {
1260 | "version": "0.11.1",
1261 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1262 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
1263 | },
1264 | "regex-not": {
1265 | "version": "1.0.2",
1266 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
1267 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
1268 | "requires": {
1269 | "extend-shallow": "^3.0.2",
1270 | "safe-regex": "^1.1.0"
1271 | }
1272 | },
1273 | "repeat-element": {
1274 | "version": "1.1.2",
1275 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
1276 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
1277 | },
1278 | "repeat-string": {
1279 | "version": "1.6.1",
1280 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1281 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
1282 | },
1283 | "resolve-url": {
1284 | "version": "0.2.1",
1285 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
1286 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
1287 | },
1288 | "ret": {
1289 | "version": "0.1.15",
1290 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
1291 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
1292 | },
1293 | "right-align": {
1294 | "version": "0.1.3",
1295 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
1296 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
1297 | "requires": {
1298 | "align-text": "^0.1.1"
1299 | }
1300 | },
1301 | "safe-buffer": {
1302 | "version": "5.1.2",
1303 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1304 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1305 | },
1306 | "safe-regex": {
1307 | "version": "1.1.0",
1308 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
1309 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
1310 | "requires": {
1311 | "ret": "~0.1.10"
1312 | }
1313 | },
1314 | "semver": {
1315 | "version": "5.5.0",
1316 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
1317 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
1318 | },
1319 | "set-value": {
1320 | "version": "2.0.0",
1321 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
1322 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
1323 | "requires": {
1324 | "extend-shallow": "^2.0.1",
1325 | "is-extendable": "^0.1.1",
1326 | "is-plain-object": "^2.0.3",
1327 | "split-string": "^3.0.1"
1328 | },
1329 | "dependencies": {
1330 | "extend-shallow": {
1331 | "version": "2.0.1",
1332 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1333 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1334 | "requires": {
1335 | "is-extendable": "^0.1.0"
1336 | }
1337 | }
1338 | }
1339 | },
1340 | "signal-exit": {
1341 | "version": "3.0.2",
1342 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1343 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
1344 | },
1345 | "slash": {
1346 | "version": "1.0.0",
1347 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
1348 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
1349 | },
1350 | "snapdragon": {
1351 | "version": "0.8.2",
1352 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
1353 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
1354 | "requires": {
1355 | "base": "^0.11.1",
1356 | "debug": "^2.2.0",
1357 | "define-property": "^0.2.5",
1358 | "extend-shallow": "^2.0.1",
1359 | "map-cache": "^0.2.2",
1360 | "source-map": "^0.5.6",
1361 | "source-map-resolve": "^0.5.0",
1362 | "use": "^3.1.0"
1363 | },
1364 | "dependencies": {
1365 | "define-property": {
1366 | "version": "0.2.5",
1367 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
1368 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
1369 | "requires": {
1370 | "is-descriptor": "^0.1.0"
1371 | }
1372 | },
1373 | "extend-shallow": {
1374 | "version": "2.0.1",
1375 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1376 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1377 | "requires": {
1378 | "is-extendable": "^0.1.0"
1379 | }
1380 | },
1381 | "source-map": {
1382 | "version": "0.5.7",
1383 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1384 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1385 | }
1386 | }
1387 | },
1388 | "snapdragon-node": {
1389 | "version": "2.1.1",
1390 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
1391 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
1392 | "requires": {
1393 | "define-property": "^1.0.0",
1394 | "isobject": "^3.0.0",
1395 | "snapdragon-util": "^3.0.1"
1396 | },
1397 | "dependencies": {
1398 | "define-property": {
1399 | "version": "1.0.0",
1400 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
1401 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
1402 | "requires": {
1403 | "is-descriptor": "^1.0.0"
1404 | }
1405 | },
1406 | "is-accessor-descriptor": {
1407 | "version": "1.0.0",
1408 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
1409 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
1410 | "requires": {
1411 | "kind-of": "^6.0.0"
1412 | }
1413 | },
1414 | "is-data-descriptor": {
1415 | "version": "1.0.0",
1416 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
1417 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
1418 | "requires": {
1419 | "kind-of": "^6.0.0"
1420 | }
1421 | },
1422 | "is-descriptor": {
1423 | "version": "1.0.2",
1424 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
1425 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
1426 | "requires": {
1427 | "is-accessor-descriptor": "^1.0.0",
1428 | "is-data-descriptor": "^1.0.0",
1429 | "kind-of": "^6.0.2"
1430 | }
1431 | },
1432 | "kind-of": {
1433 | "version": "6.0.2",
1434 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
1435 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
1436 | }
1437 | }
1438 | },
1439 | "snapdragon-util": {
1440 | "version": "3.0.1",
1441 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
1442 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
1443 | "requires": {
1444 | "kind-of": "^3.2.0"
1445 | }
1446 | },
1447 | "source-map": {
1448 | "version": "0.6.1",
1449 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1450 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
1451 | },
1452 | "source-map-resolve": {
1453 | "version": "0.5.2",
1454 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
1455 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
1456 | "requires": {
1457 | "atob": "^2.1.1",
1458 | "decode-uri-component": "^0.2.0",
1459 | "resolve-url": "^0.2.1",
1460 | "source-map-url": "^0.4.0",
1461 | "urix": "^0.1.0"
1462 | }
1463 | },
1464 | "source-map-url": {
1465 | "version": "0.4.0",
1466 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
1467 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
1468 | },
1469 | "spdx-correct": {
1470 | "version": "3.0.0",
1471 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
1472 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
1473 | "requires": {
1474 | "spdx-expression-parse": "^3.0.0",
1475 | "spdx-license-ids": "^3.0.0"
1476 | }
1477 | },
1478 | "spdx-exceptions": {
1479 | "version": "2.1.0",
1480 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
1481 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
1482 | },
1483 | "spdx-expression-parse": {
1484 | "version": "3.0.0",
1485 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
1486 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
1487 | "requires": {
1488 | "spdx-exceptions": "^2.1.0",
1489 | "spdx-license-ids": "^3.0.0"
1490 | }
1491 | },
1492 | "spdx-license-ids": {
1493 | "version": "3.0.0",
1494 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
1495 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
1496 | },
1497 | "split-string": {
1498 | "version": "3.1.0",
1499 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
1500 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
1501 | "requires": {
1502 | "extend-shallow": "^3.0.0"
1503 | }
1504 | },
1505 | "static-extend": {
1506 | "version": "0.1.2",
1507 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
1508 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
1509 | "requires": {
1510 | "define-property": "^0.2.5",
1511 | "object-copy": "^0.1.0"
1512 | },
1513 | "dependencies": {
1514 | "define-property": {
1515 | "version": "0.2.5",
1516 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
1517 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
1518 | "requires": {
1519 | "is-descriptor": "^0.1.0"
1520 | }
1521 | }
1522 | }
1523 | },
1524 | "strip-bom": {
1525 | "version": "3.0.0",
1526 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
1527 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
1528 | },
1529 | "strip-indent": {
1530 | "version": "2.0.0",
1531 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
1532 | "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
1533 | },
1534 | "to-object-path": {
1535 | "version": "0.3.0",
1536 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
1537 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
1538 | "requires": {
1539 | "kind-of": "^3.0.2"
1540 | }
1541 | },
1542 | "to-regex": {
1543 | "version": "3.0.2",
1544 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
1545 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
1546 | "requires": {
1547 | "define-property": "^2.0.2",
1548 | "extend-shallow": "^3.0.2",
1549 | "regex-not": "^1.0.2",
1550 | "safe-regex": "^1.1.0"
1551 | }
1552 | },
1553 | "to-regex-range": {
1554 | "version": "2.1.1",
1555 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
1556 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
1557 | "requires": {
1558 | "is-number": "^3.0.0",
1559 | "repeat-string": "^1.6.1"
1560 | }
1561 | },
1562 | "trim-newlines": {
1563 | "version": "2.0.0",
1564 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
1565 | "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA="
1566 | },
1567 | "uglify-js": {
1568 | "version": "3.3.28",
1569 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz",
1570 | "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==",
1571 | "requires": {
1572 | "commander": "~2.15.0",
1573 | "source-map": "~0.6.1"
1574 | }
1575 | },
1576 | "uglify-js-es6": {
1577 | "version": "2.8.9",
1578 | "resolved": "https://registry.npmjs.org/uglify-js-es6/-/uglify-js-es6-2.8.9.tgz",
1579 | "integrity": "sha1-ojVFbmFOKvXUsx+8koLVxEUz3ho=",
1580 | "requires": {
1581 | "source-map": "~0.5.1",
1582 | "uglify-to-browserify": "~1.0.0",
1583 | "yargs": "~3.10.0"
1584 | },
1585 | "dependencies": {
1586 | "source-map": {
1587 | "version": "0.5.7",
1588 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1589 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1590 | }
1591 | }
1592 | },
1593 | "uglify-to-browserify": {
1594 | "version": "1.0.2",
1595 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
1596 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
1597 | },
1598 | "uglifycss": {
1599 | "version": "0.0.29",
1600 | "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.29.tgz",
1601 | "integrity": "sha512-J2SQ2QLjiknNGbNdScaNZsXgmMGI0kYNrXaDlr4obnPW9ni1jljb1NeEVWAiTgZ8z+EBWP2ozfT9vpy03rjlMQ=="
1602 | },
1603 | "union-value": {
1604 | "version": "1.0.0",
1605 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
1606 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
1607 | "requires": {
1608 | "arr-union": "^3.1.0",
1609 | "get-value": "^2.0.6",
1610 | "is-extendable": "^0.1.1",
1611 | "set-value": "^0.4.3"
1612 | },
1613 | "dependencies": {
1614 | "extend-shallow": {
1615 | "version": "2.0.1",
1616 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1617 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1618 | "requires": {
1619 | "is-extendable": "^0.1.0"
1620 | }
1621 | },
1622 | "set-value": {
1623 | "version": "0.4.3",
1624 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
1625 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
1626 | "requires": {
1627 | "extend-shallow": "^2.0.1",
1628 | "is-extendable": "^0.1.1",
1629 | "is-plain-object": "^2.0.1",
1630 | "to-object-path": "^0.3.0"
1631 | }
1632 | }
1633 | }
1634 | },
1635 | "unset-value": {
1636 | "version": "1.0.0",
1637 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
1638 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
1639 | "requires": {
1640 | "has-value": "^0.3.1",
1641 | "isobject": "^3.0.0"
1642 | },
1643 | "dependencies": {
1644 | "has-value": {
1645 | "version": "0.3.1",
1646 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
1647 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
1648 | "requires": {
1649 | "get-value": "^2.0.3",
1650 | "has-values": "^0.1.4",
1651 | "isobject": "^2.0.0"
1652 | },
1653 | "dependencies": {
1654 | "isobject": {
1655 | "version": "2.1.0",
1656 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1657 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1658 | "requires": {
1659 | "isarray": "1.0.0"
1660 | }
1661 | }
1662 | }
1663 | },
1664 | "has-values": {
1665 | "version": "0.1.4",
1666 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
1667 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
1668 | }
1669 | }
1670 | },
1671 | "urix": {
1672 | "version": "0.1.0",
1673 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
1674 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
1675 | },
1676 | "use": {
1677 | "version": "3.1.0",
1678 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
1679 | "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
1680 | "requires": {
1681 | "kind-of": "^6.0.2"
1682 | },
1683 | "dependencies": {
1684 | "kind-of": {
1685 | "version": "6.0.2",
1686 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
1687 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
1688 | }
1689 | }
1690 | },
1691 | "validate-npm-package-license": {
1692 | "version": "3.0.3",
1693 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
1694 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
1695 | "requires": {
1696 | "spdx-correct": "^3.0.0",
1697 | "spdx-expression-parse": "^3.0.0"
1698 | }
1699 | },
1700 | "window-size": {
1701 | "version": "0.1.0",
1702 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
1703 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
1704 | },
1705 | "wordwrap": {
1706 | "version": "0.0.2",
1707 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
1708 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
1709 | },
1710 | "wrappy": {
1711 | "version": "1.0.2",
1712 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1713 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1714 | },
1715 | "yargs": {
1716 | "version": "3.10.0",
1717 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
1718 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
1719 | "requires": {
1720 | "camelcase": "^1.0.2",
1721 | "cliui": "^2.1.0",
1722 | "decamelize": "^1.0.0",
1723 | "window-size": "0.1.0"
1724 | }
1725 | },
1726 | "yargs-parser": {
1727 | "version": "10.0.0",
1728 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz",
1729 | "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==",
1730 | "requires": {
1731 | "camelcase": "^4.1.0"
1732 | },
1733 | "dependencies": {
1734 | "camelcase": {
1735 | "version": "4.1.0",
1736 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
1737 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
1738 | }
1739 | }
1740 | }
1741 | }
1742 | }
1743 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui-landing-bot",
3 | "version": "0.1.0",
4 | "description": "landbot clone written in native Vanilla JavaScript. Dead simple & no dependencies, just pure joy!",
5 | "main": "index.js",
6 | "directories": {
7 | "example": "examples",
8 | "dist": "dist",
9 | "src": "src"
10 | },
11 | "scripts": {
12 | "start": "npm run build",
13 | "uglify-css": "uglifycss ./src/UILandingBot.css > ./dist/uilb.min.css",
14 | "uglify-js": "uglifyjs ./src/UILandingBot.js --compress --output ./dist/uilb.min.js",
15 | "copy-files": "cpy './src/*' './dist/'",
16 | "clean": "rm ./dist/*",
17 | "build": "npm run clean && npm run uglify-css && npm run uglify-js && npm run copy-files"
18 | },
19 | "repository": {
20 | "type": "git",
21 | "url": "git+https://github.com/ThibaultJanBeyer/ui-landing-bot.git"
22 | },
23 | "author": "",
24 | "license": "ISC",
25 | "bugs": {
26 | "url": "https://github.com/ThibaultJanBeyer/ui-landing-bot/issues"
27 | },
28 | "homepage": "https://github.com/ThibaultJanBeyer/ui-landing-bot#readme",
29 | "dependencies": {
30 | "cpy-cli": "^2.0.0",
31 | "filecopy": "^4.0.1",
32 | "uglify-js": "^3.3.28",
33 | "uglify-js-es6": "^2.8.9",
34 | "uglifycss": "0.0.29"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/UILandingBot.css:
--------------------------------------------------------------------------------
1 | .uilb {
2 | max-width: 600px;
3 | margin: auto;
4 | width: calc( 100% - 100px );
5 | }
6 |
7 | .uilb-container {
8 | margin: 10px;
9 | transition: opacity 400ms ease-in-out, transform 300ms ease-in-out;
10 | }
11 |
12 | .uilb-message {
13 | background-color: #fff;
14 | border-radius: 25px;
15 | color: black;
16 | display: inline-block;
17 | padding: 15px;
18 | position: relative;
19 | }
20 |
21 | .uilb-container:not(.no-icon)::before {
22 | content: "";
23 | position: absolute;
24 | left: -4px;
25 | bottom: -4px;
26 | height: 0;
27 | border-style: solid;
28 | border-width: 20px 20px 10px 0;
29 | border-color: transparent #fff transparent transparent;
30 | transform: rotate(-30deg);
31 | }
32 |
33 | .uilb-container:not(.no-icon)::after {
34 | align-items: flex-end;
35 | background: linear-gradient(to bottom right, #3494e6, #ec6ead);
36 | border-radius: 50%;
37 | content: "🤖";
38 | display: flex;
39 | font-size: 2rem;
40 | height: 50px;
41 | justify-content: flex-end;
42 | line-height: 0;
43 | position: absolute;
44 | right: calc(100% + 15px);
45 | bottom: -5px;
46 | width: 50px;
47 | }
48 |
49 | .uilb-container.human {
50 | display: flex;
51 | justify-content: flex-end;
52 | opacity: 0.85;
53 | }
54 |
55 | .uilb-container.human:not(.no-icon)::before {
56 | left: auto;
57 | right: 5px;
58 | }
59 |
60 | .uilb-container.human:not(.no-icon)::after {
61 | content: "👩🚀";
62 | left: 100%;
63 | top: 0;
64 | background: transparent;
65 | }
66 |
67 | .uilb-message.fill-img {
68 | padding: 0;
69 | overflow: hidden;
70 | height: 200px;
71 | }
72 |
73 | .uilb-message.fill-img * {
74 | object-fit: cover;
75 | height: 100%;
76 | width: 100%;
77 | }
78 |
--------------------------------------------------------------------------------
/src/UILandingBot.js:
--------------------------------------------------------------------------------
1 | class UILandingBot {
2 | constructor(node) {
3 | this.domNode = node;
4 | this.domNode.classList.add("uilb");
5 | }
6 |
7 | createContainer({ human, cssClass, delay, resolve }) {
8 | var container = document.createElement("div");
9 | container.className = `uilb-container ${
10 | human ? "human" : "bot"
11 | } ${cssClass}`;
12 | container.style.opacity = 0;
13 | container.style.transform = `translateX(${human ? "" : "-"}8%)`;
14 |
15 | setTimeout(() => {
16 | this.domNode.appendChild(container);
17 | }, 50);
18 |
19 | setTimeout(() => {
20 | container.style.opacity = 1;
21 | container.style.transform = "translateX(0)";
22 | if (resolve) {
23 | console.log(resolve);
24 | resolve(container);
25 | }
26 | }, delay || 100);
27 |
28 | return container;
29 | }
30 |
31 | message({ content, cssClass, delay, human }) {
32 | return new Promise((resolve, reject) => {
33 | var container = this.createContainer({ human, cssClass, delay, resolve });
34 |
35 | var message = document.createElement("div");
36 | message.className = `uilb-message ${
37 | human ? "human" : "bot"
38 | } ${cssClass}`;
39 | message.innerHTML = content;
40 | container.appendChild(message);
41 | });
42 | }
43 |
44 | action(obj) {
45 | return this[`${obj.type}Action`](obj);
46 | }
47 |
48 | buttonAction({ items, delay, human, cssClass }) {
49 | return new Promise((resolve, reject) => {
50 | var container = this.createContainer({
51 | human,
52 | delay,
53 | cssClass: "no-icon"
54 | });
55 | container.style.position = 'absolute';
56 |
57 | var form = document.createElement("form");
58 | form.className = `uilb-action ${human ? "human" : "bot"} ${cssClass}`;
59 | form.addEventListener('submit', e => e.preventDefault);
60 |
61 | items.forEach(item => {
62 | var button = document.createElement("button");
63 | button.className = `uilb-button ${item.cssClass}`;
64 | button.type = 'button';
65 | button.innerHTML = item.text;
66 | button.addEventListener("click", () => {
67 | resolve(item.value);
68 | container.style.opacity = 0;
69 | setTimeout(() => this.domNode.removeChild(container), 300);
70 | });
71 | form.appendChild(button);
72 | });
73 |
74 | container.appendChild(form);
75 | });
76 | }
77 | }
78 |
--------------------------------------------------------------------------------