diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0a57bc09..487e137f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -104,7 +104,7 @@ jobs: yarn install --frozen-lockfile if: steps.changed-files.outputs.any_changed == 'true' - name: stylelint - uses: reviewdog/action-stylelint@v1.26.0 + uses: reviewdog/action-stylelint@v1.28.0 with: github_token: ${{ secrets.github_token }} reporter: github-pr-check diff --git a/Gemfile b/Gemfile index 8730c524..fe623de6 100644 --- a/Gemfile +++ b/Gemfile @@ -94,7 +94,7 @@ group :development, :test do gem "rspec-mocks" gem "rspec-rails", "~> 6.1" gem "rspec-sidekiq", "~> 5.0", require: false - gem "rubocop", "~> 1.64" + gem "rubocop", "~> 1.65" gem "rubocop-rails", "~> 2.25" gem "shoulda-matchers", "~> 6.2" gem "simplecov", require: false diff --git a/Gemfile.lock b/Gemfile.lock index fac0131b..583a7898 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -87,8 +87,8 @@ GEM i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) ast (2.4.2) base64 (0.2.0) bcrypt (3.1.20) @@ -105,7 +105,7 @@ GEM actionpack (>= 6.1) activemodel (>= 6.1) builder (3.3.0) - bullet (7.1.6) + bullet (7.2.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) carrierwave (2.1.1) @@ -124,7 +124,7 @@ GEM concurrent-ruby (1.3.3) connection_pool (2.4.1) crass (1.0.6) - cssbundling-rails (1.4.0) + cssbundling-rails (1.4.1) railties (>= 6.0.0) csv (3.3.0) database_cleaner (2.0.2) @@ -169,9 +169,9 @@ GEM dry-logic (~> 1.4) zeitwerk (~> 2.6) erubi (1.13.0) - et-orbi (1.2.7) + et-orbi (1.2.11) tzinfo - excon (0.110.0) + excon (0.111.0) factory_bot (6.4.5) activesupport (>= 5.0.0) factory_bot_rails (6.4.3) @@ -180,14 +180,14 @@ GEM fake_email_validator (1.0.11) activemodel mail - faker (3.4.1) + faker (3.4.2) i18n (>= 1.8.11, < 2) ffi (1.16.3) - fog-aws (3.23.0) + fog-aws (3.24.0) fog-core (~> 2.1) fog-json (~> 1.1) fog-xml (~> 0.1) - fog-core (2.4.0) + fog-core (2.5.0) builder excon (~> 0.71) formatador (>= 0.2, < 2.0) @@ -201,8 +201,8 @@ GEM fog-core nokogiri (>= 1.5.11, < 2.0.0) formatador (1.1.0) - fugit (1.9.0) - et-orbi (~> 1, >= 1.2.7) + fugit (1.11.0) + et-orbi (~> 1, >= 1.2.11) raabro (~> 1.4) glob (0.4.0) globalid (1.2.1) @@ -232,10 +232,10 @@ GEM image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) - jsbundling-rails (1.3.0) + jsbundling-rails (1.3.1) railties (>= 6.0.0) json (2.7.2) - json-schema (4.3.0) + json-schema (4.3.1) addressable (>= 2.8) jwt (2.8.2) base64 @@ -271,14 +271,14 @@ GEM method_source (1.1.0) mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2024.0604) + mime-types-data (3.2024.0702) mimemagic (0.4.3) nokogiri (~> 1) rake - mini_magick (4.13.1) + mini_magick (4.13.2) mini_mime (1.1.5) mini_portile2 (2.8.7) - minitest (5.24.0) + minitest (5.24.1) msgpack (1.7.2) multi_json (1.15.0) multi_xml (0.7.1) @@ -297,29 +297,30 @@ GEM timeout net-smtp (0.5.0) net-protocol - nio4r (2.7.0) - nokogiri (1.16.6) + nio4r (2.7.3) + nokogiri (1.16.7) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.4) bigdecimal (>= 3.0) openssl (3.2.0) orm_adapter (0.5.0) - parallel (1.24.0) - parser (3.3.2.0) + parallel (1.25.1) + parser (3.3.4.0) ast (~> 2.4.1) racc - pg (1.5.6) + pg (1.5.7) pghero (3.5.0) activerecord (>= 6) - prometheus-client (4.2.2) - public_suffix (5.0.4) + prometheus-client (4.2.3) + base64 + public_suffix (6.0.1) puma (6.4.2) nio4r (~> 2.0) pundit (2.3.2) activesupport (>= 3.0.0) raabro (1.4.0) - racc (1.8.0) + racc (1.8.1) rack (2.2.9) rack-test (2.1.0) rack (>= 1.3) @@ -351,7 +352,7 @@ GEM rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - rails_admin (3.1.2) + rails_admin (3.1.4) activemodel-serializers-xml (>= 1.0) kaminari (>= 0.14, < 2.0) nested_form (~> 0.3) @@ -374,8 +375,8 @@ GEM responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.2.8) - strscan (>= 3.0.9) + rexml (3.3.4) + strscan rolify (6.0.1) rotp (6.3.0) rouge (4.1.3) @@ -418,20 +419,20 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 8) rspec-support (3.13.1) - rubocop (1.64.1) + rubocop (1.65.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) + regexp_parser (>= 2.4, < 3.0) rexml (>= 3.2.5, < 4.0) rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.31.3) + rubocop-ast (1.32.0) parser (>= 3.3.1.0) - rubocop-rails (2.25.0) + rubocop-rails (2.25.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) @@ -442,7 +443,7 @@ GEM rubyzip (2.3.2) rufus-scheduler (3.9.1) fugit (~> 1.1, >= 1.1.6) - sanitize (6.1.1) + sanitize (6.1.2) crass (~> 1.0.2) nokogiri (>= 1.12.0) sassc (2.4.0) @@ -453,14 +454,14 @@ GEM sprockets (> 3.0) sprockets-rails tilt - sentry-rails (5.17.3) + sentry-rails (5.18.2) railties (>= 5.0) - sentry-ruby (~> 5.17.3) - sentry-ruby (5.17.3) + sentry-ruby (~> 5.18.2) + sentry-ruby (5.18.2) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) - sentry-sidekiq (5.17.3) - sentry-ruby (~> 5.17.3) + sentry-sidekiq (5.18.2) + sentry-ruby (~> 5.18.2) sidekiq (>= 3.0) shoulda-matchers (6.2.0) activesupport (>= 5.2.0) @@ -468,10 +469,10 @@ GEM connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) - sidekiq-scheduler (5.0.3) + sidekiq-scheduler (5.0.6) rufus-scheduler (~> 3.2) sidekiq (>= 6, < 8) - tilt (>= 1.4.0) + tilt (>= 1.4.0, < 3) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -487,7 +488,7 @@ GEM sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) - sprockets-rails (3.5.1) + sprockets-rails (3.5.2) actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) @@ -496,7 +497,7 @@ GEM sysexits (1.2.0) temple (0.10.3) thor (1.3.1) - tilt (2.3.0) + tilt (2.4.0) timeout (0.4.1) tldv (0.1.0) tldv-data (~> 1.0) @@ -515,7 +516,7 @@ GEM unf_ext (0.0.8.2) unicode-display_width (2.5.0) uniform_notifier (1.16.0) - view_component (3.12.1) + view_component (3.13.0) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) method_source (~> 1.0) @@ -530,7 +531,7 @@ GEM websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - zeitwerk (2.6.16) + zeitwerk (2.6.17) PLATFORMS ruby @@ -598,7 +599,7 @@ DEPENDENCIES rspec-mocks rspec-rails (~> 6.1) rspec-sidekiq (~> 5.0) - rubocop (~> 1.64) + rubocop (~> 1.65) rubocop-rails (~> 2.25) rubyzip (~> 2.3) sanitize diff --git a/lib/retrospring/version.rb b/lib/retrospring/version.rb index a104f1e7..950dca6a 100644 --- a/lib/retrospring/version.rb +++ b/lib/retrospring/version.rb @@ -15,9 +15,9 @@ module Retrospring def year = 2024 - def month = 3 + def month = 8 - def day = 19 + def day = 6 def patch = 0 diff --git a/lib/use_case/data_export/answers.rb b/lib/use_case/data_export/answers.rb index e9431e2e..d6b39329 100644 --- a/lib/use_case/data_export/answers.rb +++ b/lib/use_case/data_export/answers.rb @@ -5,17 +5,76 @@ module UseCase class Answers < UseCase::DataExport::Base def files = { "answers.json" => json_file!( - answers: user.answers.map(&method(:collect_answer)) - ) + answers: user.answers.map(&method(:collect_answer)), + ), } def collect_answer(answer) {}.tap do |h| column_names(::Answer).each do |field| h[field] = answer[field] + h[:related] = related_fields(answer) end end end + + def related_fields(answer) = { + question: question_for(answer), + comments: comments_for(answer), + } + + def question_for(answer) + return unless answer.question + + question = answer.question + {}.tap do |q| + q.merge!( + id: nil, + anonymous: false, + generated: false, + direct: false, + author: nil, + content: nil, + created_at: nil, + ) + + %i[id direct content created_at].each do |field| + q[field] = question[field] + end + + if question.generated? + q[:generated] = true + q[:anonymous] = true + elsif question.author_is_anonymous + q[:anonymous] = true + else + q[:author] = lean_user(question.user) + end + end + end + + def comments_for(answer) = [].tap do |c| + next if answer.comments.empty? + + answer.comments.order(:created_at).each do |comment| + c << { + id: comment.id, + author: lean_user(comment.user), + smile_count: comment.smile_count, + content: comment.content, + created_at: comment.created_at, + } + end + end + + def lean_user(user) + return unless user + + { + id: user.id, + screen_name: user.screen_name, + } + end end end end diff --git a/lib/use_case/data_export/theme.rb b/lib/use_case/data_export/theme.rb index cfd2ec46..d77d1e7c 100644 --- a/lib/use_case/data_export/theme.rb +++ b/lib/use_case/data_export/theme.rb @@ -3,20 +3,24 @@ module UseCase module DataExport class Theme < UseCase::DataExport::Base + include ThemeHelper + + MODEL_FIELDS = %i[id user_id created_at updated_at].freeze + def files return {} unless user.theme { "theme.json" => json_file!( - theme: theme_data - ) + theme: theme_data, + ), } end def theme_data {}.tap do |obj| - column_names(::Theme).each do |field| - obj[field] = user.theme[field] + (column_names(::Theme) - MODEL_FIELDS).each do |field| + obj[field] = "##{get_hex_color_from_theme_value(user.theme[field])}" end end end diff --git a/package.json b/package.json index 526551f8..f6ffa881 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,10 @@ }, "dependencies": { "@fontsource/lexend": "^4.5.15", - "@fortawesome/fontawesome-free": "^6.5.2", + "@fortawesome/fontawesome-free": "^6.6.0", "@github/hotkey": "^3.1.1", "@hotwired/stimulus": "^3.2.2", - "@hotwired/turbo-rails": "^8.0.4", + "@hotwired/turbo-rails": "^8.0.5", "@melloware/coloris": "^0.24.0", "@popperjs/core": "^2.11", "@rails/request.js": "^0.0.9", @@ -21,10 +21,10 @@ "croppr": "^2.3.1", "i18n-js": "^4.0", "js-cookie": "2.2.1", - "sass": "^1.77.6", + "sass": "^1.77.8", "sweetalert": "1.1.3", "toastify-js": "^1.12.0", - "typescript": "^5.5.2", + "typescript": "^5.5.4", "yarn": "^1.22.22" }, "devDependencies": { diff --git a/spec/lib/use_case/data_export/answers_spec.rb b/spec/lib/use_case/data_export/answers_spec.rb index 99335a91..178db881 100644 --- a/spec/lib/use_case/data_export/answers_spec.rb +++ b/spec/lib/use_case/data_export/answers_spec.rb @@ -9,15 +9,15 @@ describe UseCase::DataExport::Answers, :data_export do it "returns an empty set of answers" do expect(json_file("answers.json")).to eq( { - answers: [] - } + answers: [], + }, ) end end context "when user has made some answer" do let!(:answer) do - travel_to(Time.utc(2022, 12, 10, 13, 37, 42)) { FactoryBot.create(:answer, user:, content: "Yay, data export!") } + travel_to(Time.utc(2022, 12, 10, 13, 37, 42)) { FactoryBot.create(:answer, user:, content: "Yay, data export!", question: FactoryBot.build(:question, content: "awoo?")) } end it "returns the answers as json" do @@ -34,9 +34,280 @@ describe UseCase::DataExport::Answers, :data_export do updated_at: "2022-12-10T13:37:42.000Z", smile_count: 0, pinned_at: nil, + related: { + question: { + id: answer.question.id, + anonymous: true, + generated: false, + direct: true, + author: nil, + content: "awoo?", + created_at: "2022-12-10T13:37:42.000Z", + }, + comments: [], + }, } - ] - } + ], + }, + ) + end + end + + context "when user has made plenty of answers to many different question types" do + let(:other_user) { FactoryBot.create(:user, screen_name: "TomTurbo") } + + let!(:questions) do + [ + travel_to(Time.utc(2024, 8, 6, 13, 12, 0)) { FactoryBot.create(:question, user: other_user, content: "Sieben Zwiebeln sieden Bienen auf Trieben", author_is_anonymous: false, direct: false) }, + travel_to(Time.utc(2024, 8, 6, 13, 37, 42)) { FactoryBot.create(:question, user:, content: "Direct question from myself, to myself!", author_is_anonymous: false, direct: true) }, + travel_to(Time.utc(2024, 8, 6, 13, 37, 42)) { FactoryBot.create(:question, user:, content: "The funny lasaganga in oven question", author_is_anonymous: true, direct: true, author_identifier: "justask") }, + travel_to(Time.utc(2024, 8, 6, 13, 37, 42)) { FactoryBot.create(:question, user:, content: "Export is ready", author_is_anonymous: true, direct: true, author_identifier: "retrospring_exporter") }, + travel_to(Time.utc(2024, 8, 6, 13, 37, 50)) { FactoryBot.create(:question, user:, content: "delete your account", author_is_anonymous: true, direct: true) } + ] + end + + let!(:answers) do + questions.map.with_index do |question, i| + travel_to(Time.utc(2024, 8, 6, 13, 37, i)) do + FactoryBot.create(:answer, user:, content: "Yay, data export!", question:) + end + end + end + + let!(:answer_with_unknown_question) do + travel_to(Time.utc(2024, 8, 6, 13, 38, 0)) do + FactoryBot.create(:answer, user:, content: "aeeeugh???").tap { _1.update_column(:question_id, 666) } # rubocop:disable Rails/SkipsModelValidations + end + end + + it "returns the answers as json" do + expect(json_file("answers.json")).to eq( + { + answers: [ + { + id: answers[0].id, + content: "Yay, data export!", + question_id: questions[0].id, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:37:00.000Z", + updated_at: "2024-08-06T13:37:00.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: questions[0].id, + anonymous: false, + generated: false, + direct: false, + author: { + id: other_user.id, + screen_name: "TomTurbo", + }, + content: "Sieben Zwiebeln sieden Bienen auf Trieben", + created_at: "2024-08-06T13:12:00.000Z", + }, + comments: [], + }, + }, + { + id: answers[1].id, + content: "Yay, data export!", + question_id: questions[1].id, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:37:01.000Z", + updated_at: "2024-08-06T13:37:01.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: questions[1].id, + anonymous: false, + generated: false, + direct: true, + author: { + id: user.id, + screen_name: user.screen_name, + }, + content: "Direct question from myself, to myself!", + created_at: "2024-08-06T13:37:42.000Z", + }, + comments: [], + }, + }, + { + id: answers[2].id, + content: "Yay, data export!", + question_id: questions[2].id, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:37:02.000Z", + updated_at: "2024-08-06T13:37:02.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: questions[2].id, + anonymous: true, + generated: true, + direct: true, + author: nil, + content: "The funny lasaganga in oven question", + created_at: "2024-08-06T13:37:42.000Z", + }, + comments: [], + }, + }, + { + id: answers[3].id, + content: "Yay, data export!", + question_id: questions[3].id, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:37:03.000Z", + updated_at: "2024-08-06T13:37:03.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: questions[3].id, + anonymous: true, + generated: true, + direct: true, + author: nil, + content: "Export is ready", + created_at: "2024-08-06T13:37:42.000Z", + }, + comments: [], + }, + }, + { + id: answers[4].id, + content: "Yay, data export!", + question_id: questions[4].id, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:37:04.000Z", + updated_at: "2024-08-06T13:37:04.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: questions[4].id, + anonymous: true, + generated: false, + direct: true, + author: nil, + content: "delete your account", + created_at: "2024-08-06T13:37:50.000Z", + }, + comments: [], + }, + }, + { + id: answer_with_unknown_question.id, + content: "aeeeugh???", + question_id: 666, + comment_count: 0, + user_id: user.id, + created_at: "2024-08-06T13:38:00.000Z", + updated_at: "2024-08-06T13:38:00.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: nil, + comments: [], + }, + } + ], + }, + ) + end + end + + context "when user has made an answers that received comments" do + let(:other_user) { FactoryBot.create(:user, screen_name: "TomTurbo") } + + let!(:question) do + travel_to(Time.utc(2024, 8, 6, 13, 12, 0)) { FactoryBot.create(:question, user: other_user, content: "Sieben Zwiebeln sieden Bienen auf Trieben", author_is_anonymous: false, direct: false) } + end + + let!(:answer) do + travel_to(Time.utc(2024, 8, 6, 13, 38, 0)) { FactoryBot.create(:answer, user:, content: "Interessante Frage", question:) } + end + + let!(:comments) do + [ + travel_to(Time.utc(2024, 8, 6, 13, 40, 0)) { FactoryBot.create(:comment, user:, answer:, content: "Kein Kommentar") }, + travel_to(Time.utc(2024, 8, 6, 13, 42, 0)) { FactoryBot.create(:comment, user:, answer:, content: "Sehr witzig") }, + travel_to(Time.utc(2024, 8, 6, 13, 41, 0)) { FactoryBot.create(:comment, user: other_user, answer:, content: "Jo eh.", smile_count: 1) } + ] + end + + it "returns the answers as json" do + expect(json_file("answers.json")).to eq( + { + answers: [ + { + id: answer.id, + content: "Interessante Frage", + question_id: answer.question.id, + comment_count: 3, + user_id: user.id, + created_at: "2024-08-06T13:38:00.000Z", + updated_at: "2024-08-06T13:38:00.000Z", + smile_count: 0, + pinned_at: nil, + related: { + question: { + id: answer.question.id, + anonymous: false, + generated: false, + direct: false, + author: { + id: other_user.id, + screen_name: "TomTurbo", + }, + content: "Sieben Zwiebeln sieden Bienen auf Trieben", + created_at: "2024-08-06T13:12:00.000Z", + }, + comments: [ + { + id: comments[0].id, + author: { + id: user.id, + screen_name: user.screen_name, + }, + smile_count: 0, + content: "Kein Kommentar", + created_at: "2024-08-06T13:40:00.000Z", + }, + { + id: comments[2].id, + author: { + id: other_user.id, + screen_name: other_user.screen_name, + }, + smile_count: 1, + content: "Jo eh.", + created_at: "2024-08-06T13:41:00.000Z", + }, + { + id: comments[1].id, + author: { + id: user.id, + screen_name: user.screen_name, + }, + smile_count: 0, + content: "Sehr witzig", + created_at: "2024-08-06T13:42:00.000Z", + } + ], + }, + } + ], + }, ) end end diff --git a/spec/lib/use_case/data_export/theme_spec.rb b/spec/lib/use_case/data_export/theme_spec.rb index 11156488..b262d892 100644 --- a/spec/lib/use_case/data_export/theme_spec.rb +++ b/spec/lib/use_case/data_export/theme_spec.rb @@ -2,7 +2,8 @@ require "rails_helper" -describe UseCase::DataExport::Theme, :data_export do +describe UseCase::DataExport::Theme, + :data_export do include ActiveSupport::Testing::TimeHelpers context "when user doesn't have a theme" do @@ -13,8 +14,14 @@ describe UseCase::DataExport::Theme, :data_export do context "when user has a theme" do let!(:theme) do - travel_to(Time.utc(2022, 12, 10, 13, 37, 42)) do - FactoryBot.create(:theme, user:) + travel_to(Time.utc(2022, + 12, + 10, + 13, + 37, + 42,)) do + FactoryBot.create(:theme, + user:,) end end @@ -22,36 +29,32 @@ describe UseCase::DataExport::Theme, :data_export do expect(json_file("theme.json")).to eq( { theme: { - id: theme.id, - user_id: user.id, - primary_color: 9342168, - primary_text: 16777215, - danger_color: 14257035, - danger_text: 16777215, - success_color: 12573067, - success_text: 16777215, - warning_color: 14261899, - warning_text: 16777215, - info_color: 9165273, - info_text: 16777215, - dark_color: 6710886, - dark_text: 15658734, - raised_background: 16777215, - raised_text: 3355443, - background_color: 13026795, - body_text: 3355443, - muted_text: 3355443, - created_at: "2022-12-10T13:37:42.000Z", - updated_at: "2022-12-10T13:37:42.000Z", - input_color: 15789556, - input_text: 6710886, - raised_accent: 16250871, - raised_accent_text: 3355443, - light_color: 16316922, - light_text: 0, - input_placeholder: 7107965 - } - } + background_color: "#c6c5eb", + body_text: "#333333", + danger_color: "#d98b8b", + danger_text: "#ffffff", + dark_color: "#666666", + dark_text: "#eeeeee", + info_color: "#8bd9d9", + info_text: "#ffffff", + input_color: "#f0edf4", + input_placeholder: "#6c757d", + input_text: "#666666", + light_color: "#f8f9fa", + light_text: "#000000", + muted_text: "#333333", + primary_color: "#8e8cd8", + primary_text: "#ffffff", + raised_accent: "#f7f7f7", + raised_accent_text: "#333333", + raised_background: "#ffffff", + raised_text: "#333333", + success_color: "#bfd98b", + success_text: "#ffffff", + warning_color: "#d99e8b", + warning_text: "#ffffff", + }, + }, ) end end diff --git a/yarn.lock b/yarn.lock index 4aed6b2a..b35436a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -195,10 +195,10 @@ resolved "https://registry.yarnpkg.com/@fontsource/lexend/-/lexend-4.5.15.tgz#ee033b850224d05b665d6661bf8d32c950f166bb" integrity sha512-6edLmDmte8pJWtQ1NIahcJq0iWlf6b0/JLwkd7WbDQ3C5tZWnxjvbP4RSklMv4MPzGjpuYuYnc+QANbjUws1oA== -"@fortawesome/fontawesome-free@^6.5.2": - version "6.5.2" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz#310fe90cb5a8dee9698833171b98e7835404293d" - integrity sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q== +"@fortawesome/fontawesome-free@^6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224" + integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow== "@github/hotkey@^3.1.1": version "3.1.1" @@ -210,18 +210,18 @@ resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608" integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A== -"@hotwired/turbo-rails@^8.0.4": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.4.tgz#d224f524a9e33fe687cec5d706054eb6fe13fa5b" - integrity sha512-GHCv5+B2VzYZZvMFpg/g9JLx/8pl/8chcubSB7T+Xn1zYOMqAKB6cT80vvWUzxdwfm/2KfaRysfDz+BmvtjFaw== +"@hotwired/turbo-rails@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-8.0.5.tgz#18c2f0e4f7f952307650308590edf5eb9544b0d3" + integrity sha512-1A9G9u28IRAl0C57z8Ka3AhNPyJdwfOrbjr+ABZk2ZEUw2QO7cJ0pgs77asUj2E/tzn1PgrxrSVu24W+1Q5uBA== dependencies: - "@hotwired/turbo" "^8.0.4" + "@hotwired/turbo" "^8.0.5" "@rails/actioncable" "^7.0" -"@hotwired/turbo@^8.0.4": - version "8.0.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.4.tgz#5c5361c06a37cdf10dcba4223f1afd0ca1c75091" - integrity sha512-mlZEFUZrJnpfj+g/XeCWWuokvQyN68WvM78JM+0jfSFc98wegm259vCbC1zSllcspRwbgXK31ibehCy5PA78/Q== +"@hotwired/turbo@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.5.tgz#abae6dad018a891e4286e87fa0959217e3866d5a" + integrity sha512-TdZDA7fxVQ2ZycygvpnzjGPmFq4sO/E2QVg+2em/sJ3YTSsIWVEis8HmWlumz+c9DjWcUkcCuB+muF08TInpAQ== "@humanwhocodes/config-array@^0.11.14": version "0.11.14" @@ -2262,10 +2262,10 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.77.6: - version "1.77.6" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.6.tgz#898845c1348078c2e6d1b64f9ee06b3f8bd489e4" - integrity sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q== +sass@^1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd" + integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -2665,10 +2665,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^5.5.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.2.tgz#c26f023cb0054e657ce04f72583ea2d85f8d0507" - integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== +typescript@^5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.2: version "1.0.2"