diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 69362e23..7238441c 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -33,7 +33,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3.2.0
+ uses: actions/checkout@v3.3.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
diff --git a/.github/workflows/retrospring.yml b/.github/workflows/retrospring.yml
index 35938753..3542d3b5 100644
--- a/.github/workflows/retrospring.yml
+++ b/.github/workflows/retrospring.yml
@@ -41,7 +41,7 @@ jobs:
BUNDLE_WITHOUT: 'production'
steps:
- - uses: actions/checkout@v3.2.0
+ - uses: actions/checkout@v3.3.0
- name: Install dependencies
run: sudo apt update && sudo apt-get install -y libpq-dev libxml2-dev libxslt1-dev libmagickwand-dev imagemagick libidn11-dev
- name: Set up Ruby
@@ -81,7 +81,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3.2.0
+ - uses: actions/checkout@v3.3.0
- name: Install dependencies
run: sudo apt update && sudo apt-get install -y libpq-dev libxml2-dev libxslt1-dev libmagickwand-dev imagemagick libidn11-dev
- name: Set up Ruby
diff --git a/Gemfile.lock b/Gemfile.lock
index 9d922eeb..d0bf5b6f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -92,7 +92,7 @@ GEM
activemodel (>= 5.2)
buftok (0.2.0)
builder (3.2.4)
- bullet (7.0.5)
+ bullet (7.0.7)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
carrierwave (2.1.0)
@@ -314,7 +314,7 @@ GEM
parser (3.1.3.0)
ast (~> 2.4.1)
pg (1.4.5)
- pghero (3.0.1)
+ pghero (3.1.0)
activerecord (>= 6)
public_suffix (4.0.7)
puma (6.0.2)
@@ -402,7 +402,7 @@ GEM
rspec-its (1.3.0)
rspec-core (>= 3.0.0)
rspec-expectations (>= 3.0.0)
- rspec-mocks (3.12.1)
+ rspec-mocks (3.12.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0)
rspec-rails (6.0.1)
diff --git a/app/assets/stylesheets/_utilities.scss b/app/assets/stylesheets/_utilities.scss
index fc3477d8..5fe1bbae 100644
--- a/app/assets/stylesheets/_utilities.scss
+++ b/app/assets/stylesheets/_utilities.scss
@@ -6,6 +6,10 @@
font-size: 10em;
}
+.fs-7 {
+ font-size: .8rem;
+}
+
.pe-none {
pointer-events: none;
}
diff --git a/app/assets/stylesheets/application.sass.scss b/app/assets/stylesheets/application.sass.scss
index 588ed388..38f3d2eb 100644
--- a/app/assets/stylesheets/application.sass.scss
+++ b/app/assets/stylesheets/application.sass.scss
@@ -80,6 +80,7 @@ $unicodeRangeValues in Lexend.$unicodeMap {
"overrides/minicolors",
"overrides/modal",
"overrides/navbar",
+"overrides/popover",
"overrides/turbolinks",
"overrides/toasts",
"overrides/sweet-alert";
@@ -109,6 +110,7 @@ $unicodeRangeValues in Lexend.$unicodeMap {
"components/inbox-actions",
"components/inbox-entry",
"components/mobile-nav",
+"components/navbar",
"components/notifications",
"components/profile",
"components/push-settings",
diff --git a/app/assets/stylesheets/components/_inbox-entry.scss b/app/assets/stylesheets/components/_inbox-entry.scss
index 38cdf4ba..2b4d7076 100644
--- a/app/assets/stylesheets/components/_inbox-entry.scss
+++ b/app/assets/stylesheets/components/_inbox-entry.scss
@@ -1,4 +1,6 @@
.inbox-entry {
+ $this: &;
+
&--new {
box-shadow: 0 0.125rem 0.25rem var(--primary);
@@ -19,4 +21,13 @@
}
}
}
+
+ .format-help {
+ opacity: .3;
+ }
+
+ &:focus-within .format-help,
+ &:hover .format-help {
+ opacity: 1;
+ }
}
diff --git a/app/assets/stylesheets/components/_navbar.scss b/app/assets/stylesheets/components/_navbar.scss
new file mode 100644
index 00000000..584fe5e5
--- /dev/null
+++ b/app/assets/stylesheets/components/_navbar.scss
@@ -0,0 +1,22 @@
+.navbar-dev {
+ &.fixed-top:before {
+ top: 0;
+ }
+
+ &:before {
+ @extend .progress-bar-striped;
+ @extend .bg-warning;
+
+ content: "";
+ position: absolute;
+ bottom: 0;
+ height: 4px;
+ width: 100%;
+ background-size: 40px 40px;
+
+ @include media-breakpoint-up('md') {
+ bottom: unset;
+ top: 0;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/overrides/_popover.scss b/app/assets/stylesheets/overrides/_popover.scss
new file mode 100644
index 00000000..7ba4f826
--- /dev/null
+++ b/app/assets/stylesheets/overrides/_popover.scss
@@ -0,0 +1,13 @@
+.popover {
+ box-shadow: $box-shadow;
+ background-color: var(--raised-bg);
+}
+
+.rs-popover {
+ --popover-arrow-border: transparent;
+ --popover-border-color: transparent;
+}
+
+.popover-body p:last-child {
+ margin-bottom: 0;
+}
diff --git a/app/javascript/retrospring/controllers/format_popup_controller.ts b/app/javascript/retrospring/controllers/format_popup_controller.ts
new file mode 100644
index 00000000..e22723ef
--- /dev/null
+++ b/app/javascript/retrospring/controllers/format_popup_controller.ts
@@ -0,0 +1,18 @@
+import { Controller } from '@hotwired/stimulus';
+import { Popover } from 'bootstrap';
+
+export default class extends Controller {
+ connect(): void {
+ const formatOptionsElement = document.getElementById('formatting-options');
+
+ this.element.addEventListener('click', e => e.preventDefault());
+
+ new Popover(this.element, {
+ html: true,
+ content: formatOptionsElement.innerHTML,
+ placement: 'bottom',
+ trigger: 'focus',
+ customClass: 'rs-popover'
+ })
+ }
+}
diff --git a/app/javascript/retrospring/initializers/stimulus.ts b/app/javascript/retrospring/initializers/stimulus.ts
index 09ead0bf..90b3a96d 100644
--- a/app/javascript/retrospring/initializers/stimulus.ts
+++ b/app/javascript/retrospring/initializers/stimulus.ts
@@ -3,6 +3,7 @@ import AnnouncementController from "retrospring/controllers/announcement_control
import AutofocusController from "retrospring/controllers/autofocus_controller";
import CharacterCountController from "retrospring/controllers/character_count_controller";
import CharacterCountWarningController from "retrospring/controllers/character_count_warning_controller";
+import FormatPopupController from "retrospring/controllers/format_popup_controller";
/**
* This module sets up Stimulus and our controllers
@@ -17,4 +18,5 @@ export default function (): void {
window['Stimulus'].register('autofocus', AutofocusController);
window['Stimulus'].register('character-count', CharacterCountController);
window['Stimulus'].register('character-count-warning', CharacterCountWarningController);
+ window['Stimulus'].register('format-popup', FormatPopupController);
}
diff --git a/app/views/inbox/_entry.html.haml b/app/views/inbox/_entry.html.haml
index 12409502..bab43c53 100644
--- a/app/views/inbox/_entry.html.haml
+++ b/app/views/inbox/_entry.html.haml
@@ -23,15 +23,17 @@
= render "actions/question", question: i.question
- if current_user == i.user
.card-body
- %textarea.form-control{ name: "ib-answer", placeholder: t(".placeholder"), data: { id: i.id } }
- %br/
- %button.btn.btn-success{ name: "ib-answer", data: { ib_id: i.id } }
- = t("voc.answer")
- %button.btn.btn-danger{ name: "ib-destroy", data: { ib_id: i.id } }
- = t("voc.delete")
- %button.btn.btn-default{ name: "ib-options", data: { ib_id: i.id, state: :hidden } }
- %i.fa.fa-chevron-down
- %span.pe-none= t(".options")
+ %textarea.form-control.mb-3{ name: "ib-answer", placeholder: t(".placeholder"), data: { id: i.id } }
+ .d-sm-flex
+ %button.btn.btn-success.me-sm-1{ name: "ib-answer", data: { ib_id: i.id } }
+ = t("voc.answer")
+ %button.btn.btn-danger.me-sm-1{ name: "ib-destroy", data: { ib_id: i.id } }
+ = t("voc.delete")
+ %button.btn.btn-default.px-1{ name: "ib-options", data: { ib_id: i.id, state: :hidden } }
+ %i.fa.fa-chevron-down
+ %span.pe-none= t(".options")
+ %p.format-help.ms-auto.align-self-center.mt-2.mt-sm-0.text-center
+ = render "shared/format_link"
.card-footer.d-none{ id: "ib-options-#{i.id}" }
%h4= t(".sharing.heading")
- if current_user.services.count.positive?
diff --git a/app/views/layouts/base.html.haml b/app/views/layouts/base.html.haml
index 6791f897..8b05a3b8 100644
--- a/app/views/layouts/base.html.haml
+++ b/app/views/layouts/base.html.haml
@@ -30,6 +30,7 @@
= render 'navigation/guest'
= render 'shared/announcements'
= yield
+ = render "shared/formatting"
- if Rails.env.development?
#debug
%hr
diff --git a/app/views/navigation/_desktop.html.haml b/app/views/navigation/_desktop.html.haml
index 1cf872f3..eb8aba63 100644
--- a/app/views/navigation/_desktop.html.haml
+++ b/app/views/navigation/_desktop.html.haml
@@ -1,10 +1,13 @@
-%nav.navbar.navbar-themed.navbar-expand-lg.bg-primary.fixed-top.d-lg-block.d-none.d-print-none{ role: :navigation }
+%nav.navbar.navbar-themed.navbar-expand-lg.bg-primary.fixed-top.d-lg-block.d-none.d-print-none{ class: Rails.env.development? ? "navbar-dev" : "", role: :navigation }
.container
%a.navbar-brand{ href: '/', title: APP_CONFIG["site_name"] }
- if APP_CONFIG["use_svg_logo"]
= render inline: Rails.application.config.justask_svg_logo
- else
= APP_CONFIG["site_name"]
+ - if Rails.env.development?
+ %span.badge.rounded-pill.bg-warning.text-bg-warning.fs-7
+ DEV
%ul.nav.navbar-nav.me-auto
= nav_entry t("navigation.timeline"), root_path, icon: 'home'
= nav_entry t("navigation.inbox"), '/inbox', icon: 'inbox', badge: inbox_count
diff --git a/app/views/navigation/_guest.html.haml b/app/views/navigation/_guest.html.haml
index e0df2d01..4d9c330d 100644
--- a/app/views/navigation/_guest.html.haml
+++ b/app/views/navigation/_guest.html.haml
@@ -1,10 +1,13 @@
-%nav.navbar.navbar-themed.navbar-expand-lg.bg-primary.fixed-top{ role: :navigation }
+%nav.navbar.navbar-themed.navbar-expand-lg.bg-primary.fixed-top{ class: Rails.env.development? ? "navbar-dev" : "", role: :navigation }
.container
%a.navbar-brand{ href: '/', title: APP_CONFIG["site_name"] }
- if APP_CONFIG["use_svg_logo"]
= render inline: Rails.application.config.justask_svg_logo
- else
= APP_CONFIG["site_name"]
+ - if Rails.env.development?
+ %span.badge.rounded-pill.bg-warning.text-bg-warning.fs-7
+ DEV
%button.navbar-toggler{ data: { bs_target: '#j2-main-navbar-collapse', bs_toggle: :collapse }, type: :button }
%span.visually-hidden= t("navigation.toggle")
%span.navbar-toggler-icon
diff --git a/app/views/navigation/_mobile.html.haml b/app/views/navigation/_mobile.html.haml
index 13d749ea..2bc5cc78 100644
--- a/app/views/navigation/_mobile.html.haml
+++ b/app/views/navigation/_mobile.html.haml
@@ -1,5 +1,5 @@
- notifications_icon = notification_count.nil? ? 'bell-o' : 'bell'
-%nav.navbar.navbar-themed.bg-primary.fixed-bottom.d-lg-none.d-block.d-print-none#rs-mobile-nav{ role: :navigation }
+%nav.navbar.navbar-themed.bg-primary.fixed-bottom.d-lg-none.d-block.d-print-none#rs-mobile-nav{ class: Rails.env.development? ? "navbar-dev" : "", role: :navigation }
.container
%ul.nav.navbar-nav.navbar-icon-row
= nav_entry t("navigation.timeline"), root_path, icon: 'home', icon_only: true
diff --git a/app/views/shared/_format_link.html.haml b/app/views/shared/_format_link.html.haml
new file mode 100644
index 00000000..023cbfe5
--- /dev/null
+++ b/app/views/shared/_format_link.html.haml
@@ -0,0 +1,3 @@
+%a.text-muted.text-decoration-none.fs-7{ href: "#", data: { controller: "format-popup" }, tabindex: "0" }
+ %i.fab.fa-markdown
+ = t("voc.format_markdown")
diff --git a/app/views/shared/_formatting.html.haml b/app/views/shared/_formatting.html.haml
new file mode 100644
index 00000000..30a19851
--- /dev/null
+++ b/app/views/shared/_formatting.html.haml
@@ -0,0 +1,2 @@
+#formatting-options.d-none{ aria: { hidden: true } }
+ = t(".body_html", app_name: APP_CONFIG["site_name"])
diff --git a/config/locales/views.en.yml b/config/locales/views.en.yml
index 06ebaca6..e1696485 100644
--- a/config/locales/views.en.yml
+++ b/config/locales/views.en.yml
@@ -551,6 +551,13 @@ en:
unsubscribe_all: "Disable on all devices"
description: "Here you can set up or disable push notifications for new questions in your inbox."
shared:
+ formatting:
+ body_html: |
+
%{app_name} uses Markdown for formatting
+ A blank line starts a new paragraph
+ *italic text*
for italic text
+ **bold text**
for bold text
+ [link](https://example.com)
for link
links:
about: "About"
source: "Source code"
diff --git a/config/locales/voc.en.yml b/config/locales/voc.en.yml
index 232d5500..7f674a7e 100644
--- a/config/locales/voc.en.yml
+++ b/config/locales/voc.en.yml
@@ -10,6 +10,7 @@ en:
delete: "Delete"
edit: "Edit"
follow: "Follow"
+ format_markdown: "Styling with Markdown is supported"
load: "Load more"
login: "Sign in"
logout: "Sign out"
diff --git a/lib/retrospring/version.rb b/lib/retrospring/version.rb
index 14d0c287..ede915a6 100644
--- a/lib/retrospring/version.rb
+++ b/lib/retrospring/version.rb
@@ -17,9 +17,9 @@ module Retrospring
def month = 1
- def day = 5
+ def day = 11
- def patch = 2
+ def patch = 0
def suffix = ""
diff --git a/lib/tasks/.keep b/lib/tasks/.keep
deleted file mode 100644
index e69de29b..00000000
diff --git a/lib/use_case/question/create.rb b/lib/use_case/question/create.rb
index 51a4f3de..5cc8f174 100644
--- a/lib/use_case/question/create.rb
+++ b/lib/use_case/question/create.rb
@@ -95,7 +95,7 @@ module UseCase
def filtered?(question)
target_user.mute_rules.any? { |rule| rule.applies_to? question } ||
(anonymous && AnonymousBlock.where(identifier: question.author_identifier, user_id: [target_user.id, nil]).any?) ||
- (source_user_id && anonymous && AnonymousBlock.where(target_user_id: [source_user.id, nil], user_id: [target_user.id, nil]).any?) ||
+ (source_user_id && anonymous && AnonymousBlock.where(target_user_id: source_user.id, user_id: [target_user.id, nil]).any?) ||
(source_user_id && target_user.muting?(source_user))
end
diff --git a/package.json b/package.json
index 05156176..33382f8e 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
},
"dependencies": {
- "@fontsource/lexend": "^4.5.13",
+ "@fontsource/lexend": "^4.5.14",
"@fortawesome/fontawesome-free": "^6.2.1",
"@hotwired/stimulus": "^3.2.1",
"@hotwired/turbo-rails": "^7.2.4",
@@ -26,7 +26,7 @@
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.11.0",
"@typescript-eslint/parser": "^4.11.0",
- "esbuild": "^0.16.14",
+ "esbuild": "^0.16.16",
"eslint": "^7.16.0",
"eslint-plugin-import": "^2.26.0"
}
diff --git a/spec/integration/generated_locale_spec.rb b/spec/integration/generated_locale_spec.rb
new file mode 100644
index 00000000..64246680
--- /dev/null
+++ b/spec/integration/generated_locale_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require "rails_helper"
+require "support/load_rake_tasks"
+
+describe "test locale generation" do
+ it "succeeds" do
+ allow($stdout).to receive(:puts)
+
+ Rake::Task["locale:generate"].execute
+
+ %w[activerecord controllers errors frontend views voc].each do |locale_type|
+ expect($stdout).to have_received(:puts).with a_string_including("generating #{locale_type}.en-xx.yml")
+ end
+ end
+end
diff --git a/spec/integration/version_bump_spec.rb b/spec/integration/version_bump_spec.rb
new file mode 100644
index 00000000..656c69e6
--- /dev/null
+++ b/spec/integration/version_bump_spec.rb
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+require "rails_helper"
+require "support/load_rake_tasks"
+
+describe "version bumping tasks" do
+ include ActiveSupport::Testing::TimeHelpers
+
+ describe "version:bump" do
+ around do |example|
+ # make a backup of our version file
+ version_path = Rails.root.join("lib/retrospring/version.rb")
+ version_contents = File.read(version_path)
+ example.run
+ ensure
+ # restore our version file
+ File.write(version_path, version_contents)
+ end
+
+ it "updates the version if the version date differs" do
+ travel_to(Time.utc(2069, 6, 21, 13, 37, 0))
+ allow($stdout).to receive(:puts)
+
+ Rake::Task["version:bump"].execute
+
+ expect($stdout).to have_received(:puts).with "New version: 2069.0621.0"
+ travel_back
+ end
+
+ context "when version is already from today" do
+ before do
+ allow(Retrospring::Version).to receive(:year).and_return 2069
+ allow(Retrospring::Version).to receive(:month).and_return 6
+ allow(Retrospring::Version).to receive(:day).and_return 21
+ allow(Retrospring::Version).to receive(:patch).and_return 0
+
+ # just stubbing the constant is not enough, we need to stub away the
+ # reading of the version file too; otherwise only the patch value is
+ # updated
+ version_path = Rails.root.join("lib/retrospring/version.rb")
+ version_contents = File.read(version_path)
+ .sub!(/def year = .+/, "def year = 2069")
+ .sub!(/def month = .+/, "def month = 6")
+ .sub!(/def day = .+/, "def day = 21")
+ .sub!(/def patch = .+/, "def patch = 0")
+ allow(File).to receive(:read).with(version_path).and_return(version_contents)
+ end
+
+ it "updates the version if the version date differs" do
+ travel_to(Time.utc(2069, 6, 21, 13, 37, 0))
+ allow($stdout).to receive(:puts)
+
+ Rake::Task["version:bump"].execute
+
+ expect($stdout).to have_received(:puts).with "Current version: 2069.0621.0"
+ expect($stdout).to have_received(:puts).with "New version: 2069.0621.1"
+ travel_back
+ end
+ end
+ end
+
+ describe "version:commit" do
+ before do
+ allow(Retrospring::Version).to receive(:year).and_return 2069
+ allow(Retrospring::Version).to receive(:month).and_return 6
+ allow(Retrospring::Version).to receive(:day).and_return 21
+ allow(Retrospring::Version).to receive(:patch).and_return 3
+ end
+
+ it "runs the correct git commands" do
+ allow($stdout).to receive(:puts)
+ version_path = Rails.root.join("lib/retrospring/version.rb")
+
+ expect_any_instance_of(Rake::FileUtilsExt)
+ .to receive(:sh)
+ .with(%(git commit -m 'Bump version to 2069.0621.3' -- #{version_path.to_s.inspect}))
+ expect_any_instance_of(Rake::FileUtilsExt)
+ .to receive(:sh)
+ .with(%(git tag -a -m 'Bump version to 2069.0621.3' 2069.0621.3))
+
+ Rake::Task["version:commit"].execute
+ end
+ end
+end
diff --git a/spec/support/load_rake_tasks.rb b/spec/support/load_rake_tasks.rb
new file mode 100644
index 00000000..bc079705
--- /dev/null
+++ b/spec/support/load_rake_tasks.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+# ensure Rake tasks are only loaded once during the entire RSpec run.
+#
+# when using it from a `before(:context) { ... }` block this will load the
+# tasks more than once and therefore run tasks more often than they should ...
+Rails.application.load_tasks
diff --git a/yarn.lock b/yarn.lock
index 4a23f062..51d986d8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -23,115 +23,115 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@esbuild/android-arm64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.14.tgz#f02c9f0d43086ddf6ed2795b881ddf7990f74456"
- integrity sha512-hTqB6Iq13pW4xaydeqQrs8vPntUnMjbkq+PgGiBMi69eYk74naG2ftHWqKnxn874kNrt5Or3rQ0PJutx2doJuQ==
+"@esbuild/android-arm64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz#833184b8a0a96f9c85105c53d0a67e6d3c5c3f07"
+ integrity sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==
-"@esbuild/android-arm@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.14.tgz#24e4faf569d0d6bbf9ed46f6ed395d68eb7f04fc"
- integrity sha512-u0rITLxFIeYAvtJXBQNhNuV4YZe+MD1YvIWT7Nicj8hZAtRVZk2PgNH6KclcKDVHz1ChLKXRfX7d7tkbQBUfrg==
+"@esbuild/android-arm@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.16.tgz#23761b2fd1dfa4806161dbfc9e0824f04061cb95"
+ integrity sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==
-"@esbuild/android-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.14.tgz#1173e706cf57c0d4dbf069d18e5d50ae6a5b0871"
- integrity sha512-jir51K4J0K5Rt0KOcippjSNdOl7akKDVz5I6yrqdk4/m9y+rldGptQUF7qU4YpX8U61LtR+w2Tu2Ph+K/UaJOw==
+"@esbuild/android-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.16.tgz#ffa09f04c0ffea5b594ab7655fc9ca1220365e9b"
+ integrity sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==
-"@esbuild/darwin-arm64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.14.tgz#67f05693c5b097bcb4ff656ba5839459f30f79c2"
- integrity sha512-vrlaP81IuwPaw1fyX8fHCmivP3Gr73ojVEZy+oWJLAiZVcG8o8Phwun/XDnYIFUHxIoUnMFEpg9o38MIvlw8zw==
+"@esbuild/darwin-arm64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz#62ed2b4bfab594b9e5e708580361f1d059b53b26"
+ integrity sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==
-"@esbuild/darwin-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.14.tgz#519c9d127c5363d4a1e73b9d954460f798b41d2a"
- integrity sha512-KV1E01eC2hGYA2qzFDRCK4wdZCRUvMwCNcobgpiiOzp5QXpJBqFPdxI69j8vvzuU7oxFXDgANwEkXvpeQqyOyg==
+"@esbuild/darwin-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz#e9756d34cd9b3737a5354e89ca0fdca32d8df64c"
+ integrity sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==
-"@esbuild/freebsd-arm64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.14.tgz#2e3f5de2951a8ec732a3e4ec4f5d47a7c9626001"
- integrity sha512-xRM1RQsazSvL42BNa5XC7ytD4ZDp0ZyJcH7aB0SlYUcHexJUKiDNKR7dlRVlpt6W0DvoRPU2nWK/9/QWS4u2fw==
+"@esbuild/freebsd-arm64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz#db7bce444d372e5a213a3f359c42aee3acc0dd45"
+ integrity sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==
-"@esbuild/freebsd-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.14.tgz#d3cf84ff28357ac8d0123309bac37fcfcdd98f53"
- integrity sha512-7ALTAn6YRRf1O6fw9jmn0rWmOx3XfwDo7njGtjy1LXhDGUjTY/vohEPM3ii5MQ411vJv1r498EEx2aBQTJcrEw==
+"@esbuild/freebsd-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz#02e8a81b7e56040b5eb883896de445a6cd3501f0"
+ integrity sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==
-"@esbuild/linux-arm64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.14.tgz#f44b0e3d5d470cd763a9bc4855a12b8cb73d6c12"
- integrity sha512-TLh2OcbBUQcMYRH4GbiDkDZfZ4t1A3GgmeXY27dHSI6xrU7IkO00MGBiJySmEV6sH3Wa6pAN6UtaVL0DwkGW4Q==
+"@esbuild/linux-arm64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz#ea8c3df172644fa6437f0083c2a38b50f89e5b98"
+ integrity sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==
-"@esbuild/linux-arm@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.14.tgz#b239eb7e6cb7df9c34c6b08f4adf113da47e0e09"
- integrity sha512-X6xULug66ulrr4IzrW7qq+eq9n4MtEyagdWvj4o4cmWr+JXOT47atjpDF9j5M2zHY0UQBmqnHhwl+tXpkpIb2w==
+"@esbuild/linux-arm@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz#c1c2e97e67bb7247e6f60e2644de057bfedb8cbb"
+ integrity sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==
-"@esbuild/linux-ia32@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.14.tgz#f5f7886027cd61bed59178e981a0ef47ca5b72ef"
- integrity sha512-oBZkcZ56UZDFCAfE3Fd/Jgy10EoS7Td77NzNGenM+HSY8BkdQAcI9VF9qgwdOLZ+tuftWD7UqZ26SAhtvA3XhA==
+"@esbuild/linux-ia32@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz#9a0b0e926926f891a3e7f7c50bb38e3db49c2c9a"
+ integrity sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==
-"@esbuild/linux-loong64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.14.tgz#d2329371726f9778156c89ea0bed26fc1bc3cd7e"
- integrity sha512-udz/aEHTcuHP+xdWOJmZ5C9RQXHfZd/EhCnTi1Hfay37zH3lBxn/fNs85LA9HlsniFw2zccgcbrrTMKk7Cn1Qg==
+"@esbuild/linux-loong64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz#c5a50ff5981d457ed45f42c3f06a60086759c79b"
+ integrity sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==
-"@esbuild/linux-mips64el@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.14.tgz#8af86bdc6ee937c8a2803b3c197b28824f48df8e"
- integrity sha512-kJ2iEnikUOdC1SiTGbH0fJUgpZwa0ITDTvj9EHf9lm3I0hZ4Yugsb3M6XSl696jVxrEocLe519/8CbSpQWFSrg==
+"@esbuild/linux-mips64el@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz#e85b7e3c25000be2ae373e5208e55e282a9763e0"
+ integrity sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==
-"@esbuild/linux-ppc64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.14.tgz#3fa3f8c6c9db3127f2ec5b2eba1cec67ff9a9b8e"
- integrity sha512-kclKxvZvX5YhykwlJ/K9ljiY4THe5vXubXpWmr7q3Zu3WxKnUe1VOZmhkEZlqtnJx31GHPEV4SIG95IqTdfgfg==
+"@esbuild/linux-ppc64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz#24a0013bf727830df44fece571172ebe31b5c5e6"
+ integrity sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==
-"@esbuild/linux-riscv64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.14.tgz#1bd1b631de2533106a08876295bad3a19b20f629"
- integrity sha512-fdwP9Dc+Kx/cZwp9T9kNqjAE/PQjfrxbio4rZ3XnC3cVvZBjuxpkiyu/tuCwt6SbAK5th6AYNjFdEV9kGC020A==
+"@esbuild/linux-riscv64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz#b080998d8d0480e8235f1384c585ae505e98a19d"
+ integrity sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==
-"@esbuild/linux-s390x@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.14.tgz#c87440b6522b9a36a9cafd05b0f1ca3c5bad4cca"
- integrity sha512-++fw3P4fQk9nqvdzbANRqimKspL8pDCnSpXomyhV7V/ISha/BZIYvZwLBWVKp9CVWKwWPJ4ktsezuLIvlJRHqA==
+"@esbuild/linux-s390x@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz#5042de05b9b653dfd134f05e1b37b61704c14c42"
+ integrity sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==
-"@esbuild/linux-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.14.tgz#49cd974dad6042ac0141ba332df6307c44e77fed"
- integrity sha512-TomtswAuzBf2NnddlrS4W01Tv85RM9YtATB3OugY6On0PLM4Ksz5qvQKVAjtzPKoLgL1FiZtfc8mkZc4IgoMEA==
+"@esbuild/linux-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz#b7c0750f2276c9dcf41f0f2229adca46ef22f698"
+ integrity sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==
-"@esbuild/netbsd-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.14.tgz#53dcfb5131376feff0911adff7f01b4821706cf6"
- integrity sha512-U06pfx8P5CqyoPNfqIJmnf+5/r4mJ1S62G4zE6eOjS59naQcxi6GnscUCPH3b+hRG0qdKoGX49RAyiqW+M9aSw==
+"@esbuild/netbsd-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz#e2a0ee181fbbe834174d26e24ce1b258232bb3eb"
+ integrity sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==
-"@esbuild/openbsd-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.14.tgz#f36888f73087bcd12c5bf9a4b18e348da9c80ad0"
- integrity sha512-/Jl8XVaWEZNu9rZw+n792GIBupQwHo6GDoapHSb/2xp/Ku28eK6QpR2O9cPBkzHH4OOoMH0LB6zg/qczJ5TTGg==
+"@esbuild/openbsd-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz#87a84c1932e00f52ab3380c31facf0e48086ffb9"
+ integrity sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==
-"@esbuild/sunos-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.14.tgz#41e046bb0849ae59702a5cfa8be300431a61ee3a"
- integrity sha512-2iI7D34uTbDn/TaSiUbEHz+fUa8KbN90vX5yYqo12QGpu6T8Jl+kxODsWuMCwoTVlqUpwfPV22nBbFPME9OPtw==
+"@esbuild/sunos-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz#996bcd2603cd345733c3aa5f52bfd5b8fa7d1d36"
+ integrity sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==
-"@esbuild/win32-arm64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.14.tgz#d6ed78742a6edd413e75796882ddaef8c1e23b93"
- integrity sha512-SjlM7AHmQVTiGBJE/nqauY1aDh80UBsXZ94g4g60CDkrDMseatiqALVcIuElg4ZSYzJs8hsg5W6zS2zLpZTVgg==
+"@esbuild/win32-arm64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz#404a9411d12533d0f2ce0a85df6ddb32e851ef04"
+ integrity sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==
-"@esbuild/win32-ia32@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.14.tgz#558bd53859a83fe887d7d2dcdc6cb3fc9aa9a9bc"
- integrity sha512-z06t5zqk8ak0Xom5HG81z2iOQ1hNWYsFQp3sczVLVx+dctWdgl80tNRyTbwjaFfui2vFO12dfE3trCTvA+HO4g==
+"@esbuild/win32-ia32@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz#bb5655a48f5f87fee870061883411f5149bc5e44"
+ integrity sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==
-"@esbuild/win32-x64@0.16.14":
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.14.tgz#90558dcb279989d92a42e5be4dfb884b2399361f"
- integrity sha512-ED1UpWcM6lAbalbbQ9TrGqJh4Y9TaASUvu8bI/0mgJcxhSByJ6rbpgqRhxYMaQ682WfA71nxUreaTO7L275zrw==
+"@esbuild/win32-x64@0.16.16":
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz#ee22fed0b2e0c00ce895cdfae9d32ef069a12e04"
+ integrity sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==
"@eslint/eslintrc@^0.4.3":
version "0.4.3"
@@ -148,10 +148,10 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
-"@fontsource/lexend@^4.5.13":
- version "4.5.13"
- resolved "https://registry.yarnpkg.com/@fontsource/lexend/-/lexend-4.5.13.tgz#a22076e1393af0f075e945fcffc9ffa514805304"
- integrity sha512-lJjBMU9Jmi2a/QqLRBhwe862385UyS2RckS3ATr8jHAq1JFLxox2p2gODNzhaWo0ZwTjDxIJ0YfMiEzSdyqZ0w==
+"@fontsource/lexend@^4.5.14":
+ version "4.5.14"
+ resolved "https://registry.yarnpkg.com/@fontsource/lexend/-/lexend-4.5.14.tgz#04c7a12650aff6e6d030c6e84c9e1ee94f219764"
+ integrity sha512-6ctm23JzSITVKi6Kjnw5chfE5rZLUa50DpFbXHQlgjrwNtdvEg1mH6JYLQAZM4VtMmg2JfiSQyoCvePGvvhTVg==
"@fortawesome/fontawesome-free@^6.2.1":
version "6.2.1"
@@ -639,33 +639,33 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
-esbuild@^0.16.14:
- version "0.16.14"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.14.tgz#366249a0a0fd431d3ab706195721ef1014198919"
- integrity sha512-6xAn3O6ZZyoxZAEkwfI9hw4cEqSr/o1ViJtnkvImVkblmUN65Md04o0S/7H1WNu1XGf1Cjij/on7VO4psIYjkw==
+esbuild@^0.16.16:
+ version "0.16.16"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.16.tgz#e8a27820a30cc1449066f9bbe8916b145dbc9046"
+ integrity sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==
optionalDependencies:
- "@esbuild/android-arm" "0.16.14"
- "@esbuild/android-arm64" "0.16.14"
- "@esbuild/android-x64" "0.16.14"
- "@esbuild/darwin-arm64" "0.16.14"
- "@esbuild/darwin-x64" "0.16.14"
- "@esbuild/freebsd-arm64" "0.16.14"
- "@esbuild/freebsd-x64" "0.16.14"
- "@esbuild/linux-arm" "0.16.14"
- "@esbuild/linux-arm64" "0.16.14"
- "@esbuild/linux-ia32" "0.16.14"
- "@esbuild/linux-loong64" "0.16.14"
- "@esbuild/linux-mips64el" "0.16.14"
- "@esbuild/linux-ppc64" "0.16.14"
- "@esbuild/linux-riscv64" "0.16.14"
- "@esbuild/linux-s390x" "0.16.14"
- "@esbuild/linux-x64" "0.16.14"
- "@esbuild/netbsd-x64" "0.16.14"
- "@esbuild/openbsd-x64" "0.16.14"
- "@esbuild/sunos-x64" "0.16.14"
- "@esbuild/win32-arm64" "0.16.14"
- "@esbuild/win32-ia32" "0.16.14"
- "@esbuild/win32-x64" "0.16.14"
+ "@esbuild/android-arm" "0.16.16"
+ "@esbuild/android-arm64" "0.16.16"
+ "@esbuild/android-x64" "0.16.16"
+ "@esbuild/darwin-arm64" "0.16.16"
+ "@esbuild/darwin-x64" "0.16.16"
+ "@esbuild/freebsd-arm64" "0.16.16"
+ "@esbuild/freebsd-x64" "0.16.16"
+ "@esbuild/linux-arm" "0.16.16"
+ "@esbuild/linux-arm64" "0.16.16"
+ "@esbuild/linux-ia32" "0.16.16"
+ "@esbuild/linux-loong64" "0.16.16"
+ "@esbuild/linux-mips64el" "0.16.16"
+ "@esbuild/linux-ppc64" "0.16.16"
+ "@esbuild/linux-riscv64" "0.16.16"
+ "@esbuild/linux-s390x" "0.16.16"
+ "@esbuild/linux-x64" "0.16.16"
+ "@esbuild/netbsd-x64" "0.16.16"
+ "@esbuild/openbsd-x64" "0.16.16"
+ "@esbuild/sunos-x64" "0.16.16"
+ "@esbuild/win32-arm64" "0.16.16"
+ "@esbuild/win32-ia32" "0.16.16"
+ "@esbuild/win32-x64" "0.16.16"
escape-string-regexp@^1.0.5:
version "1.0.5"