diff --git a/Dockerfile b/Dockerfile index 6ae5155..0e930c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,9 @@ ENV \ RAILS_ENV=development \ TZ=Europe/Zurich \ PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH \ - EDITOR=vim + EDITOR=vim \ + RUBY_DEBUG_DAP_SHOW_PROTOCOL=1 \ + RUBY_DEBUG_OPEN=true RUN \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ @@ -49,7 +51,11 @@ RUN \ apt-get install -yqq --no-install-recommends \ sqlite3 nodejs npm sassc yarn libvips fish ranger pandoc libjemalloc2 && \ apt-get clean && \ - npm install tabby-agent && \ + npm i -g tabby-agent \ + vscode-langservers-extracted \ + dockerfile-language-server-nodejs \ + @microsoft/compose-language-service \ + yaml-language-server@next && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ truncate -s 0 /var/log/*log && \ gem update --system && \ @@ -62,8 +68,6 @@ RUN curl -L https://github.com/helix-editor/helix/releases/download/${HELIX_VERS tar -xf /tmp/helix.tar.xz && \ ln -s /opt/helix-${HELIX_VERSION}-x86_64-linux/hx /usr/local/bin chmod +x /usr/local/bin/ -USER ${NAME} - RUN mkdir -p ~/.config/fish ~/.config/helix COPY <.content { padding-left: 1rem; padding-right: 1rem; + padding-bottom: 1rem; } } @@ -262,7 +234,7 @@ details.success_criterion { details.success_criterion[open] { - border: solid 1px $tertiary; + /* border: solid 1px $tertiary; */ >summary { background-color: $tertiary; @@ -275,14 +247,17 @@ details.success_criterion[open] { @include color-mode(dark) { details.success_criterion { - border: solid 1px $tertiary-dark; - border-bottom: solid 0px $tertiary-dark; + border-left: solid 1px $tertiary-dark; + border-right: solid 1px $tertiary-dark; + border-top: solid 1px $tertiary-dark; } + details.success_criterion:last-child { border-bottom: solid 1px $tertiary-dark; } + details.success_criterion[open] { - border: solid 1px $tertiary-dark; + /* border: solid 1px $tertiary-dark; */ >summary { background-color: $tertiary-dark; @@ -343,3 +318,64 @@ details[open] { .sortable-ghost { border: solid 3px $primary !important; } + +$dialog-animation-time: 0.5s; +$dialog-animation-start-state: scaleX(1); +$dialog-animation-end-state: scaleX(1); +/* dialog::backdrop { */ +/* background-color: white; */ +/* opacity: 0.75; */ +/* } */ + +/* Open state of the dialog */ +dialog[open] { + opacity: 1; + transform: $dialog-animation-end-state; +} + +/* Closed state of the dialog */ +dialog { + opacity: 0; + transform: $dialog-animation-start-state; + transition: + opacity $dialog-animation-time ease-out, + transform $dialog-animation-time ease-out, + overlay $dialog-animation-time ease-out allow-discrete, + display $dialog-animation-time ease-out allow-discrete; + /* Equivalent to + transition: all $dialog-animation-time allow-discrete; */ +} + +/* Before-open state */ +/* Needs to be after the previous dialog[open] rule to take effect, + as the specificity is the same */ +@starting-style { + dialog[open] { + opacity: 0; + transform: $dialog-animation-start-state; + } +} + +/* Transition the :backdrop when the dialog modal is promoted to the top layer */ +dialog::backdrop { + background-color: rgb(0 0 0 / 75%); + transition: + display $dialog-animation-time allow-discrete, + overlay $dialog-animation-time allow-discrete, + background-color $dialog-animation-time; + /* Equivalent to + transition: all $dialog-animation-time allow-discrete; */ +} + +dialog[open]::backdrop { + background-color: rgb(0 0 0 / 75%); +} + +/* This starting-style rule cannot be nested inside the above selector +because the nesting selector cannot represent pseudo-elements. */ + +@starting-style { + dialog[open]::backdrop { + background-color: rgb(0 0 0 / 0%); + } +} \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3804ad6..9c0c681 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -50,4 +50,8 @@ class ApplicationController < ActionController::Base def initialize_sidebar_items [] end + + def render_modal(action: action_name) + render action, layout: "modal" if turbo_frame_request_id == "modal" + end end diff --git a/app/controllers/elements_controller.rb b/app/controllers/elements_controller.rb index abfd931..fd94e84 100644 --- a/app/controllers/elements_controller.rb +++ b/app/controllers/elements_controller.rb @@ -19,7 +19,9 @@ class ElementsController < ApplicationController end # GET /elements/1/edit - def edit; end + def edit + render_modal + end # POST /elements def create diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 13f2fb8..c73d631 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -19,6 +19,7 @@ class PagesController < ApplicationController # GET /pages/1/edit def edit + render_modal end # POST /pages diff --git a/app/controllers/success_criteria_controller.rb b/app/controllers/success_criteria_controller.rb index 4ae7840..f77a931 100644 --- a/app/controllers/success_criteria_controller.rb +++ b/app/controllers/success_criteria_controller.rb @@ -18,7 +18,9 @@ class SuccessCriteriaController < ApplicationController end # GET /success_criteria/1/edit - def edit; end + def edit + render_modal() + end # POST /success_criteria def create diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3c87ca1..437f6fc 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -35,10 +35,10 @@ module ApplicationHelper def dropdown_menu(items, klass: "") - tag.details(class: "details-dropdown #{klass}") do + tag.details(class: "details-dropdown #{klass}", data: { controller: "dropdown-menu" }) do tag.summary do tag.div(class: "details-dropdown-trigger") do - tag.div(tag.i(class: "bi bi-three-dots-vertical"), class: "btn btn-outline-secondary") + tag.div(tag.i(class: "bi bi-three-dots"), class: "btn btn-outline-body") end end + tag.div(class: "details-dropdown-content bg-secondary") do @@ -48,7 +48,7 @@ module ApplicationHelper text = item[:icon] ? tag.i(class: "bi bi-#{item[:icon]} me-2") + " #{item[:text]}".html_safe : item[:text] case item[:method] when nil, :get - link_to(text, item[:href], class: "#{c}") + link_to(text, item[:href], class: "#{c}", data: { turbo_frame: item[:turbo_frame], action: item[:action] }) else button_to(text, item[:href], @@ -61,4 +61,8 @@ module ApplicationHelper end end end + + def modal? + turbo_frame_request_id == "modal" + end end diff --git a/app/helpers/elements_helper.rb b/app/helpers/elements_helper.rb index d7f10ce..1488e59 100644 --- a/app/helpers/elements_helper.rb +++ b/app/helpers/elements_helper.rb @@ -1,4 +1,19 @@ # frozen_string_literal: true module ElementsHelper + def element_menu(element) + dropdown_menu([ + { text: "Bearbeiten", + icon: "pencil", + href: edit_element_path(element), + turbo_frame: "modal", + color: "body" }, + { text: "Löschen", + icon: "trash", + href: element_path(element), + color: :danger, + method: :delete, + confirm: "Bist du sicher?" } ], + klass: "ms-auto") + end end diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index 2c057fd..6aa2874 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -1,2 +1,27 @@ module PagesHelper + def page_menu(page) + dropdown_menu([ + { + text: "Alle zu [s]", + href: "#", + action: "click->details-list#closeAll" + }, + { + text: "Alle auf [a]", + href: "#", + action: "click->details-list#openAll" + }, + { text: "Bearbeiten", + icon: "pencil", + href: edit_page_path(page), + turbo_frame: "modal", + color: "body" }, + { text: "Löschen", + icon: "trash", + href: page_path(page), + color: :danger, + method: :delete, + confirm: "Bist du sicher?" } ], + klass: "ms-auto") + end end diff --git a/app/helpers/success_criteria_helper.rb b/app/helpers/success_criteria_helper.rb index 5ecc7d0..4b786fe 100644 --- a/app/helpers/success_criteria_helper.rb +++ b/app/helpers/success_criteria_helper.rb @@ -27,19 +27,20 @@ module SuccessCriteriaHelper def success_criterion_menu(success_criterion, show_mode = true) dropdown_menu([ - { text: show_mode ? "Bearbeiten" : "Bearbeiten abbrechen", - icon: "pencil", - href: show_mode ? edit_success_criterion_path(success_criterion) : success_criterion_path(success_criterion)}, - { text: "Löschen", - icon: "trash", - href: success_criterion_path(success_criterion), - color: :danger, - method: :delete, - confirm: "Bist du sicher?"}], - klass: "mt-3 ms-auto") + { text: "Bearbeiten", + icon: "pencil", + href: edit_success_criterion_path(success_criterion), + turbo_frame: "modal", + color: "body" }, + { text: "Löschen", + icon: "trash", + href: success_criterion_path(success_criterion), + color: :danger, + method: :delete, + confirm: "Bist du sicher?" } ], + klass: "mt-3 ms-auto") end - def success_criterion_edit_button(success_criterion, edit_mode) path = if success_criterion.persisted? if edit_mode diff --git a/app/javascript/controllers/details_list_controller.js b/app/javascript/controllers/details_list_controller.js index d521c4c..29a265a 100644 --- a/app/javascript/controllers/details_list_controller.js +++ b/app/javascript/controllers/details_list_controller.js @@ -10,7 +10,7 @@ export default class extends Controller { e.preventDefault(); const id = this.element.dataset["targetId"] const el = document.getElementById(id) - el.querySelectorAll("details").forEach(el => { + el.querySelectorAll("details.success_criterion").forEach(el => { el.setAttribute("open", "") }) } @@ -19,7 +19,7 @@ export default class extends Controller { e.preventDefault(); const id = this.element.dataset["targetId"] const el = document.getElementById(id) - el.querySelectorAll("details").forEach(el => { + el.querySelectorAll("details.success_criterion").forEach(el => { el.removeAttribute("open") }) } diff --git a/app/javascript/controllers/dialog_controller.js b/app/javascript/controllers/dialog_controller.js new file mode 100644 index 0000000..4dabac7 --- /dev/null +++ b/app/javascript/controllers/dialog_controller.js @@ -0,0 +1,53 @@ +// app/javascript/controllers/dialog_controller.js +import { Controller } from "@hotwired/stimulus" + +// Connects to data-controller="dialog" +export default class extends Controller { + connect() { + this.open() + console.log("connect dialog", this.element) + this.element.addEventListener("turbo:submit-end", e => { + this.submitEnd(e) + }) + this.element.addEventListener("click", e => this.clickOutside(e)) + } + + disconnect() { + } + + // hide modal on successful form submission + // data-action="turbo:submit-end->turbo-modal#submitEnd" + submitEnd(e) { + if (e.detail.success) { + this.close() + } + } + + open() { + console.log("open dialog") + this.element.showModal() + document.body.classList.add('overflow-hidden') + this.element.addEventListener("close", this.enableBodyScroll.bind(this)) + } + + close() { + this.element.removeEventListener("close", this.enableBodyScroll.bind(this)) + this.element.close() + // clean up modal content + const frame = document.getElementById('modal') + frame.removeAttribute("src") + frame.innerHTML = "" + } + + enableBodyScroll() { + document.body.classList.remove('overflow-hidden') + } + + clickOutside(event) { + console.log("clickOutside", event.target, this) + if (event.target === this.element) { + this.close() + } + } +} + diff --git a/app/javascript/controllers/dropdown_menu_controller.js b/app/javascript/controllers/dropdown_menu_controller.js new file mode 100644 index 0000000..adbbec8 --- /dev/null +++ b/app/javascript/controllers/dropdown_menu_controller.js @@ -0,0 +1,16 @@ +import { Controller } from "@hotwired/stimulus" + +// Connects to data-controller="dropdown-menu" +export default class extends Controller { + connect() { + const x = this.element + this.element.addEventListener("turbo:click", e => { + console.log("turbo visit dropdown", e, this.element) + this.element.removeAttribute("open"); + }) + this.element.addEventListener("turbo:submit-start", e => { + console.log("turbo submit dropdown", e, this.element) + this.element.removeAttribute("open"); + }) + } +} diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 8654ab4..6ad9f94 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -19,9 +19,15 @@ application.register("collapse-chevron-toggler", CollapseChevronTogglerControlle import DetailsListController from "./details_list_controller" application.register("details-list", DetailsListController) +import DialogController from "./dialog_controller" +application.register("dialog", DialogController) + import DragController from "./drag_controller" application.register("drag", DragController) +import DropdownMenuController from "./dropdown_menu_controller" +application.register("dropdown-menu", DropdownMenuController) + import HelloController from "./hello_controller" application.register("hello", HelloController) @@ -48,6 +54,3 @@ application.register("toast", ToastController) import UnsavedChangesController from "./unsaved_changes_controller" application.register("unsaved-changes", UnsavedChangesController) - -import Lightbox from '@stimulus-components/lightbox' -application.register('lightbox', Lightbox) \ No newline at end of file diff --git a/app/models/success_criterion.rb b/app/models/success_criterion.rb index 03c97fa..e575308 100644 --- a/app/models/success_criterion.rb +++ b/app/models/success_criterion.rb @@ -17,6 +17,8 @@ class SuccessCriterion < ApplicationRecord before_save :set_position before_update :update_positions, if: :position_changed? + validates :result, inclusion: { in: self.results.keys + [ nil ] } + def level_value return nil unless level diff --git a/app/views/checklist_entries/destroy.turbo_stream.erb b/app/views/checklist_entries/destroy.turbo_stream.erb index 6e7c01a..4b1f257 100644 --- a/app/views/checklist_entries/destroy.turbo_stream.erb +++ b/app/views/checklist_entries/destroy.turbo_stream.erb @@ -1 +1,2 @@ -<%= turbo_stream.remove dom_id(@checklist_entry) %> \ No newline at end of file +<%= turbo_stream.remove dom_id(@checklist_entry) %> +<%= turbo_stream_toast("Check wurde aus Checkliste entfernt", true) %> diff --git a/app/views/elements/_element.html.erb b/app/views/elements/_element.html.erb index 1571085..0c92ffc 100644 --- a/app/views/elements/_element.html.erb +++ b/app/views/elements/_element.html.erb @@ -1,6 +1,6 @@
<%= turbo_frame_tag dom_id(element, :frame) do %> -
+

@@ -9,13 +9,7 @@ <%= element.title %>

- <%= link_to [:edit, element], class: "btn btn-link text-secondary" do %> - - - <% end %> - <%= button_to(element_path(element), method: :delete, class: "btn btn-link text-danger", data: { turbo_confirm: "Bist du sicher?"}) do %> - - <% end %> + <%= element_menu(element) %>
@@ -28,7 +22,7 @@
<%= link_to(s) do %> <%= image_tag(s.variant(:thumbnail), class: "img-fluid", alt: "Screenshot des getesteten Elements") %> - <% end %> + <% end rescue nil %>
<% end %>
diff --git a/app/views/elements/destroy.turbo_stream.slim b/app/views/elements/destroy.turbo_stream.slim index 35f04de..5305209 100644 --- a/app/views/elements/destroy.turbo_stream.slim +++ b/app/views/elements/destroy.turbo_stream.slim @@ -5,4 +5,4 @@ = turbo_stream.replace dom_id(e, :page_nav_row), partial: "elements/page_nav_row", locals: { element: e, current_page: true } -= turbo_stream_toast("Element wurde gelöscht", false) \ No newline at end of file += turbo_stream_toast("Element wurde gelöscht", true) diff --git a/app/views/elements/edit.html.erb b/app/views/elements/edit.html.erb index ade1f43..f1e84ae 100644 --- a/app/views/elements/edit.html.erb +++ b/app/views/elements/edit.html.erb @@ -1,19 +1,17 @@

<%= t("scaffold.pagetitle_edit", model: Element.model_name.human) %>

-<%= turbo_frame_tag dom_id(@element, :frame) do %>

<%= @element.title %> - <%= link_to(tag.i(class: "bi bi-pencil"), @element, class: "btn btn-link text-warning") %>

<%= render "form", element: @element %>
+<% unless modal? %> +
+ <%= link_to t("scaffold.link_show", model: Element.model_name.human), @element %> + <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), page_elements_path(@element.page) %> +
<% end %> - -
- <%= link_to t("scaffold.link_show", model: Element.model_name.human), @element %> - <%= link_to t("scaffold.link_index", model: Element.model_name.human(count: 2)), page_elements_path(@element.page) %> -
diff --git a/app/views/layouts/_toast.html.slim b/app/views/layouts/_toast.html.slim index 920e3fb..5917715 100644 --- a/app/views/layouts/_toast.html.slim +++ b/app/views/layouts/_toast.html.slim @@ -1,4 +1,4 @@ -.toast class="#{alert ? "text-bg-danger" : ""}" role="alert" aria-live="assertive" aria-atomic="true" data={ controller: "toast" } +.toast class="#{alert ? "text-bg-danger" : "text-bg-info"}" role="alert" aria-live="assertive" aria-atomic="true" data={ controller: "toast" } .toast-header /img src="..." class="rounded me-2" alt="..."> /strong.me-auto = heading diff --git a/app/views/layouts/application.html.slim b/app/views/layouts/application.html.slim index 992a528..ac756a6 100644 --- a/app/views/layouts/application.html.slim +++ b/app/views/layouts/application.html.slim @@ -17,11 +17,10 @@ html data-bs-theme="#{cookies[:"modeTheme"] || "light"}" data-controller="set-th #main-content[data-controller="rich-text-link-targets"] = yield - .toast-container.position-fixed.bottom-0.start-0.p-3 id="toasts" + .toast-container.position-fixed.top-0.end-0.p-3 id="toasts" - if flash.alert = render partial: "layouts/toast", locals: { content: flash.alert, alert: true } - if flash.notice = render partial: "layouts/toast", locals: { content: flash.notice, alert: false } - /footer.container-fluid.mt-auto.border-top - = Rails.configuration.build_version && "Version: #{Rails.configuration.build_version}" + = turbo_frame_tag "modal" diff --git a/app/views/layouts/modal.html.slim b/app/views/layouts/modal.html.slim new file mode 100644 index 0000000..4a3c12e --- /dev/null +++ b/app/views/layouts/modal.html.slim @@ -0,0 +1,9 @@ += turbo_frame_tag "modal" do + dialog.bg-body id="modal" data={ controller: :dialog } + .float-end + form method="dialog" + button.btn.btn-outline-danger + i.bi.bi-x-lg + = yield + +data-action="turbo:submit-end->turbo-modal#submitEnd" diff --git a/app/views/pages/_page.html.erb b/app/views/pages/_page.html.erb index 3505c40..7fa2aa0 100644 --- a/app/views/pages/_page.html.erb +++ b/app/views/pages/_page.html.erb @@ -11,5 +11,5 @@ <% end %>
- <%= link_to("Sprinte zum ersten Element", "##{dom_id(page.elements.first)}", class: "visually-hidden", data: {controller: :hotkey, hotkey: "e", turbo: false}) if page.elements.first %> + <%= link_to("Springe zum ersten Element", "##{dom_id(page.elements.first)}", class: "visually-hidden", data: {controller: :hotkey, hotkey: "e", turbo: false}) if page.elements.first %>
diff --git a/app/views/pages/edit.html.erb b/app/views/pages/edit.html.erb index 6983a18..f809d03 100644 --- a/app/views/pages/edit.html.erb +++ b/app/views/pages/edit.html.erb @@ -2,7 +2,9 @@ <%= render "form", page: @page %> +<% unless modal? %>
<%= link_to t("scaffold.link_show", model: Page.model_name.human), @page %> <%= link_to t("scaffold.link_index", model: Page.model_name.human(count: 2)), report_pages_path(@page.report) %>
+<% end %> diff --git a/app/views/pages/show.html.slim b/app/views/pages/show.html.slim index c2c8f8b..d5045b1 100644 --- a/app/views/pages/show.html.slim +++ b/app/views/pages/show.html.slim @@ -11,7 +11,8 @@ h2 = turbo_frame_tag(dom_id(@page, :notes)) do = render partial: "pages/notes", locals: { page: @page } -.action-row - = link_to t("scaffold.link_edit", model: @page.model_name.human), edit_page_path(@page) - = link_to t("scaffold.link_index", model: @page.model_name.human(count: 2)), report_pages_path(@page.report) - = button_to t("scaffold.link_destroy", model: @page.model_name.human), @page, method: :delete, class: "btn btn-outline-danger" +- unless modal? + .action-row + = link_to t("scaffold.link_edit", model: @page.model_name.human), edit_page_path(@page) + = link_to t("scaffold.link_index", model: @page.model_name.human(count: 2)), report_pages_path(@page.report) + = button_to t("scaffold.link_destroy", model: @page.model_name.human), @page, method: :delete, class: "btn btn-outline-danger" diff --git a/app/views/reports/show.html.slim b/app/views/reports/show.html.slim index 405b87c..3fc7196 100644 --- a/app/views/reports/show.html.slim +++ b/app/views/reports/show.html.slim @@ -1,29 +1,32 @@ +.border-bottom.mb-3 + h1 + i.bi.bi-journal-text.me-2 + = @report.name div - small.float-end - | Erstellt am + small + 'Erstellt am = l(@report.created_at, format: :short) - | , zuletzt bearbeitet am + ', zuletzt bearbeitet am = l(@report.updated_at, format: :short) -h1 - i.bi.bi-journal-text.me-2 - = @report.name -- if @report.comment - .smb-4.lead.mb-3 - = @report.comment +.smb-4.lead.mb-5 + = @report.comment || tag.i("leer") - if @current_page - h2 - i.bi.bi-file-earmark-check - =< @current_page.position - =< @current_page.path - p - 'URL: - = safe_display(@current_page.full_url) { link_to(_1, _1, target: :_blank) } - p.actions - .d-flex.justify-content-end data-controller="details-list" data-target-id="element_list" - .btn-group.me-3 - = 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?" }}) + .current_page data-controller="details-list" data-target-id="element_list" + .border-bottom.mb-3.d-flex + h2 + i.bi.bi-file-earmark-check + =< @current_page.position + =< @current_page.path + = page_menu(@current_page) + p + 'URL: + = safe_display(@current_page.full_url) { link_to(_1, _1, target: :_blank) } + p.actions + .d-flex.justify-content-end + .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 diff --git a/app/views/success_criteria/_body.html.slim b/app/views/success_criteria/_body.html.slim index 45a40d3..e0c4190 100644 --- a/app/views/success_criteria/_body.html.slim +++ b/app/views/success_criteria/_body.html.slim @@ -44,7 +44,7 @@ .text-end.fw-bold = SuccessCriterion.human_attribute_name(:quick_fix) .col-md-8.col-lg-9 = success_criterion.quick_fix - .row.mb-3 + .row .col-md-4.col-lg-3 .text-end.fw-bold = SuccessCriterion.human_attribute_name(:test_instructions) .col-md-8.col-lg-9 diff --git a/app/views/success_criteria/_form.html.slim b/app/views/success_criteria/_form.html.slim index fe12bf5..c67c2b0 100644 --- a/app/views/success_criteria/_form.html.slim +++ b/app/views/success_criteria/_form.html.slim @@ -6,4 +6,5 @@ = form.rich_text_area :quick_fix = form.rich_text_area :test_comment = form.submit class: "btn btn-primary" - = link_to "Abbrechen", success_criterion.persisted? ? success_criterion : success_criterion.element, class: "btn btn-outline-secondary" +- unless modal? + =< link_to "Abbrechen", success_criterion.persisted? ? success_criterion : success_criterion.element, class: "btn btn-outline-secondary" diff --git a/app/views/success_criteria/_header.html.slim b/app/views/success_criteria/_header.html.slim index db31ae4..b7a2fa6 100644 --- a/app/views/success_criteria/_header.html.slim +++ b/app/views/success_criteria/_header.html.slim @@ -19,4 +19,4 @@ summary.d-flex.align-items-start id=dom_id(success_criterion, :header) = success_criterion_badge(success_criterion.check.external_number, extra_classes: "text-bg-info me-1") = success_criterion_badge(success_criterion.level, extra_classes: "sc-level-#{success_criterion.level.to_s.downcase} me-1") - i.bi.bi-grip-vertical.handle + i.bi.bi-grip-vertical.handle.me-1 diff --git a/app/views/success_criteria/destroy.turbo_stream.slim b/app/views/success_criteria/destroy.turbo_stream.slim index 6848f33..f373009 100644 --- a/app/views/success_criteria/destroy.turbo_stream.slim +++ b/app/views/success_criteria/destroy.turbo_stream.slim @@ -1,4 +1,6 @@ = turbo_stream.remove dom_id(@success_criterion) - @success_criterion.element.success_criteria.reject { _1 == @success_criterion }.each do |sc| - Rails.logger.debug "Send to sc #{sc.id}" - = turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}" \ No newline at end of file + = turbo_stream.update dom_id(sc, :position), "#{sc.page.position}.#{sc.element.position}.#{sc.position}" + += turbo_stream_toast("Erfolgskriterium wurde gelöscht", true) diff --git a/app/views/success_criteria/edit.html.slim b/app/views/success_criteria/edit.html.slim index d3c144a..e1a2a31 100644 --- a/app/views/success_criteria/edit.html.slim +++ b/app/views/success_criteria/edit.html.slim @@ -1,19 +1,7 @@ -h1 - = t("scaffold.pagetitle_edit", model: SuccessCriterion.model_name.human) -= turbo_frame_tag(dom_id(@success_criterion, :frame)) do - .d-flex - h2.my-2 Bearbeiten - .ms-auto - = success_criterion_menu(@success_criterion, false) - /= dropdown_menu(klass: "mt-3 b-0") do - ul.list-group - li.list-group-item - = success_criterion_edit_button(@success_criterion, true) - li.list-group-item - = button_to(tag.i(class: "bi bi-trash") + " Löschen".html_safe, @success_criterion, method: :delete, class: "btn text-danger", data: { turbo_confirm: "Bist du sicher?"}) - - .mb-3 - = render "form", success_criterion: @success_criterion -.action-row - = link_to t("scaffold.link_show", model: SuccessCriterion.model_name.human), @success_criterion - = link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), element_success_criteria_path(@success_criterion.element) +h2 Erfolgskriterium bearbeiten +.mb-3 + = render "form", success_criterion: @success_criterion +- unless modal? + .action-row + = link_to t("scaffold.link_show", model: SuccessCriterion.model_name.human), @success_criterion + = link_to t("scaffold.link_index", model: SuccessCriterion.model_name.human(count: 2)), element_success_criteria_path(@success_criterion.element) diff --git a/app/views/success_criteria/update.turbo_stream.slim b/app/views/success_criteria/update.turbo_stream.slim index dc9c79e..c6e53ff 100644 --- a/app/views/success_criteria/update.turbo_stream.slim +++ b/app/views/success_criteria/update.turbo_stream.slim @@ -3,5 +3,4 @@ - @success_criterion.element.success_criteria.each do |sc| = turbo_stream.update(dom_id(sc, :position), sc.number) - -= turbo_stream_toast("Erfolgskriterium gespeichert: #{t("activerecord.attributes.success_criterion.results/#{@success_criterion.result}")}", false) \ No newline at end of file += turbo_stream_toast("Erfolgskriterium gespeichert: #{t("activerecord.attributes.success_criterion.results/#{@success_criterion.result}")}", false) diff --git a/package-lock.json b/package-lock.json index a189879..00e45c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,13 @@ "": { "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", @@ -18,10 +21,13 @@ "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" + "tabby-agent": "^1.7.0", + "vscode-css-languageserver-bin": "^1.4.0", + "vscode-langservers-extracted": "^4.10.0" } }, "node_modules/@esbuild/linux-x64": { @@ -40,6 +46,11 @@ "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", @@ -137,6 +148,11 @@ "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", @@ -149,6 +165,23 @@ "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", @@ -241,6 +274,12 @@ "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", @@ -412,6 +451,45 @@ "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", @@ -438,6 +516,61 @@ "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", @@ -450,6 +583,18 @@ "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", @@ -630,6 +775,15 @@ "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", @@ -702,6 +856,12 @@ "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", @@ -714,6 +874,14 @@ "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", @@ -784,6 +952,16 @@ "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", @@ -836,6 +1014,18 @@ "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", @@ -1059,6 +1249,18 @@ "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", @@ -1154,6 +1356,11 @@ "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", @@ -1252,6 +1459,19 @@ "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", @@ -1309,6 +1529,239 @@ "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", diff --git a/package.json b/package.json index b8c7a06..38a1f98 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,8 @@ "defaults" ], "devDependencies": { - "tabby-agent": "^1.7.0" + "tabby-agent": "^1.7.0", + "vscode-css-languageserver-bin": "^1.4.0", + "vscode-langservers-extracted": "^4.10.0" } } diff --git a/yarn.lock b/yarn.lock index b1abead..e4005fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,7 +124,7 @@ "@github/hotkey@^3.1.1": version "3.1.1" - resolved "https://registry.yarnpkg.com/@github/hotkey/-/hotkey-3.1.1.tgz#61fdf9993378b402bd9cdd494ee8149fe3172b0c" + resolved "https://registry.npmjs.org/@github/hotkey/-/hotkey-3.1.1.tgz" integrity sha512-H30I6XDO3gFSgLuEuHoMBRZG9c3uCKNdAcYklL1FaZDPdU1bXfgjnpzGDPcUr0U6eGQ+T3XLY9slatwZYWL1dA== "@hotwired/stimulus@^3.2.2": @@ -192,7 +192,7 @@ "@rails/request.js@^0.0.11": version "0.0.11" - resolved "https://registry.yarnpkg.com/@rails/request.js/-/request.js-0.0.11.tgz#4d9be25a49d97911c64ccd0f00b79d57fca4c3b4" + resolved "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.11.tgz" integrity sha512-2U3uYS0kbljt+pAstN+LIlZOl7xmOKig5N6FrvtUWO1wq0zR1Hf90fHfD2SYiyV8yH1nyKpoTmbLqWT0xe1zDg== "@sindresorhus/merge-streams@^2.1.0": @@ -202,11 +202,21 @@ "@stimulus-components/lightbox@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@stimulus-components/lightbox/-/lightbox-4.0.0.tgz#dbe56146a3d14582a13e568406292d52aa56cbb0" + 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" +"@vscode/l10n@^0.0.10": + version "0.0.10" + resolved "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.10.tgz" + integrity sha512-E1OCmDcDWa0Ya7vtSjp/XfHFGqYJfh+YPC1RkATU71fTac+j1JjCcB3qwSzmlKAighx2WxhLlfhS0RwAN++PFQ== + +"@vscode/l10n@^0.0.18": + version "0.0.18" + resolved "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz" + integrity sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -249,6 +259,11 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + bootstrap-icons@^1.11.3: version "1.11.3" resolved "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz" @@ -330,6 +345,27 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +core-js@^3.20.1: + 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== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + debug@^4: version "4.3.5" resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz" @@ -342,6 +378,36 @@ dependency-graph@^0.11.0: resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + electron-to-chromium@^1.4.820: version "1.4.827" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz" @@ -352,6 +418,11 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + esbuild@^0.23.0: version "0.23.0" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz" @@ -470,6 +541,11 @@ has-flag@^3.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -514,6 +590,11 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +jsonc-parser@^3.2.1, jsonc-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" @@ -524,9 +605,9 @@ jsonfile@^6.0.1: graceful-fs "^4.1.6" lightgallery@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/lightgallery/-/lightgallery-2.7.2.tgz#9309216986fbce60602b851e1ef80cf40769c3d3" - integrity sha512-Ewdcg9UPDqV0HGZeD7wNE4uYejwH2u0fMo5VAr6GHzlPYlhItJvjhLTR0cL0V1HjhMsH39PAom9iv69ewitLWw== + version "2.8.1" + resolved "https://registry.npmjs.org/lightgallery/-/lightgallery-2.8.1.tgz" + integrity sha512-K9bRsrKQM4UyjNUXOX+mW1IMWKvWbDmK42x5nNzgxsi5CNEYMfLoRsA27F1lXp+yegeqdXusymS9w16Fd8a3Rg== lilconfig@^3.1.1: version "3.1.2" @@ -563,6 +644,14 @@ nanoid@^3.3.7: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +node-html-parser@^6.1.5: + 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== + dependencies: + css-select "^5.1.0" + he "1.2.0" + node-releases@^2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" @@ -594,6 +683,13 @@ normalize-range@^0.1.2: resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +nth-check@^2.0.1: + 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== + dependencies: + boolbase "^1.0.0" + path-type@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz" @@ -691,6 +787,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regenerator-runtime@^0.13.9: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +request-light@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz" + integrity sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -717,7 +823,7 @@ sass@^1.77.8: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -semver@^7.5.3: +semver@^7.5.3, semver@^7.6.1: version "7.6.2" resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== @@ -736,7 +842,7 @@ slash@^5.0.0, slash@^5.1.0: sortablejs@^1.15.3: version "1.15.3" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.3.tgz#033668db5ebfb11167d1249ab88e748f27959e29" + resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz" integrity sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg== "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0: @@ -799,6 +905,11 @@ trix@^2.1.3: resolved "https://registry.npmjs.org/trix/-/trix-2.1.3.tgz" integrity sha512-LqMp67LiKMQytAHKqNL1Jgmfz69ViW+WBOQTPA2BlMIuxic1mw5vHgDtOE0bvvojUdjAxh0EJtLpJn6BC/2JKw== +typescript@^4.0.5: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + undefsafe@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" @@ -822,6 +933,172 @@ update-browserslist-db@^1.1.0: escalade "^3.1.2" picocolors "^1.0.1" +vscode-css-languageserver-bin@^1.4.0: + 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== + dependencies: + vscode-css-languageservice "^3.0.9-next.18" + vscode-languageserver "^4.1.3" + vscode-languageserver-protocol-foldingprovider "^2.0.1" + +vscode-css-languageservice@^3.0.9-next.18: + 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== + dependencies: + vscode-languageserver-types "^3.13.0" + vscode-nls "^4.0.0" + +vscode-css-languageservice@^6.2.14: + version "6.3.1" + resolved "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.1.tgz" + integrity sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ== + dependencies: + "@vscode/l10n" "^0.0.18" + vscode-languageserver-textdocument "^1.0.12" + vscode-languageserver-types "3.17.5" + vscode-uri "^3.0.8" + +vscode-html-languageservice@^5.2.0: + 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== + dependencies: + "@vscode/l10n" "^0.0.18" + vscode-languageserver-textdocument "^1.0.12" + vscode-languageserver-types "^3.17.5" + vscode-uri "^3.0.8" + +vscode-json-languageservice@^5.3.11: + version "5.4.1" + resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.4.1.tgz" + integrity sha512-5czFGNyVPxz3ZJYl8R3a3SuIj5gjhmGF4Wv05MRPvD4DEnHK6b8km4VbNMJNHBlTCh7A0aHzUbPVzo+0C18mCA== + 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" + +vscode-jsonrpc@8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz" + integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA== + +vscode-jsonrpc@9.0.0-next.6: + 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== + +vscode-langservers-extracted@^4.10.0: + version "4.10.0" + resolved "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.10.0.tgz" + integrity sha512-EFf9uQI4dAKbzMQFjDvVm1xJq1DXAQvBEuEfPGrK/xzfsL5xWTfIuRr90NgfmqwO+IEt6vLZm9EOj6R66xIifg== + 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" + +vscode-languageserver-protocol-foldingprovider@^2.0.1: + 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== + dependencies: + vscode-languageserver-protocol "^3.7.2" + vscode-languageserver-types "^3.7.2" + +vscode-languageserver-protocol@3.17.6-next.11: + 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== + dependencies: + vscode-jsonrpc "9.0.0-next.6" + vscode-languageserver-types "3.17.6-next.5" + +vscode-languageserver-protocol@^3.10.3, vscode-languageserver-protocol@^3.17.1, vscode-languageserver-protocol@^3.7.2: + 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== + dependencies: + vscode-jsonrpc "8.2.0" + vscode-languageserver-types "3.17.5" + +vscode-languageserver-textdocument@^1.0.11, vscode-languageserver-textdocument@^1.0.12: + 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== + +vscode-languageserver-types@3.17.5, vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.17.5, vscode-languageserver-types@^3.7.2: + version "3.17.5" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz" + integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + +vscode-languageserver-types@3.17.6-next.5: + 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== + +vscode-languageserver@^10.0.0-next.3: + 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== + dependencies: + vscode-languageserver-protocol "3.17.6-next.11" + +vscode-languageserver@^4.1.3: + version "4.4.2" + resolved "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-4.4.2.tgz" + integrity sha512-61y8Raevi9EigDgg9NelvT9cUAohiEbUl1LOwQQgOCAaNX62yKny/ddi0uC+FUTm4CzsjhBu+06R+vYgfCYReA== + dependencies: + vscode-languageserver-protocol "^3.10.3" + vscode-uri "^1.0.5" + +vscode-markdown-languageservice@^0.5.0-alpha.6: + 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== + 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" + +vscode-nls@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz" + integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== + +vscode-nls@^5.2.0: + 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== + +vscode-uri@^1.0.5: + version "1.0.8" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.8.tgz" + integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== + +vscode-uri@^3.0.7, vscode-uri@^3.0.8: + version "3.0.8" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz" + integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"