diff --git a/Gemfile b/Gemfile
index 4d76da2b..6998400d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby "3.4.5"
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
-gem "rails", "~> 8.0.3"
+gem "rails", "~> 8.1.0"
# Use postgresql as the database for Active Record
gem "pg", "~> 1.6.2"
# Use Puma as the app server
diff --git a/Gemfile.lock b/Gemfile.lock
index c4d2d366..f7e6329c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -7,29 +7,31 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (8.0.3)
- actionpack (= 8.0.3)
- activesupport (= 8.0.3)
+ action_text-trix (2.1.17)
+ railties
+ actioncable (8.1.2)
+ actionpack (= 8.1.2)
+ activesupport (= 8.1.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (8.0.3)
- actionpack (= 8.0.3)
- activejob (= 8.0.3)
- activerecord (= 8.0.3)
- activestorage (= 8.0.3)
- activesupport (= 8.0.3)
+ actionmailbox (8.1.2)
+ actionpack (= 8.1.2)
+ activejob (= 8.1.2)
+ activerecord (= 8.1.2)
+ activestorage (= 8.1.2)
+ activesupport (= 8.1.2)
mail (>= 2.8.0)
- actionmailer (8.0.3)
- actionpack (= 8.0.3)
- actionview (= 8.0.3)
- activejob (= 8.0.3)
- activesupport (= 8.0.3)
+ actionmailer (8.1.2)
+ actionpack (= 8.1.2)
+ actionview (= 8.1.2)
+ activejob (= 8.1.2)
+ activesupport (= 8.1.2)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (8.0.3)
- actionview (= 8.0.3)
- activesupport (= 8.0.3)
+ actionpack (8.1.2)
+ actionview (= 8.1.2)
+ activesupport (= 8.1.2)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
@@ -37,42 +39,43 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (8.0.3)
- actionpack (= 8.0.3)
- activerecord (= 8.0.3)
- activestorage (= 8.0.3)
- activesupport (= 8.0.3)
+ actiontext (8.1.2)
+ action_text-trix (~> 2.1.15)
+ actionpack (= 8.1.2)
+ activerecord (= 8.1.2)
+ activestorage (= 8.1.2)
+ activesupport (= 8.1.2)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (8.0.3)
- activesupport (= 8.0.3)
+ actionview (8.1.2)
+ activesupport (= 8.1.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- activejob (8.0.3)
- activesupport (= 8.0.3)
+ activejob (8.1.2)
+ activesupport (= 8.1.2)
globalid (>= 0.3.6)
- activemodel (8.0.3)
- activesupport (= 8.0.3)
- activerecord (8.0.3)
- activemodel (= 8.0.3)
- activesupport (= 8.0.3)
+ activemodel (8.1.2)
+ activesupport (= 8.1.2)
+ activerecord (8.1.2)
+ activemodel (= 8.1.2)
+ activesupport (= 8.1.2)
timeout (>= 0.4.0)
- activestorage (8.0.3)
- actionpack (= 8.0.3)
- activejob (= 8.0.3)
- activerecord (= 8.0.3)
- activesupport (= 8.0.3)
+ activestorage (8.1.2)
+ actionpack (= 8.1.2)
+ activejob (= 8.1.2)
+ activerecord (= 8.1.2)
+ activesupport (= 8.1.2)
marcel (~> 1.0)
- activesupport (8.0.3)
+ activesupport (8.1.2)
base64
- benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
+ json
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
@@ -83,12 +86,11 @@ GEM
ast (2.4.3)
base64 (0.3.0)
bcrypt (3.1.20)
- benchmark (0.4.1)
better_errors (2.10.1)
erubi (>= 1.0.0)
rack (>= 0.9.0)
rouge (>= 1.0.0)
- bigdecimal (3.2.3)
+ bigdecimal (4.0.1)
bindex (0.8.1)
binding_of_caller (1.0.1)
debug_inspector (>= 1.2.0)
@@ -109,14 +111,14 @@ GEM
xpath (~> 3.2)
coderay (1.1.3)
colorize (1.1.0)
- concurrent-ruby (1.3.5)
- connection_pool (2.5.4)
+ concurrent-ruby (1.3.6)
+ connection_pool (3.0.2)
crass (1.0.6)
csv (3.3.5)
dartsass-rails (0.5.1)
railties (>= 6.0.0)
sass-embedded (~> 1.63)
- date (3.4.1)
+ date (3.5.1)
debug_inspector (1.2.0)
devise (4.9.4)
bcrypt (~> 3.0)
@@ -131,7 +133,7 @@ GEM
dotenv (= 3.1.8)
railties (>= 6.1)
drb (2.2.3)
- erb (5.0.2)
+ erb (6.0.2)
erubi (1.13.1)
factory_bot (6.5.5)
activesupport (>= 6.1.0)
@@ -185,7 +187,7 @@ GEM
rails (>= 6.0.0)
stimulus-rails
turbo-rails
- i18n (1.14.7)
+ i18n (1.14.8)
concurrent-ruby (~> 1.0)
importmap-rails (2.2.2)
actionpack (>= 6.0.0)
@@ -194,9 +196,10 @@ GEM
inline_svg (1.10.0)
activesupport (>= 3.0)
nokogiri (>= 1.6)
- io-console (0.8.1)
- irb (1.15.2)
+ io-console (0.8.2)
+ irb (1.17.0)
pp (>= 0.6.0)
+ prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.15.0)
@@ -208,10 +211,11 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
- loofah (2.24.1)
+ loofah (2.25.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
- mail (2.8.1)
+ mail (2.9.0)
+ logger
mini_mime (>= 0.1.1)
net-imap
net-pop
@@ -221,11 +225,13 @@ GEM
memory_profiler (1.1.0)
method_source (1.1.0)
mini_mime (1.1.5)
- minitest (5.25.5)
+ minitest (6.0.2)
+ drb (~> 2.0)
+ prism (~> 1.5)
msgpack (1.8.0)
net-http (0.6.0)
uri
- net-imap (0.5.11)
+ net-imap (0.6.3)
date
net-protocol
net-pop (0.1.2)
@@ -234,22 +240,22 @@ GEM
timeout
net-smtp (0.5.1)
net-protocol
- nio4r (2.7.4)
- nokogiri (1.18.10-aarch64-linux-gnu)
+ nio4r (2.7.5)
+ nokogiri (1.19.1-aarch64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.18.10-aarch64-linux-musl)
+ nokogiri (1.19.1-aarch64-linux-musl)
racc (~> 1.4)
- nokogiri (1.18.10-arm-linux-gnu)
+ nokogiri (1.19.1-arm-linux-gnu)
racc (~> 1.4)
- nokogiri (1.18.10-arm-linux-musl)
+ nokogiri (1.19.1-arm-linux-musl)
racc (~> 1.4)
- nokogiri (1.18.10-arm64-darwin)
+ nokogiri (1.19.1-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.18.10-x86_64-darwin)
+ nokogiri (1.19.1-x86_64-darwin)
racc (~> 1.4)
- nokogiri (1.18.10-x86_64-linux-gnu)
+ nokogiri (1.19.1-x86_64-linux-gnu)
racc (~> 1.4)
- nokogiri (1.18.10-x86_64-linux-musl)
+ nokogiri (1.19.1-x86_64-linux-musl)
racc (~> 1.4)
orm_adapter (0.5.0)
ostruct (0.6.3)
@@ -265,7 +271,7 @@ GEM
pg (1.6.2-x86_64-darwin)
pg (1.6.2-x86_64-linux)
pg (1.6.2-x86_64-linux-musl)
- pp (0.6.2)
+ pp (0.6.3)
prettyprint
prettyprint (0.2.0)
prism (1.5.1)
@@ -287,14 +293,14 @@ GEM
pry-stack_explorer (0.6.1)
binding_of_caller (~> 1.0)
pry (~> 0.13)
- psych (5.2.6)
+ psych (5.3.1)
date
stringio
public_suffix (6.0.2)
puma (6.4.3)
nio4r (~> 2.0)
racc (1.8.1)
- rack (3.2.3)
+ rack (3.2.5)
rack-cors (3.0.0)
logger
rack (>= 3.0.14)
@@ -305,22 +311,22 @@ GEM
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
- rackup (2.2.1)
+ rackup (2.3.1)
rack (>= 3)
- rails (8.0.3)
- actioncable (= 8.0.3)
- actionmailbox (= 8.0.3)
- actionmailer (= 8.0.3)
- actionpack (= 8.0.3)
- actiontext (= 8.0.3)
- actionview (= 8.0.3)
- activejob (= 8.0.3)
- activemodel (= 8.0.3)
- activerecord (= 8.0.3)
- activestorage (= 8.0.3)
- activesupport (= 8.0.3)
+ rails (8.1.2)
+ actioncable (= 8.1.2)
+ actionmailbox (= 8.1.2)
+ actionmailer (= 8.1.2)
+ actionpack (= 8.1.2)
+ actiontext (= 8.1.2)
+ actionview (= 8.1.2)
+ activejob (= 8.1.2)
+ activemodel (= 8.1.2)
+ activerecord (= 8.1.2)
+ activestorage (= 8.1.2)
+ activesupport (= 8.1.2)
bundler (>= 1.15.0)
- railties (= 8.0.3)
+ railties (= 8.1.2)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -329,12 +335,12 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
- rails-html-sanitizer (1.6.2)
- loofah (~> 2.21)
+ rails-html-sanitizer (1.7.0)
+ loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
- railties (8.0.3)
- actionpack (= 8.0.3)
- activesupport (= 8.0.3)
+ railties (8.1.2)
+ actionpack (= 8.1.2)
+ activesupport (= 8.1.2)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -342,11 +348,11 @@ GEM
tsort (>= 0.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
- rake (13.3.0)
+ rake (13.3.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
- rdoc (6.15.0)
+ rdoc (7.2.0)
erb
psych (>= 4.0.0)
tsort
@@ -355,7 +361,7 @@ GEM
redis-client (0.26.1)
connection_pool
regexp_parser (2.11.3)
- reline (0.6.2)
+ reline (0.6.3)
io-console (~> 0.5)
requestjs-rails (0.0.13)
railties (>= 7.1.0)
@@ -440,9 +446,9 @@ GEM
stackprof (0.2.27)
stimulus-rails (1.3.4)
railties (>= 6.0.0)
- stringio (3.1.7)
- thor (1.4.0)
- timeout (0.4.3)
+ stringio (3.2.0)
+ thor (1.5.0)
+ timeout (0.6.1)
tsort (0.2.0)
turbo-rails (2.0.17)
actionpack (>= 7.1.0)
@@ -454,10 +460,11 @@ GEM
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.1.0)
- uri (1.0.3)
+ uri (1.1.1)
useragent (0.16.11)
- view_component (4.0.2)
- activesupport (>= 7.1.0, < 8.1)
+ view_component (4.5.0)
+ actionview (>= 7.1.0)
+ activesupport (>= 7.1.0)
concurrent-ruby (~> 1)
warden (1.2.9)
rack (>= 2.0.9)
@@ -472,7 +479,7 @@ GEM
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.7.3)
+ zeitwerk (2.7.5)
PLATFORMS
aarch64-linux-gnu
@@ -521,7 +528,7 @@ DEPENDENCIES
puma (~> 6.4.2)
rack-cors
rack-mini-profiler (~> 3.3.1)
- rails (~> 8.0.3)
+ rails (~> 8.1.0)
rails-controller-testing
redis (~> 5.4.1)
requestjs-rails
diff --git a/app/models/analytics/access_token.rb b/app/models/analytics/access_token.rb
index 1ce007d3..0f843506 100644
--- a/app/models/analytics/access_token.rb
+++ b/app/models/analytics/access_token.rb
@@ -42,7 +42,7 @@ def initialize(uuid:, session_token:)
@uuid = uuid || SecureRandom.hex
@session_token = session_token
- decoded_data, _decoded_header = JSONWebToken.decode(session_token)
+ decoded_data, _decoded_header = Analytics::AccessToken::JSONWebToken.decode(session_token)
@data = decoded_data.to_h.with_indifferent_access
# If session_id is not present, set it to a new random value
@data[:session_id] ||= SecureRandom.hex
@@ -50,7 +50,7 @@ def initialize(uuid:, session_token:)
def refresh
# Update session_token with the latest data and expiration
- @session_token = JSONWebToken.encode(data, 30.minutes.from_now)
+ @session_token = Analytics::AccessToken::JSONWebToken.encode(data, 30.minutes.from_now)
end
def session_id
@@ -70,3 +70,5 @@ def as_json(options = nil)
result.as_json(options)
end
end
+
+require_relative "access_token/json_web_token"
diff --git a/bin/ci b/bin/ci
new file mode 100755
index 00000000..4137ad5b
--- /dev/null
+++ b/bin/ci
@@ -0,0 +1,6 @@
+#!/usr/bin/env ruby
+require_relative "../config/boot"
+require "active_support/continuous_integration"
+
+CI = ActiveSupport::ContinuousIntegration
+require_relative "../config/ci.rb"
diff --git a/bin/rubocop b/bin/rubocop
index 40330c0f..5a205047 100755
--- a/bin/rubocop
+++ b/bin/rubocop
@@ -2,7 +2,7 @@
require "rubygems"
require "bundler/setup"
-# explicit rubocop config increases performance slightly while avoiding config confusion.
+# Explicit RuboCop config increases performance slightly while avoiding config confusion.
ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
load Gem.bin_path("rubocop", "rubocop")
diff --git a/bin/setup b/bin/setup
index be3db3c0..81be011e 100755
--- a/bin/setup
+++ b/bin/setup
@@ -22,6 +22,7 @@ FileUtils.chdir APP_ROOT do
puts "\n== Preparing database =="
system! "bin/rails db:prepare"
+ system! "bin/rails db:reset" if ARGV.include?("--reset")
puts "\n== Removing old logs and tempfiles =="
system! "bin/rails log:clear tmp:clear"
diff --git a/config/application.rb b/config/application.rb
index cb5f5284..0e7e5c85 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -9,7 +9,7 @@
module LinkvanApi
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 8.0
+ config.load_defaults 8.1
# Please, add to the `ignore` list any other `lib` subdirectories that do
# not contain `.rb` files, or that should not be reloaded or eager loaded.
diff --git a/config/ci.rb b/config/ci.rb
new file mode 100644
index 00000000..9f807841
--- /dev/null
+++ b/config/ci.rb
@@ -0,0 +1,23 @@
+# Run using bin/ci
+
+CI.run do
+ step "Setup", "bin/setup --skip-server"
+
+ step "Style: Ruby", "bin/rubocop"
+
+ step "Security: Importmap vulnerability audit", "bin/importmap audit"
+ step "Security: Brakeman code analysis", "bin/brakeman --quiet --no-pager --exit-on-warn --exit-on-error"
+ step "Tests: Rails", "bin/rails test"
+ step "Tests: Seeds", "env RAILS_ENV=test bin/rails db:seed:replant"
+
+ # Optional: Run system tests
+ # step "Tests: System", "bin/rails test:system"
+
+ # Optional: set a green GitHub commit status to unblock PR merge.
+ # Requires the `gh` CLI and `gh extension install basecamp/gh-signoff`.
+ # if success?
+ # step "Signoff: All systems go. Ready for merge and deploy.", "gh signoff"
+ # else
+ # failure "Signoff: CI failed. Do not merge or deploy.", "Fix the issues and try again."
+ # end
+end
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 4cc21c4e..75243c3d 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -55,6 +55,12 @@
# Highlight code that enqueued background job in logs.
config.active_job.verbose_enqueue_logs = true
+ # Highlight code that triggered redirect in logs.
+ config.action_dispatch.verbose_redirect_logs = true
+
+ # Suppress logger output for asset requests.
+ config.assets.quiet = true
+
# Raises error for missing translations.
# config.i18n.raise_on_missing_translations = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index ed237c75..ad00f1d2 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -39,7 +39,7 @@
config.log_tags = [ :request_id ]
config.logger = ActiveSupport::TaggedLogging.logger(STDOUT)
- # Change to "debug" to log everything (including potentially personally-identifiable information!)
+ # Change to "debug" to log everything (including potentially personally-identifiable information!).
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
# Prevent health checks from clogging up the logs.
@@ -61,7 +61,7 @@
# Set host to be used by links generated in mailer templates.
config.action_mailer.default_url_options = { host: "example.com" }
- # Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
+ # Specify outgoing SMTP server. Remember to add smtp/* credentials via bin/rails credentials:edit.
# config.action_mailer.smtp_settings = {
# user_name: Rails.application.credentials.dig(:smtp, :user_name),
# password: Rails.application.credentials.dig(:smtp, :password),
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 3c278203..c2095b11 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -50,8 +50,4 @@
# Raise error when a before_action's only/except options reference missing actions.
config.action_controller.raise_on_missing_callback_actions = true
-
- # Compile assets in test environment for system specs and views that reference assets
- config.assets.compile = true
- config.assets.digest = true
end
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index b3076b38..d51d7139 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -20,6 +20,10 @@
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
# config.content_security_policy_nonce_directives = %w(script-src style-src)
#
+# # Automatically add `nonce` to `javascript_tag`, `javascript_include_tag`, and `stylesheet_link_tag`
+# # if the corresponding directives are specified in `content_security_policy_nonce_directives`.
+# # config.content_security_policy_nonce_auto = true
+#
# # Report violations without enforcing the policy.
# # config.content_security_policy_report_only = true
# end
diff --git a/config/puma.rb b/config/puma.rb
index a248513b..38c4b865 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -7,7 +7,8 @@
#
# You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
# should only set this value when you want to run 2 or more workers. The
-# default is already 1.
+# default is already 1. You can set it to `auto` to automatically start a worker
+# for each available processor.
#
# The ideal number of threads per worker depends both on how much time the
# application spends waiting for IO operations and on how much you wish to
@@ -33,7 +34,7 @@
# Allow puma to be restarted by `bin/rails restart` command.
plugin :tmp_restart
-# Run the Solid Queue supervisor inside of Puma for single-server deployments
+# Run the Solid Queue supervisor inside of Puma for single-server deployments.
plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"]
# Specify the PID file. Defaults to tmp/pids/server.pid in development.
diff --git a/db/schema.rb b/db/schema.rb
index ee691cdf..8e9177ce 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,39 +10,39 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[8.0].define(version: 2025_06_30_180209) do
+ActiveRecord::Schema[8.1].define(version: 2025_06_30_180209) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_catalog.plpgsql"
create_table "action_text_rich_texts", force: :cascade do |t|
- t.string "name", null: false
t.text "body"
- t.string "record_type", null: false
- t.bigint "record_id", null: false
t.datetime "created_at", null: false
+ t.string "name", null: false
+ t.bigint "record_id", null: false
+ t.string "record_type", null: false
t.datetime "updated_at", null: false
t.index ["record_type", "record_id", "name"], name: "index_action_text_rich_texts_uniqueness", unique: true
end
create_table "active_storage_attachments", force: :cascade do |t|
- t.string "name", null: false
- t.string "record_type", null: false
- t.bigint "record_id", null: false
t.bigint "blob_id", null: false
t.datetime "created_at", precision: nil, null: false
+ t.string "name", null: false
+ t.bigint "record_id", null: false
+ t.string "record_type", null: false
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
end
create_table "active_storage_blobs", force: :cascade do |t|
- t.string "key", null: false
- t.string "filename", null: false
- t.string "content_type"
- t.text "metadata"
- t.string "service_name", null: false
t.bigint "byte_size", null: false
t.string "checksum"
+ t.string "content_type"
t.datetime "created_at", precision: nil, null: false
+ t.string "filename", null: false
+ t.string "key", null: false
+ t.text "metadata"
+ t.string "service_name", null: false
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
end
@@ -53,63 +53,63 @@
end
create_table "alerts", id: :serial, force: :cascade do |t|
- t.string "title"
t.boolean "active"
t.datetime "created_at", precision: nil, null: false
+ t.string "title"
t.datetime "updated_at", precision: nil, null: false
end
create_table "events", force: :cascade do |t|
- t.bigint "visit_id", null: false
- t.string "controller_name", null: false
t.string "action_name", null: false
+ t.string "controller_name", null: false
+ t.datetime "created_at", null: false
t.decimal "lat"
t.decimal "long"
- t.string "request_url", null: false
t.string "request_ip"
- t.string "request_user_agent"
t.jsonb "request_params"
- t.datetime "created_at", null: false
+ t.string "request_url", null: false
+ t.string "request_user_agent"
t.datetime "updated_at", null: false
+ t.bigint "visit_id", null: false
t.index ["visit_id"], name: "index_events_on_visit_id"
end
create_table "facilities", id: :serial, force: :cascade do |t|
- t.string "name"
+ t.string "address"
+ t.datetime "created_at", precision: nil
+ t.datetime "deleted_at"
+ t.string "discard_reason"
+ t.string "external_id"
t.decimal "lat"
t.decimal "long"
- t.string "address"
- t.string "phone"
- t.string "website"
+ t.string "name"
t.text "notes"
- t.datetime "created_at", precision: nil
+ t.string "phone"
t.datetime "updated_at", precision: nil
t.integer "user_id"
t.boolean "verified", default: false
+ t.string "website"
t.integer "zone_id"
- t.datetime "deleted_at"
- t.string "discard_reason"
- t.string "external_id"
t.index ["user_id"], name: "index_facilities_on_user_id"
t.index ["zone_id"], name: "index_facilities_on_zone_id"
end
create_table "facility_schedules", force: :cascade do |t|
- t.bigint "facility_id"
- t.string "week_day", null: false
- t.boolean "open_all_day", default: false, null: false
t.boolean "closed_all_day", default: false, null: false
t.datetime "created_at", null: false
+ t.bigint "facility_id"
+ t.boolean "open_all_day", default: false, null: false
t.datetime "updated_at", null: false
+ t.string "week_day", null: false
t.index ["facility_id", "week_day"], name: "index_facility_schedules_on_facility_id_and_week_day", unique: true
t.index ["facility_id"], name: "index_facility_schedules_on_facility_id"
end
create_table "facility_services", force: :cascade do |t|
+ t.datetime "created_at", null: false
t.bigint "facility_id", null: false
- t.bigint "service_id", null: false
t.text "note"
- t.datetime "created_at", null: false
+ t.bigint "service_id", null: false
t.datetime "updated_at", null: false
t.index ["facility_id", "service_id"], name: "index_facility_services_on_facility_id_and_service_id", unique: true
t.index ["facility_id"], name: "index_facility_services_on_facility_id"
@@ -117,30 +117,30 @@
end
create_table "facility_time_slots", force: :cascade do |t|
+ t.datetime "created_at", null: false
t.bigint "facility_schedule_id"
t.integer "from_hour", null: false
t.integer "from_min", null: false
t.integer "to_hour", null: false
t.integer "to_min", null: false
- t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["facility_schedule_id"], name: "index_facility_time_slots_on_facility_schedule_id"
end
create_table "facility_welcomes", force: :cascade do |t|
- t.bigint "facility_id", null: false
- t.string "customer", null: false
t.datetime "created_at", null: false
+ t.string "customer", null: false
+ t.bigint "facility_id", null: false
t.datetime "updated_at", null: false
t.index ["facility_id", "customer"], name: "index_facility_welcomes_on_facility_id_and_customer", unique: true
t.index ["facility_id"], name: "index_facility_welcomes_on_facility_id"
end
create_table "impressions", force: :cascade do |t|
+ t.datetime "created_at", null: false
t.bigint "event_id", null: false
- t.string "impressionable_type", null: false
t.bigint "impressionable_id", null: false
- t.datetime "created_at", null: false
+ t.string "impressionable_type", null: false
t.datetime "updated_at", null: false
t.index ["event_id", "impressionable_type", "impressionable_id"], name: "uk_index_impressions_on_event_and_impressionable", unique: true
t.index ["event_id"], name: "index_impressions_on_event_id"
@@ -148,41 +148,41 @@
end
create_table "notices", id: :serial, force: :cascade do |t|
- t.string "title"
- t.string "slug"
- t.boolean "published"
t.datetime "created_at", precision: nil, null: false
- t.datetime "updated_at", precision: nil, null: false
t.string "notice_type"
+ t.boolean "published"
+ t.string "slug"
+ t.string "title"
+ t.datetime "updated_at", precision: nil, null: false
t.index ["slug"], name: "index_notices_on_slug", unique: true
end
create_table "old_analytics", id: :serial, force: :cascade do |t|
- t.string "sessionID"
- t.datetime "time", precision: nil
t.string "cookieID"
- t.string "service", null: false
- t.decimal "lat", null: false
- t.decimal "long", null: false
- t.decimal "facility"
t.boolean "dirClicked", default: false
t.string "dirType"
+ t.decimal "facility"
+ t.decimal "lat", null: false
+ t.decimal "long", null: false
+ t.string "service", null: false
+ t.string "sessionID"
+ t.datetime "time", precision: nil
end
create_table "old_impressions", id: :serial, force: :cascade do |t|
- t.string "impressionable_type"
- t.integer "impressionable_id"
- t.integer "user_id"
- t.string "controller_name"
t.string "action_name"
- t.string "view_name"
- t.string "request_hash"
+ t.string "controller_name"
+ t.datetime "created_at", precision: nil
+ t.integer "impressionable_id"
+ t.string "impressionable_type"
t.string "ip_address"
- t.string "session_hash"
t.text "message"
t.text "referrer"
- t.datetime "created_at", precision: nil
+ t.string "request_hash"
+ t.string "session_hash"
t.datetime "updated_at", precision: nil
+ t.integer "user_id"
+ t.string "view_name"
t.index ["controller_name", "action_name", "ip_address"], name: "controlleraction_ip_index"
t.index ["controller_name", "action_name", "request_hash"], name: "controlleraction_request_index"
t.index ["controller_name", "action_name", "session_hash"], name: "controlleraction_session_index"
@@ -195,44 +195,44 @@
create_table "old_listed_options", id: :serial, force: :cascade do |t|
t.integer "analytic_id"
- t.string "sessionID", null: false
- t.datetime "time", precision: nil, null: false
t.string "facility", null: false
t.decimal "position", null: false
+ t.string "sessionID", null: false
+ t.datetime "time", precision: nil, null: false
t.decimal "total", null: false
t.index ["analytic_id"], name: "index_old_listed_options_on_analytic_id"
end
create_table "services", force: :cascade do |t|
- t.string "name", null: false
t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
t.string "key", null: false
+ t.string "name", null: false
+ t.datetime "updated_at", null: false
t.index ["key"], name: "index_services_on_key", unique: true
t.index ["name"], name: "index_services_on_name", unique: true
end
create_table "statuses", id: :serial, force: :cascade do |t|
+ t.string "changetype"
t.datetime "created_at", precision: nil, null: false
- t.datetime "updated_at", precision: nil, null: false
t.integer "fid"
- t.string "changetype"
+ t.datetime "updated_at", precision: nil, null: false
end
create_table "users", id: :serial, force: :cascade do |t|
- t.string "name"
- t.string "email", default: "", null: false
- t.datetime "created_at", precision: nil
- t.datetime "updated_at", precision: nil
- t.boolean "admin", default: false
t.boolean "activation_email_sent", default: false
- t.string "phone_number"
- t.boolean "verified", default: false
+ t.boolean "admin", default: false
+ t.datetime "created_at", precision: nil
+ t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
- t.string "reset_password_token"
- t.datetime "reset_password_sent_at", precision: nil
- t.datetime "remember_created_at", precision: nil
+ t.string "name"
t.string "organization"
+ t.string "phone_number"
+ t.datetime "remember_created_at", precision: nil
+ t.datetime "reset_password_sent_at", precision: nil
+ t.string "reset_password_token"
+ t.datetime "updated_at", precision: nil
+ t.boolean "verified", default: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
@@ -245,21 +245,21 @@
end
create_table "visits", force: :cascade do |t|
- t.string "uuid", null: false
- t.string "session_id", null: false
t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
t.decimal "lat"
t.decimal "long"
+ t.string "session_id", null: false
+ t.datetime "updated_at", null: false
+ t.string "uuid", null: false
t.index ["session_id"], name: "index_visits_on_session_id"
t.index ["uuid", "session_id"], name: "index_visits_on_uuid_and_session_id", unique: true
t.index ["uuid"], name: "index_visits_on_uuid"
end
create_table "zones", id: :serial, force: :cascade do |t|
- t.string "name", null: false
- t.text "description"
t.datetime "created_at", precision: nil, null: false
+ t.text "description"
+ t.string "name", null: false
t.datetime "updated_at", precision: nil, null: false
end
diff --git a/docs/plans/README.md b/docs/plans/README.md
index f7bf217c..583fbf92 100644
--- a/docs/plans/README.md
+++ b/docs/plans/README.md
@@ -56,6 +56,7 @@ Each `tracker.md` file should include:
| Plan | Status | Progress | Last Updated |
|------|--------|----------|--------------|
+| [Rails 8.1 Upgrade](./rails-81-upgrade/plan.md) | Complete | 22/22 (100%) | 2026-03-15 |
| [RuboCop Remediation](./rubocop-remediation/plan.md) | Complete | 64/64 (100%) | 2026-03-14 |
| [Test Coverage Implementation](./test-coverage-implementation/plan.md) | Complete | 24/24 (100%) | 2026-01-26 |
diff --git a/docs/plans/rails-81-upgrade/plan.md b/docs/plans/rails-81-upgrade/plan.md
new file mode 100644
index 00000000..ccc7614b
--- /dev/null
+++ b/docs/plans/rails-81-upgrade/plan.md
@@ -0,0 +1,386 @@
+# Rails 8.1 Upgrade Plan
+
+## Status: COMPLETE
+
+## Created: 2026-03-15
+
+## Goal
+
+Upgrade the Linkvan API application from Rails 8.0 to Rails 8.1 while maintaining full test coverage and zero RuboCop offenses.
+
+## Current State
+
+- **Current Rails Version**: 8.0.3
+- **Target Rails Version**: 8.1.x
+- **Ruby Version**: 3.4.5 (compatible with Rails 8.1)
+- **load_defaults**: 8.0
+- **Test Suite**: 1912 examples, 0 failures
+- **RuboCop**: 0 offenses
+
+## Analysis Summary
+
+### Rails 8.0 → 8.1 Changes
+
+**Breaking Changes:**
+1. **schema.rb columns sorted alphabetically** - Active Record now sorts table columns in `schema.rb` alphabetically by default
+
+**No Breaking Changes for This App:**
+- All other changes in Rails 8.1 are minimal and non-breaking for this application
+
+### JavaScript Dependencies
+
+| Package | Current | Required for 8.1 | Status |
+|---------|---------|------------------|--------|
+| `@rails/actioncable` | ^8.0.300 | ^8.1.0 | ⚠️ Update needed |
+| `@rails/actiontext` | ^8.0.300 | ^8.1.0 | ⚠️ Update needed |
+| `@rails/activestorage` | ^8.0.300 | ^8.1.0 | ⚠️ Update needed |
+| `@hotwired/turbo-rails` | ^8.0.18 | ^8.1.0 | ⚠️ Update needed |
+| `@hotwired/stimulus` | ^3.2.2 | ^3.2.2 | ✅ OK |
+| `@rails/request.js` | ^0.0.12 | ^0.0.12 | ✅ OK |
+| `trix` | ^2.1.4 | ^2.1.4 | ✅ OK |
+| `sass` | ^1.77.8 | ^1.77.8 | ✅ OK |
+| `bulma` | ^1.0.2 | ^1.0.2 | ✅ OK |
+| `@fortawesome/fontawesome-free` | ^6.5.1 | ^6.5.1 | ✅ OK |
+
+### Ruby Gems Compatibility
+
+All gems in Gemfile are compatible with Rails 8.1:
+- **devise**: 4.9.3 ✅
+- **puma**: 6.4.2 ✅
+- **redis**: 5.4.1 ✅
+- **view_component**: ✅
+- **pagy**: ✅
+- **hotwire-rails**: ✅
+- **turbo-rails**: ✅
+
+---
+
+## Priority System
+
+- **CRITICAL** - Must complete for successful upgrade
+- **HIGH** - Should complete for full compatibility
+- **MEDIUM** - Recommended for best practices
+- **LOW** - Optional improvements
+
+---
+
+## Manual Test Protocol
+
+**What "Manual Test" Means:** At specific checkpoints, I will **ask you** (the user) to test the application manually in your browser/local environment. I cannot run browser-based tests myself.
+
+**Protocol:**
+1. I will pause execution at each manual test checkpoint
+2. I will tell you exactly what to test and how
+3. You test and report back pass/fail
+4. I continue based on your feedback
+
+---
+
+## Implementation Stages
+
+### Stage 1: CRITICAL - Pre-Upgrade Preparation
+
+**Focus:** Ensure test suite passes and create backup point.
+
+#### 1.1 Run Full Test Suite
+- **Priority:** CRITICAL
+- **Type:** Verification
+- **Command:** `bin/rspec`
+- **Expected:** 1912 examples, 0 failures
+- **Description:** Verify current test suite passes before making any changes
+
+#### 1.2 Run RuboCop Check
+- **Priority:** CRITICAL
+- **Type:** Verification
+- **Command:** `bin/rubocop`
+- **Expected:** 0 offenses
+- **Description:** Verify no RuboCop offenses before upgrade
+
+#### 1.3 Commit Current State
+- **Priority:** CRITICAL
+- **Type:** Version Control
+- **Description:** Create a commit to preserve current working state
+
+**Stage 1 Total: 3 tasks**
+
+---
+
+### Stage 2: CRITICAL - Update Ruby Gems
+
+**Focus:** Update Rails and related gems.
+
+#### 2.1 Update Rails Version in Gemfile
+- **Priority:** CRITICAL
+- **Type:** Configuration
+- **Location:** `Gemfile` line 7
+- **Change:**
+ ```ruby
+ # Before
+ gem "rails", "~> 8.0.3"
+
+ # After
+ gem "rails", "~> 8.1.0"
+ ```
+- **Description:** Update Rails version constraint to 8.1.x
+
+#### 2.2 Run Bundle Update
+- **Priority:** CRITICAL
+- **Type:** Dependency Update
+- **Command:** `bundle update rails`
+- **Description:** Update Rails and all dependencies
+
+#### 2.3 Smoke Test - App Boots
+- **Priority:** HIGH
+- **Type:** Manual Verification
+- **Command:** `bin/rails console`
+- **Description:** Verify Rails can load without errors
+- **Manual Test:** Type `Rails.root` in console to confirm app is loaded
+
+**Stage 2 Total: 3 tasks**
+
+---
+
+### Stage 3: CRITICAL - Handle Framework Defaults (Gradual)
+
+**Focus:** Configure new Rails 8.1 defaults using gradual approach per Rails guide.
+
+#### 3.1 Run bin/rails app:update
+- **Priority:** CRITICAL
+- **Type:** Code Generation
+- **Command:** `bin/rails app:update`
+- **Description:** Run Rails update task to generate new framework defaults file
+
+#### 3.2 Review new_framework_defaults_8_1.rb
+- **Priority:** CRITICAL
+- **Type:** Configuration Review
+- **Location:** `config/initializers/new_framework_defaults_8_1.rb`
+- **Description:** Review each setting - keep defaults disabled initially
+
+#### 3.3 Test with Defaults Disabled
+- **Priority:** HIGH
+- **Type:** Verification
+- **Command:** `bin/rspec`
+- **Description:** Run tests with load_defaults still at 8.0 to verify base upgrade
+
+#### 3.4 Manual Test - Core Functionality
+- **Priority:** HIGH
+- **Type:** Manual Verification
+- **Description:** Test key app functionality manually
+- **Manual Tests:**
+ - [ ] Home page loads
+ - [ ] Login/logout works
+ - [ ] Admin dashboard accessible (if applicable)
+ - [ ] API endpoints respond correctly
+- **Note:** This is the critical manual test before enabling new defaults
+
+#### 3.5 Enable Defaults Gradually
+- **Priority:** MEDIUM
+- **Type:** Configuration
+- **Location:** `config/initializers/new_framework_defaults_8_1.rb`
+- **Description:** Per Rails guide - enable defaults one by one, testing after each
+
+#### 3.6 Manual Test - With New Defaults
+- **Priority:** HIGH
+- **Type:** Manual Verification
+- **Description:** After enabling defaults, verify app still works
+- **Manual Tests:**
+ - [ ] Core pages still load
+ - [ ] Database operations work
+ - [ ] No new errors in logs
+
+#### 3.7 Update config.load_defaults
+- **Priority:** CRITICAL
+- **Type:** Configuration
+- **Location:** `config/application.rb`
+- **Change:** `config.load_defaults 8.1`
+- **Description:** Only update AFTER all defaults verified
+
+#### 3.8 Cleanup
+- **Priority:** LOW
+- **Type:** Cleanup
+- **Description:** Remove new_framework_defaults_8_1.rb after fully upgraded
+
+**Stage 3 Total: 8 tasks**
+
+---
+
+### Stage 4: HIGH - Update JavaScript Dependencies
+
+**Focus:** Update Rails JavaScript packages to 8.1.
+
+#### 4.1 Update package.json Rails Packages
+- **Priority:** HIGH
+- **Type:** Configuration
+- **Location:** `package.json`
+- **Changes:**
+ ```json
+ "@rails/actioncable": "^8.1.0",
+ "@rails/actiontext": "^8.1.0",
+ "@rails/activestorage": "^8.1.0"
+ ```
+- **Description:** Update Rails JavaScript packages to 8.1 (keep turbo-rails at ^8.0)
+
+#### 4.2 Install JavaScript Dependencies
+- **Priority:** HIGH
+- **Type:** Dependency Update
+- **Command:** `bin/rails javascript:install` or `npm install`
+- **Description:** Install updated JavaScript packages
+
+**Stage 4 Total: 2 tasks**
+
+---
+
+### Stage 5: HIGH - Schema Changes
+
+**Focus:** Handle schema.rb alphabetical sorting.
+
+#### 5.1 Review schema.rb Changes
+- **Priority:** HIGH
+- **Type:** Verification
+- **Location:** `db/schema.rb`
+- **Description:** After running migrations, review schema.rb to see column order changes
+- **Note:** This is a non-breaking change - columns will be sorted alphabetically
+
+#### 5.2 Consider Using structure.sql (Optional)
+- **Priority:** LOW
+- **Type:** Configuration
+- **Location:** `config/application.rb`
+- **Alternative:** If alphabetical sorting causes noisy diffs, consider using `structure.sql` instead
+- **Description:** Alternative schema dump format preserves exact column order
+
+**Stage 5 Total: 2 tasks**
+
+---
+
+### Stage 6: CRITICAL - Verification
+
+**Focus:** Verify upgrade successful.
+
+#### 6.1 Run Test Suite
+- **Priority:** CRITICAL
+- **Type:** Verification
+- **Command:** `bin/rspec`
+- **Expected:** All tests pass (1912 examples, 0 failures)
+- **Description:** Verify full test suite passes after upgrade
+
+#### 6.2 Run RuboCop
+- **Priority:** CRITICAL
+- **Type:** Verification
+- **Command:** `bin/rubocop`
+- **Expected:** 0 offenses
+- **Description:** Verify no RuboCop offenses introduced
+
+#### 6.3 Verify Rails Version
+- **Priority:** CRITICAL
+- **Type:** Verification
+- **Command:** `bin/rails --version`
+- **Expected:** Rails 8.1.x
+- **Description:** Confirm Rails version updated
+
+#### 6.4 Manual Test - Final Verification
+- **Priority:** HIGH
+- **Type:** Manual Verification
+- **Description:** Final manual smoke test of key functionality
+- **Manual Tests:**
+ - [ ] Home page loads
+ - [ ] Login/logout works
+ - [ ] Admin dashboard (if applicable)
+ - [ ] Create/Edit/Delete operations work
+ - [ ] API endpoints return expected responses
+ - [ ] Check for any errors in logs
+
+**Stage 6 Total: 4 tasks**
+
+---
+
+## Implementation Guidelines
+
+### Pre-Upgrade Checklist
+
+- [ ] Full test suite passing
+- [ ] Zero RuboCop offenses
+- [ ] Recent backup/commit of current state
+
+### During Upgrade
+
+1. **Gemfile changes** - Always run `bundle update rails` after changing Rails version
+2. **Framework defaults** - Review and enable new defaults in generated file
+3. **JavaScript** - Update npm packages after Ruby gems
+4. **Schema changes** - Expect changes in db/schema.rb (alphabetical sorting)
+
+### Testing Strategy
+
+1. **Before changes:** Run `bin/rspec` to establish baseline
+2. **After Gemfile change:** Run `bundle update rails` and check for errors
+3. **After app:update:** Review generated files carefully
+4. **After complete:** Run full test suite and RuboCop
+
+---
+
+## Quality Checks
+
+### Stage 1 Completion Criteria
+- [ ] Test suite passes (1912 examples, 0 failures)
+- [ ] RuboCop shows 0 offenses
+- [ ] Current state committed to git
+
+### Stage 2 Completion Criteria
+- [ ] Gemfile updated to Rails 8.1.x
+- [ ] Bundle update successful (no errors)
+- [ ] Smoke test: app boots in console
+
+### Stage 3 Completion Criteria
+- [ ] new_framework_defaults_8_1.rb reviewed
+- [ ] Tests pass with defaults disabled (load_defaults still at 8.0)
+- [ ] Manual test: core functionality works
+- [ ] Defaults enabled gradually (one by one or batch)
+- [ ] Manual test: app works with new defaults
+- [ ] config.load_defaults set to 8.1
+- [ ] Old defaults file removed
+
+### Stage 4 Completion Criteria
+- [ ] package.json updated
+- [ ] JavaScript dependencies installed
+
+### Stage 5 Completion Criteria
+- [ ] Schema changes reviewed
+- [ ] No data loss or corruption
+
+### Stage 6 Completion Criteria
+- [ ] All tests passing
+- [ ] RuboCop at 0 offenses
+- [ ] Rails 8.1.x confirmed
+- [ ] Development server starts without errors
+
+---
+
+## Rollback Plan
+
+If issues occur:
+
+1. **Revert Gemfile** - Change back to `~> 8.0.3` and run `bundle install`
+2. **Revert config/application.rb** - Set `config.load_defaults 8.0`
+3. **Revert package.json** - Restore previous versions
+4. **Run git checkout** - Restore any modified files
+
+---
+
+## Estimated Time
+
+| Stage | Tasks | Estimated Time |
+|-------|-------|----------------|
+| 1 - Pre-Upgrade | 3 | 10 minutes |
+| 2 - Update Gems | 3 | 15 minutes |
+| 3 - Framework Defaults (Gradual) | 8 | 25 minutes |
+| 4 - JavaScript | 2 | 10 minutes |
+| 5 - Schema | 2 | 5 minutes |
+| 6 - Verification | 4 | 15 minutes |
+| **TOTAL** | **22** | **~80 minutes** |
+
+---
+
+## Related Documentation
+
+- [Rails Upgrade Guide](https://guides.rubyonrails.org/upgrading_ruby_on_rails.html)
+- [Rails 8.1 Release Notes](https://guides.rubyonrails.org/8_1_release_notes.html)
+- [AGENTS.md](../../AGENTS.md) - Project conventions
diff --git a/docs/plans/rails-81-upgrade/tracker.md b/docs/plans/rails-81-upgrade/tracker.md
new file mode 100644
index 00000000..0234c14a
--- /dev/null
+++ b/docs/plans/rails-81-upgrade/tracker.md
@@ -0,0 +1,287 @@
+# Rails 8.1 Upgrade Tracker
+
+## Plan Reference
+
+[plan.md](./plan.md)
+
+---
+
+## Created: 2026-03-15
+
+## Last Updated: 2026-03-15
+
+---
+
+## Summary
+
+| Priority | Total | Not Started | In Progress | Completed | Blocked |
+|----------|-------|-------------|-------------|-----------|---------|
+| CRITICAL | 11 | 0 | 0 | 11 | 0 |
+| HIGH | 7 | 0 | 0 | 7 | 0 |
+| MEDIUM | 1 | 0 | 0 | 1 | 0 |
+| LOW | 2 | 0 | 0 | 2 | 0 |
+| **TOTAL**| **21**| **0** | **0** | **21** | **0** |
+
+**Current Rails Version:** 8.1.2
+**Target Rails Version:** 8.1.x
+
+---
+
+## Stage 1: CRITICAL - Pre-Upgrade Preparation
+
+**Focus:** Ensure test suite passes and create backup point.
+
+### Item Tables
+
+#### 1.1 - Run Full Test Suite
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 1.1 | CRITICAL | ✅ Completed | Run `bin/rspec` - 1912 examples, 0 failures |
+
+#### 1.2 - Run RuboCop Check
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 1.2 | CRITICAL | ✅ Completed | Run `bin/rubocop` - 0 offenses |
+
+#### 1.3 - Commit Current State
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 1.3 | CRITICAL | ✅ Completed | Working directory clean, no commit needed |
+
+---
+
+## Stage 2: CRITICAL - Update Ruby Gems
+
+**Focus:** Update Rails and related gems.
+
+### Item Tables
+
+#### 2.1 - Update Rails Version in Gemfile
+
+| ID | Priority | Status | File | Notes |
+|----|----------|--------|------|-------|
+ | 2.1 | CRITICAL | ✅ Completed | Gemfile | Change `~> 8.0.3` to `~> 8.1.0` |
+
+#### 2.2 - Run Bundle Update
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 2.2 | CRITICAL | ✅ Completed | Run `bundle update rails` |
+
+#### 2.3 - Smoke Test - App Boots
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 2.3 | HIGH | ✅ Completed | Run `bin/rails console`, type `Rails.root` to verify |
+
+---
+
+## Stage 3: CRITICAL - Handle Framework Defaults (Gradual)
+
+**Focus:** Configure new Rails 8.1 defaults using gradual approach per Rails guide.
+
+### Item Tables
+
+#### 3.1 - Run bin/rails app:update
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.1 | CRITICAL | ✅ Completed | Run `bin/rails app:update` to generate defaults file |
+
+#### 3.2 - Review new_framework_defaults_8_1.rb
+
+| ID | Priority | Status | File | Notes |
+|----|----------|--------|------|-------|
+ | 3.2 | CRITICAL | ✅ Completed | config/initializers/new_framework_defaults_8_1.rb | Review settings, keep disabled initially |
+
+#### 3.3 - Test with Defaults Disabled
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.3 | HIGH | ✅ Completed | Run tests with load_defaults still at 8.0 |
+
+#### 3.4 - Manual Test - Core Functionality
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.4 | HIGH | ✅ Completed | Test: home page, login, admin, API endpoints |
+
+#### 3.5 - Enable Defaults Gradually
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.5 | MEDIUM | ✅ Completed | Enable defaults one by one per Rails guide |
+
+#### 3.6 - Manual Test - With New Defaults
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.6 | HIGH | ✅ Completed | Verify core functionality works with new defaults |
+
+#### 3.7 - Update config.load_defaults
+
+| ID | Priority | Status | File | Notes |
+|----|----------|--------|------|-------|
+ | 3.7 | CRITICAL | ✅ Completed | config/application.rb | Change to 8.1 AFTER defaults verified |
+
+#### 3.8 - Cleanup
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 3.8 | LOW | ✅ Completed | Remove new_framework_defaults_8_1.rb after upgrade complete |
+
+---
+
+## Stage 4: HIGH - Update JavaScript Dependencies
+
+**Focus:** Update Rails JavaScript packages to 8.1.
+
+### Item Tables
+
+#### 4.1 - Update package.json Rails Packages
+
+| ID | Priority | Status | File | Notes |
+|----|----------|--------|------|-------|
+ | 4.1 | HIGH | ✅ Completed | package.json | Update @rails/* to ^8.1.0 |
+
+#### 4.2 - Install JavaScript Dependencies
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 4.2 | HIGH | ✅ Completed | Run `npm install` or `bin/rails javascript:install` |
+
+---
+
+## Stage 5: HIGH - Schema Changes
+
+**Focus:** Handle schema.rb alphabetical sorting.
+
+### Item Tables
+
+#### 5.1 - Review schema.rb Changes
+
+| ID | Priority | Status | File | Notes |
+|----|----------|--------|------|-------|
+ | 5.1 | HIGH | ✅ Completed | db/schema.rb | Review column order changes |
+
+#### 5.2 - Consider Using structure.sql
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 5.2 | LOW | ✅ Completed | Optional: use structure.sql to preserve column order |
+
+---
+
+## Stage 6: CRITICAL - Verification
+
+**Focus:** Verify upgrade successful.
+
+### Item Tables
+
+#### 6.1 - Run Test Suite
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 6.1 | CRITICAL | ✅ Completed | Run `bin/rspec` - verify all tests pass |
+
+#### 6.2 - Run RuboCop
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 6.2 | CRITICAL | ✅ Completed | Run `bin/rubocop` - verify 0 offenses |
+
+#### 6.3 - Verify Rails Version
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 6.3 | CRITICAL | ✅ Completed | Run `bin/rails --version` - confirm 8.1.x |
+
+#### 6.4 - Manual Test - Final Verification
+
+| ID | Priority | Status | Notes |
+|----|----------|--------|-------|
+ | 6.4 | HIGH | ✅ Completed | Final manual smoke test: home, login, admin, CRUD, API |
+
+---
+
+## Dependencies
+
+### Stage Dependencies
+
+- **Stage 1** must complete before all other stages
+- **Stage 2** must complete before Stage 3
+- **Stage 3** must complete before Stage 4
+- **Stage 4** should complete before Stage 6
+- **Stage 5** can run in parallel with Stage 4 or 6
+- **Stage 6** is final verification - must complete last
+
+### Blockers
+
+None identified at this time.
+
+---
+
+## Progress Tracking
+
+```
+Stage 1 (CRITICAL): ███████████████████████ 3/3 items completed (100%)
+Stage 2 (CRITICAL): ███████████████████████ 3/3 items completed (100%)
+Stage 3 (CRITICAL): ███████████████████████ 8/8 items completed (100%)
+Stage 4 (HIGH): ███████████████████████ 2/2 items completed (100%)
+Stage 5 (HIGH): ███████████████████████ 2/2 items completed (100%)
+Stage 6 (CRITICAL): ███████████████████████ 4/4 items completed (100%)
+Overall: ███████████████████████ 22/22 items completed (100%)
+```
+
+---
+
+## Status Legend
+
+| Icon | Status | Description |
+|------|--------|-------------|
+| ⬜ | Not Started | Item has not been started |
+| 🔄 | In Progress | Item is currently being worked on |
+| ✅ | Completed | Item has been successfully implemented and verified |
+| ⏸️ | On Hold | Item is paused indefinitely |
+| 🚫 | Blocked | Item has blockers preventing progress |
+
+---
+
+## Change Log
+
+| Date | Change | Author |
+|------|--------|--------|
+| 2026-03-15 | All tasks completed - Rails 8.1.2 upgrade finished | Assistant |
+| 2026-03-15 | Initial plan and tracker creation | Assistant |
+
+---
+
+## Notes
+
+- **Manual tests**: I will ask YOU to test in your browser - I cannot do browser-based testing
+- Rails 8.1 is a minor upgrade with minimal breaking changes
+- Primary change is alphabetical sorting of schema.rb columns
+- JavaScript packages (@rails/*) need updating to match Ruby gem version
+- All gems in Gemfile are already compatible with Rails 8.1
+- **Gradual Framework Defaults**: Per Rails guide - test with defaults disabled first, then enable gradually
+- Keep `config.load_defaults 8.0` until all new defaults are verified working
+
+## Pre-Upgrade Checklist
+
+- [ ] Current tests passing
+- [ ] Zero RuboCop offenses
+- [ ] Recent git commit
+- [ ] Review Gemfile.lock changes after bundle update
+- [ ] Review db/schema.rb changes after migrations
+
+## Rollback Steps
+
+If issues occur:
+1. `git checkout Gemfile Gemfile.lock`
+2. `bundle install`
+3. `git checkout config/application.rb` (revert load_defaults)
+4. `git checkout package.json`
+5. `npm install`
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..e06a21e5
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,507 @@
+{
+ "name": "linkvan-api",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "linkvan-api",
+ "version": "0.1.0",
+ "dependencies": {
+ "@fortawesome/fontawesome-free": "^6.5.1",
+ "@hotwired/stimulus": "^3.2.2",
+ "@hotwired/turbo-rails": "^8.0.18",
+ "@rails/actioncable": "^8.1.0",
+ "@rails/actiontext": "^8.1.0",
+ "@rails/activestorage": "^8.1.0",
+ "@rails/request.js": "^0.0.12",
+ "babel-preset-react": "^6.24.1",
+ "bulma": "^1.0.2",
+ "bulma-tooltip": "^3.0.2",
+ "flatpickr": "^4.6.9",
+ "sass": "^1.77.8",
+ "trix": "^2.1.4"
+ },
+ "devDependencies": {
+ "jquery": "^3.6.0"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-free": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz",
+ "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==",
+ "hasInstallScript": true,
+ "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@hotwired/stimulus": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz",
+ "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==",
+ "license": "MIT"
+ },
+ "node_modules/@hotwired/turbo": {
+ "version": "8.0.18",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-8.0.18.tgz",
+ "integrity": "sha512-dG0N7khQsP8sujclodQE3DYkI4Lq7uKA04fhT0DCC/DwMgn4T4WM3aji6EC6+iCfABQeJncY0SraXqVeOq0vvQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@hotwired/turbo-rails": {
+ "version": "8.0.18",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-8.0.18.tgz",
+ "integrity": "sha512-iRxd922VSTVH0NzlLDx9T9S8Ep0NPnrLCKva31WIMLNApJgUZKa/a90EFiBa2G6Do+x4xuKZk53dlweiwTyXkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@hotwired/turbo": "^8.0.18",
+ "@rails/actioncable": ">=7.0"
+ }
+ },
+ "node_modules/@rails/actioncable": {
+ "version": "8.1.200",
+ "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-8.1.200.tgz",
+ "integrity": "sha512-on0DSb7AFUkq1ocxivDNQhhGW/RQpY91zvRVyyaEWP4gOOZWy33P/UyxjQk74IENWNrTqs8+zOGHwTjiiFruRw==",
+ "license": "MIT"
+ },
+ "node_modules/@rails/actiontext": {
+ "version": "8.1.200",
+ "resolved": "https://registry.npmjs.org/@rails/actiontext/-/actiontext-8.1.200.tgz",
+ "integrity": "sha512-l4OuFLZbQB+A3yCNOzX0Y4Tn7XSekfuYjy20TiBuf+4Q5JKTnfuybHrQ5cDk/9DbwWE9sdWcdbODFUIYd4tczg==",
+ "license": "MIT",
+ "dependencies": {
+ "@rails/activestorage": ">= 8.1.0-alpha"
+ },
+ "peerDependencies": {
+ "trix": "^2.0.0"
+ }
+ },
+ "node_modules/@rails/activestorage": {
+ "version": "8.1.200",
+ "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-8.1.200.tgz",
+ "integrity": "sha512-bPZqv447REBd1NQfba//FjgUqbUd93zKh7+BWhh3vRZ7Nm+RUgm6c5GbWctmik/rMHjsruTHhusYGyoKyf60pg==",
+ "license": "MIT",
+ "dependencies": {
+ "spark-md5": "^3.0.1"
+ }
+ },
+ "node_modules/@rails/request.js": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.12.tgz",
+ "integrity": "sha512-g3//JBja1s04Zflj7IoMLQuXza9i4ZvtLmm0r0dMwh1QQUs6rL2iKUOGGyERfLsd81SnXC5ucfVV//rtsDlEEA==",
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
+ }
+ },
+ "node_modules/babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==",
+ "license": "MIT"
+ },
+ "node_modules/babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==",
+ "license": "MIT"
+ },
+ "node_modules/babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-syntax-flow": "^6.18.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-display-name": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
+ "integrity": "sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-jsx": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-jsx-self": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
+ "integrity": "sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-jsx-source": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
+ "integrity": "sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-preset-flow": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
+ "integrity": "sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-transform-flow-strip-types": "^6.22.0"
+ }
+ },
+ "node_modules/babel-preset-react": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
+ "integrity": "sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-syntax-jsx": "^6.3.13",
+ "babel-plugin-transform-react-display-name": "^6.23.0",
+ "babel-plugin-transform-react-jsx": "^6.24.1",
+ "babel-plugin-transform-react-jsx-self": "^6.22.0",
+ "babel-plugin-transform-react-jsx-source": "^6.22.0",
+ "babel-preset-flow": "^6.23.0"
+ }
+ },
+ "node_modules/babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+ "license": "MIT",
+ "dependencies": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "node_modules/babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bulma": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bulma/-/bulma-1.0.2.tgz",
+ "integrity": "sha512-D7GnDuF6seb6HkcnRMM9E739QpEY9chDzzeFrHMyEns/EXyDJuQ0XA0KxbBl/B2NTsKSoDomW61jFGFaAxhK5A==",
+ "license": "MIT"
+ },
+ "node_modules/bulma-tooltip": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz",
+ "integrity": "sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==",
+ "license": "MIT"
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+ "hasInstallScript": true,
+ "license": "MIT"
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flatpickr": {
+ "version": "4.6.13",
+ "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz",
+ "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==",
+ "license": "MIT"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+ "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jquery": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
+ "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "license": "MIT"
+ },
+ "node_modules/sass": {
+ "version": "1.77.8",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz",
+ "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spark-md5": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz",
+ "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==",
+ "license": "(WTFPL OR MIT)"
+ },
+ "node_modules/to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trix": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/trix/-/trix-2.1.4.tgz",
+ "integrity": "sha512-f0AGnqBV8J2qW+fCtVU71JmvzjcxnO5Xbbd6Cl2KrHVRpgXKDqNGTmDmQzNHWU7T2OgtwHwvNiN+OIf3Z3KmHQ==",
+ "license": "MIT"
+ }
+ }
+}
diff --git a/package.json b/package.json
index 66154d9e..40c8cd35 100644
--- a/package.json
+++ b/package.json
@@ -5,9 +5,9 @@
"@fortawesome/fontawesome-free": "^6.5.1",
"@hotwired/stimulus": "^3.2.2",
"@hotwired/turbo-rails": "^8.0.18",
- "@rails/actioncable": "^8.0.300",
- "@rails/actiontext": "^8.0.300",
- "@rails/activestorage": "^8.0.300",
+ "@rails/actioncable": "^8.1.0",
+ "@rails/actiontext": "^8.1.0",
+ "@rails/activestorage": "^8.1.0",
"@rails/request.js": "^0.0.12",
"babel-preset-react": "^6.24.1",
"bulma": "^1.0.2",
diff --git a/public/400.html b/public/400.html
index 282dbc8c..640de033 100644
--- a/public/400.html
+++ b/public/400.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The server cannot process the request due to a client error. Please check the request and try again. If you’re the application owner check the logs for more information.
+ The server cannot process the request due to a client error. Please check the request and try again. If you're the application owner check the logs for more information.
diff --git a/public/404.html b/public/404.html
index c0670bc8..d7f0f142 100644
--- a/public/404.html
+++ b/public/404.html
@@ -4,7 +4,7 @@
- The page you were looking for doesn’t exist (404 Not found)
+ The page you were looking for doesn't exist (404 Not found)
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The page you were looking for doesn’t exist. You may have mistyped the address or the page may have moved. If you’re the application owner check the logs for more information.
+ The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you're the application owner check the logs for more information.
diff --git a/public/406-unsupported-browser.html b/public/406-unsupported-browser.html
index 9532a9cc..43d2811e 100644
--- a/public/406-unsupported-browser.html
+++ b/public/406-unsupported-browser.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,7 +123,7 @@
Your browser is not supported.
Please upgrade your browser to continue.
diff --git a/public/422.html b/public/422.html
index 8bcf0601..f12fb4aa 100644
--- a/public/422.html
+++ b/public/422.html
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- The change you wanted was rejected. Maybe you tried to change something you didn’t have access to. If you’re the application owner check the logs for more information.
+ The change you wanted was rejected. Maybe you tried to change something you didn't have access to. If you're the application owner check the logs for more information.
diff --git a/public/500.html b/public/500.html
index d77718c3..e4eb18a7 100644
--- a/public/500.html
+++ b/public/500.html
@@ -4,7 +4,7 @@
- We’re sorry, but something went wrong (500 Internal Server Error)
+ We're sorry, but something went wrong (500 Internal Server Error)
@@ -35,12 +35,35 @@
font-weight: 400;
letter-spacing: -0.0025em;
line-height: 1.4;
- min-height: 100vh;
+ min-height: 100dvh;
place-items: center;
text-rendering: optimizeLegibility;
-webkit-text-size-adjust: 100%;
}
+ #error-description {
+ fill: #d30001;
+ }
+
+ #error-id {
+ fill: #f0eff0;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ body {
+ background: #101010;
+ color: #e0e0e0;
+ }
+
+ #error-description {
+ fill: #FF6161;
+ }
+
+ #error-id {
+ fill: #2c2c2c;
+ }
+ }
+
a {
color: inherit;
font-weight: 700;
@@ -83,13 +106,11 @@
}
main article br {
-
display: none;
@media(min-width: 48em) {
display: inline;
}
-
}
@@ -102,10 +123,10 @@
- We’re sorry, but something went wrong.
If you’re the application owner check the logs for more information.
+ We're sorry, but something went wrong.
If you're the application owner check the logs for more information.
diff --git a/yarn.lock b/yarn.lock
index 00d9608b..55c6098c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4,17 +4,17 @@
"@fortawesome/fontawesome-free@^6.5.1":
version "6.5.1"
- resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz#55cc8410abf1003b726324661ce5b0d1c10de258"
+ resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz"
integrity sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==
"@hotwired/stimulus@^3.2.2":
version "3.2.2"
- resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608"
+ resolved "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz"
integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==
"@hotwired/turbo-rails@^8.0.18":
version "8.0.18"
- resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.18.tgz#021d9556eec5bf6648b607531f4c0ec960706d84"
+ resolved "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-8.0.18.tgz"
integrity sha512-iRxd922VSTVH0NzlLDx9T9S8Ep0NPnrLCKva31WIMLNApJgUZKa/a90EFiBa2G6Do+x4xuKZk53dlweiwTyXkQ==
dependencies:
"@hotwired/turbo" "^8.0.18"
@@ -22,36 +22,36 @@
"@hotwired/turbo@^8.0.18":
version "8.0.18"
- resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.18.tgz#10ae3de450b955862f89e30c50d96d676813744e"
+ resolved "https://registry.npmjs.org/@hotwired/turbo/-/turbo-8.0.18.tgz"
integrity sha512-dG0N7khQsP8sujclodQE3DYkI4Lq7uKA04fhT0DCC/DwMgn4T4WM3aji6EC6+iCfABQeJncY0SraXqVeOq0vvQ==
-"@rails/actioncable@>=7.0", "@rails/actioncable@^8.0.300":
- version "8.0.300"
- resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.0.300.tgz#ae78fbb42ae688f66852206ba02fea3518749791"
- integrity sha512-X+jxLnyYciTciEeM9crFFsR6DCodCsnoQIzv4hEST6Lx1rEBEjNQbBopnyDT4gr7lBeHJNfb6fEcvZuWFxUSQg==
+"@rails/actioncable@^8.1.0", "@rails/actioncable@>=7.0":
+ version "8.1.200"
+ resolved "https://registry.npmjs.org/@rails/actioncable/-/actioncable-8.1.200.tgz"
+ integrity sha512-on0DSb7AFUkq1ocxivDNQhhGW/RQpY91zvRVyyaEWP4gOOZWy33P/UyxjQk74IENWNrTqs8+zOGHwTjiiFruRw==
-"@rails/actiontext@^8.0.300":
- version "8.0.300"
- resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-8.0.300.tgz#a5c89ef825f5e1b199456abc86c8f2f746227450"
- integrity sha512-3uIRBH7SsjlgbpZQTEsgZg9bdH2umdjCoXp02oRF1PzEi/TcOTQD/PXTthkRiXdo0sA6y3PMgJNiPs/JfW4JLQ==
+"@rails/actiontext@^8.1.0":
+ version "8.1.200"
+ resolved "https://registry.npmjs.org/@rails/actiontext/-/actiontext-8.1.200.tgz"
+ integrity sha512-l4OuFLZbQB+A3yCNOzX0Y4Tn7XSekfuYjy20TiBuf+4Q5JKTnfuybHrQ5cDk/9DbwWE9sdWcdbODFUIYd4tczg==
dependencies:
- "@rails/activestorage" ">= 8.0.0-alpha"
+ "@rails/activestorage" ">= 8.1.0-alpha"
-"@rails/activestorage@>= 8.0.0-alpha", "@rails/activestorage@^8.0.300":
- version "8.0.300"
- resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-8.0.300.tgz#4c31cf2ae59033a1fbb90ba545ff216b5ea161f8"
- integrity sha512-vgugHjdH0wLM1+ajWdoiNNFphDsZrd349iJvfyVPC21IkMdJOnaBpF4eaV847cDqP/7mxxDZ4nkhc7dgQjGa4A==
+"@rails/activestorage@^8.1.0", "@rails/activestorage@>= 8.1.0-alpha":
+ version "8.1.200"
+ resolved "https://registry.npmjs.org/@rails/activestorage/-/activestorage-8.1.200.tgz"
+ integrity sha512-bPZqv447REBd1NQfba//FjgUqbUd93zKh7+BWhh3vRZ7Nm+RUgm6c5GbWctmik/rMHjsruTHhusYGyoKyf60pg==
dependencies:
spark-md5 "^3.0.1"
"@rails/request.js@^0.0.12":
version "0.0.12"
- resolved "https://registry.yarnpkg.com/@rails/request.js/-/request.js-0.0.12.tgz#3d1f73e7585141d9c4c2149a34476d128eb900bc"
+ resolved "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.12.tgz"
integrity sha512-g3//JBja1s04Zflj7IoMLQuXza9i4ZvtLmm0r0dMwh1QQUs6rL2iKUOGGyERfLsd81SnXC5ucfVV//rtsDlEEA==
anymatch@~3.1.2:
version "3.1.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz"
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
dependencies:
normalize-path "^3.0.0"
@@ -59,7 +59,7 @@ anymatch@~3.1.2:
babel-helper-builder-react-jsx@^6.24.1:
version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
+ resolved "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz"
integrity sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==
dependencies:
babel-runtime "^6.26.0"
@@ -68,17 +68,17 @@ babel-helper-builder-react-jsx@^6.24.1:
babel-plugin-syntax-flow@^6.18.0:
version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
+ resolved "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz"
integrity sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==
babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz"
integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
babel-plugin-transform-flow-strip-types@^6.22.0:
version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
+ resolved "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz"
integrity sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==
dependencies:
babel-plugin-syntax-flow "^6.18.0"
@@ -86,14 +86,14 @@ babel-plugin-transform-flow-strip-types@^6.22.0:
babel-plugin-transform-react-display-name@^6.23.0:
version "6.25.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
+ resolved "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz"
integrity sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-react-jsx-self@^6.22.0:
version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
+ resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz"
integrity sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
@@ -101,7 +101,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0:
babel-plugin-transform-react-jsx-source@^6.22.0:
version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
+ resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz"
integrity sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
@@ -109,7 +109,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0:
babel-plugin-transform-react-jsx@^6.24.1:
version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
+ resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz"
integrity sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==
dependencies:
babel-helper-builder-react-jsx "^6.24.1"
@@ -118,14 +118,14 @@ babel-plugin-transform-react-jsx@^6.24.1:
babel-preset-flow@^6.23.0:
version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
+ resolved "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz"
integrity sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
babel-preset-react@^6.24.1:
version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
+ resolved "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz"
integrity sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==
dependencies:
babel-plugin-syntax-jsx "^6.3.13"
@@ -137,7 +137,7 @@ babel-preset-react@^6.24.1:
babel-runtime@^6.22.0, babel-runtime@^6.26.0:
version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"
integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==
dependencies:
core-js "^2.4.0"
@@ -145,7 +145,7 @@ babel-runtime@^6.22.0, babel-runtime@^6.26.0:
babel-types@^6.26.0:
version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz"
integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==
dependencies:
babel-runtime "^6.26.0"
@@ -155,29 +155,29 @@ babel-types@^6.26.0:
binary-extensions@^2.0.0:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
braces@~3.0.2:
version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.1.1"
bulma-tooltip@^3.0.2:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz#2cf0abab1de2eba07f9d84eb7f07a8a88819ea92"
+ resolved "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz"
integrity sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==
bulma@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/bulma/-/bulma-1.0.2.tgz#47395a660755c9566db3cf981fd4e3a2b637af19"
+ resolved "https://registry.npmjs.org/bulma/-/bulma-1.0.2.tgz"
integrity sha512-D7GnDuF6seb6HkcnRMM9E739QpEY9chDzzeFrHMyEns/EXyDJuQ0XA0KxbBl/B2NTsKSoDomW61jFGFaAxhK5A==
"chokidar@>=3.0.0 <4.0.0":
version "3.5.3"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
@@ -192,102 +192,102 @@ bulma@^1.0.2:
core-js@^2.4.0:
version "2.6.12"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
esutils@^2.0.2:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
fill-range@^7.1.1:
version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
flatpickr@^4.6.9:
version "4.6.13"
- resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94"
+ resolved "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz"
integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==
fsevents@~2.3.2:
version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
glob-parent@~5.1.2:
version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
immutable@^4.0.0:
version "4.1.0"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
+ resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz"
integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
is-binary-path@~2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-extglob@^2.1.1:
version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^7.0.0:
version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
jquery@^3.6.0:
version "3.6.1"
- resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.1.tgz#fab0408f8b45fc19f956205773b62b292c147a16"
+ resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz"
integrity sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==
lodash@^4.17.4:
version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
picomatch@^2.0.4, picomatch@^2.2.1:
version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
readdirp@~3.6.0:
version "3.6.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
regenerator-runtime@^0.11.0:
version "0.11.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
sass@^1.77.8:
version "1.77.8"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd"
+ resolved "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz"
integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
@@ -296,27 +296,27 @@ sass@^1.77.8:
"source-map-js@>=0.6.2 <2.0.0":
version "1.0.2"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
spark-md5@^3.0.1:
version "3.0.2"
- resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc"
+ resolved "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz"
integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==
to-fast-properties@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz"
integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==
to-regex-range@^5.0.1:
version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
-trix@^2.1.4:
+trix@^2.0.0, trix@^2.1.4:
version "2.1.4"
- resolved "https://registry.yarnpkg.com/trix/-/trix-2.1.4.tgz#a2f1e37fec03c9050bc7ba1d56056e606389a46f"
+ resolved "https://registry.npmjs.org/trix/-/trix-2.1.4.tgz"
integrity sha512-f0AGnqBV8J2qW+fCtVU71JmvzjcxnO5Xbbd6Cl2KrHVRpgXKDqNGTmDmQzNHWU7T2OgtwHwvNiN+OIf3Z3KmHQ==