├── .gitignore
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── public
├── favicon.ico
├── fonts
│ ├── RobotoMono-Light.woff
│ ├── RobotoMono-Light.woff2
│ ├── RobotoMono-Regular.woff
│ ├── RobotoMono-Regular.woff2
│ ├── RobotoMono-Thin.woff
│ └── RobotoMono-Thin.woff2
├── icon-128.png
├── icon-16.png
├── icon-24.png
├── icon-32.png
├── icon-48.png
├── index.html
└── manifest.json
├── src
├── App.js
├── App.test.js
├── actions
│ └── index.js
├── components
│ ├── SwitchButton.js
│ ├── button.js
│ ├── styled-components
│ │ └── global.js
│ ├── svg
│ │ └── dots.js
│ └── topBar.js
├── index.js
├── localStorage.js
├── reducers
│ ├── index.js
│ └── initialState.js
└── registerServiceWorker.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 |
12 | # misc
13 | .DS_Store
14 | .env.local
15 | .env.development.local
16 | .env.test.local
17 | .env.production.local
18 | build.pem
19 | build.crx
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 | ## Get Tab Ipsum
6 |
7 | - **[Mac App](https://assets.edkf.com.br/TabIpsum-1.0.0.dmg.zip)**
8 | - **[Chrome extension](https://chrome.google.com/webstore/detail/tabipsum/kodnpaacnfpgeakliedgocnfoeiajghp)**
9 |
10 |
11 | ## Contribute
12 |
13 | - `yarn` (`npm run install`) Install dependencies.
14 | - `yarn start` (`npm run start`) Runs the app in development mode.
15 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 | React App
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tab-ipsum",
3 | "version": "0.1.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/node": {
8 | "version": "8.10.1",
9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.1.tgz",
10 | "integrity": "sha512-X/pIUOcgpX7xxKsmdPCMKeDBefsGH/4D/IuJ1gIHbqgWI0qEy/yMKeqaN/sT+rzV9UpAXAfd0kLOVExRmZrXIg==",
11 | "dev": true
12 | },
13 | "ajv": {
14 | "version": "5.5.2",
15 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
16 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
17 | "dev": true,
18 | "requires": {
19 | "co": "4.6.0",
20 | "fast-deep-equal": "1.1.0",
21 | "fast-json-stable-stringify": "2.0.0",
22 | "json-schema-traverse": "0.3.1"
23 | }
24 | },
25 | "ansi-regex": {
26 | "version": "2.1.1",
27 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
28 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
29 | "dev": true
30 | },
31 | "array-filter": {
32 | "version": "0.0.1",
33 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
34 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
35 | "dev": true
36 | },
37 | "array-find-index": {
38 | "version": "1.0.2",
39 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
40 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
41 | "dev": true
42 | },
43 | "array-map": {
44 | "version": "0.0.0",
45 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
46 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
47 | "dev": true
48 | },
49 | "array-reduce": {
50 | "version": "0.0.0",
51 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
52 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
53 | "dev": true
54 | },
55 | "asn1": {
56 | "version": "0.2.3",
57 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
58 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
59 | "dev": true
60 | },
61 | "assert-plus": {
62 | "version": "1.0.0",
63 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
64 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
65 | "dev": true
66 | },
67 | "asynckit": {
68 | "version": "0.4.0",
69 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
70 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
71 | "dev": true
72 | },
73 | "aws-sign2": {
74 | "version": "0.7.0",
75 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
76 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
77 | "dev": true
78 | },
79 | "aws4": {
80 | "version": "1.6.0",
81 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
82 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
83 | "dev": true
84 | },
85 | "balanced-match": {
86 | "version": "1.0.0",
87 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
88 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
89 | "dev": true
90 | },
91 | "bcrypt-pbkdf": {
92 | "version": "1.0.1",
93 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
94 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
95 | "dev": true,
96 | "optional": true,
97 | "requires": {
98 | "tweetnacl": "0.14.5"
99 | }
100 | },
101 | "boom": {
102 | "version": "4.3.1",
103 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
104 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
105 | "dev": true,
106 | "requires": {
107 | "hoek": "4.2.1"
108 | }
109 | },
110 | "brace-expansion": {
111 | "version": "1.1.11",
112 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
113 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
114 | "dev": true,
115 | "requires": {
116 | "balanced-match": "1.0.0",
117 | "concat-map": "0.0.1"
118 | }
119 | },
120 | "builtin-modules": {
121 | "version": "1.1.1",
122 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
123 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
124 | "dev": true
125 | },
126 | "camelcase": {
127 | "version": "2.1.1",
128 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
129 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
130 | "dev": true
131 | },
132 | "camelcase-keys": {
133 | "version": "2.1.0",
134 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
135 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
136 | "dev": true,
137 | "requires": {
138 | "camelcase": "2.1.1",
139 | "map-obj": "1.0.1"
140 | }
141 | },
142 | "caseless": {
143 | "version": "0.12.0",
144 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
145 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
146 | "dev": true
147 | },
148 | "co": {
149 | "version": "4.6.0",
150 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
151 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
152 | "dev": true
153 | },
154 | "code-point-at": {
155 | "version": "1.1.0",
156 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
157 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
158 | "dev": true
159 | },
160 | "combined-stream": {
161 | "version": "1.0.6",
162 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
163 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
164 | "dev": true,
165 | "requires": {
166 | "delayed-stream": "1.0.0"
167 | }
168 | },
169 | "commander": {
170 | "version": "2.9.0",
171 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
172 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
173 | "dev": true,
174 | "requires": {
175 | "graceful-readlink": "1.0.1"
176 | }
177 | },
178 | "concat-map": {
179 | "version": "0.0.1",
180 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
181 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
182 | "dev": true
183 | },
184 | "concat-stream": {
185 | "version": "1.6.0",
186 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
187 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
188 | "dev": true,
189 | "requires": {
190 | "inherits": "2.0.3",
191 | "readable-stream": "2.3.5",
192 | "typedarray": "0.0.6"
193 | },
194 | "dependencies": {
195 | "isarray": {
196 | "version": "1.0.0",
197 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
198 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
199 | "dev": true
200 | },
201 | "readable-stream": {
202 | "version": "2.3.5",
203 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
204 | "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
205 | "dev": true,
206 | "requires": {
207 | "core-util-is": "1.0.2",
208 | "inherits": "2.0.3",
209 | "isarray": "1.0.0",
210 | "process-nextick-args": "2.0.0",
211 | "safe-buffer": "5.1.1",
212 | "string_decoder": "1.0.3",
213 | "util-deprecate": "1.0.2"
214 | }
215 | },
216 | "string_decoder": {
217 | "version": "1.0.3",
218 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
219 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
220 | "dev": true,
221 | "requires": {
222 | "safe-buffer": "5.1.1"
223 | }
224 | }
225 | }
226 | },
227 | "core-util-is": {
228 | "version": "1.0.2",
229 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
230 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
231 | "dev": true
232 | },
233 | "cryptiles": {
234 | "version": "3.1.2",
235 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
236 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
237 | "dev": true,
238 | "requires": {
239 | "boom": "5.2.0"
240 | },
241 | "dependencies": {
242 | "boom": {
243 | "version": "5.2.0",
244 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
245 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
246 | "dev": true,
247 | "requires": {
248 | "hoek": "4.2.1"
249 | }
250 | }
251 | }
252 | },
253 | "currently-unhandled": {
254 | "version": "0.4.1",
255 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
256 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
257 | "dev": true,
258 | "requires": {
259 | "array-find-index": "1.0.2"
260 | }
261 | },
262 | "dashdash": {
263 | "version": "1.14.1",
264 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
265 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
266 | "dev": true,
267 | "requires": {
268 | "assert-plus": "1.0.0"
269 | }
270 | },
271 | "debug": {
272 | "version": "2.6.9",
273 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
274 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
275 | "dev": true,
276 | "requires": {
277 | "ms": "2.0.0"
278 | }
279 | },
280 | "decamelize": {
281 | "version": "1.2.0",
282 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
283 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
284 | "dev": true
285 | },
286 | "deep-extend": {
287 | "version": "0.4.2",
288 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
289 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
290 | "dev": true
291 | },
292 | "delayed-stream": {
293 | "version": "1.0.0",
294 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
295 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
296 | "dev": true
297 | },
298 | "ecc-jsbn": {
299 | "version": "0.1.1",
300 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
301 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
302 | "dev": true,
303 | "optional": true,
304 | "requires": {
305 | "jsbn": "0.1.1"
306 | }
307 | },
308 | "electron": {
309 | "version": "1.8.4",
310 | "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.4.tgz",
311 | "integrity": "sha512-2f1cx0G3riMFODXFftF5AHXy+oHfhpntZHTDN66Hxtl09gmEr42B3piNEod9MEmw72f75LX2JfeYceqq1PF8cA==",
312 | "dev": true,
313 | "requires": {
314 | "@types/node": "8.10.1",
315 | "electron-download": "3.3.0",
316 | "extract-zip": "1.6.6"
317 | }
318 | },
319 | "electron-download": {
320 | "version": "3.3.0",
321 | "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
322 | "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
323 | "dev": true,
324 | "requires": {
325 | "debug": "2.6.9",
326 | "fs-extra": "0.30.0",
327 | "home-path": "1.0.5",
328 | "minimist": "1.2.0",
329 | "nugget": "2.0.1",
330 | "path-exists": "2.1.0",
331 | "rc": "1.2.6",
332 | "semver": "5.5.0",
333 | "sumchecker": "1.3.1"
334 | }
335 | },
336 | "error-ex": {
337 | "version": "1.3.1",
338 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
339 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
340 | "dev": true,
341 | "requires": {
342 | "is-arrayish": "0.2.1"
343 | }
344 | },
345 | "es6-promise": {
346 | "version": "4.2.4",
347 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
348 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
349 | "dev": true
350 | },
351 | "eventemitter3": {
352 | "version": "1.2.0",
353 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
354 | "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
355 | "dev": true
356 | },
357 | "extend": {
358 | "version": "3.0.1",
359 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
360 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
361 | "dev": true
362 | },
363 | "extract-zip": {
364 | "version": "1.6.6",
365 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz",
366 | "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=",
367 | "dev": true,
368 | "requires": {
369 | "concat-stream": "1.6.0",
370 | "debug": "2.6.9",
371 | "mkdirp": "0.5.0",
372 | "yauzl": "2.4.1"
373 | }
374 | },
375 | "extsprintf": {
376 | "version": "1.3.0",
377 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
378 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
379 | "dev": true
380 | },
381 | "fast-deep-equal": {
382 | "version": "1.1.0",
383 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
384 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
385 | "dev": true
386 | },
387 | "fast-json-stable-stringify": {
388 | "version": "2.0.0",
389 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
390 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
391 | "dev": true
392 | },
393 | "fd-slicer": {
394 | "version": "1.0.1",
395 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
396 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
397 | "dev": true,
398 | "requires": {
399 | "pend": "1.2.0"
400 | }
401 | },
402 | "find-up": {
403 | "version": "1.1.2",
404 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
405 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
406 | "dev": true,
407 | "requires": {
408 | "path-exists": "2.1.0",
409 | "pinkie-promise": "2.0.1"
410 | }
411 | },
412 | "foreman": {
413 | "version": "2.0.0",
414 | "resolved": "https://registry.npmjs.org/foreman/-/foreman-2.0.0.tgz",
415 | "integrity": "sha1-AKzSD5274vedBGl7zKKnfuAO4DE=",
416 | "dev": true,
417 | "requires": {
418 | "commander": "2.9.0",
419 | "http-proxy": "1.11.3",
420 | "mustache": "2.3.0",
421 | "shell-quote": "1.4.3"
422 | }
423 | },
424 | "forever-agent": {
425 | "version": "0.6.1",
426 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
427 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
428 | "dev": true
429 | },
430 | "form-data": {
431 | "version": "2.3.2",
432 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
433 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
434 | "dev": true,
435 | "requires": {
436 | "asynckit": "0.4.0",
437 | "combined-stream": "1.0.6",
438 | "mime-types": "2.1.18"
439 | }
440 | },
441 | "fs-extra": {
442 | "version": "0.30.0",
443 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
444 | "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
445 | "dev": true,
446 | "requires": {
447 | "graceful-fs": "4.1.11",
448 | "jsonfile": "2.4.0",
449 | "klaw": "1.3.1",
450 | "path-is-absolute": "1.0.1",
451 | "rimraf": "2.6.2"
452 | }
453 | },
454 | "fs.realpath": {
455 | "version": "1.0.0",
456 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
457 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
458 | "dev": true
459 | },
460 | "get-stdin": {
461 | "version": "4.0.1",
462 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
463 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
464 | "dev": true
465 | },
466 | "getpass": {
467 | "version": "0.1.7",
468 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
469 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
470 | "dev": true,
471 | "requires": {
472 | "assert-plus": "1.0.0"
473 | }
474 | },
475 | "glob": {
476 | "version": "7.1.2",
477 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
478 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
479 | "dev": true,
480 | "requires": {
481 | "fs.realpath": "1.0.0",
482 | "inflight": "1.0.6",
483 | "inherits": "2.0.3",
484 | "minimatch": "3.0.4",
485 | "once": "1.4.0",
486 | "path-is-absolute": "1.0.1"
487 | }
488 | },
489 | "graceful-fs": {
490 | "version": "4.1.11",
491 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
492 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
493 | "dev": true
494 | },
495 | "graceful-readlink": {
496 | "version": "1.0.1",
497 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
498 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
499 | "dev": true
500 | },
501 | "har-schema": {
502 | "version": "2.0.0",
503 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
504 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
505 | "dev": true
506 | },
507 | "har-validator": {
508 | "version": "5.0.3",
509 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
510 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
511 | "dev": true,
512 | "requires": {
513 | "ajv": "5.5.2",
514 | "har-schema": "2.0.0"
515 | }
516 | },
517 | "hawk": {
518 | "version": "6.0.2",
519 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
520 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
521 | "dev": true,
522 | "requires": {
523 | "boom": "4.3.1",
524 | "cryptiles": "3.1.2",
525 | "hoek": "4.2.1",
526 | "sntp": "2.1.0"
527 | }
528 | },
529 | "hoek": {
530 | "version": "4.2.1",
531 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
532 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
533 | "dev": true
534 | },
535 | "home-path": {
536 | "version": "1.0.5",
537 | "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz",
538 | "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=",
539 | "dev": true
540 | },
541 | "hosted-git-info": {
542 | "version": "2.6.0",
543 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
544 | "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
545 | "dev": true
546 | },
547 | "http-proxy": {
548 | "version": "1.11.3",
549 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.11.3.tgz",
550 | "integrity": "sha1-GRXciIdR4qa/PCq/yxgI+obHI1M=",
551 | "dev": true,
552 | "requires": {
553 | "eventemitter3": "1.2.0",
554 | "requires-port": "0.0.1"
555 | }
556 | },
557 | "http-signature": {
558 | "version": "1.2.0",
559 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
560 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
561 | "dev": true,
562 | "requires": {
563 | "assert-plus": "1.0.0",
564 | "jsprim": "1.4.1",
565 | "sshpk": "1.14.1"
566 | }
567 | },
568 | "indent-string": {
569 | "version": "2.1.0",
570 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
571 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
572 | "dev": true,
573 | "requires": {
574 | "repeating": "2.0.1"
575 | }
576 | },
577 | "inflight": {
578 | "version": "1.0.6",
579 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
580 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
581 | "dev": true,
582 | "requires": {
583 | "once": "1.4.0",
584 | "wrappy": "1.0.2"
585 | }
586 | },
587 | "inherits": {
588 | "version": "2.0.3",
589 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
590 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
591 | "dev": true
592 | },
593 | "ini": {
594 | "version": "1.3.5",
595 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
596 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
597 | "dev": true
598 | },
599 | "is-arrayish": {
600 | "version": "0.2.1",
601 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
602 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
603 | "dev": true
604 | },
605 | "is-builtin-module": {
606 | "version": "1.0.0",
607 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
608 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
609 | "dev": true,
610 | "requires": {
611 | "builtin-modules": "1.1.1"
612 | }
613 | },
614 | "is-finite": {
615 | "version": "1.0.2",
616 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
617 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
618 | "dev": true,
619 | "requires": {
620 | "number-is-nan": "1.0.1"
621 | }
622 | },
623 | "is-fullwidth-code-point": {
624 | "version": "1.0.0",
625 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
626 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
627 | "dev": true,
628 | "requires": {
629 | "number-is-nan": "1.0.1"
630 | }
631 | },
632 | "is-typedarray": {
633 | "version": "1.0.0",
634 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
635 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
636 | "dev": true
637 | },
638 | "is-utf8": {
639 | "version": "0.2.1",
640 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
641 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
642 | "dev": true
643 | },
644 | "isarray": {
645 | "version": "0.0.1",
646 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
647 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
648 | "dev": true
649 | },
650 | "isstream": {
651 | "version": "0.1.2",
652 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
653 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
654 | "dev": true
655 | },
656 | "jsbn": {
657 | "version": "0.1.1",
658 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
659 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
660 | "dev": true,
661 | "optional": true
662 | },
663 | "json-schema": {
664 | "version": "0.2.3",
665 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
666 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
667 | "dev": true
668 | },
669 | "json-schema-traverse": {
670 | "version": "0.3.1",
671 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
672 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
673 | "dev": true
674 | },
675 | "json-stringify-safe": {
676 | "version": "5.0.1",
677 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
678 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
679 | "dev": true
680 | },
681 | "jsonfile": {
682 | "version": "2.4.0",
683 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
684 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
685 | "dev": true,
686 | "requires": {
687 | "graceful-fs": "4.1.11"
688 | }
689 | },
690 | "jsonify": {
691 | "version": "0.0.0",
692 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
693 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
694 | "dev": true
695 | },
696 | "jsprim": {
697 | "version": "1.4.1",
698 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
699 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
700 | "dev": true,
701 | "requires": {
702 | "assert-plus": "1.0.0",
703 | "extsprintf": "1.3.0",
704 | "json-schema": "0.2.3",
705 | "verror": "1.10.0"
706 | }
707 | },
708 | "klaw": {
709 | "version": "1.3.1",
710 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
711 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
712 | "dev": true,
713 | "requires": {
714 | "graceful-fs": "4.1.11"
715 | }
716 | },
717 | "load-json-file": {
718 | "version": "1.1.0",
719 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
720 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
721 | "dev": true,
722 | "requires": {
723 | "graceful-fs": "4.1.11",
724 | "parse-json": "2.2.0",
725 | "pify": "2.3.0",
726 | "pinkie-promise": "2.0.1",
727 | "strip-bom": "2.0.0"
728 | }
729 | },
730 | "loud-rejection": {
731 | "version": "1.6.0",
732 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
733 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
734 | "dev": true,
735 | "requires": {
736 | "currently-unhandled": "0.4.1",
737 | "signal-exit": "3.0.2"
738 | }
739 | },
740 | "map-obj": {
741 | "version": "1.0.1",
742 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
743 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
744 | "dev": true
745 | },
746 | "meow": {
747 | "version": "3.7.0",
748 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
749 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
750 | "dev": true,
751 | "requires": {
752 | "camelcase-keys": "2.1.0",
753 | "decamelize": "1.2.0",
754 | "loud-rejection": "1.6.0",
755 | "map-obj": "1.0.1",
756 | "minimist": "1.2.0",
757 | "normalize-package-data": "2.4.0",
758 | "object-assign": "4.1.1",
759 | "read-pkg-up": "1.0.1",
760 | "redent": "1.0.0",
761 | "trim-newlines": "1.0.0"
762 | }
763 | },
764 | "mime-db": {
765 | "version": "1.33.0",
766 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
767 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
768 | "dev": true
769 | },
770 | "mime-types": {
771 | "version": "2.1.18",
772 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
773 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
774 | "dev": true,
775 | "requires": {
776 | "mime-db": "1.33.0"
777 | }
778 | },
779 | "minimatch": {
780 | "version": "3.0.4",
781 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
782 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
783 | "dev": true,
784 | "requires": {
785 | "brace-expansion": "1.1.11"
786 | }
787 | },
788 | "minimist": {
789 | "version": "1.2.0",
790 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
791 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
792 | "dev": true
793 | },
794 | "mkdirp": {
795 | "version": "0.5.0",
796 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
797 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
798 | "dev": true,
799 | "requires": {
800 | "minimist": "0.0.8"
801 | },
802 | "dependencies": {
803 | "minimist": {
804 | "version": "0.0.8",
805 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
806 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
807 | "dev": true
808 | }
809 | }
810 | },
811 | "ms": {
812 | "version": "2.0.0",
813 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
814 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
815 | "dev": true
816 | },
817 | "mustache": {
818 | "version": "2.3.0",
819 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz",
820 | "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA=",
821 | "dev": true
822 | },
823 | "normalize-package-data": {
824 | "version": "2.4.0",
825 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
826 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
827 | "dev": true,
828 | "requires": {
829 | "hosted-git-info": "2.6.0",
830 | "is-builtin-module": "1.0.0",
831 | "semver": "5.5.0",
832 | "validate-npm-package-license": "3.0.3"
833 | }
834 | },
835 | "nugget": {
836 | "version": "2.0.1",
837 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
838 | "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
839 | "dev": true,
840 | "requires": {
841 | "debug": "2.6.9",
842 | "minimist": "1.2.0",
843 | "pretty-bytes": "1.0.4",
844 | "progress-stream": "1.2.0",
845 | "request": "2.85.0",
846 | "single-line-log": "1.1.2",
847 | "throttleit": "0.0.2"
848 | }
849 | },
850 | "number-is-nan": {
851 | "version": "1.0.1",
852 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
853 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
854 | "dev": true
855 | },
856 | "oauth-sign": {
857 | "version": "0.8.2",
858 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
859 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
860 | "dev": true
861 | },
862 | "object-assign": {
863 | "version": "4.1.1",
864 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
865 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
866 | "dev": true
867 | },
868 | "object-keys": {
869 | "version": "0.4.0",
870 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
871 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
872 | "dev": true
873 | },
874 | "once": {
875 | "version": "1.4.0",
876 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
877 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
878 | "dev": true,
879 | "requires": {
880 | "wrappy": "1.0.2"
881 | }
882 | },
883 | "parse-json": {
884 | "version": "2.2.0",
885 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
886 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
887 | "dev": true,
888 | "requires": {
889 | "error-ex": "1.3.1"
890 | }
891 | },
892 | "path-exists": {
893 | "version": "2.1.0",
894 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
895 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
896 | "dev": true,
897 | "requires": {
898 | "pinkie-promise": "2.0.1"
899 | }
900 | },
901 | "path-is-absolute": {
902 | "version": "1.0.1",
903 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
904 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
905 | "dev": true
906 | },
907 | "path-type": {
908 | "version": "1.1.0",
909 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
910 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
911 | "dev": true,
912 | "requires": {
913 | "graceful-fs": "4.1.11",
914 | "pify": "2.3.0",
915 | "pinkie-promise": "2.0.1"
916 | }
917 | },
918 | "pend": {
919 | "version": "1.2.0",
920 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
921 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
922 | "dev": true
923 | },
924 | "performance-now": {
925 | "version": "2.1.0",
926 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
927 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
928 | "dev": true
929 | },
930 | "pify": {
931 | "version": "2.3.0",
932 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
933 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
934 | "dev": true
935 | },
936 | "pinkie": {
937 | "version": "2.0.4",
938 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
939 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
940 | "dev": true
941 | },
942 | "pinkie-promise": {
943 | "version": "2.0.1",
944 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
945 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
946 | "dev": true,
947 | "requires": {
948 | "pinkie": "2.0.4"
949 | }
950 | },
951 | "pretty-bytes": {
952 | "version": "1.0.4",
953 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
954 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
955 | "dev": true,
956 | "requires": {
957 | "get-stdin": "4.0.1",
958 | "meow": "3.7.0"
959 | }
960 | },
961 | "process-nextick-args": {
962 | "version": "2.0.0",
963 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
964 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
965 | "dev": true
966 | },
967 | "progress-stream": {
968 | "version": "1.2.0",
969 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
970 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
971 | "dev": true,
972 | "requires": {
973 | "speedometer": "0.1.4",
974 | "through2": "0.2.3"
975 | }
976 | },
977 | "punycode": {
978 | "version": "1.4.1",
979 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
980 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
981 | "dev": true
982 | },
983 | "qs": {
984 | "version": "6.5.1",
985 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
986 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
987 | "dev": true
988 | },
989 | "rc": {
990 | "version": "1.2.6",
991 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz",
992 | "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=",
993 | "dev": true,
994 | "requires": {
995 | "deep-extend": "0.4.2",
996 | "ini": "1.3.5",
997 | "minimist": "1.2.0",
998 | "strip-json-comments": "2.0.1"
999 | }
1000 | },
1001 | "read-pkg": {
1002 | "version": "1.1.0",
1003 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
1004 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
1005 | "dev": true,
1006 | "requires": {
1007 | "load-json-file": "1.1.0",
1008 | "normalize-package-data": "2.4.0",
1009 | "path-type": "1.1.0"
1010 | }
1011 | },
1012 | "read-pkg-up": {
1013 | "version": "1.0.1",
1014 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
1015 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
1016 | "dev": true,
1017 | "requires": {
1018 | "find-up": "1.1.2",
1019 | "read-pkg": "1.1.0"
1020 | }
1021 | },
1022 | "readable-stream": {
1023 | "version": "1.1.14",
1024 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
1025 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
1026 | "dev": true,
1027 | "requires": {
1028 | "core-util-is": "1.0.2",
1029 | "inherits": "2.0.3",
1030 | "isarray": "0.0.1",
1031 | "string_decoder": "0.10.31"
1032 | }
1033 | },
1034 | "redent": {
1035 | "version": "1.0.0",
1036 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
1037 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
1038 | "dev": true,
1039 | "requires": {
1040 | "indent-string": "2.1.0",
1041 | "strip-indent": "1.0.1"
1042 | }
1043 | },
1044 | "repeating": {
1045 | "version": "2.0.1",
1046 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1047 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1048 | "dev": true,
1049 | "requires": {
1050 | "is-finite": "1.0.2"
1051 | }
1052 | },
1053 | "request": {
1054 | "version": "2.85.0",
1055 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
1056 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
1057 | "dev": true,
1058 | "requires": {
1059 | "aws-sign2": "0.7.0",
1060 | "aws4": "1.6.0",
1061 | "caseless": "0.12.0",
1062 | "combined-stream": "1.0.6",
1063 | "extend": "3.0.1",
1064 | "forever-agent": "0.6.1",
1065 | "form-data": "2.3.2",
1066 | "har-validator": "5.0.3",
1067 | "hawk": "6.0.2",
1068 | "http-signature": "1.2.0",
1069 | "is-typedarray": "1.0.0",
1070 | "isstream": "0.1.2",
1071 | "json-stringify-safe": "5.0.1",
1072 | "mime-types": "2.1.18",
1073 | "oauth-sign": "0.8.2",
1074 | "performance-now": "2.1.0",
1075 | "qs": "6.5.1",
1076 | "safe-buffer": "5.1.1",
1077 | "stringstream": "0.0.5",
1078 | "tough-cookie": "2.3.4",
1079 | "tunnel-agent": "0.6.0",
1080 | "uuid": "3.2.1"
1081 | }
1082 | },
1083 | "requires-port": {
1084 | "version": "0.0.1",
1085 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-0.0.1.tgz",
1086 | "integrity": "sha1-S0QUQR2d98hVmV3YmajHiilRwW0=",
1087 | "dev": true
1088 | },
1089 | "rimraf": {
1090 | "version": "2.6.2",
1091 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
1092 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
1093 | "dev": true,
1094 | "requires": {
1095 | "glob": "7.1.2"
1096 | }
1097 | },
1098 | "safe-buffer": {
1099 | "version": "5.1.1",
1100 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
1101 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
1102 | "dev": true
1103 | },
1104 | "semver": {
1105 | "version": "5.5.0",
1106 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
1107 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
1108 | "dev": true
1109 | },
1110 | "shell-quote": {
1111 | "version": "1.4.3",
1112 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.4.3.tgz",
1113 | "integrity": "sha1-lSxE4LHtkBPvU5WBecxkPod3Rms=",
1114 | "dev": true,
1115 | "requires": {
1116 | "array-filter": "0.0.1",
1117 | "array-map": "0.0.0",
1118 | "array-reduce": "0.0.0",
1119 | "jsonify": "0.0.0"
1120 | }
1121 | },
1122 | "signal-exit": {
1123 | "version": "3.0.2",
1124 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1125 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1126 | "dev": true
1127 | },
1128 | "single-line-log": {
1129 | "version": "1.1.2",
1130 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
1131 | "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
1132 | "dev": true,
1133 | "requires": {
1134 | "string-width": "1.0.2"
1135 | }
1136 | },
1137 | "sntp": {
1138 | "version": "2.1.0",
1139 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
1140 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
1141 | "dev": true,
1142 | "requires": {
1143 | "hoek": "4.2.1"
1144 | }
1145 | },
1146 | "spdx-correct": {
1147 | "version": "3.0.0",
1148 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
1149 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
1150 | "dev": true,
1151 | "requires": {
1152 | "spdx-expression-parse": "3.0.0",
1153 | "spdx-license-ids": "3.0.0"
1154 | }
1155 | },
1156 | "spdx-exceptions": {
1157 | "version": "2.1.0",
1158 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
1159 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
1160 | "dev": true
1161 | },
1162 | "spdx-expression-parse": {
1163 | "version": "3.0.0",
1164 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
1165 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
1166 | "dev": true,
1167 | "requires": {
1168 | "spdx-exceptions": "2.1.0",
1169 | "spdx-license-ids": "3.0.0"
1170 | }
1171 | },
1172 | "spdx-license-ids": {
1173 | "version": "3.0.0",
1174 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
1175 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
1176 | "dev": true
1177 | },
1178 | "speedometer": {
1179 | "version": "0.1.4",
1180 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
1181 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
1182 | "dev": true
1183 | },
1184 | "sshpk": {
1185 | "version": "1.14.1",
1186 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
1187 | "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
1188 | "dev": true,
1189 | "requires": {
1190 | "asn1": "0.2.3",
1191 | "assert-plus": "1.0.0",
1192 | "bcrypt-pbkdf": "1.0.1",
1193 | "dashdash": "1.14.1",
1194 | "ecc-jsbn": "0.1.1",
1195 | "getpass": "0.1.7",
1196 | "jsbn": "0.1.1",
1197 | "tweetnacl": "0.14.5"
1198 | }
1199 | },
1200 | "string-width": {
1201 | "version": "1.0.2",
1202 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1203 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1204 | "dev": true,
1205 | "requires": {
1206 | "code-point-at": "1.1.0",
1207 | "is-fullwidth-code-point": "1.0.0",
1208 | "strip-ansi": "3.0.1"
1209 | }
1210 | },
1211 | "string_decoder": {
1212 | "version": "0.10.31",
1213 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1214 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
1215 | "dev": true
1216 | },
1217 | "stringstream": {
1218 | "version": "0.0.5",
1219 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
1220 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
1221 | "dev": true
1222 | },
1223 | "strip-ansi": {
1224 | "version": "3.0.1",
1225 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1226 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1227 | "dev": true,
1228 | "requires": {
1229 | "ansi-regex": "2.1.1"
1230 | }
1231 | },
1232 | "strip-bom": {
1233 | "version": "2.0.0",
1234 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
1235 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
1236 | "dev": true,
1237 | "requires": {
1238 | "is-utf8": "0.2.1"
1239 | }
1240 | },
1241 | "strip-indent": {
1242 | "version": "1.0.1",
1243 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
1244 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
1245 | "dev": true,
1246 | "requires": {
1247 | "get-stdin": "4.0.1"
1248 | }
1249 | },
1250 | "strip-json-comments": {
1251 | "version": "2.0.1",
1252 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1253 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1254 | "dev": true
1255 | },
1256 | "sumchecker": {
1257 | "version": "1.3.1",
1258 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
1259 | "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
1260 | "dev": true,
1261 | "requires": {
1262 | "debug": "2.6.9",
1263 | "es6-promise": "4.2.4"
1264 | }
1265 | },
1266 | "throttleit": {
1267 | "version": "0.0.2",
1268 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
1269 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
1270 | "dev": true
1271 | },
1272 | "through2": {
1273 | "version": "0.2.3",
1274 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
1275 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
1276 | "dev": true,
1277 | "requires": {
1278 | "readable-stream": "1.1.14",
1279 | "xtend": "2.1.2"
1280 | }
1281 | },
1282 | "tough-cookie": {
1283 | "version": "2.3.4",
1284 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
1285 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
1286 | "dev": true,
1287 | "requires": {
1288 | "punycode": "1.4.1"
1289 | }
1290 | },
1291 | "trim-newlines": {
1292 | "version": "1.0.0",
1293 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
1294 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
1295 | "dev": true
1296 | },
1297 | "tunnel-agent": {
1298 | "version": "0.6.0",
1299 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1300 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1301 | "dev": true,
1302 | "requires": {
1303 | "safe-buffer": "5.1.1"
1304 | }
1305 | },
1306 | "tweetnacl": {
1307 | "version": "0.14.5",
1308 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1309 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
1310 | "dev": true,
1311 | "optional": true
1312 | },
1313 | "typedarray": {
1314 | "version": "0.0.6",
1315 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1316 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
1317 | "dev": true
1318 | },
1319 | "util-deprecate": {
1320 | "version": "1.0.2",
1321 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1322 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1323 | "dev": true
1324 | },
1325 | "uuid": {
1326 | "version": "3.2.1",
1327 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
1328 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
1329 | "dev": true
1330 | },
1331 | "validate-npm-package-license": {
1332 | "version": "3.0.3",
1333 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
1334 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
1335 | "dev": true,
1336 | "requires": {
1337 | "spdx-correct": "3.0.0",
1338 | "spdx-expression-parse": "3.0.0"
1339 | }
1340 | },
1341 | "verror": {
1342 | "version": "1.10.0",
1343 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1344 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1345 | "dev": true,
1346 | "requires": {
1347 | "assert-plus": "1.0.0",
1348 | "core-util-is": "1.0.2",
1349 | "extsprintf": "1.3.0"
1350 | }
1351 | },
1352 | "wrappy": {
1353 | "version": "1.0.2",
1354 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1355 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1356 | "dev": true
1357 | },
1358 | "xtend": {
1359 | "version": "2.1.2",
1360 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
1361 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
1362 | "dev": true,
1363 | "requires": {
1364 | "object-keys": "0.4.0"
1365 | }
1366 | },
1367 | "yauzl": {
1368 | "version": "2.4.1",
1369 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
1370 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
1371 | "dev": true,
1372 | "requires": {
1373 | "fd-slicer": "1.0.1"
1374 | }
1375 | }
1376 | }
1377 | }
1378 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tab-ipsum-app",
3 | "version": "1.0.0",
4 | "private": true,
5 | "dependencies": {
6 | "lorem-ipsum": "^1.0.4",
7 | "react": "^16.2.0",
8 | "react-clipboard.js": "^1.1.3",
9 | "react-dom": "^16.2.0",
10 | "react-input-range": "^1.3.0",
11 | "react-redux": "^5.0.7",
12 | "react-scripts": "1.1.1",
13 | "redux": "^4.0.0",
14 | "styled-components": "^3.2.3"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test --env=jsdom",
20 | "eject": "react-scripts eject"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Light.woff
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Light.woff2
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Regular.woff
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Regular.woff2
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Thin.woff
--------------------------------------------------------------------------------
/public/fonts/RobotoMono-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/fonts/RobotoMono-Thin.woff2
--------------------------------------------------------------------------------
/public/icon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/icon-128.png
--------------------------------------------------------------------------------
/public/icon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/icon-16.png
--------------------------------------------------------------------------------
/public/icon-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/icon-24.png
--------------------------------------------------------------------------------
/public/icon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/icon-32.png
--------------------------------------------------------------------------------
/public/icon-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/edkf/tabipsum/428cbfb905713c05b46f8fdf1369543ee7ffa349/public/icon-48.png
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
22 | React App
23 |
24 |
25 |
28 |
29 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "TabIpsum",
4 | "short_name": "TabIpsum - Lorem Ipsum Generator",
5 | "version": "1.0",
6 | "description": "Just a Lorem Ipsum generator.",
7 | "author": "Edgard Kozlowski (http://edkf.com.br)",
8 | "commands": {
9 | "_execute_browser_action": {}
10 | },
11 | "icons": {
12 | "16": "icon-16.png",
13 | "32": "icon-32.png",
14 | "48": "icon-48.png",
15 | "128": "icon-128.png"
16 | },
17 | "browser_action": {
18 | "default_icon": {
19 | "16": "icon-16.png",
20 | "24": "icon-24.png",
21 | "32": "icon-32.png"
22 | },
23 | "default_popup": "index.html"
24 | },
25 | "permissions": [
26 | "tabs"
27 | ]
28 | }
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | // Dependencies
2 | import React, { Component } from 'react'
3 | import styled from 'styled-components'
4 | import InputRange from 'react-input-range'
5 | import { connect } from 'react-redux'
6 |
7 | // Actions
8 | import { changeUnit, updateValue, switchUIMode } from './actions'
9 |
10 | // Components
11 | import TopBar from './components/topBar'
12 | import Button from './components/button'
13 |
14 | // Styled Components
15 | const Container = styled.div`
16 | display: flex;
17 | flex-direction: column;
18 | justify-content: space-between;
19 | width: 320px;
20 | height: 420px;
21 | background: ${props => props.darkmode ? '#2E2F30' : '#FFFFFF'}
22 |
23 | input::-webkit-outer-spin-button,
24 | input::-webkit-inner-spin-button {
25 | /* display: none; <- Crashes Chrome on hover */
26 | -webkit-appearance: none;
27 | margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
28 | }
29 |
30 | input[type='number'] {
31 | -moz-appearance:textfield;
32 | }
33 |
34 | input::-webkit-outer-spin-button,
35 | input::-webkit-inner-spin-button {
36 | -webkit-appearance: none;
37 | }
38 |
39 | .input-range__slider {
40 | -webkit-appearance: none;
41 | -moz-appearance: none;
42 | appearance: none;
43 | background: ${props => props.darkmode ? '#DADADA' : '#000000'};
44 | border: 1px solid ${props => props.darkmode ? '#DADADA' : '#000000'};
45 | border-radius: 100%;
46 | cursor: pointer;
47 | display: block;
48 | height: 1rem;
49 | margin-left: -0.5rem;
50 | margin-top: -0.65rem;
51 | outline: none;
52 | position: absolute;
53 | top: 50%;
54 | -webkit-transition: box-shadow 0.3s ease-out, -webkit-transform 0.3s ease-out;
55 | transition: box-shadow 0.3s ease-out, -webkit-transform 0.3s ease-out;
56 | transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;
57 | transition: transform 0.3s ease-out, box-shadow 0.3s ease-out, -webkit-transform 0.3s ease-out;
58 | width: 1rem; }
59 | .input-range__slider:active {
60 | -webkit-transform: scale(1.3);
61 | transform: scale(1.3); }
62 | .input-range__slider:focus {
63 | box-shadow: 0 0 0 5px rgba(63, 81, 181, 0.2); }
64 | .input-range--disabled .input-range__slider {
65 | background: #cccccc;
66 | border: 1px solid #cccccc;
67 | box-shadow: none;
68 | -webkit-transform: none;
69 | transform: none; }
70 |
71 | .input-range__slider-container {
72 | -webkit-transition: left 0.3s ease-out;
73 | transition: left 0.3s ease-out; }
74 |
75 | .input-range__label {
76 | color: #aaaaaa;
77 | font-family: "Helvetica Neue", san-serif;
78 | font-size: 0.8rem;
79 | -webkit-transform: translateZ(0);
80 | transform: translateZ(0);
81 | white-space: nowrap; }
82 |
83 | .input-range__label--min,
84 | .input-range__label--max {
85 | bottom: -1.4rem;
86 | position: absolute; }
87 |
88 | .input-range__label--min {
89 | left: 0; }
90 |
91 | .input-range__label--max {
92 | right: 0; }
93 |
94 | .input-range__label--value {
95 | position: absolute;
96 | top: -1.8rem; }
97 |
98 | .input-range__label-container {
99 | display: none;
100 | left: -50%;
101 | position: relative; }
102 | .input-range__label--max .input-range__label-container {
103 | left: 50%; }
104 |
105 | .input-range__track {
106 | background: ${props => props.darkmode ? '#222222' : '#EEEEEE'};
107 | border-radius: 0.3rem;
108 | cursor: pointer;
109 | display: block;
110 | height: 0.3rem;
111 | position: relative;
112 | -webkit-transition: left 0.3s ease-out, width 0.3s ease-out;
113 | transition: left 0.3s ease-out, width 0.3s ease-out; }
114 | .input-range--disabled .input-range__track {
115 | background: #EEEEEE; }
116 |
117 | .input-range__track--background {
118 | left: 0;
119 | margin-top: -0.15rem;
120 | position: absolute;
121 | right: 0;
122 | top: 50%; }
123 |
124 | .input-range__track--active {
125 | background: ${ props => props.darkmode ? '#DDDDDD' : '#333333'}; }
126 |
127 | .input-range {
128 | height: 1rem;
129 | position: relative;
130 | width: 100%; }
131 | `
132 |
133 | const MainContainer = styled.div`
134 | width: 80%;
135 | margin: 0 auto;
136 | text-align: center;
137 | `
138 |
139 | const Number = styled.input`
140 | width: 100%;
141 | font-family: 'Roboto Mono';
142 | font-size: 120px;
143 | font-weight: 100;
144 | text-align: center;
145 | letter-spacing: -10px;
146 | border: none;
147 | background-color: transparent;
148 | color: ${props => props.darkmode ? '#DADADA' : '#000000'}
149 |
150 | &:focus {
151 | outline: none;
152 | }
153 | `
154 |
155 | const List = styled.ul`
156 | padding: 0;
157 | margin: 15px 0;
158 | display: flex;
159 | justify-content: center;
160 | `
161 |
162 | const Item = styled.li`
163 | font-family: 'Roboto Mono';
164 | font-weight: 300;
165 | text-transform: capitalize;
166 | letter-spacing: -0.5px;
167 | cursor: pointer;
168 | padding: 10px;
169 | font-size: 14px;
170 | list-style: none;
171 | padding: 10px 5px;
172 | transition: .3s ease;
173 | color: ${props => props.darkmode ? (props.isSelected ? '#DADADA' : '#666666' ) : (props.isSelected ? '#000000' : '#AAAAAA')};
174 |
175 | &.is-selected {
176 | color: #000;
177 | font-weight: bold;
178 | }
179 | `
180 |
181 | const units = [ 'words', 'sentences', 'paragraphs']
182 |
183 | class App extends Component {
184 |
185 | constructor (props) {
186 | super(props)
187 | this.switchTheme = this.switchTheme.bind(this)
188 | }
189 |
190 | componentDidMount () {
191 | console.log(localStorage.getItem("darkmode"))
192 | }
193 |
194 | switchTheme () {
195 | localStorage.setItem('darkmode', !localStorage.getItem("darkmode"))
196 | }
197 |
198 | render() {
199 |
200 | const { content, value, contentType, darkmode } = this.props.state
201 | const { changeUnit, updateValue, updateFromNumber, switchUIMode } = this.props
202 |
203 | return (
204 |
205 |
206 |
207 |
215 |
216 | {units.map((unit, index) => (
217 | - {unit}
218 | ))}
219 |
220 |
227 |
228 |
229 |
230 | )
231 | }
232 | }
233 |
234 | const mapDispatchToProps = dispatch => {
235 | return {
236 | changeUnit: (event) => { dispatch(changeUnit(event.target.innerHTML))},
237 | updateValue: (value) => { dispatch(updateValue(value)) },
238 | updateFromNumber: (event) => { dispatch(updateValue(event.target.value === '' ? false : event.target.value)) },
239 | switchUIMode: (darkmode) => { dispatch(switchUIMode(darkmode)) }
240 | }
241 | }
242 |
243 | const mapStateToProps = state => {
244 | return {
245 | state
246 | }
247 | }
248 |
249 | export default connect(
250 | mapStateToProps,
251 | mapDispatchToProps
252 | )(App)
253 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(, div);
8 | ReactDOM.unmountComponentAtNode(div);
9 | });
10 |
--------------------------------------------------------------------------------
/src/actions/index.js:
--------------------------------------------------------------------------------
1 | export const CHANGE_UNIT = 'CHANGE_UNIT'
2 | export const UPDATE_VALUE = 'UPDATE_VALUE'
3 | export const SWITCH_UI_MODE = 'SWITCH_UI_MODE'
4 |
5 | export function changeUnit(contentType) {
6 | return {
7 | type: CHANGE_UNIT,
8 | contentType
9 | }
10 | }
11 |
12 | export function updateValue(value) {
13 | return {
14 | type: UPDATE_VALUE,
15 | value
16 | }
17 | }
18 |
19 | export function switchUIMode(darkmode) {
20 | return {
21 | type: SWITCH_UI_MODE,
22 | darkmode: !darkmode
23 | }
24 | }
--------------------------------------------------------------------------------
/src/components/SwitchButton.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styled from 'styled-components'
3 |
4 | const Container = styled.div`
5 | width: 35px;
6 | height: 20px;
7 | background: ${props => props.darkmode ? '#2FAADC' : '#EEEEEE'};
8 | border-radius: 20px;
9 | position: relative;
10 | `
11 |
12 | const Circle = styled.div`
13 | width: 16px;
14 | height: 16px;
15 | border-radius: 15px;
16 | background: #FFFFFF;
17 | position: relative;
18 | top: 2px;
19 | transition: transform .3s ease;
20 | transform: ${props => props.darkmode ? 'translateX(16px)' : 'translateX(3px)'};
21 | `
22 |
23 | const SwitchButton = (props) => {
24 | return (
25 |
26 |
27 |
28 | )
29 | }
30 |
31 | export default SwitchButton
--------------------------------------------------------------------------------
/src/components/button.js:
--------------------------------------------------------------------------------
1 | // Dependencies
2 | import React, { Component } from 'react'
3 | import styled from 'styled-components'
4 | import Clipboard from 'react-clipboard.js'
5 |
6 | // Styled Components
7 | const ClipboardButton = styled(Clipboard)`
8 | font-family: 'Roboto Mono';
9 | color: #FFF;
10 | background-color: ${props => props.buttonColor};
11 | font-size: 24px;
12 | line-height: 1;
13 | font-weight: bold;
14 | padding: 30px;
15 | width: 100%;
16 | border: none;
17 | cursor: pointer;
18 | transition: .2s ease;
19 | `
20 |
21 | class Button extends Component {
22 |
23 | constructor (props) {
24 | super(props)
25 | this.onSuccess = this.onSuccess.bind(this)
26 | this.getRandomEmoji = this.getRandomEmoji.bind(this)
27 |
28 | this.state = {
29 | buttonLabel: 'Copy',
30 | buttonColor: '#000000'
31 | }
32 | }
33 |
34 | getRandomEmoji () {
35 | const emojis = ['😎', '🚀', '😀', '🙃', '😛', '🙏', '👍', '🙅', '💩', '📝']
36 | return emojis[Math.floor(Math.random()*emojis.length)]
37 | }
38 |
39 | onSuccess() {
40 | this.setState ({
41 | buttonLabel: 'Copied ' + this.getRandomEmoji(),
42 | buttonColor: '#00C492'
43 | })
44 | setTimeout(() => {
45 | this.setState({
46 | buttonLabel: 'Copy',
47 | buttonColor: '#000000'
48 | })
49 | }, 1000)
50 | }
51 |
52 | render () {
53 |
54 | const { buttonColor, buttonLabel } = this.state
55 | const { content } = this.props
56 |
57 | return (
58 |
63 | {buttonLabel}
64 |
65 | )
66 | }
67 | }
68 |
69 | export default Button
--------------------------------------------------------------------------------
/src/components/styled-components/global.js:
--------------------------------------------------------------------------------
1 | import { injectGlobal } from 'styled-components'
2 |
3 | injectGlobal`
4 | *, *:before, *:after {
5 | -webkit-box-sizing: border-box;
6 | -moz-box-sizing: border-box;
7 | box-sizing: border-box;
8 | }
9 |
10 | @font-face {
11 | font-family: 'Roboto Mono';
12 | src: url('/fonts/RobotoMono-Thin.woff2') format('woff2'),
13 | url('/fonts/RobotoMono-Thin.woff') format('woff');
14 | font-weight: 100;
15 | font-style: normal;
16 | }
17 |
18 | @font-face {
19 | font-family: 'Roboto Mono';
20 | src: url('/fonts/RobotoMono-Light.woff2') format('woff2'),
21 | url('/fonts/RobotoMono-Light.woff') format('woff');
22 | font-weight: 300;
23 | font-style: normal;
24 | }
25 |
26 | @font-face {
27 | font-family: 'Roboto Mono';
28 | src: url('/fonts/RobotoMono-Regular.woff2') format('woff2'),
29 | url('/fonts/RobotoMono-Regular.woff') format('woff');
30 | font-weight: normal;
31 | font-style: normal;
32 | }
33 |
34 | body {
35 | font-family: 'Roboto Mono' ,-apple-system, system-ui, 'Helvetica Neue', Arial, sans-serif;
36 | -webkit-text-rendering: optimizeLegibility;
37 | -moz-text-rendering: optimizeLegibility;
38 | -ms-text-rendering: optimizeLegibility;
39 | -o-text-rendering: optimizeLegibility;
40 | text-rendering: optimizeLegibility;
41 | -webkit-font-smoothing: antialiased;
42 | -moz-osx-font-smoothing: grayscale;
43 | margin: 0;
44 | padding: 0;
45 | }
46 | `
--------------------------------------------------------------------------------
/src/components/svg/dots.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styled from 'styled-components'
3 |
4 | const Container = styled.div`
5 | padding: 5px;
6 |
7 | path {
8 | transition: .3s ease;
9 | }
10 |
11 | &:hover {
12 | path {
13 | fill: ${props => props.darkmode ? '#666666' : '#AAAAAA'};
14 | }
15 | }
16 | `
17 |
18 | const Dots = (props) => (
19 |
20 |
26 |
27 | )
28 |
29 | export default Dots
--------------------------------------------------------------------------------
/src/components/topBar.js:
--------------------------------------------------------------------------------
1 | // Dependencies
2 | import React, { Component } from 'react'
3 | import styled from 'styled-components'
4 |
5 | // Assets
6 | import Dots from './svg/dots.js'
7 |
8 | import SwitchButton from './SwitchButton'
9 |
10 | const Container = styled.div`
11 | width: 100%;
12 | padding: 15px 25px;
13 | display: flex;
14 | justify-content: flex-end;
15 | `
16 |
17 | const List = styled.ul`
18 | list-style: none;
19 | margin: 0;
20 | padding: 10px;
21 | background-color: ${props => props.darkmode ? '#353638' : '#FFFFFF'};
22 | position: absolute;
23 | box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.1);
24 | pointer-events: none;
25 | right: 0;
26 | opacity: 0;
27 | `
28 |
29 | const Dropdown = styled.div`
30 | position: relative;
31 | &:hover {
32 | ${List} {
33 | pointer-events: auto;
34 | opacity: 1;
35 | }
36 | }
37 | `
38 |
39 | const Item = styled.li`
40 | width: 180px;
41 | font-family: 'Roboto Mono';
42 | cursor: pointer;
43 | padding: 10px 5px;
44 | font-size: 10px;
45 | list-style: none;
46 | color: #AAA;
47 | display: flex;
48 | justify-content: space-between;
49 | align-items: center;
50 |
51 | a {
52 | color: #AAA;
53 | text-decoration: none;
54 | }
55 | `
56 |
57 | const items = [
58 | {
59 | text: 'Visit Website',
60 | url: 'http://tabipsum.com'
61 | }
62 | ]
63 |
64 | class TopBar extends Component {
65 | render () {
66 |
67 | const { darkmode } = this.props
68 |
69 | return (
70 |
71 |
72 |
73 |
74 | -
77 | Enable dark mode
78 |
79 |
80 | {
81 | items.map((item) => (
82 | -
83 | {item.text}
84 |
85 | ))
86 | }
87 |
88 |
89 |
90 | )
91 | }
92 | }
93 |
94 | export default TopBar
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | // Dependencies
2 | import React from 'react'
3 | import ReactDOM from 'react-dom'
4 | import { Provider } from 'react-redux'
5 | import { createStore } from 'redux'
6 | import { loadState, saveState } from './localStorage.js'
7 |
8 |
9 | // Components
10 | import App from './App'
11 |
12 | // Reducers
13 | import reducers from './reducers'
14 |
15 | // Styled-components
16 | import './components/styled-components/global.js'
17 |
18 | const persistedState = loadState()
19 |
20 | // Create Redux Store
21 | const store = createStore(
22 | reducers,
23 | persistedState,
24 | window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() // Enable Redux Devtools
25 | )
26 |
27 | store.subscribe(() => {
28 | saveState(store.getState())
29 | })
30 |
31 | ReactDOM.render(
32 |
33 |
34 |
35 | , document.getElementById('root'));
36 |
--------------------------------------------------------------------------------
/src/localStorage.js:
--------------------------------------------------------------------------------
1 | export const loadState = () => {
2 | try {
3 | const serializedState = localStorage.getItem('state');
4 | if (serializedState == null) {
5 | return undefined
6 | }
7 | return JSON.parse(serializedState)
8 | } catch (err) {
9 | return undefined
10 | }
11 | }
12 |
13 | export const saveState = (state) => {
14 | try {
15 | const serializedState = JSON.stringify(state)
16 | localStorage.setItem('state', serializedState)
17 | } catch (err) {
18 |
19 | }
20 | }
--------------------------------------------------------------------------------
/src/reducers/index.js:
--------------------------------------------------------------------------------
1 | // Dependencies
2 | import loremIpsum from 'lorem-ipsum'
3 |
4 | // Action types
5 | import {CHANGE_UNIT, UPDATE_VALUE, SWITCH_UI_MODE } from '../actions'
6 |
7 | // Initial state
8 | import { initialState } from './initialState'
9 |
10 | export default function reducers(state = initialState, action) {
11 | switch (action.type) {
12 | case CHANGE_UNIT:
13 | const { contentType } = action
14 | return {
15 | ...state,
16 | contentType,
17 | content: loremIpsum({
18 | ...state.content,
19 | units: contentType,
20 | count: state.value
21 | }),
22 | }
23 | case UPDATE_VALUE:
24 | const { value } = action
25 | return {
26 | ...state,
27 | value: value,
28 | content: loremIpsum({
29 | ...state.content,
30 | units: state.contentType,
31 | count: value
32 | })
33 | }
34 | case SWITCH_UI_MODE:
35 | return {
36 | ...state,
37 | darkmode: !state.darkmode
38 | }
39 | default:
40 | return state
41 | }
42 | }
--------------------------------------------------------------------------------
/src/reducers/initialState.js:
--------------------------------------------------------------------------------
1 | import loremIpsum from 'lorem-ipsum'
2 |
3 | const content = loremIpsum({
4 | count: 11,
5 | units: 'words',
6 | sentenceLowerBound: 5,
7 | sentenceUpperBound: 15,
8 | paragraphLowerBound: 3,
9 | paragraphUpperBound: 7,
10 | format: 'plain',
11 | })
12 |
13 | export const initialState = {
14 | value: 14,
15 | darkmode: false,
16 | contentType: 'words',
17 | content
18 | }
--------------------------------------------------------------------------------
/src/registerServiceWorker.js:
--------------------------------------------------------------------------------
1 | // In production, we register a service worker to serve assets from local cache.
2 |
3 | // This lets the app load faster on subsequent visits in production, and gives
4 | // it offline capabilities. However, it also means that developers (and users)
5 | // will only see deployed updates on the "N+1" visit to a page, since previously
6 | // cached resources are updated in the background.
7 |
8 | // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9 | // This link also includes instructions on opting out of this behavior.
10 |
11 | const isLocalhost = Boolean(
12 | window.location.hostname === 'localhost' ||
13 | // [::1] is the IPv6 localhost address.
14 | window.location.hostname === '[::1]' ||
15 | // 127.0.0.1/8 is considered localhost for IPv4.
16 | window.location.hostname.match(
17 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
18 | )
19 | );
20 |
21 | export default function register() {
22 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
23 | // The URL constructor is available in all browsers that support SW.
24 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location);
25 | if (publicUrl.origin !== window.location.origin) {
26 | // Our service worker won't work if PUBLIC_URL is on a different origin
27 | // from what our page is served on. This might happen if a CDN is used to
28 | // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
29 | return;
30 | }
31 |
32 | window.addEventListener('load', () => {
33 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
34 |
35 | if (isLocalhost) {
36 | // This is running on localhost. Lets check if a service worker still exists or not.
37 | checkValidServiceWorker(swUrl);
38 |
39 | // Add some additional logging to localhost, pointing developers to the
40 | // service worker/PWA documentation.
41 | navigator.serviceWorker.ready.then(() => {
42 | console.log(
43 | 'This web app is being served cache-first by a service ' +
44 | 'worker. To learn more, visit https://goo.gl/SC7cgQ'
45 | );
46 | });
47 | } else {
48 | // Is not local host. Just register service worker
49 | registerValidSW(swUrl);
50 | }
51 | });
52 | }
53 | }
54 |
55 | function registerValidSW(swUrl) {
56 | navigator.serviceWorker
57 | .register(swUrl)
58 | .then(registration => {
59 | registration.onupdatefound = () => {
60 | const installingWorker = registration.installing;
61 | installingWorker.onstatechange = () => {
62 | if (installingWorker.state === 'installed') {
63 | if (navigator.serviceWorker.controller) {
64 | // At this point, the old content will have been purged and
65 | // the fresh content will have been added to the cache.
66 | // It's the perfect time to display a "New content is
67 | // available; please refresh." message in your web app.
68 | console.log('New content is available; please refresh.');
69 | } else {
70 | // At this point, everything has been precached.
71 | // It's the perfect time to display a
72 | // "Content is cached for offline use." message.
73 | console.log('Content is cached for offline use.');
74 | }
75 | }
76 | };
77 | };
78 | })
79 | .catch(error => {
80 | console.error('Error during service worker registration:', error);
81 | });
82 | }
83 |
84 | function checkValidServiceWorker(swUrl) {
85 | // Check if the service worker can be found. If it can't reload the page.
86 | fetch(swUrl)
87 | .then(response => {
88 | // Ensure service worker exists, and that we really are getting a JS file.
89 | if (
90 | response.status === 404 ||
91 | response.headers.get('content-type').indexOf('javascript') === -1
92 | ) {
93 | // No service worker found. Probably a different app. Reload the page.
94 | navigator.serviceWorker.ready.then(registration => {
95 | registration.unregister().then(() => {
96 | window.location.reload();
97 | });
98 | });
99 | } else {
100 | // Service worker found. Proceed as normal.
101 | registerValidSW(swUrl);
102 | }
103 | })
104 | .catch(() => {
105 | console.log(
106 | 'No internet connection found. App is running in offline mode.'
107 | );
108 | });
109 | }
110 |
111 | export function unregister() {
112 | if ('serviceWorker' in navigator) {
113 | navigator.serviceWorker.ready.then(registration => {
114 | registration.unregister();
115 | });
116 | }
117 | }
118 |
--------------------------------------------------------------------------------