attractor 0.5.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,15 +12,18 @@ module Attractor
12
12
  attr_accessor :values, :file_prefix
13
13
  def_delegator :@watcher, :watch
14
14
 
15
- def initialize(file_prefix: '')
15
+ def initialize(file_prefix: '', calculators:, open_browser: true)
16
16
  @file_prefix = file_prefix
17
- @calculator = Calculator.new(file_prefix: file_prefix)
18
- @values = @calculator.calculate
17
+ @calculators = calculators
18
+ @open_browser = open_browser
19
+ @values = @calculators.first.last.calculate
19
20
  @suggester = Suggester.new(values)
20
21
 
21
22
  @watcher = Watcher.new(file_prefix, lambda do
22
23
  report
23
24
  end)
25
+ rescue NoMethodError => e
26
+ raise 'There was a problem gathering churn changes'
24
27
  end
25
28
 
26
29
  def suggestions(quantile)
@@ -10,11 +10,11 @@ module Attractor
10
10
  puts "file_path#{' ' * 53}complexity churn"
11
11
  puts '-' * 80
12
12
 
13
- puts @values.map(&:to_s)
13
+ puts @values&.map(&:to_s)
14
14
 
15
15
  puts
16
16
  puts 'Suggestions for refactorings:'
17
- @suggestions.each { |sug| puts sug.file_path }
17
+ @suggestions&.each { |sug| puts sug.file_path }
18
18
  puts
19
19
  end
20
20
  end
@@ -22,7 +22,10 @@ module Attractor
22
22
  File.open('./attractor_output/index.html', 'w') { |file| file.write(render) }
23
23
  puts "Generated HTML report at #{File.expand_path './attractor_output/index.html'}"
24
24
 
25
- Launchy.open(File.expand_path('./attractor_output/index.html'))
25
+ if @open_browser
26
+ Launchy.open(File.expand_path('./attractor_output/index.html'))
27
+ puts "Opening browser window..."
28
+ end
26
29
  end
27
30
 
28
31
  def logo
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pry'
4
3
  require 'rack/livereload'
5
4
  require 'rack'
6
5
  require 'sinatra/base'
@@ -15,6 +14,7 @@ module Attractor
15
14
 
16
15
  enable :static
17
16
  set :public_folder, File.expand_path('../../../app/assets', __dir__)
17
+ set :show_exceptions, :after_handler
18
18
 
19
19
  get '/' do
20
20
  erb File.read(File.expand_path('../../../app/views/index.html.erb', __dir__))
@@ -25,13 +25,18 @@ module Attractor
25
25
  end
26
26
 
27
27
  get '/values' do
28
- @reporter.values.to_json
28
+ type = params[:type] || 'rb'
29
+ @reporter.values(type: type).to_json
29
30
  end
30
31
 
31
32
  get '/suggestions' do
32
33
  threshold = params[:t] || 95
33
34
  @reporter.suggestions(threshold).to_json
34
35
  end
36
+
37
+ error NoMethodError do
38
+ { error: env['sinatra.error'].message }.to_json
39
+ end
35
40
  end
36
41
 
37
42
  # serving the HTML locally
@@ -42,7 +47,11 @@ module Attractor
42
47
  app = AttractorApp.new(self)
43
48
 
44
49
  puts 'Serving attractor at http://localhost:7890'
45
- Launchy.open('http://localhost:7890')
50
+
51
+ if @open_browser
52
+ Launchy.open('http://localhost:7890') if @open_browser
53
+ puts "Opening browser window..."
54
+ end
46
55
 
47
56
  Rack::Handler::WEBrick.run app, Port: 7890
48
57
  end
@@ -53,9 +62,17 @@ module Attractor
53
62
  app = AttractorApp.new(self)
54
63
 
55
64
  puts 'Serving attractor at http://localhost:7890'
56
- Launchy.open('http://localhost:7890')
65
+ if @open_browser
66
+ Launchy.open('http://localhost:7890')
67
+ puts "Opening browser window..."
68
+ end
57
69
 
58
70
  Rack::Handler::WEBrick.run Rack::LiveReload.new(app), Port: 7890
59
71
  end
72
+
73
+ def values(type: 'rb')
74
+ @values = @calculators[type].calculate
75
+ @values
76
+ end
60
77
  end
61
78
  end
@@ -1,3 +1,3 @@
1
1
  module Attractor
2
- VERSION = "0.5.1"
2
+ VERSION = "1.0.2"
3
3
  end
