diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9c0c681..7a1bd32 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -22,9 +22,13 @@ class ApplicationController < ActionController::Base
path: :root
},
{
- label: Report.model_name.human(count: 2),
- icon: :'journal-text',
- path: :reports },
+ label: Project.model_name.human(count: 2),
+ icon: :'folder',
+ path: :projects },
+ # {
+ # label: Report.model_name.human(count: 2),
+ # icon: :'journal-text',
+ # path: :reports },
{
label: I18n.t("backoffice"),
icon: :gear,
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index 9d3293e..46103e2 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -20,11 +20,6 @@ class HomeController < ApplicationController
path: profile_path,
active: action_name == "profile"
},
- # {
- # label: "Passwort ändern",
- # path: new_password_path,
- # icon: :lock
- # },
{
label: "Logout",
icon: :"box-arrow-right",
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
new file mode 100644
index 0000000..a61963c
--- /dev/null
+++ b/app/controllers/projects_controller.rb
@@ -0,0 +1,62 @@
+class ProjectsController < ApplicationController
+ before_action :set_project, only: %i[ show edit update destroy ]
+
+ # GET /projects
+ def index
+ @projects = Project.all
+ end
+
+ # GET /projects/1
+ def show
+ end
+
+ # GET /projects/new
+ def new
+ @project = Project.new
+ end
+
+ # GET /projects/1/edit
+ def edit
+ end
+
+ # POST /projects
+ def create
+ @project = if params[:copy_from_id]
+ Project.find(params[:copy_from_id]).dup
+ else
+ Project.new(project_params)
+ end
+
+ if @project.save
+ redirect_to @project, notice: "Project was successfully created."
+ else
+ render :new, status: :unprocessable_entity
+ end
+ end
+
+ # PATCH/PUT /projects/1
+ def update
+ if @project.update(project_params)
+ redirect_to @project, notice: "Project was successfully updated.", status: :see_other
+ else
+ render :edit, status: :unprocessable_entity
+ end
+ end
+
+ # DELETE /projects/1
+ def destroy
+ @project.destroy!
+ redirect_to projects_url, notice: "Project was successfully destroyed.", status: :see_other
+ end
+
+ private
+ # Use callbacks to share common setup or constraints between actions.
+ def set_project
+ @project = Project.find(params[:id])
+ end
+
+ # Only allow a list of trusted parameters through.
+ def project_params
+ params.require(:project).permit(:name, :details)
+ end
+end
diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb
index d1733d5..3ec1e8b 100644
--- a/app/controllers/reports_controller.rb
+++ b/app/controllers/reports_controller.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
class ReportsController < ApplicationController
+ before_action :set_project, only: %i[index new create]
before_action :set_report, only: %i[show edit update destroy work]
# GET /reports
def index
- @reports = Report.all
+ @reports = @project.reports
end
# GET /reports/1
@@ -85,7 +86,7 @@ class ReportsController < ApplicationController
# GET /reports/new
def new
- @report = Report.new
+ @report = Report.new(project_id: @project.id)
end
# GET /reports/1/edit
@@ -93,10 +94,45 @@ class ReportsController < ApplicationController
# POST /reports
def create
- @report = Report.new(report_params)
+ success = if params[:copy_from_id]
+ original = Report.find(params[:copy_from_id])
+ @report = original.dup
+ @report.pages = original.pages.map do |page|
+ page.dup.tap do |p|
+ p.elements = page.elements.map do |element|
+ element.dup.tap do |e|
+ e.success_criteria = element.success_criteria.map do |sc|
+ csc = sc.dup
+ SuccessCriterion.rich_text_association_names
+ .map { _1.to_s.sub(/^rich_text_/, "") }
+ .each do |a|
+ csc.send("#{a}=", sc.send(a).dup)
+ end
+ csc
+ end
+ e.screenshot = element.screenshot&.dup
+ Element.rich_text_association_names
+ .map { _1.to_s.sub(/^rich_text_/, "") }
+ .each do |a|
+ e.send("#{a}=", element.send(a).dup)
+ end
+ end
+ end
+ Page.rich_text_association_names
+ .map { _1.to_s.sub(/^rich_text_/, "") }
+ .each do |a|
+ p.send("#{a}=", page.send(a).dup)
+ end
+ end
+ end
+ @report.save
+ else
+ @report = Report.new(report_params.merge(project_id: @project.id))
+ @report.save
+ end
- if @report.save
- redirect_to @report, notice: "Report was successfully created."
+ if success
+ redirect_to @report.reload, notice: "Report was successfully created."
else
render :new, status: :unprocessable_entity
end
@@ -114,7 +150,7 @@ class ReportsController < ApplicationController
# DELETE /reports/1
def destroy
@report.destroy!
- redirect_to reports_url, notice: "Report was successfully destroyed.", status: :see_other
+ redirect_to project_url(@report.project), notice: "Report was successfully destroyed.", status: :see_other
end
def work
@@ -130,7 +166,7 @@ class ReportsController < ApplicationController
# Only allow a list of trusted parameters through.
def report_params
- params.require(:report).permit(:name, :comment, :url)
+ params.require(:report).permit(:name, :comment, :url, :project_id)
end
def filename(report, extension: "html")
@@ -140,4 +176,8 @@ class ReportsController < ApplicationController
def page_param
params[:page_id]
end
+
+ def set_project
+ @project = Project.find(params[:project_id])
+ end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
new file mode 100644
index 0000000..db5c5ce
--- /dev/null
+++ b/app/helpers/projects_helper.rb
@@ -0,0 +1,2 @@
+module ProjectsHelper
+end
diff --git a/app/javascript/application.js b/app/javascript/application.js
index 4b59f32..ae46376 100644
--- a/app/javascript/application.js
+++ b/app/javascript/application.js
@@ -1,7 +1,6 @@
// Entry point for the build script in your package.json
import "@hotwired/turbo-rails"
import "./controllers"
-import * as bootstrap from "bootstrap"
import "trix"
import "@rails/actiontext"
diff --git a/app/models/pdf_documents/customer_report.rb b/app/models/pdf_documents/customer_report.rb
index 838dd45..f64d510 100644
--- a/app/models/pdf_documents/customer_report.rb
+++ b/app/models/pdf_documents/customer_report.rb
@@ -13,13 +13,13 @@ module PdfDocuments
move_down 20
@prawn_document.text "#{I18n.l params.report.updated_at.to_date, format: :long}"
move_down 40
- safe_display(params.report.comment) do
+ safe_display(params.report.comment) do
rich_text _1
move_down 30
end
@prawn_document.font_size(8) do
- @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [0, 0])
+ @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [ 0, 0 ])
end
@prawn_document.start_new_page
@pages = {}
@@ -29,9 +29,9 @@ module PdfDocuments
without_page_break do
heading2 "#{element_index} #{element.title}"
@prawn_document.text("Pfad: #{element.page.path}", inline_format: true)
- safe_display(element.screenshot) do
- image(_1.variant(:thumbnail), height: 160)
- move_down(15)
+ safe_display(element.screenshot) do
+ image(_1.variant(:thumbnail), height: 160)
+ move_down(15)
end
end
rich_text element.description
@@ -45,10 +45,10 @@ module PdfDocuments
@prawn_document.start_new_page
heading1("Anhang: Richtlinien")
- params.report.export[:success_criteria].group_by(&:check).sort_by{ |c, _scs| c.external_number }.each do |check, criteria|
+ params.report.export[:success_criteria].group_by(&:check).sort_by { |c, _scs| c.external_number }.each do |check, criteria|
heading2(check.display_label)
@pages[check] = @prawn_document.page_number
- {
+ {
external_number: { label: "WCAG Nummer" },
external_url: { label: "WCAG Link" },
conformity_level: { label: "Konformität" },
@@ -61,12 +61,12 @@ module PdfDocuments
annotation_de: { label: "Anmerkung", rich: true }
}.each do |attribute, options|
v = check.send(attribute)
- safe_display(v) do
+ safe_display(v) do
text("#{options[:label]}", inline_format: true)
if options[:rich]
rich_text(_1)
- else
- text(_1)
+ else
+ text(_1)
end
end
end
@@ -79,7 +79,7 @@ module PdfDocuments
rich_text(%Q(
#{cat.name}
))
end
@@ -101,10 +101,10 @@ module PdfDocuments
@prawn_document.repeat(2..) do
@prawn_document.text_box "#{params.report.name}", at: [ 50, 777 ], inline_format: true, width: 300
- @prawn_document.bounding_box([0, 766], width: 532) do
+ @prawn_document.bounding_box([ 0, 766 ], width: 532) do
hr
end
- @prawn_document.bounding_box([0, 796], width: 200, height: 200) do
+ @prawn_document.bounding_box([ 0, 796 ], width: 200, height: 200) do
logo
end
end
@@ -120,7 +120,7 @@ module PdfDocuments
end
end
section("Anhang: Richtlinien") do
- x.report.export[:success_criteria].group_by(&:check).sort_by{ |c, _scs| c.external_number }.each do |check, _criteria|
+ x.report.export[:success_criteria].group_by(&:check).sort_by { |c, _scs| c.external_number }.each do |check, _criteria|
page(title: check.display_label, destination: p[check])
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
new file mode 100644
index 0000000..2b7f03e
--- /dev/null
+++ b/app/models/project.rb
@@ -0,0 +1,7 @@
+class Project < ApplicationRecord
+ has_many :reports, dependent: :restrict_with_error
+
+ has_rich_text :details
+
+ scope :current, -> { where("updated_at > ?", 1.month.ago) }
+end
diff --git a/app/models/report.rb b/app/models/report.rb
index 2a03b91..68a36ab 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -1,6 +1,8 @@
# frozen_string_literal: true
class Report < ApplicationRecord
+ belongs_to :project, touch: true
+
has_many :pages, -> { order(:position) }, dependent: :destroy
has_many :elements, through: :pages, dependent: :destroy
has_many :success_criteria, through: :elements, dependent: :destroy
diff --git a/app/views/home/show.html.slim b/app/views/home/show.html.slim
index 345cd2b..1ab4d19 100644
--- a/app/views/home/show.html.slim
+++ b/app/views/home/show.html.slim
@@ -1,30 +1,37 @@
-h1 a11ydive
-h2 Dashboard
+h1 Dashboard
-- if Report.any?
- h3 Zuletzt bearbeitete Prüfberichte
- ul
- - Report.all.order(updated_at: :desc).limit(3).each do |r|
- li = link_to(r.name, r)
+.row
+ .col-md-6
+ - if Project.current.any?
+ h2
+ i.bi.bi-folder>
+ 'Aktuelle Projekte
+ ul
+ - Project.current.order(updated_at: :desc).each do |p|
+ li = link_to(p.name, p)
-p
- i.bi.bi-journal-text
- =< Report.count
- =< link_to Report.model_name.human(count: Report.count), :reports
+ - if Report.any?
+ h2
+ i.bi.bi-journal-text>
+ 'Zuletzt bearbeitete Prüfberichte
+ ul
+ - Report.all.order(updated_at: :desc).limit(3).each do |r|
+ li = link_to(r.name, r)
-h3 Hotkeys
-p Auf der Bericht-Ausfüllen Seite können folgende Shortcuts verwendet werden:
-dl
- dt t
- dd Springe zum Anfang des Contents (Skip-Link, kann auf allen Seiten verwendet werden)
- dt a
- dd Alle auf
- dt s
- dd Alle zu
- dt b
- dd Baum
- dt n
- dd Notizen
- dt e
- dd Springe zu erstem Check
-
\ No newline at end of file
+ .col-md-6
+ h2 Hotkeys
+ p Auf der Bericht-Ausfüllen Seite können folgende Shortcuts verwendet werden:
+ dl
+ dt t
+ dd Springe zum Anfang des Contents (Skip-Link, kann auf allen Seiten verwendet werden)
+ dt a
+ dd Alle auf
+ dt s
+ dd Alle zu
+ dt b
+ dd Baum
+ dt n
+ dd Notizen
+ dt e
+ dd Springe zu erstem Check
+
diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb
new file mode 100644
index 0000000..5bbeee4
--- /dev/null
+++ b/app/views/projects/_form.html.erb
@@ -0,0 +1,5 @@
+<%= bootstrap_form_with(model: project) do |form| %>
+ <%= form.text_field :name %>
+ <%= form.rich_text_area :details %>
+ <%= form.submit %>
+<% end %>
diff --git a/app/views/projects/_project.html.slim b/app/views/projects/_project.html.slim
new file mode 100644
index 0000000..5e098c9
--- /dev/null
+++ b/app/views/projects/_project.html.slim
@@ -0,0 +1,20 @@
+.project id=dom_id(project)
+ p
+ strong Name:
+ = project.name
+ p
+ strong Details:
+ = project.details
+ p
+ strong Berichte:
+ ul.ps-0
+ - project.reports.each do
+ li.d-flex.ps-0
+ =< "ID #{_1.id}: #{l(_1.created_at,format: :short)} #{_1.name}"
+ = link_to(_1, class: "btn btn-sm btn-link-secondary") do
+ i.bi.bi-folder-symlink
+ = button_to(project_reports_path(project), class: "btn btn-sm btn-link-secondary", params: { copy_from_id: _1.id }) do
+ i.bi.bi-copy
+ p
+ = link_to(new_project_report_path(project), class: "btn btn-secondary") do
+ i.bi.bi-plus-lg
diff --git a/app/views/projects/_project.json.jbuilder b/app/views/projects/_project.json.jbuilder
new file mode 100644
index 0000000..c1f8d9f
--- /dev/null
+++ b/app/views/projects/_project.json.jbuilder
@@ -0,0 +1,2 @@
+json.extract! project, :id, :name, :created_at, :updated_at
+json.url project_url(project, format: :json)
diff --git a/app/views/projects/edit.html.erb b/app/views/projects/edit.html.erb
new file mode 100644
index 0000000..ee36a94
--- /dev/null
+++ b/app/views/projects/edit.html.erb
@@ -0,0 +1,8 @@
+<%= t("scaffold.pagetitle_edit", model: Project.model_name.human) %>
+
+<%= render "form", project: @project %>
+
+
+ <%= link_to t("scaffold.link_show", model: Project.model_name.human), @project %>
+ <%= link_to t("scaffold.link_index", model: Project.model_name.human(count: 2)), projects_path %>
+
diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb
new file mode 100644
index 0000000..c487887
--- /dev/null
+++ b/app/views/projects/index.html.erb
@@ -0,0 +1,25 @@
+<%= t("scaffold.pagetitle_index", model: Project.model_name.human(count: 2)) %>
+
+
+
+
+ | <%= Project.human_attribute_name(:id) %> |
+
+ <%= Project.human_attribute_name(:name) %> |
+
+
+
+ <% @projects.each do |project| %>
+
+ | <%= link_to(project.id, url_for(project)) %> |
+
+ <%= link_to(project.name, url_for(project)) %> |
+
+
+ <% end %>
+
+
+
+
+ <%= link_to t("scaffold.link_new", model: Project.model_name.human), new_project_path %>
+
\ No newline at end of file
diff --git a/app/views/projects/index.json.jbuilder b/app/views/projects/index.json.jbuilder
new file mode 100644
index 0000000..e9db4f9
--- /dev/null
+++ b/app/views/projects/index.json.jbuilder
@@ -0,0 +1 @@
+json.array! @projects, partial: "projects/project", as: :project
diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb
new file mode 100644
index 0000000..4876968
--- /dev/null
+++ b/app/views/projects/new.html.erb
@@ -0,0 +1,7 @@
+<%= t("scaffold.pagetitle_new", model: Project.model_name.human) %>
+
+<%= render "form", project: @project %>
+
+
+ <%= link_to t("scaffold.link_index", model: Project.model_name.human(count: 2)), projects_path %>
+
diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb
new file mode 100644
index 0000000..16d830f
--- /dev/null
+++ b/app/views/projects/show.html.erb
@@ -0,0 +1,9 @@
+<%= t("scaffold.pagetitle_show", model: @project.class.model_name.human) %>
+
+<%= render @project %>
+
+
+ <%= link_to t("scaffold.link_edit", model: @project.model_name.human), edit_project_path(@project) %>
+ <%= link_to t("scaffold.link_index", model: @project.model_name.human(count: 2)), projects_path %>
+ <%= button_to t("scaffold.link_destroy", model: @project.model_name.human), @project, method: :delete, class: "btn btn-outline-danger" if @project.reports.none? %>
+
diff --git a/app/views/projects/show.json.jbuilder b/app/views/projects/show.json.jbuilder
new file mode 100644
index 0000000..0be99bd
--- /dev/null
+++ b/app/views/projects/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! "projects/project", project: @project
diff --git a/app/views/reports/_form.html.erb b/app/views/reports/_form.html.erb
index 23a58a6..bea1172 100644
--- a/app/views/reports/_form.html.erb
+++ b/app/views/reports/_form.html.erb
@@ -1,4 +1,5 @@
-<%= bootstrap_form_with(model: report) do |form| %>
+<%= bootstrap_form_with(model: report.persisted? ? report : [@project, report]) do |form| %>
+ <%= form.collection_select :project_id, Project.all, :id, :name, include_blank: true %>
<%= form.text_field :name %>
<%= form.text_field :url %>
<%= form.rich_text_area :comment %>
diff --git a/app/views/reports/edit.html.erb b/app/views/reports/edit.html.erb
index 40ee203..7c43fd4 100644
--- a/app/views/reports/edit.html.erb
+++ b/app/views/reports/edit.html.erb
@@ -4,5 +4,5 @@
<%= link_to t("scaffold.link_show", model: Report.model_name.human), @report %>
- <%= link_to t("scaffold.link_index", model: Report.model_name.human(count: 2)), reports_path %>
+ <%= link_to t("scaffold.link_index", model: Report.model_name.human(count: 2)), project_reports_path(@report.project) %>
diff --git a/app/views/reports/index.html.erb b/app/views/reports/index.html.erb
index 61b1a89..af5baf5 100644
--- a/app/views/reports/index.html.erb
+++ b/app/views/reports/index.html.erb
@@ -27,5 +27,5 @@
- <%= link_to t("scaffold.link_new", model: Report.model_name.human), new_report_path %>
+ <%= link_to t("scaffold.link_new", model: Report.model_name.human), new_project_report_path(@project) %>
diff --git a/app/views/reports/new.html.erb b/app/views/reports/new.html.erb
index cc21f9b..61d6d54 100644
--- a/app/views/reports/new.html.erb
+++ b/app/views/reports/new.html.erb
@@ -3,5 +3,5 @@
<%= render "form", report: @report %>
- <%= link_to t("scaffold.link_index", model: Report.model_name.human(count: 2)), reports_path %>
+ <%= link_to t("scaffold.link_index", model: Report.model_name.human(count: 2)), project_reports_path(@project) %>
diff --git a/app/views/reports/show.html.slim b/app/views/reports/show.html.slim
index 9533137..03cce27 100644
--- a/app/views/reports/show.html.slim
+++ b/app/views/reports/show.html.slim
@@ -3,11 +3,12 @@
i.bi.bi-journal-text.me-2
= @report.name
div
- small
- 'Erstellt am
- = l(@report.created_at, format: :short)
- ', zuletzt bearbeitet am
- = l(@report.updated_at, format: :short)
+ small = "Erstellt am #{l(@report.created_at, format: :short)}, zuletzt bearbeitet am #{l(@report.updated_at, format: :short)}"
+
+p
+ i.bi.bi-folder
+ strong< = link_to(@report.project.name, @report.project)
+
.smb-4.lead.mb-5
= @report.comment || tag.i("leer")
- if @current_page
@@ -26,7 +27,6 @@ div
.btn-group.me-3.visually-hidden
= link_to("Alle zu [s]", "#", data: { action: "click->details-list#closeAll", controller: :hotkey, hotkey: "s" }, class: "btn btn-outline-secondary")
= link_to("Alle auf [a]", "#", data: { action: "click->details-list#openAll", controller: :hotkey, hotkey: "a" }, class: "btn btn-outline-secondary")
- /= button_to(tag.i(class: "bi bi-trash"), page_path(@current_page), method: :delete, class: "btn btn-outline-danger", form: {data: { turbo_confirm: "Bist du sicher?" }})
.row
.col-lg-3.col-md-4.col-sm-12
.page_nav.sticky-top
@@ -63,5 +63,5 @@ div
| ODT
.action-row
= link_to t("scaffold.link_edit", model: @report.model_name.human), edit_report_path(@report)
- = link_to t("scaffold.link_index", model: @report.model_name.human(count: 2)), reports_path
+ = link_to t("scaffold.link_index", model: @report.model_name.human(count: 2)), project_reports_path(@report.project)
= button_to t("scaffold.link_destroy", model: @report.model_name.human), @report, method: :delete, class: "btn btn-outline-danger", data: { turbo_confirm: "Bist du sicher?"}
diff --git a/db/migrate/20241124183246_create_projects.rb b/db/migrate/20241124183246_create_projects.rb
new file mode 100644
index 0000000..b2dbe30
--- /dev/null
+++ b/db/migrate/20241124183246_create_projects.rb
@@ -0,0 +1,9 @@
+class CreateProjects < ActiveRecord::Migration[8.0]
+ def change
+ create_table :projects do |t|
+ t.string :name
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20241124183406_add_project_to_reports.rb b/db/migrate/20241124183406_add_project_to_reports.rb
new file mode 100644
index 0000000..e840cdf
--- /dev/null
+++ b/db/migrate/20241124183406_add_project_to_reports.rb
@@ -0,0 +1,5 @@
+class AddProjectToReports < ActiveRecord::Migration[8.0]
+ def change
+ add_reference :reports, :project, null: true, foreign_key: true
+ end
+end
diff --git a/db/queue_schema.rb b/db/queue_schema.rb
index 85194b6..4b2cdcd 100644
--- a/db/queue_schema.rb
+++ b/db/queue_schema.rb
@@ -1,4 +1,16 @@
-ActiveRecord::Schema[7.1].define(version: 1) do
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# This file is the source Rails uses to define your schema when running `bin/rails
+# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
+# be faster and is potentially less error prone than running all of your
+# migrations from scratch. Old migrations may fail to apply correctly if those
+# migrations use external dependencies or application code.
+#
+# It's strongly recommended that you check this file into your version control system.
+
+ActiveRecord::Schema[8.0].define(version: 1) do
create_table "solid_queue_blocked_executions", force: :cascade do |t|
t.bigint "job_id", null: false
t.string "queue_name", null: false
@@ -6,24 +18,24 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.string "concurrency_key", null: false
t.datetime "expires_at", null: false
t.datetime "created_at", null: false
- t.index [ "concurrency_key", "priority", "job_id" ], name: "index_solid_queue_blocked_executions_for_release"
- t.index [ "expires_at", "concurrency_key" ], name: "index_solid_queue_blocked_executions_for_maintenance"
- t.index [ "job_id" ], name: "index_solid_queue_blocked_executions_on_job_id", unique: true
+ t.index ["concurrency_key", "priority", "job_id"], name: "index_solid_queue_blocked_executions_for_release"
+ t.index ["expires_at", "concurrency_key"], name: "index_solid_queue_blocked_executions_for_maintenance"
+ t.index ["job_id"], name: "index_solid_queue_blocked_executions_on_job_id", unique: true
end
create_table "solid_queue_claimed_executions", force: :cascade do |t|
t.bigint "job_id", null: false
t.bigint "process_id"
t.datetime "created_at", null: false
- t.index [ "job_id" ], name: "index_solid_queue_claimed_executions_on_job_id", unique: true
- t.index [ "process_id", "job_id" ], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id"
+ t.index ["job_id"], name: "index_solid_queue_claimed_executions_on_job_id", unique: true
+ t.index ["process_id", "job_id"], name: "index_solid_queue_claimed_executions_on_process_id_and_job_id"
end
create_table "solid_queue_failed_executions", force: :cascade do |t|
t.bigint "job_id", null: false
t.text "error"
t.datetime "created_at", null: false
- t.index [ "job_id" ], name: "index_solid_queue_failed_executions_on_job_id", unique: true
+ t.index ["job_id"], name: "index_solid_queue_failed_executions_on_job_id", unique: true
end
create_table "solid_queue_jobs", force: :cascade do |t|
@@ -37,17 +49,17 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.string "concurrency_key"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index [ "active_job_id" ], name: "index_solid_queue_jobs_on_active_job_id"
- t.index [ "class_name" ], name: "index_solid_queue_jobs_on_class_name"
- t.index [ "finished_at" ], name: "index_solid_queue_jobs_on_finished_at"
- t.index [ "queue_name", "finished_at" ], name: "index_solid_queue_jobs_for_filtering"
- t.index [ "scheduled_at", "finished_at" ], name: "index_solid_queue_jobs_for_alerting"
+ t.index ["active_job_id"], name: "index_solid_queue_jobs_on_active_job_id"
+ t.index ["class_name"], name: "index_solid_queue_jobs_on_class_name"
+ t.index ["finished_at"], name: "index_solid_queue_jobs_on_finished_at"
+ t.index ["queue_name", "finished_at"], name: "index_solid_queue_jobs_for_filtering"
+ t.index ["scheduled_at", "finished_at"], name: "index_solid_queue_jobs_for_alerting"
end
create_table "solid_queue_pauses", force: :cascade do |t|
t.string "queue_name", null: false
t.datetime "created_at", null: false
- t.index [ "queue_name" ], name: "index_solid_queue_pauses_on_queue_name", unique: true
+ t.index ["queue_name"], name: "index_solid_queue_pauses_on_queue_name", unique: true
end
create_table "solid_queue_processes", force: :cascade do |t|
@@ -59,9 +71,9 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.text "metadata"
t.datetime "created_at", null: false
t.string "name", null: false
- t.index [ "last_heartbeat_at" ], name: "index_solid_queue_processes_on_last_heartbeat_at"
- t.index [ "name", "supervisor_id" ], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true
- t.index [ "supervisor_id" ], name: "index_solid_queue_processes_on_supervisor_id"
+ t.index ["last_heartbeat_at"], name: "index_solid_queue_processes_on_last_heartbeat_at"
+ t.index ["name", "supervisor_id"], name: "index_solid_queue_processes_on_name_and_supervisor_id", unique: true
+ t.index ["supervisor_id"], name: "index_solid_queue_processes_on_supervisor_id"
end
create_table "solid_queue_ready_executions", force: :cascade do |t|
@@ -69,9 +81,9 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.string "queue_name", null: false
t.integer "priority", default: 0, null: false
t.datetime "created_at", null: false
- t.index [ "job_id" ], name: "index_solid_queue_ready_executions_on_job_id", unique: true
- t.index [ "priority", "job_id" ], name: "index_solid_queue_poll_all"
- t.index [ "queue_name", "priority", "job_id" ], name: "index_solid_queue_poll_by_queue"
+ t.index ["job_id"], name: "index_solid_queue_ready_executions_on_job_id", unique: true
+ t.index ["priority", "job_id"], name: "index_solid_queue_poll_all"
+ t.index ["queue_name", "priority", "job_id"], name: "index_solid_queue_poll_by_queue"
end
create_table "solid_queue_recurring_executions", force: :cascade do |t|
@@ -79,8 +91,8 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.string "task_key", null: false
t.datetime "run_at", null: false
t.datetime "created_at", null: false
- t.index [ "job_id" ], name: "index_solid_queue_recurring_executions_on_job_id", unique: true
- t.index [ "task_key", "run_at" ], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true
+ t.index ["job_id"], name: "index_solid_queue_recurring_executions_on_job_id", unique: true
+ t.index ["task_key", "run_at"], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true
end
create_table "solid_queue_recurring_tasks", force: :cascade do |t|
@@ -95,8 +107,8 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.text "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index [ "key" ], name: "index_solid_queue_recurring_tasks_on_key", unique: true
- t.index [ "static" ], name: "index_solid_queue_recurring_tasks_on_static"
+ t.index ["key"], name: "index_solid_queue_recurring_tasks_on_key", unique: true
+ t.index ["static"], name: "index_solid_queue_recurring_tasks_on_static"
end
create_table "solid_queue_scheduled_executions", force: :cascade do |t|
@@ -105,8 +117,8 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.integer "priority", default: 0, null: false
t.datetime "scheduled_at", null: false
t.datetime "created_at", null: false
- t.index [ "job_id" ], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true
- t.index [ "scheduled_at", "priority", "job_id" ], name: "index_solid_queue_dispatch_all"
+ t.index ["job_id"], name: "index_solid_queue_scheduled_executions_on_job_id", unique: true
+ t.index ["scheduled_at", "priority", "job_id"], name: "index_solid_queue_dispatch_all"
end
create_table "solid_queue_semaphores", force: :cascade do |t|
@@ -115,9 +127,9 @@ ActiveRecord::Schema[7.1].define(version: 1) do
t.datetime "expires_at", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index [ "expires_at" ], name: "index_solid_queue_semaphores_on_expires_at"
- t.index [ "key", "value" ], name: "index_solid_queue_semaphores_on_key_and_value"
- t.index [ "key" ], name: "index_solid_queue_semaphores_on_key", unique: true
+ t.index ["expires_at"], name: "index_solid_queue_semaphores_on_expires_at"
+ t.index ["key", "value"], name: "index_solid_queue_semaphores_on_key_and_value"
+ t.index ["key"], name: "index_solid_queue_semaphores_on_key", unique: true
end
add_foreign_key "solid_queue_blocked_executions", "solid_queue_jobs", column: "job_id", on_delete: :cascade
diff --git a/db/schema.rb b/db/schema.rb
index 7623c6e..754674b 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,19 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
+ActiveRecord::Schema[8.0].define(version: 2024_11_24_183406) do
+ create_table "account_remember_keys", force: :cascade do |t|
+ t.string "key", null: false
+ t.datetime "deadline", null: false
+ end
+
+ create_table "accounts", force: :cascade do |t|
+ t.integer "status", default: 1, null: false
+ t.string "email", null: false
+ t.string "password_hash"
+ t.index ["email"], name: "index_accounts_on_email", unique: true, where: "status IN (1, 2)"
+ end
+
create_table "action_text_rich_texts", force: :cascade do |t|
t.string "name", null: false
t.text "body"
@@ -115,6 +127,7 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
t.datetime "updated_at", null: false
t.integer "page_id", null: false
t.integer "position", null: false
+ t.index ["page_id", "position"], name: "index_elements_on_page_id_and_position", unique: true
t.index ["page_id"], name: "index_elements_on_page_id"
end
@@ -144,6 +157,7 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.text "notes"
+ t.index ["report_id", "position"], name: "index_pages_on_report_id_and_position", unique: true
t.index ["report_id"], name: "index_pages_on_report_id"
end
@@ -154,11 +168,19 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
t.datetime "updated_at", null: false
end
+ create_table "projects", force: :cascade do |t|
+ t.string "name"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
create_table "reports", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "url"
+ t.integer "project_id"
+ t.index ["project_id"], name: "index_reports_on_project_id"
end
create_table "sessions", force: :cascade do |t|
@@ -191,6 +213,7 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
t.integer "priority"
t.integer "position", null: false
t.index ["check_id"], name: "index_success_criteria_on_check_id"
+ t.index ["element_id", "position"], name: "index_success_criteria_on_element_id_and_position", unique: true
t.index ["element_id"], name: "index_success_criteria_on_element_id"
end
@@ -202,6 +225,7 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
t.index ["email_address"], name: "index_users_on_email_address", unique: true
end
+ add_foreign_key "account_remember_keys", "accounts", column: "id"
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
add_foreign_key "checklist_entries", "checklists"
@@ -210,6 +234,7 @@ ActiveRecord::Schema[8.0].define(version: 2024_11_11_034826) do
add_foreign_key "elements", "pages"
add_foreign_key "links", "link_categories"
add_foreign_key "pages", "reports"
+ add_foreign_key "reports", "projects"
add_foreign_key "sessions", "users"
add_foreign_key "success_criteria", "checks"
add_foreign_key "success_criteria", "elements"
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 00e45c0..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,1831 +0,0 @@
-{
- "name": "app",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "app",
- "dependencies": {
- "@github/hotkey": "^3.1.1",
- "@hotwired/stimulus": "^3.2.2",
- "@hotwired/turbo-rails": "^8.0.4",
- "@popperjs/core": "^2.11.8",
- "@rails/actiontext": "^7.1.3-4",
- "@rails/request.js": "^0.0.11",
- "@stimulus-components/lightbox": "^4.0.0",
- "autoprefixer": "^10.4.19",
- "bootstrap": "^5.3.3",
- "bootstrap-icons": "^1.11.3",
- "esbuild": "^0.23.0",
- "nodemon": "^3.1.4",
- "postcss": "^8.4.39",
- "postcss-cli": "^11.0.0",
- "sass": "^1.77.8",
- "sortablejs": "^1.15.3",
- "trix": "^2.1.3"
- },
- "devDependencies": {
- "tabby-agent": "^1.7.0",
- "vscode-css-languageserver-bin": "^1.4.0",
- "vscode-langservers-extracted": "^4.10.0"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
- "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@github/hotkey": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@github/hotkey/-/hotkey-3.1.1.tgz",
- "integrity": "sha512-H30I6XDO3gFSgLuEuHoMBRZG9c3uCKNdAcYklL1FaZDPdU1bXfgjnpzGDPcUr0U6eGQ+T3XLY9slatwZYWL1dA=="
- },
- "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.4",
- "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-8.0.4.tgz",
- "integrity": "sha512-mlZEFUZrJnpfj+g/XeCWWuokvQyN68WvM78JM+0jfSFc98wegm259vCbC1zSllcspRwbgXK31ibehCy5PA78/Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@hotwired/turbo-rails": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-8.0.4.tgz",
- "integrity": "sha512-GHCv5+B2VzYZZvMFpg/g9JLx/8pl/8chcubSB7T+Xn1zYOMqAKB6cT80vvWUzxdwfm/2KfaRysfDz+BmvtjFaw==",
- "license": "MIT",
- "dependencies": {
- "@hotwired/turbo": "^8.0.4",
- "@rails/actioncable": "^7.0"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@popperjs/core": {
- "version": "2.11.8",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
- "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
- }
- },
- "node_modules/@rails/actioncable": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.3.tgz",
- "integrity": "sha512-ojNvnoZtPN0pYvVFtlO7dyEN9Oml1B6IDM+whGKVak69MMYW99lC2NOWXWeE3bmwEydbP/nn6ERcpfjHVjYQjA==",
- "license": "MIT"
- },
- "node_modules/@rails/actiontext": {
- "version": "7.1.3-4",
- "resolved": "https://registry.npmjs.org/@rails/actiontext/-/actiontext-7.1.3-4.tgz",
- "integrity": "sha512-Yt0aFwV4vmQDH0SPMKACF5WnZ88vn8KHpCbPJIGnFcj4likev+SkmdCLu/TpcHrFQwHWXt+GwKE924Ny92YXAg==",
- "license": "MIT",
- "dependencies": {
- "@rails/activestorage": ">= 7.1.0-alpha"
- },
- "peerDependencies": {
- "trix": "^2.0.0"
- }
- },
- "node_modules/@rails/activestorage": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-7.1.3.tgz",
- "integrity": "sha512-B+RFYAU8vdTPFg0IJcRp2ey0Qw9hpcUOqHHcWqftDJ76ZMBi9+m/UUeMJlNsSd0l9eD+1HLlFSo1X//cY4yiDw==",
- "license": "MIT",
- "dependencies": {
- "spark-md5": "^3.0.1"
- }
- },
- "node_modules/@rails/request.js": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.11.tgz",
- "integrity": "sha512-2U3uYS0kbljt+pAstN+LIlZOl7xmOKig5N6FrvtUWO1wq0zR1Hf90fHfD2SYiyV8yH1nyKpoTmbLqWT0xe1zDg=="
- },
- "node_modules/@sindresorhus/merge-streams": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
- "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@stimulus-components/lightbox": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@stimulus-components/lightbox/-/lightbox-4.0.0.tgz",
- "integrity": "sha512-pj4PfnGANbc3Ef6I/5aPeRS8Tj2rK1b9dn8rlpJZs1K9narqM57ZtUTutHZsnOv95+4LqQVktj+auMgz+LKzjw==",
- "dependencies": {
- "lightgallery": "^2.7.2"
- },
- "peerDependencies": {
- "@hotwired/stimulus": "^3.0.0"
- }
- },
- "node_modules/@vscode/l10n": {
- "version": "0.0.18",
- "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
- "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
- "dev": true
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.19",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
- "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "browserslist": "^4.23.0",
- "caniuse-lite": "^1.0.30001599",
- "fraction.js": "^4.3.7",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/bootstrap": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
- "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/twbs"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/bootstrap"
- }
- ],
- "license": "MIT",
- "peerDependencies": {
- "@popperjs/core": "^2.11.8"
- }
- },
- "node_modules/bootstrap-icons": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz",
- "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/twbs"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/bootstrap"
- }
- ],
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "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/browserslist": {
- "version": "4.23.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
- "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "caniuse-lite": "^1.0.30001640",
- "electron-to-chromium": "^1.4.820",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.1.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001642",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz",
- "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "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"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "license": "MIT"
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "license": "MIT"
- },
- "node_modules/core-js": {
- "version": "3.39.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz",
- "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/debug": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.827",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz",
- "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==",
- "license": "ISC"
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "license": "MIT"
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/esbuild": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
- "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.23.0",
- "@esbuild/android-arm": "0.23.0",
- "@esbuild/android-arm64": "0.23.0",
- "@esbuild/android-x64": "0.23.0",
- "@esbuild/darwin-arm64": "0.23.0",
- "@esbuild/darwin-x64": "0.23.0",
- "@esbuild/freebsd-arm64": "0.23.0",
- "@esbuild/freebsd-x64": "0.23.0",
- "@esbuild/linux-arm": "0.23.0",
- "@esbuild/linux-arm64": "0.23.0",
- "@esbuild/linux-ia32": "0.23.0",
- "@esbuild/linux-loong64": "0.23.0",
- "@esbuild/linux-mips64el": "0.23.0",
- "@esbuild/linux-ppc64": "0.23.0",
- "@esbuild/linux-riscv64": "0.23.0",
- "@esbuild/linux-s390x": "0.23.0",
- "@esbuild/linux-x64": "0.23.0",
- "@esbuild/netbsd-x64": "0.23.0",
- "@esbuild/openbsd-arm64": "0.23.0",
- "@esbuild/openbsd-x64": "0.23.0",
- "@esbuild/sunos-x64": "0.23.0",
- "@esbuild/win32-arm64": "0.23.0",
- "@esbuild/win32-ia32": "0.23.0",
- "@esbuild/win32-x64": "0.23.0"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "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/fraction.js": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
- "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stdin": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
- "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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/globby": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
- "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/merge-streams": "^2.1.0",
- "fast-glob": "^3.3.2",
- "ignore": "^5.2.4",
- "path-type": "^5.0.0",
- "slash": "^5.1.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "license": "ISC"
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
- "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
- "license": "ISC"
- },
- "node_modules/immutable": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
- "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
- "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-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "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/jsonc-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
- "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
- "dev": true
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/lightgallery": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/lightgallery/-/lightgallery-2.8.1.tgz",
- "integrity": "sha512-K9bRsrKQM4UyjNUXOX+mW1IMWKvWbDmK42x5nNzgxsi5CNEYMfLoRsA27F1lXp+yegeqdXusymS9w16Fd8a3Rg==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
- "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/node-html-parser": {
- "version": "6.1.13",
- "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz",
- "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==",
- "dev": true,
- "dependencies": {
- "css-select": "^5.1.0",
- "he": "1.2.0"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "license": "MIT"
- },
- "node_modules/nodemon": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz",
- "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==",
- "license": "MIT",
- "dependencies": {
- "chokidar": "^3.5.2",
- "debug": "^4",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.1.2",
- "pstree.remy": "^1.1.8",
- "semver": "^7.5.3",
- "simple-update-notifier": "^2.0.0",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5"
- },
- "bin": {
- "nodemon": "bin/nodemon.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
- }
- },
- "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/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/path-type": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
- "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "license": "ISC"
- },
- "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/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
- "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-cli": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz",
- "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==",
- "license": "MIT",
- "dependencies": {
- "chokidar": "^3.3.0",
- "dependency-graph": "^0.11.0",
- "fs-extra": "^11.0.0",
- "get-stdin": "^9.0.0",
- "globby": "^14.0.0",
- "picocolors": "^1.0.0",
- "postcss-load-config": "^5.0.0",
- "postcss-reporter": "^7.0.0",
- "pretty-hrtime": "^1.0.3",
- "read-cache": "^1.0.0",
- "slash": "^5.0.0",
- "yargs": "^17.0.0"
- },
- "bin": {
- "postcss": "index.js"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz",
- "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "lilconfig": "^3.1.1",
- "yaml": "^2.4.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "jiti": ">=1.21.0",
- "postcss": ">=8.0.9",
- "tsx": "^4.8.1"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "tsx": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-reporter": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz",
- "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "picocolors": "^1.0.0",
- "thenby": "^1.3.4"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "license": "MIT"
- },
- "node_modules/pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
- "license": "MIT"
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "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.13.11",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
- "dev": true
- },
- "node_modules/request-light": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
- "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
- "dev": true
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "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/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/simple-update-notifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
- "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/slash": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
- "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/sortablejs": {
- "version": "1.15.3",
- "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz",
- "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg=="
- },
- "node_modules/source-map-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
- "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
- "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/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tabby-agent": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/tabby-agent/-/tabby-agent-1.7.0.tgz",
- "integrity": "sha512-jA8cCO39V+nOvFZP3GaXlxQEqqwXJvvz9tlgVFcqbq2gcWTBSUV4SbxoPYDRKIhY27oTXfeG0SHkAaoL+km5GA==",
- "dev": true,
- "bin": {
- "tabby-agent": "dist/node/index.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/thenby": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
- "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
- "license": "Apache-2.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/touch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
- "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
- "license": "ISC",
- "bin": {
- "nodetouch": "bin/nodetouch.js"
- }
- },
- "node_modules/trix": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/trix/-/trix-2.1.3.tgz",
- "integrity": "sha512-LqMp67LiKMQytAHKqNL1Jgmfz69ViW+WBOQTPA2BlMIuxic1mw5vHgDtOE0bvvojUdjAxh0EJtLpJn6BC/2JKw==",
- "license": "MIT"
- },
- "node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
- "dev": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/undefsafe": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
- "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
- "license": "MIT"
- },
- "node_modules/unicorn-magic": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
- "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/vscode-css-languageserver-bin": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/vscode-css-languageserver-bin/-/vscode-css-languageserver-bin-1.4.0.tgz",
- "integrity": "sha512-KWrF5f4RYYe8RBDfqb1c0Sdf9xPS2Ly/Z/T18H+uUOMw2QyzIrkxv4bMKy5GFfPm4479k6Ln4ji4UHqSmhGf3g==",
- "dev": true,
- "dependencies": {
- "vscode-css-languageservice": "^3.0.9-next.18",
- "vscode-languageserver": "^4.1.3",
- "vscode-languageserver-protocol-foldingprovider": "^2.0.1"
- },
- "bin": {
- "css-languageserver": "cssServerMain.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/vscode-css-languageservice": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13.tgz",
- "integrity": "sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg==",
- "dev": true,
- "dependencies": {
- "vscode-languageserver-types": "^3.13.0",
- "vscode-nls": "^4.0.0"
- }
- },
- "node_modules/vscode-html-languageservice": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.1.tgz",
- "integrity": "sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==",
- "dev": true,
- "dependencies": {
- "@vscode/l10n": "^0.0.18",
- "vscode-languageserver-textdocument": "^1.0.12",
- "vscode-languageserver-types": "^3.17.5",
- "vscode-uri": "^3.0.8"
- }
- },
- "node_modules/vscode-json-languageservice": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.4.1.tgz",
- "integrity": "sha512-5czFGNyVPxz3ZJYl8R3a3SuIj5gjhmGF4Wv05MRPvD4DEnHK6b8km4VbNMJNHBlTCh7A0aHzUbPVzo+0C18mCA==",
- "dev": true,
- "dependencies": {
- "@vscode/l10n": "^0.0.18",
- "jsonc-parser": "^3.3.1",
- "vscode-languageserver-textdocument": "^1.0.12",
- "vscode-languageserver-types": "^3.17.5",
- "vscode-uri": "^3.0.8"
- }
- },
- "node_modules/vscode-jsonrpc": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
- "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/vscode-langservers-extracted": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.10.0.tgz",
- "integrity": "sha512-EFf9uQI4dAKbzMQFjDvVm1xJq1DXAQvBEuEfPGrK/xzfsL5xWTfIuRr90NgfmqwO+IEt6vLZm9EOj6R66xIifg==",
- "dev": true,
- "dependencies": {
- "@vscode/l10n": "^0.0.18",
- "core-js": "^3.20.1",
- "jsonc-parser": "^3.2.1",
- "regenerator-runtime": "^0.13.9",
- "request-light": "^0.7.0",
- "semver": "^7.6.1",
- "typescript": "^4.0.5",
- "vscode-css-languageservice": "^6.2.14",
- "vscode-html-languageservice": "^5.2.0",
- "vscode-json-languageservice": "^5.3.11",
- "vscode-languageserver": "^10.0.0-next.3",
- "vscode-languageserver-textdocument": "^1.0.11",
- "vscode-languageserver-types": "^3.17.5",
- "vscode-markdown-languageservice": "^0.5.0-alpha.6",
- "vscode-nls": "^5.2.0",
- "vscode-uri": "^3.0.8"
- },
- "bin": {
- "vscode-css-language-server": "bin/vscode-css-language-server",
- "vscode-eslint-language-server": "bin/vscode-eslint-language-server",
- "vscode-html-language-server": "bin/vscode-html-language-server",
- "vscode-json-language-server": "bin/vscode-json-language-server",
- "vscode-markdown-language-server": "bin/vscode-markdown-language-server"
- }
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-css-languageservice": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.1.tgz",
- "integrity": "sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==",
- "dev": true,
- "dependencies": {
- "@vscode/l10n": "^0.0.18",
- "vscode-languageserver-textdocument": "^1.0.12",
- "vscode-languageserver-types": "3.17.5",
- "vscode-uri": "^3.0.8"
- }
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-jsonrpc": {
- "version": "9.0.0-next.6",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.6.tgz",
- "integrity": "sha512-KCSvUNsFiVciG9iqjJKBZOd66CN3ZKohDlYRmoOi+pd8l15MFLZ8wRG4c+wuzePGba/8WcCG2TM+C/GVlvuaeA==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver": {
- "version": "10.0.0-next.11",
- "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-10.0.0-next.11.tgz",
- "integrity": "sha512-cmobSrVDYhlh/t02vz/bV8nNpds8mus5HnILULae2iAvOjoaJPnTAp0jJWoYdUqTpIVzT9JV6JMKqLEvdqpeqg==",
- "dev": true,
- "dependencies": {
- "vscode-languageserver-protocol": "3.17.6-next.11"
- },
- "bin": {
- "installServerIntoExtension": "bin/installServerIntoExtension"
- }
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver-protocol": {
- "version": "3.17.6-next.11",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.11.tgz",
- "integrity": "sha512-GeJxEp1TiLsp79f8WG5n10wLViXfgFKb99hU9K8m7KDWM95/QFEqWkm79f9LVm54tUK74I91a9EeiQLCS/FABQ==",
- "dev": true,
- "dependencies": {
- "vscode-jsonrpc": "9.0.0-next.6",
- "vscode-languageserver-types": "3.17.6-next.5"
- }
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
- "version": "3.17.6-next.5",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.5.tgz",
- "integrity": "sha512-QFmf3Yl1tCgUQfA77N9Me/LXldJXkIVypQbty2rJ1DNHQkC+iwvm4Z2tXg9czSwlhvv0pD4pbF5mT7WhAglolw==",
- "dev": true
- },
- "node_modules/vscode-langservers-extracted/node_modules/vscode-nls": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
- "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
- "dev": true
- },
- "node_modules/vscode-languageserver": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-4.4.2.tgz",
- "integrity": "sha512-61y8Raevi9EigDgg9NelvT9cUAohiEbUl1LOwQQgOCAaNX62yKny/ddi0uC+FUTm4CzsjhBu+06R+vYgfCYReA==",
- "dev": true,
- "dependencies": {
- "vscode-languageserver-protocol": "^3.10.3",
- "vscode-uri": "^1.0.5"
- },
- "bin": {
- "installServerIntoExtension": "bin/installServerIntoExtension"
- }
- },
- "node_modules/vscode-languageserver-protocol": {
- "version": "3.17.5",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
- "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
- "dev": true,
- "dependencies": {
- "vscode-jsonrpc": "8.2.0",
- "vscode-languageserver-types": "3.17.5"
- }
- },
- "node_modules/vscode-languageserver-protocol-foldingprovider": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz",
- "integrity": "sha512-N8bOS8i0xuQMn/y0bijyefDbOsMl6hiH6LDREYWavTLTM5jbj44EiQfStsbmAv/0eaFKkL/jf5hW7nWwBy2HBw==",
- "dev": true,
- "dependencies": {
- "vscode-languageserver-protocol": "^3.7.2",
- "vscode-languageserver-types": "^3.7.2"
- }
- },
- "node_modules/vscode-languageserver-textdocument": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
- "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
- "dev": true
- },
- "node_modules/vscode-languageserver-types": {
- "version": "3.17.5",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
- "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
- "dev": true
- },
- "node_modules/vscode-languageserver/node_modules/vscode-uri": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.8.tgz",
- "integrity": "sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==",
- "dev": true
- },
- "node_modules/vscode-markdown-languageservice": {
- "version": "0.5.0-alpha.8",
- "resolved": "https://registry.npmjs.org/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.5.0-alpha.8.tgz",
- "integrity": "sha512-b2NgVMZvzI/7hRL32Kcu9neAAPFQzkcf/Fqwlxbz9p1/Q7aIorGACOGGo00s72AJtwjkCJ29eVJwUlFMFbPKqA==",
- "dev": true,
- "dependencies": {
- "@vscode/l10n": "^0.0.10",
- "node-html-parser": "^6.1.5",
- "picomatch": "^2.3.1",
- "vscode-languageserver-protocol": "^3.17.1",
- "vscode-languageserver-textdocument": "^1.0.11",
- "vscode-uri": "^3.0.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/vscode-markdown-languageservice/node_modules/@vscode/l10n": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.10.tgz",
- "integrity": "sha512-E1OCmDcDWa0Ya7vtSjp/XfHFGqYJfh+YPC1RkATU71fTac+j1JjCcB3qwSzmlKAighx2WxhLlfhS0RwAN++PFQ==",
- "dev": true
- },
- "node_modules/vscode-nls": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz",
- "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==",
- "dev": true
- },
- "node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz",
- "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==",
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 38a1f98..c32d279 100644
--- a/package.json
+++ b/package.json
@@ -35,4 +35,4 @@
"vscode-css-languageserver-bin": "^1.4.0",
"vscode-langservers-extracted": "^4.10.0"
}
-}
+}
\ No newline at end of file
diff --git a/test/controllers/projects_controller_test.rb b/test/controllers/projects_controller_test.rb
new file mode 100644
index 0000000..c2514b6
--- /dev/null
+++ b/test/controllers/projects_controller_test.rb
@@ -0,0 +1,55 @@
+require "test_helper"
+
+class ProjectsControllerTest < ::ControllerTest
+ teardown do
+ logout
+ end
+
+ setup do
+ @project = projects(:one)
+ User.create!(email_address: "test@example.com", password: "password")
+ login("test@example.com", "password")
+ end
+
+ test "should get index" do
+ get projects_url
+ assert_response :success
+ end
+
+ test "should get new" do
+ get new_project_url
+ assert_response :success
+ end
+
+ test "should create project" do
+ assert_difference("Project.count") do
+ post projects_url, params: { project: { name: @project.name } }
+ end
+
+ assert_redirected_to project_url(Project.last)
+ end
+
+ test "should show project" do
+ get project_url(@project)
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get edit_project_url(@project)
+ assert_response :success
+ end
+
+ test "should update project" do
+ patch project_url(@project), params: { project: { name: @project.name } }
+ assert_redirected_to project_url(@project)
+ end
+
+ test "should destroy project" do
+ p = Project.create!(name: "empty")
+ assert_difference("Project.count", -1) do
+ delete project_url(p)
+ end
+
+ assert_redirected_to projects_url
+ end
+end
diff --git a/test/controllers/reports_controller_test.rb b/test/controllers/reports_controller_test.rb
index f46759f..0b9f9e7 100644
--- a/test/controllers/reports_controller_test.rb
+++ b/test/controllers/reports_controller_test.rb
@@ -14,18 +14,18 @@ class ReportsControllerTest < ::ControllerTest
end
test "should get index" do
- get reports_url
+ get project_reports_url(@report.project)
assert_response :success
end
test "should get new" do
- get new_report_url
+ get new_project_report_url(@report.project)
assert_response :success
end
test "should create report" do
assert_difference("Report.count") do
- post reports_url, params: { report: { comment: @report.comment, name: @report.name } }
+ post project_reports_url(@report.project), params: { report: { comment: @report.comment, name: @report.name } }
end
assert_redirected_to report_url(Report.last)
@@ -51,6 +51,6 @@ class ReportsControllerTest < ::ControllerTest
delete report_url(@report)
end
- assert_redirected_to reports_url
+ assert_redirected_to project_url(@report.project)
end
end
diff --git a/test/fixtures/projects.yml b/test/fixtures/projects.yml
new file mode 100644
index 0000000..7d41224
--- /dev/null
+++ b/test/fixtures/projects.yml
@@ -0,0 +1,7 @@
+# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+ name: MyString
+
+two:
+ name: MyString
diff --git a/test/fixtures/reports.yml b/test/fixtures/reports.yml
index 7d41224..169701e 100644
--- a/test/fixtures/reports.yml
+++ b/test/fixtures/reports.yml
@@ -2,6 +2,8 @@
one:
name: MyString
+ project: one
two:
name: MyString
+ project: one
diff --git a/test/models/project_test.rb b/test/models/project_test.rb
new file mode 100644
index 0000000..5df4ca4
--- /dev/null
+++ b/test/models/project_test.rb
@@ -0,0 +1,7 @@
+require "test_helper"
+
+class ProjectTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end
diff --git a/test/system/projects_test.rb b/test/system/projects_test.rb
new file mode 100644
index 0000000..2134947
--- /dev/null
+++ b/test/system/projects_test.rb
@@ -0,0 +1,47 @@
+require "application_system_test_case"
+
+class ProjectsTest < ApplicationSystemTestCase
+ setup do
+ @project = projects(:one)
+ login_test
+ end
+
+ teardown do
+ logout
+ end
+
+ test "visiting the index" do
+ visit projects_url
+ assert_selector "h1", text: "Projekte"
+ end
+
+ test "should create project" do
+ visit projects_url
+ click_on "Projekt hinzufügen"
+
+ fill_in "Name", with: @project.name
+ click_on "Projekt erstellen"
+
+ assert_text "Project was successfully created"
+ click_on "Projekte Liste"
+ end
+
+ test "should update Project" do
+ visit project_url(@project)
+ click_on "Projekt bearbeiten", match: :first
+
+ fill_in "Name", with: @project.name
+ click_on "Projekt aktualisieren"
+
+ assert_text "Project was successfully updated"
+ click_on "Projekte Liste"
+ end
+
+ test "should destroy Project" do
+ empty = Project.create!(name: "empty")
+ visit project_url(empty)
+ click_on "Projekt löschen", match: :first
+
+ assert_text "Project was successfully destroyed"
+ end
+end
diff --git a/test/system/reports_test.rb b/test/system/reports_test.rb
index 066b7f7..c7a5ec3 100644
--- a/test/system/reports_test.rb
+++ b/test/system/reports_test.rb
@@ -13,12 +13,12 @@ class ReportsTest < ApplicationSystemTestCase
end
test "visiting the index" do
- visit reports_url
+ visit project_reports_url(@report.project)
assert_selector "h1", text: "Prüfberichte"
end
test "should create report" do
- visit reports_url
+ visit project_reports_url(@report.project)
click_on "Prüfbericht hinzufügen"
fill_in_rich_text_area "Projektbeschreibung", with: @report.comment