diff --git a/.gitignore b/.gitignore
index bcd1508..e2f8d96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,4 +36,6 @@ yarn-debug.log*
.yarn-integrity
# ignore environment variables
-.env
\ No newline at end of file
+.env
+vendor/
+result
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index f251db2..d08985f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,6 +3,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '3.0.2'
+gem 'nokogiri', '>= 1.12.5'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.4', '>= 6.1.4.1'
# Use postgresql as the database for Active Record
@@ -18,7 +19,7 @@ gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
-# gem 'redis', '~> 4.0'
+gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'
@@ -55,4 +56,5 @@ end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'devise'
-gem 'dotenv-rails', groups: [:development, :test]
\ No newline at end of file
+gem 'dotenv-rails', groups: [:development, :test]
+gem 'react-rails'
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index dc74fe8..33a4bfc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -62,9 +62,13 @@ GEM
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
+ babel-source (5.8.35)
+ babel-transpiler (0.7.0)
+ babel-source (>= 4.0, < 6)
+ execjs (~> 2.0)
bcrypt (3.1.16)
bindex (0.8.1)
- bootsnap (1.9.1)
+ bootsnap (1.9.3)
msgpack (~> 1.0)
builder (3.2.4)
byebug (11.1.3)
@@ -79,6 +83,7 @@ GEM
xpath (~> 3.2)
childprocess (4.1.0)
concurrent-ruby (1.1.9)
+ connection_pool (2.2.5)
crass (1.0.6)
devise (4.8.0)
bcrypt (~> 3.0)
@@ -91,17 +96,18 @@ GEM
dotenv (= 2.7.6)
railties (>= 3.2)
erubi (1.10.0)
+ execjs (2.8.1)
ffi (1.15.4)
- globalid (0.5.2)
+ globalid (1.0.0)
activesupport (>= 5.0)
i18n (1.8.11)
concurrent-ruby (~> 1.0)
- jbuilder (2.11.2)
+ jbuilder (2.11.3)
activesupport (>= 5.0.0)
listen (3.7.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
- loofah (2.12.0)
+ loofah (2.13.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@@ -110,10 +116,12 @@ GEM
matrix (0.4.2)
method_source (1.0.0)
mini_mime (1.1.2)
+ mini_portile2 (2.6.1)
minitest (5.14.4)
msgpack (1.4.2)
nio4r (2.5.8)
- nokogiri (1.12.5-x86_64-linux)
+ nokogiri (1.12.5)
+ mini_portile2 (~> 2.6.1)
racc (~> 1.4)
orm_adapter (0.5.0)
pg (1.2.3)
@@ -158,7 +166,14 @@ GEM
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
ffi (~> 1.0)
- regexp_parser (2.1.1)
+ react-rails (2.6.1)
+ babel-transpiler (>= 0.7.0)
+ connection_pool
+ execjs
+ railties (>= 3.2)
+ tilt
+ redis (4.5.1)
+ regexp_parser (2.2.0)
responders (3.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
@@ -174,16 +189,16 @@ GEM
sprockets (> 3.0)
sprockets-rails
tilt
- selenium-webdriver (4.0.3)
+ selenium-webdriver (4.1.0)
childprocess (>= 0.5, < 5.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2)
semantic_range (3.0.0)
- spring (3.0.0)
+ spring (4.0.0)
sprockets (4.0.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
- sprockets-rails (3.3.0)
+ sprockets-rails (3.4.1)
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
@@ -196,7 +211,7 @@ GEM
concurrent-ruby (~> 1.0)
warden (1.2.9)
rack (>= 2.0.9)
- web-console (4.1.0)
+ web-console (4.2.0)
actionview (>= 6.0.0)
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
@@ -218,7 +233,7 @@ GEM
zeitwerk (2.5.1)
PLATFORMS
- x86_64-linux
+ ruby
DEPENDENCIES
bootsnap (>= 1.4.4)
@@ -228,10 +243,13 @@ DEPENDENCIES
dotenv-rails
jbuilder (~> 2.7)
listen (~> 3.3)
+ nokogiri (>= 1.12.5)
pg (~> 1.1)
puma (~> 5.0)
rack-mini-profiler (~> 2.0)
rails (~> 6.1.4, >= 6.1.4.1)
+ react-rails
+ redis (~> 4.0)
sass-rails (>= 6)
selenium-webdriver
spring
@@ -245,4 +263,4 @@ RUBY VERSION
ruby 3.0.2p107
BUNDLED WITH
- 2.2.31
+ 2.2.33
diff --git a/app/javascript/packs/menubar.jsx b/app/javascript/packs/menubar.jsx
new file mode 100644
index 0000000..772fc97
--- /dev/null
+++ b/app/javascript/packs/menubar.jsx
@@ -0,0 +1,26 @@
+// Run this example by adding <%= javascript_pack_tag 'hello_react' %> to the head of your layout file,
+// like app/views/layouts/application.html.erb. All it does is render
Hello React
at the bottom
+// of the page.
+
+import React from 'react'
+import ReactDOM from 'react-dom'
+import PropTypes from 'prop-types'
+
+const Hello = props => (
+ Hello {props.name}!
+)
+
+Hello.defaultProps = {
+ name: 'David'
+}
+
+Hello.propTypes = {
+ name: PropTypes.string
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+ ReactDOM.render(
+ ,
+ document.body.appendChild(document.createElement('div')),
+ )
+})
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index a8112a4..a2507fd 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -11,6 +11,9 @@
+
+ <%= javascript_pack_tag 'menubar' %>
+
<%= notice %>
<%= alert %>
diff --git a/babel.config.js b/babel.config.js
index 19a07f3..ce41503 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -22,8 +22,10 @@ module.exports = function(api) {
{
targets: {
node: 'current'
- }
- }
+ },
+ modules: 'commonjs'
+ },
+ '@babel/preset-react'
],
(isProductionEnv || isDevelopmentEnv) && [
'@babel/preset-env',
@@ -34,6 +36,13 @@ module.exports = function(api) {
modules: false,
exclude: ['transform-typeof-symbol']
}
+ ],
+ [
+ '@babel/preset-react',
+ {
+ development: isDevelopmentEnv || isTestEnv,
+ useBuiltIns: true
+ }
]
].filter(Boolean),
plugins: [
@@ -68,7 +77,9 @@ module.exports = function(api) {
[
'@babel/plugin-transform-runtime',
{
- helpers: false
+ helpers: false,
+ regenerator: true,
+ corejs: false
}
],
[
@@ -76,6 +87,12 @@ module.exports = function(api) {
{
async: false
}
+ ],
+ isProductionEnv && [
+ 'babel-plugin-transform-react-remove-prop-types',
+ {
+ removeImport: true
+ }
]
].filter(Boolean)
}
diff --git a/config/database.yml b/config/database.yml
index 0fafb55..8fa22ed 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -37,11 +37,11 @@ development:
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
- #host: localhost
+ host: localhost
# The TCP port the server listens on. Defaults to 5432.
# If your server runs on a different port number, change accordingly.
- #port: 5432
+ port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
@@ -59,6 +59,8 @@ test:
<<: *default
database: janus_test
username: postgres
+ host: localhost
+ port: 5432
# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
diff --git a/config/webpacker.yml b/config/webpacker.yml
index a6b1465..ba8415e 100644
--- a/config/webpacker.yml
+++ b/config/webpacker.yml
@@ -33,6 +33,7 @@ default: &default
- .woff2
extensions:
+ - .jsx
- .mjs
- .js
- .sass
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..91970a8
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,17 @@
+{pkgs ? import
{}}:
+with pkgs;
+let
+ ruby = ruby_3_0;
+ gems = bundlerEnv {
+ name = "env";
+ inherit ruby;
+ gemfile = ./Gemfile;
+ lockfile = ./Gemfile.lock;
+ gemset = import ./gemset.nix;
+ };
+in
+stdenv.mkDerivation {
+ name = "janus";
+ src = ./.;
+ buildInputs = [gems gems.wrappedRuby yarn];
+}
diff --git a/gemset.nix b/gemset.nix
new file mode 100644
index 0000000..596edf9
--- /dev/null
+++ b/gemset.nix
@@ -0,0 +1,939 @@
+{
+ actioncable = {
+ dependencies = ["actionpack" "activesupport" "nio4r" "websocket-driver"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ilq5mniarm0zlvnkagqj9n9p73ljrhphciz02aymrpfxxxclz2x";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ actionmailbox = {
+ dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "16azdnjws215clb056b9mabglx4b8f61hr82hv7hm80dmn89zqq6";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ actionmailer = {
+ dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "00s07l2ac5igch1g2rpa0linmiq7mhgk6v6wxkckg8gbiqijb592";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ actionpack = {
+ dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0xgysqnibjsy6kdz10x2xb3kwa6lssiqhh0zggrbgs31ypwhlpia";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ actiontext = {
+ dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0m4fy4qqh09vnzbhx383vjdfid6fzbs49bzzg415x05nmmjkx582";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ actionview = {
+ dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1yf4ic5kl324rs0raralpwx24s6hvvdzxfhinafylf8f3x7jj23z";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ activejob = {
+ dependencies = ["activesupport" "globalid"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1q7c0i0kwarxgcbxk71wa9jnlg45grbxmhlrh7dk9bgcv7r7r7hn";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ activemodel = {
+ dependencies = ["activesupport"];
+ groups = ["default" "development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "16ixam4lni8b5lgx0whnax0imzh1dh10fy5r9pxs52n83yz5nbq3";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ activerecord = {
+ dependencies = ["activemodel" "activesupport"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1ccgvlj767ybps3pxlaa4iw77n7wbriw2sr8754id3ngjfap08ja";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ activestorage = {
+ dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "17knzz9fvqg4x582vy0xmlgjkxfb13xyzl2rgw19qfma86hxsvvi";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ activesupport = {
+ dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "19gx1jcq46x9d1pi1w8xq0bgvvfw239y4lalr8asm291gj3q3ds4";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ addressable = {
+ dependencies = ["public_suffix"];
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "022r3m9wdxljpbya69y2i3h9g3dhhfaqzidf95m6qjzms792jvgp";
+ type = "gem";
+ };
+ version = "2.8.0";
+ };
+ babel-source = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1ncq8h82k6hypzfb5dk7z95mmcdwnhsxmc53xz17m1nbklm25vvr";
+ type = "gem";
+ };
+ version = "5.8.35";
+ };
+ babel-transpiler = {
+ dependencies = ["babel-source" "execjs"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0w0minwxj56w96xps1msm6n75fs0y7r1vqcr9zlsn74fksnz81jc";
+ type = "gem";
+ };
+ version = "0.7.0";
+ };
+ bcrypt = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "02r1c3isfchs5fxivbq99gc3aq4vfyn8snhcy707dal1p8qz12qb";
+ type = "gem";
+ };
+ version = "3.1.16";
+ };
+ bindex = {
+ groups = ["default" "development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0zmirr3m02p52bzq4xgksq4pn8j641rx5d4czk68pv9rqnfwq7kv";
+ type = "gem";
+ };
+ version = "0.8.1";
+ };
+ bootsnap = {
+ dependencies = ["msgpack"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "18prmylz53gsw651f0sibb2mvdxgd2zzdzh6a9a1idpqhyxcnbg7";
+ type = "gem";
+ };
+ version = "1.9.3";
+ };
+ builder = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+ type = "gem";
+ };
+ version = "3.2.4";
+ };
+ byebug = {
+ groups = ["development" "test"];
+ platforms = [{
+ engine = "maglev";
+ } {
+ engine = "mingw";
+ } {
+ engine = "mingw";
+ } {
+ engine = "ruby";
+ }];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
+ type = "gem";
+ };
+ version = "11.1.3";
+ };
+ capybara = {
+ dependencies = ["addressable" "matrix" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
+ groups = ["test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1dv75hs45456mi76h720gxk959gpg4f6091hmk42y0ln6kp2x7i0";
+ type = "gem";
+ };
+ version = "3.36.0";
+ };
+ childprocess = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in";
+ type = "gem";
+ };
+ version = "4.1.0";
+ };
+ concurrent-ruby = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0nwad3211p7yv9sda31jmbyw6sdafzmdi2i2niaz6f0wk5nq9h0f";
+ type = "gem";
+ };
+ version = "1.1.9";
+ };
+ connection_pool = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ffdxhgirgc86qb42yvmfj6v1v0x4lvi0pxn9zhghkff44wzra0k";
+ type = "gem";
+ };
+ version = "2.2.5";
+ };
+ crass = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
+ type = "gem";
+ };
+ version = "1.0.6";
+ };
+ devise = {
+ dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ag0skzk3h7bhmf1n2zwa7cg6kx5k5inxmq0kf5qpm7917ffm0mz";
+ type = "gem";
+ };
+ version = "4.8.0";
+ };
+ dotenv = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0iym172c5337sm1x2ykc2i3f961vj3wdclbyg1x6sxs3irgfsl94";
+ type = "gem";
+ };
+ version = "2.7.6";
+ };
+ dotenv-rails = {
+ dependencies = ["dotenv" "railties"];
+ groups = ["development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1my2jdmgmpf32rfxffkb9cyxh7ayis4q5ygpwjqj4vpp25y3a70c";
+ type = "gem";
+ };
+ version = "2.7.6";
+ };
+ erubi = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "09l8lz3j00m898li0yfsnb6ihc63rdvhw3k5xczna5zrjk104f2l";
+ type = "gem";
+ };
+ version = "1.10.0";
+ };
+ execjs = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
+ type = "gem";
+ };
+ version = "2.8.1";
+ };
+ ffi = {
+ groups = ["default" "development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ssxcywmb3flxsjdg13is6k01807zgzasdhj4j48dm7ac59cmksn";
+ type = "gem";
+ };
+ version = "1.15.4";
+ };
+ globalid = {
+ dependencies = ["activesupport"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1n5yc058i8xhi1fwcp1w7mfi6xaxfmrifdb4r4hjfff33ldn8lqj";
+ type = "gem";
+ };
+ version = "1.0.0";
+ };
+ i18n = {
+ dependencies = ["concurrent-ruby"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf";
+ type = "gem";
+ };
+ version = "1.8.11";
+ };
+ jbuilder = {
+ dependencies = ["activesupport"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1a8fhj01wqsjyr3cm6fzrv54p879v83xpm2vrh7if9q5zwvkqmfn";
+ type = "gem";
+ };
+ version = "2.11.3";
+ };
+ listen = {
+ dependencies = ["rb-fsevent" "rb-inotify"];
+ groups = ["development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ncfhdkjiwq9l1pm87ax2pa20kz2j0dz56vi74cnr5a6cfk0qb5p";
+ type = "gem";
+ };
+ version = "3.7.0";
+ };
+ loofah = {
+ dependencies = ["crass" "nokogiri"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "17rvbrqcci1579d7dpbsfmz1f9g7msk82lyh9ip5h29dkrnixcgg";
+ type = "gem";
+ };
+ version = "2.13.0";
+ };
+ mail = {
+ dependencies = ["mini_mime"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+ type = "gem";
+ };
+ version = "2.7.1";
+ };
+ marcel = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0kky3yiwagsk8gfbzn3mvl2fxlh3b39v6nawzm4wpjs6xxvvc4x0";
+ type = "gem";
+ };
+ version = "1.0.2";
+ };
+ matrix = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+ type = "gem";
+ };
+ version = "0.4.2";
+ };
+ method_source = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+ type = "gem";
+ };
+ version = "1.0.0";
+ };
+ mini_mime = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+ type = "gem";
+ };
+ version = "1.1.2";
+ };
+ mini_portile2 = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq";
+ type = "gem";
+ };
+ version = "2.6.1";
+ };
+ minitest = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl";
+ type = "gem";
+ };
+ version = "5.14.4";
+ };
+ msgpack = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "06iajjyhx0rvpn4yr3h1hc4w4w3k59bdmfhxnjzzh76wsrdxxrc6";
+ type = "gem";
+ };
+ version = "1.4.2";
+ };
+ nio4r = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
+ type = "gem";
+ };
+ version = "2.5.8";
+ };
+ nokogiri = {
+ dependencies = ["mini_portile2" "racc"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1v02g7k7cxiwdcahvlxrmizn3avj2q6nsjccgilq1idc89cr081b";
+ type = "gem";
+ };
+ version = "1.12.5";
+ };
+ orm_adapter = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda";
+ type = "gem";
+ };
+ version = "0.5.0";
+ };
+ pg = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj";
+ type = "gem";
+ };
+ version = "1.2.3";
+ };
+ public_suffix = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+ type = "gem";
+ };
+ version = "4.0.6";
+ };
+ puma = {
+ dependencies = ["nio4r"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1xblxnrs0c5m326v7kgr32k4m00cl2ipcf5m0qvyisrw62vd5dbn";
+ type = "gem";
+ };
+ version = "5.5.2";
+ };
+ racc = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0la56m0z26j3mfn1a9lf2l03qx1xifanndf9p3vx1azf6sqy7v9d";
+ type = "gem";
+ };
+ version = "1.6.0";
+ };
+ rack = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
+ type = "gem";
+ };
+ version = "2.2.3";
+ };
+ rack-mini-profiler = {
+ dependencies = ["rack"];
+ groups = ["development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "03hcvjw9nrv0w6yjy2zkv4ivin9xg2wr7xfcvx7rc2msv1gmjb6z";
+ type = "gem";
+ };
+ version = "2.3.3";
+ };
+ rack-proxy = {
+ dependencies = ["rack"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0jdr2r5phr3q7d6k9cnxjwlkaps0my0n43wq9mzw3xdqhg9wa3d6";
+ type = "gem";
+ };
+ version = "0.7.0";
+ };
+ rack-test = {
+ dependencies = ["rack"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
+ type = "gem";
+ };
+ version = "1.1.0";
+ };
+ rails = {
+ dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1y59m2x8rdc581bjgyyr9dabi3vk3frqhhpbb5ldpbj622kxfpbz";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ rails-dom-testing = {
+ dependencies = ["activesupport" "nokogiri"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
+ type = "gem";
+ };
+ version = "2.0.3";
+ };
+ rails-html-sanitizer = {
+ dependencies = ["loofah"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "09qrfi3pgllxb08r024lln9k0qzxs57v0slsj8616xf9c0cwnwbk";
+ type = "gem";
+ };
+ version = "1.4.2";
+ };
+ railties = {
+ dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1kwpm068cqys34p2g0j3l1g0cd5f3kxnsay5v7lmbd0sgarac0vy";
+ type = "gem";
+ };
+ version = "6.1.4.1";
+ };
+ rake = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+ type = "gem";
+ };
+ version = "13.0.6";
+ };
+ rb-fsevent = {
+ groups = ["default" "development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1qsx9c4jr11vr3a9s5j83avczx9qn9rjaf32gxpc2v451hvbc0is";
+ type = "gem";
+ };
+ version = "0.11.0";
+ };
+ rb-inotify = {
+ dependencies = ["ffi"];
+ groups = ["default" "development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+ type = "gem";
+ };
+ version = "0.10.1";
+ };
+ react-rails = {
+ dependencies = ["babel-transpiler" "connection_pool" "execjs" "railties" "tilt"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1m5n1k2bcl9z1pfmdm0xgy90hkjmvvk19hbxymx9yn4vvfmimw1y";
+ type = "gem";
+ };
+ version = "2.6.1";
+ };
+ redis = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "03r9739q3vq38g456snf3rk9hadf955bs5im6qs6m69h19mrz2yw";
+ type = "gem";
+ };
+ version = "4.5.1";
+ };
+ regexp_parser = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "008yn8j44414qxhn1c0nxp4a70rq0bqhz70hnjpgx8cjh2g0makp";
+ type = "gem";
+ };
+ version = "2.2.0";
+ };
+ responders = {
+ dependencies = ["actionpack" "railties"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "14kjykc6rpdh24sshg9savqdajya2dislc1jmbzg91w9967f4gv1";
+ type = "gem";
+ };
+ version = "3.0.1";
+ };
+ rexml = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+ type = "gem";
+ };
+ version = "3.2.5";
+ };
+ rubyzip = {
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+ type = "gem";
+ };
+ version = "2.3.2";
+ };
+ sass-rails = {
+ dependencies = ["sassc-rails"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1lqhb0fgmls9l9jhgz42ri25w13q5pmsiiwzjbarz4n7l6749dp0";
+ type = "gem";
+ };
+ version = "6.0.0";
+ };
+ sassc = {
+ dependencies = ["ffi"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+ type = "gem";
+ };
+ version = "2.4.0";
+ };
+ sassc-rails = {
+ dependencies = ["railties" "sassc" "sprockets" "sprockets-rails" "tilt"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1d9djmwn36a5m8a83bpycs48g8kh1n2xkyvghn7dr6zwh4wdyksz";
+ type = "gem";
+ };
+ version = "2.1.2";
+ };
+ selenium-webdriver = {
+ dependencies = ["childprocess" "rexml" "rubyzip"];
+ groups = ["test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "17hilxa40cj7q48k6wcx1cbdb1v3q9c4nx89fji7gyqpcfm16vq7";
+ type = "gem";
+ };
+ version = "4.1.0";
+ };
+ semantic_range = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1dlp97vg95plrsaaqj7x8l7z9vsjbhnqk4rw1l30gy26lmxpfrih";
+ type = "gem";
+ };
+ version = "3.0.0";
+ };
+ spring = {
+ groups = ["development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1ihmqcqylfx04bigg0fswmlvp0639f1j47kdir4g9lc76yw3c6ia";
+ type = "gem";
+ };
+ version = "4.0.0";
+ };
+ sprockets = {
+ dependencies = ["concurrent-ruby" "rack"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0ikgwbl6jv3frfiy3xhg5yxw9d0064rgzghar1rg391xmrc4gm38";
+ type = "gem";
+ };
+ version = "4.0.2";
+ };
+ sprockets-rails = {
+ dependencies = ["actionpack" "activesupport" "sprockets"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0pjz4lbv2v0p9fa5nsrxy5lphsixb9a69gq2rxp0h5sr61m18mdq";
+ type = "gem";
+ };
+ version = "3.4.1";
+ };
+ thor = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
+ type = "gem";
+ };
+ version = "1.1.0";
+ };
+ tilt = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0rn8z8hda4h41a64l0zhkiwz2vxw9b1nb70gl37h1dg2k874yrlv";
+ type = "gem";
+ };
+ version = "2.0.10";
+ };
+ turbolinks = {
+ dependencies = ["turbolinks-source"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "176fbkhhi2jmsnbkcng2qr82nd35qmh3inmbv5dqm9z2qj4misjz";
+ type = "gem";
+ };
+ version = "5.2.1";
+ };
+ turbolinks-source = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1m45pk1jbfvqaki1mxn1bmj8yy65qyv49ygqbkqv08hshpx42ain";
+ type = "gem";
+ };
+ version = "5.2.0";
+ };
+ tzinfo = {
+ dependencies = ["concurrent-ruby"];
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "10qp5x7f9hvlc0psv9gsfbxg4a7s0485wsbq1kljkxq94in91l4z";
+ type = "gem";
+ };
+ version = "2.0.4";
+ };
+ warden = {
+ dependencies = ["rack"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1l7gl7vms023w4clg02pm4ky9j12la2vzsixi2xrv9imbn44ys26";
+ type = "gem";
+ };
+ version = "1.2.9";
+ };
+ web-console = {
+ dependencies = ["actionview" "activemodel" "bindex" "railties"];
+ groups = ["development"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1hrkaj4131rh3kq519gkn2lrlpm22f6q5ys1b5fk0v9xm1bm1w78";
+ type = "gem";
+ };
+ version = "4.2.0";
+ };
+ webdrivers = {
+ dependencies = ["nokogiri" "rubyzip" "selenium-webdriver"];
+ groups = ["test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0bxahwcw21rd5hnnlyvpz42ipjkx7yp5a8m08k9q0pspv5zmg4mj";
+ type = "gem";
+ };
+ version = "5.0.0";
+ };
+ webpacker = {
+ dependencies = ["activesupport" "rack-proxy" "railties" "semantic_range"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "1cq6m5qwm3bmi7hkjfmbg2cs4qjq4wswlrwcfk8l1svfqbi135v3";
+ type = "gem";
+ };
+ version = "5.4.3";
+ };
+ websocket-driver = {
+ dependencies = ["websocket-extensions"];
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052";
+ type = "gem";
+ };
+ version = "0.7.5";
+ };
+ websocket-extensions = {
+ groups = ["default"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw";
+ type = "gem";
+ };
+ version = "0.1.5";
+ };
+ xpath = {
+ dependencies = ["nokogiri"];
+ groups = ["default" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
+ type = "gem";
+ };
+ version = "3.2.0";
+ };
+ zeitwerk = {
+ groups = ["default" "development" "test"];
+ platforms = [];
+ source = {
+ remotes = ["https://rubygems.org"];
+ sha256 = "18l4r6layck0d80ydc692mv1lxak5xbf6w2paj1x7m2ggbggzxgj";
+ type = "gem";
+ };
+ version = "2.5.1";
+ };
+}
diff --git a/lock.sh b/lock.sh
new file mode 100755
index 0000000..48294b4
--- /dev/null
+++ b/lock.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p ruby_3_0 bundler bundix
+
+rm -f gemset.nix Gemfile.lock
+BUNDLE_FORCE_RUBY_PLATFORM=1 bundle lock
+bundix --ruby=ruby_3_0
\ No newline at end of file
diff --git a/package.json b/package.json
index 7fcb8a0..8fee3f9 100644
--- a/package.json
+++ b/package.json
@@ -2,10 +2,15 @@
"name": "janus",
"private": true,
"dependencies": {
+ "@babel/preset-react": "^7.16.0",
"@rails/actioncable": "^6.0.0",
"@rails/activestorage": "^6.0.0",
"@rails/ujs": "^6.0.0",
"@rails/webpacker": "5.4.3",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
+ "prop-types": "^15.7.2",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
"turbolinks": "^5.2.0",
"webpack": "^4.46.0",
"webpack-cli": "^3.3.12"
diff --git a/yarn.lock b/yarn.lock
index 313b14a..cbb5594 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -442,6 +442,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
+"@babel/plugin-syntax-jsx@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1"
+ integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
@@ -681,6 +688,39 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
+"@babel/plugin-transform-react-display-name@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676"
+ integrity sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-transform-react-jsx-development@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef"
+ integrity sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.16.0"
+
+"@babel/plugin-transform-react-jsx@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1"
+ integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-module-imports" "^7.16.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/plugin-syntax-jsx" "^7.16.0"
+ "@babel/types" "^7.16.0"
+
+"@babel/plugin-transform-react-pure-annotations@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab"
+ integrity sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-plugin-utils" "^7.14.5"
+
"@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.16.0":
version "7.16.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4"
@@ -849,6 +889,18 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
+"@babel/preset-react@^7.16.0":
+ version "7.16.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a"
+ integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+ "@babel/helper-validator-option" "^7.14.5"
+ "@babel/plugin-transform-react-display-name" "^7.16.0"
+ "@babel/plugin-transform-react-jsx" "^7.16.0"
+ "@babel/plugin-transform-react-jsx-development" "^7.16.0"
+ "@babel/plugin-transform-react-pure-annotations" "^7.16.0"
+
"@babel/runtime@^7.15.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
@@ -1414,6 +1466,11 @@ babel-plugin-polyfill-regenerator@^0.2.3:
dependencies:
"@babel/helper-define-polyfill-provider" "^0.2.4"
+babel-plugin-transform-react-remove-prop-types@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+ integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -3800,7 +3857,7 @@ jest-worker@^26.5.0:
merge-stream "^2.0.0"
supports-color "^7.0.0"
-js-tokens@^4.0.0:
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
@@ -3977,6 +4034,13 @@ loglevel@^1.6.8:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197"
integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
@@ -5443,6 +5507,15 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
proxy-addr@~2.0.5:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@@ -5571,6 +5644,28 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+react-dom@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
+ integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ scheduler "^0.20.2"
+
+react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
+ integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
read-cache@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
@@ -5842,6 +5937,14 @@ sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+scheduler@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
+ integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
schema-utils@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"