data/package-lock.json CHANGED
@@ -949,6 +949,54 @@
949
949
  "prop-types": "^15.5.10"
950
950
  }
951
951
  },
952
+ "@tanem/react-nprogress": {
953
+ "version": "3.0.6",
954
+ "resolved": "https://registry.npmjs.org/@tanem/react-nprogress/-/react-nprogress-3.0.6.tgz",
955
+ "integrity": "sha512-XqWCMhIg5P8hc/ThXuAcSbrg7SI8E+Ly1ijWR3ozGlHWjCU0DE4mTNCJJT6TJJz+AhB2pyfZByB80MHyR1A5lw==",
956
+ "dev": true,
957
+ "requires": {
958
+ "@babel/runtime": "^7.6.3",
959
+ "hoist-non-react-statics": "^3.3.0",
960
+ "prop-types": "^15.7.2",
961
+ "react-use": "^12.4.0"
962
+ },
963
+ "dependencies": {
964
+ "@babel/runtime": {
965
+ "version": "7.6.3",
966
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz",
967
+ "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==",
968
+ "dev": true,
969
+ "requires": {
970
+ "regenerator-runtime": "^0.13.2"
971
+ }
972
+ }
973
+ }
974
+ },
975
+ "@types/prop-types": {
976
+ "version": "15.7.3",
977
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
978
+ "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
979
+ "dev": true
980
+ },
981
+ "@types/react": {
982
+ "version": "16.9.11",
983
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.11.tgz",
984
+ "integrity": "sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==",
985
+ "dev": true,
986
+ "requires": {
987
+ "@types/prop-types": "*",
988
+ "csstype": "^2.2.0"
989
+ }
990
+ },
991
+ "@types/react-wait": {
992
+ "version": "0.3.0",
993
+ "resolved": "https://registry.npmjs.org/@types/react-wait/-/react-wait-0.3.0.tgz",
994
+ "integrity": "sha512-5jIfDcHRjqeE7QfZG7kCqOpfrPSvOM1E3/nlKuJ/NZrG/WrhLo/AFr0i72jhTWzyNRo4ex0pshBaiCHksZXH3A==",
995
+ "dev": true,
996
+ "requires": {
997
+ "@types/react": "*"
998
+ }
999
+ },
952
1000
  "@webassemblyjs/ast": {
953
1001
  "version": "1.8.5",
954
1002
  "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
@@ -1438,6 +1486,12 @@
1438
1486
  "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
1439
1487
  "dev": true
1440
1488
  },
1489
+ "bowser": {
1490
+ "version": "1.9.4",
1491
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz",
1492
+ "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==",
1493
+ "dev": true
1494
+ },
1441
1495
  "brace-expansion": {
1442
1496
  "version": "1.1.11",
1443
1497
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1879,6 +1933,15 @@
1879
1933
  "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
1880
1934
  "dev": true
1881
1935
  },
1936
+ "copy-to-clipboard": {
1937
+ "version": "3.2.0",
1938
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz",
1939
+ "integrity": "sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w==",
1940
+ "dev": true,
1941
+ "requires": {
1942
+ "toggle-selection": "^1.0.6"
1943
+ }
1944
+ },
1882
1945
  "core-js-compat": {
1883
1946
  "version": "3.2.1",
1884
1947
  "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
@@ -1972,6 +2035,40 @@
1972
2035
  "randomfill": "^1.0.3"
1973
2036
  }
1974
2037
  },
2038
+ "css-in-js-utils": {
2039
+ "version": "2.0.1",
2040
+ "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
2041
+ "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==",
2042
+ "dev": true,
2043
+ "requires": {
2044
+ "hyphenate-style-name": "^1.0.2",
2045
+ "isobject": "^3.0.1"
2046
+ }
2047
+ },
2048
+ "css-tree": {
2049
+ "version": "1.0.0-alpha.37",
2050
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
2051
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
2052
+ "dev": true,
2053
+ "requires": {
2054
+ "mdn-data": "2.0.4",
2055
+ "source-map": "^0.6.1"
2056
+ },
2057
+ "dependencies": {
2058
+ "source-map": {
2059
+ "version": "0.6.1",
2060
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2061
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2062
+ "dev": true
2063
+ }
2064
+ }
2065
+ },
2066
+ "csstype": {
2067
+ "version": "2.6.7",
2068
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz",
2069
+ "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==",
2070
+ "dev": true
2071
+ },
1975
2072
  "cyclist": {
1976
2073
  "version": "1.0.1",
1977
2074
  "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
@@ -2015,12 +2112,20 @@
2015
2112
  "d3-transition": "1",
2016
2113
  "d3-voronoi": "1",
2017
2114
  "d3-zoom": "1"
2115
+ },
2116
+ "dependencies": {
2117
+ "d3-array": {
2118
+ "version": "1.2.4",
2119
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2120
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2121
+ "dev": true
2122
+ }
2018
2123
  }
2019
2124
  },
2020
2125
  "d3-array": {
2021
- "version": "1.2.4",
2022
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2023
- "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2126
+ "version": "2.3.2",
2127
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.2.tgz",
2128
+ "integrity": "sha512-cg73UOh7D7e72FQQER4l5aXnEwlizah8TIggMn8qtEO/7APe5s6bAZhlDlVw0BRml6Qi4bd44WJ5HGuiK7fRyw==",
2024
2129
  "dev": true
2025
2130
  },
2026
2131
  "d3-axis": {
@@ -2050,6 +2155,14 @@
2050
2155
  "requires": {
2051
2156
  "d3-array": "1",
2052
2157
  "d3-path": "1"
2158
+ },
2159
+ "dependencies": {
2160
+ "d3-array": {
2161
+ "version": "1.2.4",
2162
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2163
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2164
+ "dev": true
2165
+ }
2053
2166
  }
2054
2167
  },
2055
2168
  "d3-collection": {
@@ -2071,6 +2184,14 @@
2071
2184
  "dev": true,
2072
2185
  "requires": {
2073
2186
  "d3-array": "^1.1.1"
2187
+ },
2188
+ "dependencies": {
2189
+ "d3-array": {
2190
+ "version": "1.2.4",
2191
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2192
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2193
+ "dev": true
2194
+ }
2074
2195
  }
2075
2196
  },
2076
2197
  "d3-dispatch": {
@@ -2140,6 +2261,14 @@
2140
2261
  "dev": true,
2141
2262
  "requires": {
2142
2263
  "d3-array": "1"
2264
+ },
2265
+ "dependencies": {
2266
+ "d3-array": {
2267
+ "version": "1.2.4",
2268
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2269
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2270
+ "dev": true
2271
+ }
2143
2272
  }
2144
2273
  },
2145
2274
  "d3-hierarchy": {
@@ -2199,6 +2328,14 @@
2199
2328
  "d3-interpolate": "1",
2200
2329
  "d3-time": "1",
2201
2330
  "d3-time-format": "2"
2331
+ },
2332
+ "dependencies": {
2333
+ "d3-array": {
2334
+ "version": "1.2.4",
2335
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
2336
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
2337
+ "dev": true
2338
+ }
2202
2339
  }
2203
2340
  },
2204
2341
  "d3-scale-chromatic": {
@@ -2226,6 +2363,12 @@
2226
2363
  "d3-path": "1"
2227
2364
  }
2228
2365
  },
2366
+ "d3-tile": {
2367
+ "version": "1.0.0",
2368
+ "resolved": "https://registry.npmjs.org/d3-tile/-/d3-tile-1.0.0.tgz",
2369
+ "integrity": "sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==",
2370
+ "dev": true
2371
+ },
2229
2372
  "d3-time": {
2230
2373
  "version": "1.1.0",
2231
2374
  "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
@@ -2479,6 +2622,15 @@
2479
2622
  "prr": "~1.0.1"
2480
2623
  }
2481
2624
  },
2625
+ "error-stack-parser": {
2626
+ "version": "2.0.4",
2627
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz",
2628
+ "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==",
2629
+ "dev": true,
2630
+ "requires": {
2631
+ "stackframe": "^1.1.0"
2632
+ }
2633
+ },
2482
2634
  "es-abstract": {
2483
2635
  "version": "1.14.2",
2484
2636
  "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
@@ -2923,6 +3075,12 @@
2923
3075
  "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
2924
3076
  "dev": true
2925
3077
  },
3078
+ "fastest-stable-stringify": {
3079
+ "version": "1.0.1",
3080
+ "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz",
3081
+ "integrity": "sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg=",
3082
+ "dev": true
3083
+ },
2926
3084
  "figgy-pudding": {
2927
3085
  "version": "3.5.1",
2928
3086
  "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
@@ -3103,7 +3261,8 @@
3103
3261
  "ansi-regex": {
3104
3262
  "version": "2.1.1",
3105
3263
  "bundled": true,
3106
- "dev": true
3264
+ "dev": true,
3265
+ "optional": true
3107
3266
  },
3108
3267
  "aproba": {
3109
3268
  "version": "1.2.0",
@@ -3124,12 +3283,14 @@
3124
3283
  "balanced-match": {
3125
3284
  "version": "1.0.0",
3126
3285
  "bundled": true,
3127
- "dev": true
3286
+ "dev": true,
3287
+ "optional": true
3128
3288
  },
3129
3289
  "brace-expansion": {
3130
3290
  "version": "1.1.11",
3131
3291
  "bundled": true,
3132
3292
  "dev": true,
3293
+ "optional": true,
3133
3294
  "requires": {
3134
3295
  "balanced-match": "^1.0.0",
3135
3296
  "concat-map": "0.0.1"
@@ -3144,17 +3305,20 @@
3144
3305
  "code-point-at": {
3145
3306
  "version": "1.1.0",
3146
3307
  "bundled": true,
3147
- "dev": true
3308
+ "dev": true,
3309
+ "optional": true
3148
3310
  },
3149
3311
  "concat-map": {
3150
3312
  "version": "0.0.1",
3151
3313
  "bundled": true,
3152
- "dev": true
3314
+ "dev": true,
3315
+ "optional": true
3153
3316
  },
3154
3317
  "console-control-strings": {
3155
3318
  "version": "1.1.0",
3156
3319
  "bundled": true,
3157
- "dev": true
3320
+ "dev": true,
3321
+ "optional": true
3158
3322
  },
3159
3323
  "core-util-is": {
3160
3324
  "version": "1.0.2",
@@ -3271,7 +3435,8 @@
3271
3435
  "inherits": {
3272
3436
  "version": "2.0.3",
3273
3437
  "bundled": true,
3274
- "dev": true
3438
+ "dev": true,
3439
+ "optional": true
3275
3440
  },
3276
3441
  "ini": {
3277
3442
  "version": "1.3.5",
@@ -3283,6 +3448,7 @@
3283
3448
  "version": "1.0.0",
3284
3449
  "bundled": true,
3285
3450
  "dev": true,
3451
+ "optional": true,
3286
3452
  "requires": {
3287
3453
  "number-is-nan": "^1.0.0"
3288
3454
  }
@@ -3297,6 +3463,7 @@
3297
3463
  "version": "3.0.4",
3298
3464
  "bundled": true,
3299
3465
  "dev": true,
3466
+ "optional": true,
3300
3467
  "requires": {
3301
3468
  "brace-expansion": "^1.1.7"
3302
3469
  }
@@ -3304,12 +3471,14 @@
3304
3471
  "minimist": {
3305
3472
  "version": "0.0.8",
3306
3473
  "bundled": true,
3307
- "dev": true
3474
+ "dev": true,
3475
+ "optional": true
3308
3476
  },
3309
3477
  "minipass": {
3310
3478
  "version": "2.3.5",
3311
3479
  "bundled": true,
3312
3480
  "dev": true,
3481
+ "optional": true,
3313
3482
  "requires": {
3314
3483
  "safe-buffer": "^5.1.2",
3315
3484
  "yallist": "^3.0.0"
@@ -3328,6 +3497,7 @@
3328
3497
  "version": "0.5.1",
3329
3498
  "bundled": true,
3330
3499
  "dev": true,
3500
+ "optional": true,
3331
3501
  "requires": {
3332
3502
  "minimist": "0.0.8"
3333
3503
  }
@@ -3408,7 +3578,8 @@
3408
3578
  "number-is-nan": {
3409
3579
  "version": "1.0.1",
3410
3580
  "bundled": true,
3411
- "dev": true
3581
+ "dev": true,
3582
+ "optional": true
3412
3583
  },
3413
3584
  "object-assign": {
3414
3585
  "version": "4.1.1",
@@ -3420,6 +3591,7 @@
3420
3591
  "version": "1.4.0",
3421
3592
  "bundled": true,
3422
3593
  "dev": true,
3594
+ "optional": true,
3423
3595
  "requires": {
3424
3596
  "wrappy": "1"
3425
3597
  }
@@ -3505,7 +3677,8 @@
3505
3677
  "safe-buffer": {
3506
3678
  "version": "5.1.2",
3507
3679
  "bundled": true,
3508
- "dev": true
3680
+ "dev": true,
3681
+ "optional": true
3509
3682
  },
3510
3683
  "safer-buffer": {
3511
3684
  "version": "2.1.2",
@@ -3541,6 +3714,7 @@
3541
3714
  "version": "1.0.2",
3542
3715
  "bundled": true,
3543
3716
  "dev": true,
3717
+ "optional": true,
3544
3718
  "requires": {
3545
3719
  "code-point-at": "^1.0.0",
3546
3720
  "is-fullwidth-code-point": "^1.0.0",
@@ -3560,6 +3734,7 @@
3560
3734
  "version": "3.0.1",
3561
3735
  "bundled": true,
3562
3736
  "dev": true,
3737
+ "optional": true,
3563
3738
  "requires": {
3564
3739
  "ansi-regex": "^2.0.0"
3565
3740
  }
@@ -3603,12 +3778,14 @@
3603
3778
  "wrappy": {
3604
3779
  "version": "1.0.2",
3605
3780
  "bundled": true,
3606
- "dev": true
3781
+ "dev": true,
3782
+ "optional": true
3607
3783
  },
3608
3784
  "yallist": {
3609
3785
  "version": "3.0.3",
3610
3786
  "bundled": true,
3611
- "dev": true
3787
+ "dev": true,
3788
+ "optional": true
3612
3789
  }
3613
3790
  }
3614
3791
  },
@@ -3817,6 +3994,15 @@
3817
3994
  "minimalistic-crypto-utils": "^1.0.1"
3818
3995
  }
3819
3996
  },
3997
+ "hoist-non-react-statics": {
3998
+ "version": "3.3.0",
3999
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
4000
+ "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
4001
+ "dev": true,
4002
+ "requires": {
4003
+ "react-is": "^16.7.0"
4004
+ }
4005
+ },
3820
4006
  "homedir-polyfill": {
3821
4007
  "version": "1.0.3",
3822
4008
  "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -3832,6 +4018,12 @@
3832
4018
  "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
3833
4019
  "dev": true
3834
4020
  },
4021
+ "hyphenate-style-name": {
4022
+ "version": "1.0.3",
4023
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
4024
+ "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==",
4025
+ "dev": true
4026
+ },
3835
4027
  "iconv-lite": {
3836
4028
  "version": "0.4.24",
3837
4029
  "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -3921,6 +4113,16 @@
3921
4113
  "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
3922
4114
  "dev": true
3923
4115
  },
4116
+ "inline-style-prefixer": {
4117
+ "version": "4.0.2",
4118
+ "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-4.0.2.tgz",
4119
+ "integrity": "sha512-N8nVhwfYga9MiV9jWlwfdj1UDIaZlBFu4cJSJkIr7tZX7sHpHhGR5su1qdpW+7KPL8ISTvCIkcaFi/JdBknvPg==",
4120
+ "dev": true,
4121
+ "requires": {
4122
+ "bowser": "^1.7.3",
4123
+ "css-in-js-utils": "^2.0.0"
4124
+ }
4125
+ },
3924
4126
  "inquirer": {
3925
4127
  "version": "6.5.2",
3926
4128
  "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
@@ -4394,6 +4596,12 @@
4394
4596
  "safe-buffer": "^5.1.2"
4395
4597
  }
4396
4598
  },
4599
+ "mdn-data": {
4600
+ "version": "2.0.4",
4601
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
4602
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
4603
+ "dev": true
4604
+ },
4397
4605
  "mem": {
4398
4606
  "version": "4.3.0",
4399
4607
  "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
@@ -4574,6 +4782,22 @@
4574
4782
  "dev": true,
4575
4783
  "optional": true
4576
4784
  },
4785
+ "nano-css": {
4786
+ "version": "5.2.0",
4787
+ "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.2.0.tgz",
4788
+ "integrity": "sha512-DrkBUciWkEvrWZUIyhjQkyqiF1x2bnB4FWZZ9FCYSz1Okcq5fUs6P2e46UaHYcdljaUkQbK0aS0h1I2zObCTBg==",
4789
+ "dev": true,
4790
+ "requires": {
4791
+ "css-tree": "^1.0.0-alpha.28",
4792
+ "csstype": "^2.5.5",
4793
+ "fastest-stable-stringify": "^1.0.1",
4794
+ "inline-style-prefixer": "^4.0.0",
4795
+ "rtl-css-js": "^1.9.0",
4796
+ "sourcemap-codec": "^1.4.1",
4797
+ "stacktrace-js": "^2.0.0",
4798
+ "stylis": "3.5.0"
4799
+ }
4800
+ },
4577
4801
  "nanomatch": {
4578
4802
  "version": "1.2.13",
4579
4803
  "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -5189,11 +5413,42 @@
5189
5413
  "scheduler": "^0.16.0"
5190
5414
  }
5191
5415
  },
5416
+ "react-fast-compare": {
5417
+ "version": "2.0.4",
5418
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
5419
+ "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==",
5420
+ "dev": true
5421
+ },
5192
5422
  "react-is": {
5193
5423
  "version": "16.10.0",
5194
5424
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.0.tgz",
5195
5425
  "integrity": "sha512-WRki2sBb7MTpYp7FtDEmSeGKX2vamYyq3rc9o7fKUG+/DHVyJu69NnvJsiSwwhh2Tt8XN40MQHkDBEXwyfxncQ=="
5196
5426
  },
5427
+ "react-use": {
5428
+ "version": "12.9.1",
5429
+ "resolved": "https://registry.npmjs.org/react-use/-/react-use-12.9.1.tgz",
5430
+ "integrity": "sha512-BTOifl9wUMKtCdWRe5IKQP7kIwj7XXWLRqpmG03GPK+lG86vTLYehMVeL/F+NJ/XoxwI229jJhCwKbFSot1hNQ==",
5431
+ "dev": true,
5432
+ "requires": {
5433
+ "@types/react-wait": "^0.3.0",
5434
+ "copy-to-clipboard": "^3.1.0",
5435
+ "nano-css": "^5.1.0",
5436
+ "react-fast-compare": "^2.0.4",
5437
+ "react-wait": "^0.3.0",
5438
+ "resize-observer-polyfill": "^1.5.1",
5439
+ "screenfull": "^5.0.0",
5440
+ "set-harmonic-interval": "^1.0.1",
5441
+ "throttle-debounce": "^2.0.1",
5442
+ "ts-easing": "^0.2.0",
5443
+ "tslib": "^1.10.0"
5444
+ }
5445
+ },
5446
+ "react-wait": {
5447
+ "version": "0.3.0",
5448
+ "resolved": "https://registry.npmjs.org/react-wait/-/react-wait-0.3.0.tgz",
5449
+ "integrity": "sha512-kB5x/kMKWcn0uVr9gBdNz21/oGbQwEQnF3P9p6E9yLfJ9DRcKS0fagbgYMFI0YFOoyKDj+2q6Rwax0kTYJF37g==",
5450
+ "dev": true
5451
+ },
5197
5452
  "readable-stream": {
5198
5453
  "version": "2.3.6",
5199
5454
  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
@@ -5332,6 +5587,12 @@
5332
5587
  "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
5333
5588
  "dev": true
5334
5589
  },
5590
+ "resize-observer-polyfill": {
5591
+ "version": "1.5.1",
5592
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
5593
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
5594
+ "dev": true
5595
+ },
5335
5596
  "resolve": {
5336
5597
  "version": "1.12.0",
5337
5598
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
@@ -5420,6 +5681,15 @@
5420
5681
  "inherits": "^2.0.1"
5421
5682
  }
5422
5683
  },
5684
+ "rtl-css-js": {
5685
+ "version": "1.13.1",
5686
+ "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.13.1.tgz",
5687
+ "integrity": "sha512-jgkIDj6Xi25kAEm5oYM3ZMFiOQhpLEcXi2LY/6bVr91cVz73hciHKneL5AMVPxOcks/JuizSaaNsvNRkeAWe3w==",
5688
+ "dev": true,
5689
+ "requires": {
5690
+ "@babel/runtime": "^7.1.2"
5691
+ }
5692
+ },
5423
5693
  "run-async": {
5424
5694
  "version": "2.3.0",
5425
5695
  "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
@@ -5495,6 +5765,12 @@
5495
5765
  "ajv-keywords": "^3.1.0"
5496
5766
  }
5497
5767
  },
5768
+ "screenfull": {
5769
+ "version": "5.0.0",
5770
+ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.0.tgz",
5771
+ "integrity": "sha512-yShzhaIoE9OtOhWVyBBffA6V98CDCoyHTsp8228blmqYy1Z5bddzE/4FPiJKlr8DVR4VBiiUyfPzIQPIYDkeMA==",
5772
+ "dev": true
5773
+ },
5498
5774
  "semver": {
5499
5775
  "version": "5.7.1",
5500
5776
  "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -5513,6 +5789,12 @@
5513
5789
  "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
5514
5790
  "dev": true
5515
5791
  },
5792
+ "set-harmonic-interval": {
5793
+ "version": "1.0.1",
5794
+ "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz",
5795
+ "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==",
5796
+ "dev": true
5797
+ },
5516
5798
  "set-value": {
5517
5799
  "version": "2.0.1",
5518
5800
  "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
@@ -5740,6 +6022,12 @@
5740
6022
  "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
5741
6023
  "dev": true
5742
6024
  },
6025
+ "sourcemap-codec": {
6026
+ "version": "1.4.6",
6027
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
6028
+ "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
6029
+ "dev": true
6030
+ },
5743
6031
  "split-string": {
5744
6032
  "version": "3.1.0",
5745
6033
  "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -5764,6 +6052,50 @@
5764
6052
  "figgy-pudding": "^3.5.1"
5765
6053
  }
5766
6054
  },
6055
+ "stack-generator": {
6056
+ "version": "2.0.4",
6057
+ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.4.tgz",
6058
+ "integrity": "sha512-ha1gosTNcgxwzo9uKTQ8zZ49aUp5FIUW58YHFxCqaAHtE0XqBg0chGFYA1MfmW//x1KWq3F4G7Ug7bJh4RiRtg==",
6059
+ "dev": true,
6060
+ "requires": {
6061
+ "stackframe": "^1.1.0"
6062
+ }
6063
+ },
6064
+ "stackframe": {
6065
+ "version": "1.1.0",
6066
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz",
6067
+ "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==",
6068
+ "dev": true
6069
+ },
6070
+ "stacktrace-gps": {
6071
+ "version": "3.0.3",
6072
+ "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz",
6073
+ "integrity": "sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==",
6074
+ "dev": true,
6075
+ "requires": {
6076
+ "source-map": "0.5.6",
6077
+ "stackframe": "^1.1.0"
6078
+ },
6079
+ "dependencies": {
6080
+ "source-map": {
6081
+ "version": "0.5.6",
6082
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
6083
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
6084
+ "dev": true
6085
+ }
6086
+ }
6087
+ },
6088
+ "stacktrace-js": {
6089
+ "version": "2.0.1",
6090
+ "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.1.tgz",
6091
+ "integrity": "sha512-13oDNgBSeWtdGa4/2BycNyKqe+VktCoJ8VLx4pDoJkwGGJVtiHdfMOAj3aW9xTi8oR2v34z9IcvfCvT6XNdNAw==",
6092
+ "dev": true,
6093
+ "requires": {
6094
+ "error-stack-parser": "^2.0.4",
6095
+ "stack-generator": "^2.0.4",
6096
+ "stacktrace-gps": "^3.0.3"
6097
+ }
6098
+ },
5767
6099
  "static-extend": {
5768
6100
  "version": "0.1.2",
5769
6101
  "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -5885,6 +6217,12 @@
5885
6217
  "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
5886
6218
  "dev": true
5887
6219
  },
6220
+ "stylis": {
6221
+ "version": "3.5.0",
6222
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz",
6223
+ "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==",
6224
+ "dev": true
6225
+ },
5888
6226
  "supports-color": {
5889
6227
  "version": "6.1.0",
5890
6228
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
@@ -6040,6 +6378,12 @@
6040
6378
  "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
6041
6379
  "dev": true
6042
6380
  },
6381
+ "throttle-debounce": {
6382
+ "version": "2.1.0",
6383
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.1.0.tgz",
6384
+ "integrity": "sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg==",
6385
+ "dev": true
6386
+ },
6043
6387
  "through": {
6044
6388
  "version": "2.3.8",
6045
6389
  "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -6128,6 +6472,18 @@
6128
6472
  "repeat-string": "^1.6.1"
6129
6473
  }
6130
6474
  },
6475
+ "toggle-selection": {
6476
+ "version": "1.0.6",
6477
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
6478
+ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=",
6479
+ "dev": true
6480
+ },
6481
+ "ts-easing": {
6482
+ "version": "0.2.0",
6483
+ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz",
6484
+ "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==",
6485
+ "dev": true
6486
+ },
6131
6487
  "tslib": {
6132
6488
  "version": "1.10.0",
6133
6489
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",