diff --git a/client/components/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js
index fc64e7bbd..7268dcc73 100644
--- a/client/components/codeEditor/autocompleteEmoji.js
+++ b/client/components/codeEditor/autocompleteEmoji.js
@@ -1,3 +1,5 @@
+import { autocompletion } from '@codemirror/autocomplete';
+
import diceFont from '@themes/fonts/iconFonts/diceFont.js';
import elderberryInn from '@themes/fonts/iconFonts/elderberryInn.js';
import fontAwesome from '@themes/fonts/iconFonts/fontAwesome.js';
@@ -10,75 +12,64 @@ const emojis = {
...gameIcons
};
-const showAutocompleteEmoji = function(CodeMirror, editor) {
- CodeMirror.commands.autocomplete = function(editor) {
- editor.showHint({
- completeSingle : false,
- hint : function(editor) {
- const cursor = editor.getCursor();
- const line = cursor.line;
- const lineContent = editor.getLine(line);
- const start = lineContent.lastIndexOf(':', cursor.ch - 1) + 1;
- const end = cursor.ch;
- const currentWord = lineContent.slice(start, end);
+const emojiCompletionList = (context)=>{
+ const word = context.matchBefore(/:[^\s:]*/);
+ if(!word) return null;
+ const line = context.state.doc.lineAt(context.pos);
+ const textToCursor = line.text.slice(0, context.pos - line.from);
- const list = Object.keys(emojis).filter(function(emoji) {
- return emoji.toLowerCase().indexOf(currentWord.toLowerCase()) >= 0;
- }).sort((a, b)=>{
- const lowerA = a.replace(/\d+/g, function(match) { // Temporarily convert any numbers in emoji string
- return match.padStart(4, '0'); // to 4-digits, left-padded with 0's, to aid in
- }).toLowerCase(); // sorting numbers, i.e., "d6, d10, d20", not "d10, d20, d6"
- const lowerB = b.replace(/\d+/g, function(match) { // Also make lowercase for case-insensitive alpha sorting
- return match.padStart(4, '0');
- }).toLowerCase();
+ if(textToCursor.includes('{')) {
+ const curlyToCursor = textToCursor.slice(textToCursor.indexOf('{'));
+ const curlySpanRegex = /{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1$/g;
+ if(curlySpanRegex.test(curlyToCursor)) return null;
+ }
- if(lowerA < lowerB)
- return -1;
- return 1;
- }).map(function(emoji) {
- return {
- text : `${emoji}:`, // Text to output to editor when option is selected
- render : function(element, self, data) { // How to display the option in the dropdown
- const div = document.createElement('div');
- div.innerHTML = ` ${emoji}`;
- element.appendChild(div);
- }
- };
- });
+ const currentWord = word.text.slice(1); // remove ':'
- return {
- list : list.length ? list : [],
- from : CodeMirror.Pos(line, start),
- to : CodeMirror.Pos(line, end)
- };
- }
- });
+ const options = Object.keys(emojis)
+ .filter((e)=>e.toLowerCase().includes(currentWord.toLowerCase()))
+ .sort((a, b)=>{
+ const normalize = (str)=>str.replace(/\d+/g, (m)=>m.padStart(4, '0')).toLowerCase();
+ return normalize(a) < normalize(b) ? -1 : 1;
+ })
+ .map((e)=>({
+ label : e,
+ apply : `${e}:`,
+ type : 'text',
+ info : ()=>{
+ const div = document.createElement('div');
+ div.innerHTML = ` ${e}`;
+ return div;
+ }
+ }));
+ //Label is the text in the list, comes with an icon that just
+ //renders example text "abc", hid that with css because i didn't see other choice
+ //Apply is the text that is set when the choice is selected
+ //Info is the tooltip
+
+ return {
+ from : word.from + 1,
+ options,
};
-
- editor.on('inputRead', function(instance, change) {
- const cursor = editor.getCursor();
- const line = editor.getLine(cursor.line);
-
- // Get the text from the start of the line to the cursor
- const textToCursor = line.slice(0, cursor.ch);
-
- // Do not autosuggest emojis in curly span/div/injector properties
- if(line.includes('{')) {
- const curlyToCursor = textToCursor.slice(textToCursor.indexOf(`{`));
- const curlySpanRegex = /{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1$/g;
-
- if(curlySpanRegex.test(curlyToCursor))
- return;
- }
-
- // Check if the text ends with ':xyz'
- if(/:[^\s:]+$/.test(textToCursor)) {
- CodeMirror.commands.autocomplete(editor);
- }
- });
};
-export default {
- showAutocompleteEmoji
-};
\ No newline at end of file
+export const autocompleteEmoji = autocompletion({
+ override : [emojiCompletionList],
+ activateOnTyping : true,
+ addToOptions : [
+ {
+ render(completion) {
+ const e = completion.label;
+
+ const icon = document.createElement('i');
+ icon.className = `emojiPreview ${emojis[e]}`;
+
+ const fragment = document.createDocumentFragment();
+ fragment.appendChild(icon);
+
+ return fragment;
+ }
+ }
+ ]
+});
\ No newline at end of file
diff --git a/client/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx
index cd140ad07..c326a807e 100644
--- a/client/components/codeEditor/codeEditor.jsx
+++ b/client/components/codeEditor/codeEditor.jsx
@@ -1,490 +1,345 @@
-/* eslint-disable max-lines */
+/* eslint max-lines: ["error", { "max": 400 }] */
import './codeEditor.less';
-import React from 'react';
-import createReactClass from 'create-react-class';
-import _ from 'lodash';
-import closeTag from './close-tag';
-import autoCompleteEmoji from './autocompleteEmoji';
-let CodeMirror;
+import React, { useEffect, useRef, forwardRef, useImperativeHandle } from 'react';
-const CodeEditor = createReactClass({
- displayName : 'CodeEditor',
- getDefaultProps : function() {
- return {
- language : '',
- tab : 'brewText',
- value : '',
- wrap : true,
- onChange : ()=>{},
- enableFolding : true,
- editorTheme : 'default'
- };
- },
+import {
+ EditorView,
+ keymap,
+ lineNumbers,
+ highlightActiveLineGutter,
+ highlightActiveLine,
+ scrollPastEnd,
+ Decoration,
+ ViewPlugin,
+ WidgetType,
+ drawSelection,
+ dropCursor,
+} from '@codemirror/view';
+import { EditorState, Compartment } from '@codemirror/state';
+import { foldAll as foldAllCmd, unfoldAll as unfoldAllCmd, foldGutter, foldKeymap, syntaxHighlighting } from '@codemirror/language';
+import { defaultKeymap, history, undo, redo, undoDepth, redoDepth } from '@codemirror/commands';
+import { languages } from '@codemirror/language-data';
+import { css, cssLanguage } from '@codemirror/lang-css';
+import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
+import { html } from '@codemirror/lang-html';
+import { autocompleteEmoji } from './autocompleteEmoji.js';
+import { searchKeymap, search } from '@codemirror/search';
+import { closeBrackets } from '@codemirror/autocomplete';
- getInitialState : function() {
- return {
- docs : {}
- };
- },
+const customClose = closeBrackets({ brackets: ['()', '[]', '{{}}'] });
- editor : React.createRef(null),
+import * as themesImport from '@uiw/codemirror-themes-all';
+import defaultCM5Theme from '@themes/codeMirror/default.js';
+import darkbrewery from '@themes/codeMirror/darkbrewery.js';
- async componentDidMount() {
- CodeMirror = (await import('codemirror')).default;
- this.CodeMirror = CodeMirror;
+const themes = { default: defaultCM5Theme, darkbrewery, ...themesImport };
+const themeCompartment = new Compartment();
+const highlightCompartment = new Compartment();
- await import('codemirror/mode/gfm/gfm.js');
- await import('codemirror/mode/css/css.js');
- await import('codemirror/mode/javascript/javascript.js');
+import customKeymap from './customKeyMap.js';
+import pageFoldExtension from './customFolding.js';
+import { customHighlightStyle, tokenizeCustomMarkdown, tokenizeCustomCSS } from './customHighlight.js';
+import { legacyCustomHighlightStyle, legacyTokenizeCustomMarkdown } from './legacyCustomHighlight.js';
- // addons
- await import('codemirror/addon/fold/foldcode.js');
- await import('codemirror/addon/fold/foldgutter.js');
- await import('codemirror/addon/fold/xml-fold.js');
- await import('codemirror/addon/search/search.js');
- await import('codemirror/addon/search/searchcursor.js');
- await import('codemirror/addon/search/jump-to-line.js');
- await import('codemirror/addon/search/match-highlighter.js');
- await import('codemirror/addon/search/matchesonscrollbar.js');
- await import('codemirror/addon/dialog/dialog.js');
- await import('codemirror/addon/scroll/scrollpastend.js');
- await import('codemirror/addon/edit/closetag.js');
- await import('codemirror/addon/hint/show-hint.js');
- // import 'codemirror/addon/selection/active-line.js';
- // import 'codemirror/addon/edit/trailingspace.js';
+const createHighlightPlugin = (renderer, tab)=>{
+ //this function takes the custom tokens created in the tokenize function in customhighlight files
+ //takes the tokens defined by that function and assigns classes to them
+ //it also creates page number and snippet number widgets
+ let tokenize;
- // register helpers dynamically as well
- const foldPagesCode = (await import('./fold-pages')).default;
- const foldCSSCode = (await import('./fold-css')).default;
- foldPagesCode.registerHomebreweryHelper(CodeMirror);
- foldCSSCode.registerHomebreweryHelper(CodeMirror);
-
- this.buildEditor();
- const newDoc = CodeMirror?.Doc(this.props.value, this.props.language);
- this.codeMirror?.swapDoc(newDoc);
- },
-
-
- componentDidUpdate : function(prevProps) {
- if(prevProps.view !== this.props.view){ //view changed; swap documents
- let newDoc;
-
- if(!this.state.docs[this.props.view]) {
- newDoc = CodeMirror?.Doc(this.props.value, this.props.language);
- } else {
- newDoc = this.state.docs[this.props.view];
- }
-
- const oldDoc = { [prevProps.view]: this.codeMirror?.swapDoc(newDoc) };
-
- this.setState((prevState)=>({
- docs : _.merge({}, prevState.docs, oldDoc)
- }));
-
- this.props.rerenderParent();
- } else if(this.codeMirror?.getValue() != this.props.value) { //update editor contents if brew.text is changed from outside
- this.codeMirror?.setValue(this.props.value);
- }
-
- if(this.props.enableFolding) {
- this.codeMirror?.setOption('foldOptions', this.foldOptions(this.codeMirror));
- } else {
- this.codeMirror?.setOption('foldOptions', false);
- }
-
- if(prevProps.editorTheme !== this.props.editorTheme){
- this.codeMirror?.setOption('theme', this.props.editorTheme);
- }
- },
-
- buildEditor : function() {
- this.codeMirror = CodeMirror(this.editor.current, {
- lineNumbers : true,
- lineWrapping : this.props.wrap,
- indentWithTabs : false,
- tabSize : 2,
- smartIndent : false,
- historyEventDelay : 250,
- scrollPastEnd : true,
- extraKeys : {
- 'Tab' : this.indent,
- 'Shift-Tab' : this.dedent,
- 'Ctrl-B' : this.makeBold,
- 'Cmd-B' : this.makeBold,
- 'Shift-Ctrl-=' : this.makeSuper,
- 'Shift-Cmd-=' : this.makeSuper,
- 'Ctrl-=' : this.makeSub,
- 'Cmd-=' : this.makeSub,
- 'Ctrl-I' : this.makeItalic,
- 'Cmd-I' : this.makeItalic,
- 'Ctrl-U' : this.makeUnderline,
- 'Cmd-U' : this.makeUnderline,
- 'Ctrl-.' : this.makeNbsp,
- 'Cmd-.' : this.makeNbsp,
- 'Shift-Ctrl-.' : this.makeSpace,
- 'Shift-Cmd-.' : this.makeSpace,
- 'Shift-Ctrl-,' : this.removeSpace,
- 'Shift-Cmd-,' : this.removeSpace,
- 'Ctrl-M' : this.makeSpan,
- 'Cmd-M' : this.makeSpan,
- 'Shift-Ctrl-M' : this.makeDiv,
- 'Shift-Cmd-M' : this.makeDiv,
- 'Ctrl-/' : this.makeComment,
- 'Cmd-/' : this.makeComment,
- 'Ctrl-K' : this.makeLink,
- 'Cmd-K' : this.makeLink,
- 'Ctrl-L' : ()=>this.makeList('UL'),
- 'Cmd-L' : ()=>this.makeList('UL'),
- 'Shift-Ctrl-L' : ()=>this.makeList('OL'),
- 'Shift-Cmd-L' : ()=>this.makeList('OL'),
- 'Shift-Ctrl-1' : ()=>this.makeHeader(1),
- 'Shift-Ctrl-2' : ()=>this.makeHeader(2),
- 'Shift-Ctrl-3' : ()=>this.makeHeader(3),
- 'Shift-Ctrl-4' : ()=>this.makeHeader(4),
- 'Shift-Ctrl-5' : ()=>this.makeHeader(5),
- 'Shift-Ctrl-6' : ()=>this.makeHeader(6),
- 'Shift-Cmd-1' : ()=>this.makeHeader(1),
- 'Shift-Cmd-2' : ()=>this.makeHeader(2),
- 'Shift-Cmd-3' : ()=>this.makeHeader(3),
- 'Shift-Cmd-4' : ()=>this.makeHeader(4),
- 'Shift-Cmd-5' : ()=>this.makeHeader(5),
- 'Shift-Cmd-6' : ()=>this.makeHeader(6),
- 'Shift-Ctrl-Enter' : this.newColumn,
- 'Shift-Cmd-Enter' : this.newColumn,
- 'Ctrl-Enter' : this.newPage,
- 'Cmd-Enter' : this.newPage,
- 'Ctrl-F' : 'findPersistent',
- 'Cmd-F' : 'findPersistent',
- 'Shift-Enter' : 'findPersistentPrevious',
- 'Ctrl-[' : this.foldAllCode,
- 'Cmd-[' : this.foldAllCode,
- 'Ctrl-]' : this.unfoldAllCode,
- 'Cmd-]' : this.unfoldAllCode
- },
- foldGutter : true,
- foldOptions : this.foldOptions(this.codeMirror),
- gutters : ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'],
- autoCloseTags : true,
- styleActiveLine : true,
- showTrailingSpace : false,
- theme : this.props.editorTheme
- // specialChars : / /,
- // specialCharPlaceholder : function(char) {
- // const el = document.createElement('span');
- // el.className = 'cm-space';
- // el.innerHTML = ' ';
- // return el;
- // }
- });
-
- // Add custom behaviors (auto-close curlies and auto-complete emojis)
- closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror);
- autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror);
-
- // Note: codeMirror passes a copy of itself in this callback. cm === this.codeMirror?. Either one works.
- this.codeMirror?.on('change', (cm)=>{this.props.onChange(cm.getValue());});
- this.updateSize();
- },
-
- // Use for GFM tabs that use common hot-keys
- isGFM : function() {
- if((this.isGFM()) || (this.props.tab === 'brewSnippets')) return true;
- return false;
- },
-
- isBrewText : function() {
- if(this.isGFM()) return true;
- return false;
- },
-
- isBrewSnippets : function() {
- if(this.props.tab === 'brewSnippets') return true;
- return false;
- },
-
- indent : function () {
- const cm = this.codeMirror;
- if(cm.somethingSelected()) {
- cm.execCommand('indentMore');
- } else {
- cm.execCommand('insertSoftTab');
- }
- },
-
- dedent : function () {
- this.codeMirror?.execCommand('indentLess');
- },
-
- makeHeader : function (number) {
- if(!this.isGFM()) return;
- const selection = this.codeMirror?.getSelection();
- const header = Array(number).fill('#').join('');
- this.codeMirror?.replaceSelection(`${header} ${selection}`, 'around');
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch + selection.length + number + 1 });
- },
-
- makeBold : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror?.getSelection(), t = selection.slice(0, 2) === '**' && selection.slice(-2) === '**';
- this.codeMirror?.replaceSelection(t ? selection.slice(2, -2) : `**${selection}**`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 2 });
- }
- },
-
- makeItalic : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 1) === '*' && selection.slice(-1) === '*';
- this.codeMirror?.replaceSelection(t ? selection.slice(1, -1) : `*${selection}*`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 1 });
- }
- },
-
- makeSuper : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 1) === '^' && selection.slice(-1) === '^';
- this.codeMirror?.replaceSelection(t ? selection.slice(1, -1) : `^${selection}^`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 1 });
- }
- },
-
- makeSub : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 2) === '^^' && selection.slice(-2) === '^^';
- this.codeMirror?.replaceSelection(t ? selection.slice(2, -2) : `^^${selection}^^`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 2 });
- }
- },
-
-
- makeNbsp : function() {
- if(!this.isGFM()) return;
- this.codeMirror?.replaceSelection(' ', 'end');
- },
-
- makeSpace : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror?.getSelection();
- const t = selection.slice(0, 8) === '{{width:' && selection.slice(0 -4) === '% }}';
- if(t){
- const percent = parseInt(selection.slice(8, -4)) + 10;
- this.codeMirror?.replaceSelection(percent < 90 ? `{{width:${percent}% }}` : '{{width:100% }}', 'around');
- } else {
- this.codeMirror?.replaceSelection(`{{width:10% }}`, 'around');
- }
- },
-
- removeSpace : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror?.getSelection();
- const t = selection.slice(0, 8) === '{{width:' && selection.slice(0 -4) === '% }}';
- if(t){
- const percent = parseInt(selection.slice(8, -4)) - 10;
- this.codeMirror?.replaceSelection(percent > 10 ? `{{width:${percent}% }}` : '', 'around');
- }
- },
-
- newColumn : function() {
- if(!this.isGFM()) return;
- this.codeMirror?.replaceSelection('\n\\column\n\n', 'end');
- },
-
- newPage : function() {
- if(!this.isGFM()) return;
- this.codeMirror?.replaceSelection('\n\\page\n\n', 'end');
- },
-
- injectText : function(injectText, overwrite=true) {
- const cm = this.codeMirror;
- if(!overwrite) {
- cm.setCursor(cm.getCursor('from'));
- }
- cm.replaceSelection(injectText, 'end');
- cm.focus();
- },
-
- makeUnderline : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 3) === '' && selection.slice(-4) === '';
- this.codeMirror?.replaceSelection(t ? selection.slice(3, -4) : `${selection}`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 4 });
- }
- },
-
- makeSpan : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 2) === '{{' && selection.slice(-2) === '}}';
- this.codeMirror?.replaceSelection(t ? selection.slice(2, -2) : `{{ ${selection}}}`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - 2 });
- }
- },
-
- makeDiv : function() {
- if(!this.isGFM()) return;
- const selection = this.codeMirror.getSelection(), t = selection.slice(0, 2) === '{{' && selection.slice(-2) === '}}';
- this.codeMirror?.replaceSelection(t ? selection.slice(2, -2) : `{{\n${selection}\n}}`, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line - 1, ch: cursor.ch }); // set to -2? if wanting to enter classes etc. if so, get rid of first \n when replacing selection
- }
- },
-
- makeComment : function() {
- let regex;
- let cursorPos;
- let newComment;
- const selection = this.codeMirror?.getSelection();
- if(this.isGFM()){
- regex = /^\s*()\s*$/gs;
- cursorPos = 4;
- newComment = ``;
- } else {
- regex = /^\s*(\/\*\s?)(.*?)(\s?\*\/)\s*$/gs;
- cursorPos = 3;
- newComment = `/* ${selection} */`;
- }
- this.codeMirror?.replaceSelection(regex.test(selection) == true ? selection.replace(regex, '$2') : newComment, 'around');
- if(selection.length === 0){
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setCursor({ line: cursor.line, ch: cursor.ch - cursorPos });
- };
- },
-
- makeLink : function() {
- if(!this.isGFM()) return;
- const isLink = /^\[(.*)\]\((.*)\)$/;
- const selection = this.codeMirror?.getSelection().trim();
- let match;
- if(match = isLink.exec(selection)){
- const altText = match[1];
- const url = match[2];
- this.codeMirror?.replaceSelection(`${altText} ${url}`);
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setSelection({ line: cursor.line, ch: cursor.ch - url.length }, { line: cursor.line, ch: cursor.ch });
- } else {
- this.codeMirror?.replaceSelection(`[${selection || 'alt text'}](url)`);
- const cursor = this.codeMirror?.getCursor();
- this.codeMirror?.setSelection({ line: cursor.line, ch: cursor.ch - 4 }, { line: cursor.line, ch: cursor.ch - 1 });
- }
- },
-
- makeList : function(listType) {
- if(!this.isGFM()) return;
- const selectionStart = this.codeMirror.getCursor('from'), selectionEnd = this.codeMirror.getCursor('to');
- this.codeMirror?.setSelection(
- { line: selectionStart.line, ch: 0 },
- { line: selectionEnd.line, ch: this.codeMirror?.getLine(selectionEnd.line).length }
- );
- const newSelection = this.codeMirror?.getSelection();
-
- const regex = /^\d+\.\s|^-\s/gm;
- if(newSelection.match(regex) != null){ // if selection IS A LIST
- this.codeMirror?.replaceSelection(newSelection.replace(regex, ''), 'around');
- } else { // if selection IS NOT A LIST
- listType == 'UL' ? this.codeMirror?.replaceSelection(newSelection.replace(/^/gm, `- `), 'around') :
- this.codeMirror?.replaceSelection(newSelection.replace(/^/gm, (()=>{
- let n = 1;
- return ()=>{
- return `${n++}. `;
- };
- })()), 'around');
- }
- },
-
- foldAllCode : function() {
- this.codeMirror?.execCommand('foldAll');
- },
-
- unfoldAllCode : function() {
- this.codeMirror?.execCommand('unfoldAll');
- },
-
- //=-- Externally used -==//
- setCursorPosition : function(line, char){
- setTimeout(()=>{
- this.codeMirror?.focus();
- this.codeMirror?.doc.setCursor(line, char);
- }, 10);
- },
- getCursorPosition : function(){
- return this.codeMirror?.getCursor();
- },
- getTopVisibleLine : function(){
- const rect = this.codeMirror?.getWrapperElement().getBoundingClientRect();
- const topVisibleLine = this.codeMirror?.lineAtHeight(rect.top, 'window');
- return topVisibleLine;
- },
- updateSize : function(){
- this.codeMirror?.refresh();
- },
- redo : function(){
- return this.codeMirror?.redo();
- },
- undo : function(){
- return this.codeMirror?.undo();
- },
- historySize : function(){
- return this.codeMirror?.doc.historySize();
- },
-
- foldOptions : function(cm){
- return {
- scanUp : true,
- rangeFinder : this.props.language === 'css' ? CodeMirror.fold.homebrewerycss : CodeMirror.fold.homebrewery,
- widget : (from, to)=>{
- let text = '';
- let currentLine = from.line;
- let maxLength = 50;
-
- let foldPreviewText = '';
- while (currentLine <= to.line && text.length <= maxLength) {
- const currentText = this.codeMirror?.getLine(currentLine);
- currentLine++;
- if(currentText[0] == '#'){
- foldPreviewText = currentText;
- break;
- }
- if(!foldPreviewText && currentText != '\n') {
- foldPreviewText = currentText;
- }
- }
- text = foldPreviewText || `Lines ${from.line+1}-${to.line+1}`;
- text = text.replace('{', '').trim();
-
- // Truncate data URLs at `data:`
- const startOfData = text.indexOf('data:');
- if(startOfData > 0)
- maxLength = Math.min(startOfData + 5, maxLength);
-
- if(text.length > maxLength)
- text = `${text.slice(0, maxLength)}...`;
-
- return `\u21A4 ${text} \u21A6`;
- }
- };
- },
- //----------------------//
-
- render : function(){
- return <>
-
-
- >;
+ if(tab === 'brewStyles') {
+ tokenize = tokenizeCustomCSS;
+ } else {
+ tokenize = renderer === 'V3' ? tokenizeCustomMarkdown : legacyTokenizeCustomMarkdown;
}
-});
+
+ return ViewPlugin.fromClass(
+ class {
+ constructor(view) {
+ this.decorations = this.buildDecorations(view);
+ }
+ update(update) {
+ if(update.docChanged) {
+ this.decorations = this.buildDecorations(update.view);
+ }
+ }
+ buildDecorations(view) {
+ const decos = [];
+ const tokens = tokenize(view.state.doc.toString());
+ let pageCount = 1;
+ let snippetCount = 0;
+
+ tokens.forEach((tok)=>{
+ const line = view.state.doc.line(tok.line + 1);
+
+ if(tok.from != null && tok.to != null && tok.from < tok.to) {
+ decos.push(Decoration.mark({ class: `cm-${tok.type}` }).range(line.from + tok.from, line.from + tok.to));
+ } else {
+ decos.push(Decoration.line({ class: `cm-${tok.type}` }).range(line.from));
+ if(tok.type === 'pageLine' && tab === 'brewText') {
+ pageCount++;
+ line.from === 0 && pageCount--;
+ decos.push(Decoration.line({ attributes: { 'data-page-number': pageCount } }).range(line.from));
+ }
+ if(tok.type === 'snippetLine' && tab === 'brewSnippets') {
+ snippetCount++;
+ decos.push(Decoration.line({ attributes: { 'data-page-number': pageCount } }).range(line.from));
+ }
+ }
+ });
+
+ decos.sort((a, b)=>a.from - b.from || a.to - b.to);
+ return Decoration.set(decos);
+ }
+ },
+ { decorations: (v)=>v.decorations }
+ );
+};
+
+const CodeEditor = forwardRef(
+ (
+ {
+ value = '',
+ onChange = ()=>{},
+ onCursorChange = ()=>{},
+ onViewChange = ()=>{},
+ language = '',
+ tab = 'brewText',
+ editorTheme = 'default',
+ view,
+ style,
+ renderer,
+ ...props
+ },
+ ref,
+ )=>{
+ const editorRef = useRef(null);
+ const viewRef = useRef(null);
+ const docsRef = useRef({});
+ const prevTabRef = useRef(tab);
+
+ const createExtensions = ({ onChange, language, editorTheme })=>{
+ const setEventListeners = EditorView.updateListener.of((update)=>{
+ if(update.docChanged) {
+ onChange(update.state.doc.toString());
+ }
+ if(update.selectionSet) {
+ const pos = update.state.selection.main.head;
+ const line = update.state.doc.lineAt(pos).number;
+
+ onCursorChange(line);
+ }
+ if(update.viewportChanged) {
+ const { from } = update.view.viewport;
+ const line = update.state.doc.lineAt(from).number;
+
+ onViewChange(line);
+ }
+ });
+
+ const highlightExtension = renderer === 'V3'
+ ? syntaxHighlighting(customHighlightStyle)
+ : syntaxHighlighting(legacyCustomHighlightStyle);
+
+ const customHighlightPlugin = createHighlightPlugin(renderer, tab);
+
+ const languageExtension = language === 'css' ? css() : [markdown({ base: markdownLanguage, codeLanguages: languages }), html({ autoCloseTags: true })];
+ const themeExtension = Array.isArray(themes[editorTheme]) ? themes[editorTheme] : [];
+
+ return [
+ history(), //allows for undo and redo
+ setEventListeners,
+ EditorView.lineWrapping,
+ scrollPastEnd(),
+ languageExtension,
+ lineNumbers(),
+ pageFoldExtension,
+
+ foldGutter({
+ openText : '▾',
+ closedText : '▸'
+ }),
+
+ highlightActiveLine(),
+ highlightActiveLineGutter(),
+ highlightCompartment.of([customHighlightPlugin, highlightExtension]),
+ themeCompartment.of(themeExtension),
+ ...(tab !== 'brewStyles' ? [autocompleteEmoji] : []),
+ search(),
+ keymap.of([...defaultKeymap, foldKeymap, ...searchKeymap]),
+ customKeymap,
+ drawSelection(),
+ EditorState.allowMultipleSelections.of(true),
+ customClose,
+ dropCursor(),
+ ];
+ };
+
+ useEffect(()=>{
+ if(!editorRef.current) return;
+
+ const state = EditorState.create({
+ doc : value,
+ extensions : createExtensions({ onChange, language, editorTheme }),
+ });
+
+ viewRef.current = new EditorView({
+ state,
+ parent : editorRef.current,
+ });
+
+ docsRef.current[tab] = state;
+
+ return ()=>viewRef.current?.destroy();
+ }, []);
+
+ useEffect(()=>{
+ const view = viewRef.current;
+ if(!view) return;
+
+ const prevTab = prevTabRef.current;
+
+ if(prevTab !== tab) {
+ docsRef.current[prevTab] = view.state;
+
+ let nextState = docsRef.current[tab];
+
+ if(!nextState) {
+ nextState = EditorState.create({
+ doc : value,
+ extensions : createExtensions({ onChange, language, editorTheme }),
+ });
+ }
+
+ view.setState(nextState);
+ prevTabRef.current = tab;
+ }
+ }, [tab]);
+
+ useEffect(()=>{
+ const view = viewRef.current;
+ if(!view) return;
+
+ const current = view.state.doc.toString();
+ if(value !== current) {
+ view.dispatch({
+ changes : { from: 0, to: current.length, insert: value },
+ });
+ }
+ }, [value]);
+
+ useEffect(()=>{
+ //rebuild theme extension on theme change
+ const view = viewRef.current;
+ if(!view) return;
+
+ const themeExtension = Array.isArray(themes[editorTheme]) ? themes[editorTheme] : [];
+
+ view.dispatch({
+ effects : themeCompartment.reconfigure(themeExtension),
+ });
+ }, [editorTheme]);
+ useEffect(()=>{
+ const view = viewRef.current;
+ if(!view) return;
+
+ const highlightExtension =renderer === 'V3'
+ ? syntaxHighlighting(customHighlightStyle)
+ : syntaxHighlighting(legacyCustomHighlightStyle);
+
+ const customHighlightPlugin = createHighlightPlugin(renderer, tab);
+
+ view.dispatch({
+ effects : highlightCompartment.reconfigure([customHighlightPlugin, highlightExtension]),
+ });
+ }, [renderer, tab]);
+
+ useImperativeHandle(ref, ()=>({
+ getValue : ()=>viewRef.current.state.doc.toString(),
+
+ setValue : (text)=>{
+ const view = viewRef.current;
+ view.dispatch({
+ changes : { from: 0, to: view.state.doc.length, insert: text },
+ });
+ },
+
+ injectText : (text)=>{
+ const view = viewRef.current;
+ const changes = view.state.selection.ranges.map((range)=>({
+ from : range.from,
+ to : range.to,
+ insert : text
+ }));
+
+ const newRanges = view.state.selection.ranges.map((range)=>({
+ anchor : range.from + text.length
+ }));
+
+ view.dispatch({
+ changes,
+ selection : { ranges: newRanges }
+ });
+
+ view.focus();
+ },
+ getCursorPosition : ()=>viewRef.current.state.selection.main.head,
+
+ getScrollTop : ()=>viewRef.current.scrollDOM.scrollTop,
+
+ scrollToY : (y)=>{
+ viewRef.current.scrollDOM.scrollTo({ top: y });
+ },
+
+ getLineTop : (lineNumber)=>{
+ const view = viewRef.current;
+ if(!view) return 0;
+
+ const line = view.state.doc.line(lineNumber);
+ return view.coordsAtPos(line.from)?.top ?? 0;
+ },
+
+ setCursorToLine : (lineNumber)=>{
+ const view = viewRef.current;
+ const line = view.state.doc.line(lineNumber);
+
+ view.dispatch({
+ selection : { anchor: line.from }
+ });
+
+ view.focus();
+ },
+
+ undo : ()=>undo(viewRef.current),
+ redo : ()=>redo(viewRef.current),
+
+ historySize : ()=>{
+ const view = viewRef.current;
+ if(!view) return { done: 0, undone: 0 };
+
+ return {
+ done : undoDepth(view.state),
+ undone : redoDepth(view.state),
+ };
+ },
+
+ foldAll : ()=>{
+ const view = viewRef.current;
+ if(!view) return;
+ view.dispatch(foldAllCmd(view));
+ },
+ unfoldAll : ()=>{
+ const view = viewRef.current;
+ if(!view) return;
+ view.dispatch(unfoldAllCmd(view));
+ },
+
+ focus : ()=>viewRef.current.focus(),
+ }));
+
+ return
;
+ },
+);
export default CodeEditor;
-
diff --git a/client/components/codeEditor/codeEditor.less b/client/components/codeEditor/codeEditor.less
index 89d0c9497..5fba31f08 100644
--- a/client/components/codeEditor/codeEditor.less
+++ b/client/components/codeEditor/codeEditor.less
@@ -1,60 +1,72 @@
-@import (less) 'codemirror/lib/codemirror.css';
-@import (less) 'codemirror/addon/fold/foldgutter.css';
-@import (less) 'codemirror/addon/search/matchesonscrollbar.css';
-@import (less) 'codemirror/addon/dialog/dialog.css';
-@import (less) 'codemirror/addon/hint/show-hint.css';
-
-//Icon fonts included so they can appear in emoji autosuggest dropdown
-@import (less) '@themes/fonts/iconFonts/diceFont.less';
-@import (less) '@themes/fonts/iconFonts/elderberryInn.less';
-@import (less) '@themes/fonts/iconFonts/gameIcons.less';
-@import (less) '@themes/fonts/iconFonts/fontAwesome.less';
+// Icon fonts for emoji/autocomplete
+@import (less) "@themes/fonts/iconFonts/diceFont.less";
+@import (less) "@themes/fonts/iconFonts/elderberryInn.less";
+@import (less) "@themes/fonts/iconFonts/gameIcons.less";
+@import (less) "@themes/fonts/iconFonts/fontAwesome.less";
@keyframes sourceMoveAnimation {
- 50% { color : white;background-color : red;}
- 100% { color : unset;background-color : unset;}
+ 50% {
+ color: white;
+ background-color: red;
+ }
+ 100% {
+ color: unset;
+ background-color: unset;
+ }
}
-.codeEditor {
- @media screen and (pointer : coarse) {
- font-size : 16px;
+:where(.codeEditor) {
+ font-family: monospace;
+ height: 100%;
+ width:100%;
+
+ .cm-content {
+ tab-size:2 !important;
}
- .CodeMirror-foldmarker {
+
+ @media screen and (pointer: coarse) {
+ font-size: 16px;
+ }
+
+ .cm-gutterElement span {
font-family : inherit;
font-weight : 600;
color : grey;
text-shadow : none;
}
- .CodeMirror-foldgutter {
+ .cm-foldGutter {
cursor : pointer;
border-left : 1px solid #EEEEEE;
transition : background 0.1s;
&:hover { background : #DDDDDD; }
}
- .sourceMoveFlash .CodeMirror-line {
- animation-name : sourceMoveAnimation;
- animation-duration : 0.4s;
+ /* Flash animation for source moves */
+ .sourceMoveFlash .cm-line {
+ animation-name: sourceMoveAnimation;
+ animation-duration: 0.4s;
}
- .CodeMirror-search-field {
- width:25em !important;
- outline:1px inset #00000055 !important;
+ /* Search input */
+ .cm-searchField {
+ width: 25em !important;
+ outline: 1px inset #00000055 !important;
}
+ /* Tab character visualization (optional) */
//.cm-tab {
- // background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAQAAACOs/baAAAARUlEQVR4nGJgIAG8JkXxUAcCtDWemcGR1lY4MvgzCEKY7jSBjgxBDAG09UEQzAe0AMwMHrSOAwEGRtpaMIwAAAAA//8DAG4ID9EKs6YqAAAAAElFTkSuQmCC) no-repeat right;
+ // background: url(...) no-repeat right;
//}
- //.cm-trailingspace {
- // .cm-space {
- // background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQAgMAAABW5NbuAAAACVBMVEVHcEwAAAAAAAAWawmTAAAAA3RSTlMAPBJ6PMxpAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAFUlEQVQI12NgwACcCQysASAEZGAAACMuAX06aCQUAAAAAElFTkSuQmCC) no-repeat right;
- // }
+ /* Trailing space visualization (optional) */
+ //.cm-trailingSpace .cm-space {
+ // background: url(...) no-repeat right;
//}
}
+/* Emoji preview styling */
.emojiPreview {
- font-size : 1.5em;
- line-height : 1.2em;
-}
\ No newline at end of file
+ font-size: 1.5em;
+ line-height: 1.2em;
+}
diff --git a/client/components/codeEditor/customFolding.js b/client/components/codeEditor/customFolding.js
new file mode 100644
index 000000000..ea9087c03
--- /dev/null
+++ b/client/components/codeEditor/customFolding.js
@@ -0,0 +1,46 @@
+import { foldService, codeFolding } from '@codemirror/language';
+
+const pageFoldExtension = [
+ foldService.of((state, lineStart)=>{ //tells where to fold
+ const doc = state.doc;
+ const matcher = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m;
+
+ const startLine = doc.lineAt(lineStart);
+ const prevLineText = startLine.number > 1 ? doc.line(startLine.number - 1).text : '';
+
+ if(!matcher.test(prevLineText)) return null;
+
+ let endLine = startLine.number;
+ while (endLine < doc.lines && !matcher.test(doc.line(endLine + 1).text)) {
+ endLine++;
+ }
+
+ if(endLine === startLine.number) return null;
+
+ return { from: startLine.from, to: doc.line(endLine).to };
+ }),
+ codeFolding({
+ preparePlaceholder : (state, range)=>{
+ const doc = state.doc;
+ const start = doc.lineAt(range.from).number;
+ const end = doc.lineAt(range.to).number;
+
+ if(doc.line(start).text.trim()) return ` ↤ Lines ${start}-${end} ↦`;
+
+ const preview = Array.from({ length: end - start }, (_, i)=>doc.line(start + 1 + i).text.trim()
+ ).find(Boolean) || `Lines ${start}-${end}`;
+
+ return ` ↤ ${preview.replace('{', '').slice(0, 50).trim()}${preview.length > 50 ? '...' : ''} ↦`;
+ },
+ placeholderDOM(view, onclick, prepared) {
+ const span = document.createElement('span');
+ span.className = 'cm-fold-placeholder';
+ span.textContent = prepared;
+ span.onclick = onclick;
+ span.style.color = '#989898';
+ return span;
+ },
+ }),
+];
+
+export default pageFoldExtension;
\ No newline at end of file
diff --git a/client/components/codeEditor/customHighlight.js b/client/components/codeEditor/customHighlight.js
new file mode 100644
index 000000000..596434a9c
--- /dev/null
+++ b/client/components/codeEditor/customHighlight.js
@@ -0,0 +1,293 @@
+import { HighlightStyle } from '@codemirror/language';
+import { tags } from '@lezer/highlight';
+
+// Making the tokens
+const customTags = {
+ pageLine : 'pageLine', // .cm-pageLine
+ snippetLine : 'snippetLine', // .cm-snippetLine
+ columnSplit : 'columnSplit', // .cm-columnSplit
+ block : 'block', // .cm-block
+ inlineBlock : 'inline-block', // .cm-inline-block
+ injection : 'injection', // .cm-injection
+ emoji : 'emoji', // .cm-emoji
+ superscript : 'superscript', // .cm-superscript
+ subscript : 'subscript', // .cm-subscript
+ definitionList : 'definitionList', // .cm-definitionList
+ definitionTerm : 'definitionTerm', // .cm-definitionTerm
+ definitionDesc : 'definitionDesc', // .cm-definitionDesc
+ definitionColon : 'definitionColon', // .cm-definitionColon
+
+ //CSS
+
+ variable : 'variable',
+};
+
+export function tokenizeCustomMarkdown(text) {
+ const tokens = [];
+ const lines = text.split('\n');
+
+ lines.forEach((lineText, lineNumber)=>{
+ // --- Page / snippet lines ---
+ if(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m.test(lineText)) tokens.push({ line: lineNumber, type: customTags.pageLine });
+ if(/^\\snippet\ .*$/.test(lineText)) tokens.push({ line: lineNumber, type: customTags.snippetLine });
+ if(/^\\column(?:break)?$/.test(lineText)) tokens.push({ line: lineNumber, type: customTags.columnSplit });
+
+ // --- Emoji ---
+ if(/:.\w+?:/.test(lineText)) {
+ const emojiRegex = /(:\w+?:)/g;
+ let match;
+ while ((match = emojiRegex.exec(lineText)) !== null) {
+ tokens.push({
+ line : lineNumber,
+ type : customTags.emoji,
+ from : match.index,
+ to : match.index + match[0].length,
+ });
+ }
+ }
+
+ // --- Superscript / Subscript ---
+ if(/\^/.test(lineText)) {
+ let startIndex = lineText.indexOf('^');
+ const superRegex = /\^(?!\s)(?=([^\n\^]*[^\s\^]))\1\^/gy;
+ const subRegex = /\^\^(?!\s)(?=([^\n\^]*[^\s\^]))\1\^\^/gy;
+
+ while (startIndex >= 0) {
+ superRegex.lastIndex = subRegex.lastIndex = startIndex;
+
+ let match = subRegex.exec(lineText);
+ let type = customTags.subscript;
+
+ if(!match) {
+ match = superRegex.exec(lineText);
+ type = customTags.superscript;
+ }
+
+ if(match) {
+ tokens.push({
+ line : lineNumber,
+ type,
+ from : match.index,
+ to : match.index + match[0].length,
+ });
+ }
+
+ startIndex = lineText.indexOf(
+ '^',
+ Math.max(startIndex + 1, superRegex.lastIndex || 0, subRegex.lastIndex || 0),
+ );
+ }
+ }
+
+ const singleLineRegex = /^([^:\n]*\S)(\s*)(::)([^\n]*)$/dmy;
+
+ const match = singleLineRegex.exec(lineText);
+
+ if(match) {
+ const [full, term, spaces, colons, desc] = match;
+
+ let offset = 0;
+
+ tokens.push({
+ line : lineNumber,
+ type : customTags.definitionList,
+ });
+
+ // Term
+ tokens.push({
+ line : lineNumber,
+ type : customTags.definitionTerm,
+ from : offset,
+ to : offset + term.length,
+ });
+ offset += term.length;
+
+ // Spaces before ::
+ if(spaces) {
+ offset += spaces.length;
+ }
+
+ // :: colons
+ tokens.push({
+ line : lineNumber,
+ type : customTags.definitionColon,
+ from : offset,
+ to : offset + colons.length,
+ });
+ offset += colons.length;
+
+ // Definition
+ tokens.push({
+ line : lineNumber,
+ type : customTags.definitionDesc,
+ from : offset,
+ to : offset + desc.length,
+ });
+
+ return;
+ }
+
+ // multiline def list
+ if(!/^::/.test(lines[lineNumber]) && lineNumber + 1 < lines.length && /^::/.test(lines[lineNumber + 1])) {
+ const startLine = lineNumber;
+ const defs = [];
+ let endLine = startLine;
+
+ // collect all following :: definitions
+ for (let i = lineNumber + 1; i < lines.length; i++) {
+ const nextLine = lines[i];
+ const onlyColonsMatch = /^:*$/.test(nextLine);
+ const defMatch = /^(::)(.*\S.*)?\s*$/.exec(nextLine);
+ if(!onlyColonsMatch && defMatch) {
+ defs.push({ colons: defMatch[1], desc: defMatch[2], line: i });
+ endLine = i;
+ } else break;
+ }
+
+ if(defs.length > 0) {
+ tokens.push({
+ line : startLine,
+ type : customTags.definitionList,
+ });
+
+ // term
+ tokens.push({
+ line : startLine,
+ type : customTags.definitionTerm,
+ from : 0,
+ to : lineText.length,
+ });
+
+ // definitions
+ defs.forEach((d)=>{
+ tokens.push({
+ line : d.line,
+ type : customTags.definitionList,
+ });
+
+ tokens.push({
+ line : d.line,
+ type : customTags.definitionColon,
+ from : 0,
+ to : d.colons.length,
+ });
+ tokens.push({
+ line : d.line,
+ type : customTags.definitionDesc,
+ from : d.colons.length,
+ to : d.colons.length + d.desc.length,
+ });
+ });
+ }
+ }
+
+ if(lineText.includes('{') && lineText.includes('}')) {
+ const injectionRegex = /(?:^|[^{\n])({(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\2})/gm;
+ let match;
+ while ((match = injectionRegex.exec(lineText)) !== null) {
+ tokens.push({
+ line : lineNumber,
+ from : match.index +1,
+ to : match.index + match[1].length +1,
+ type : customTags.injection,
+ });
+ }
+ }
+ if(lineText.includes('{{') && lineText.includes('}}')) {
+ // Inline blocks: single-line {{…}}
+ const spanRegex = /{{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1 *|}}/g;
+ let match;
+ let blockCount = 0;
+ while ((match = spanRegex.exec(lineText)) !== null) {
+ if(match[0].startsWith('{{')) {
+ blockCount += 1;
+ } else {
+ blockCount -= 1;
+ }
+ if(blockCount < 0) {
+ blockCount = 0;
+ continue;
+ }
+ tokens.push({
+ line : lineNumber,
+ from : match.index,
+ to : match.index + match[0].length,
+ type : customTags.inlineBlock,
+ });
+ }
+ } else if(lineText.trimLeft().startsWith('{{') || lineText.trimLeft().startsWith('}}')) {
+ // Highlight block divs {{\n Content \n}}
+ let endCh = lineText.length + 1;
+
+ const match = lineText.match(
+ /^ *{{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1 *$|^ *}}$/,
+ );
+ if(match) endCh = match.index + match[0].length;
+ tokens.push({ line: lineNumber, type: customTags.block });
+ }
+ });
+
+ return tokens;
+}
+
+export function tokenizeCustomCSS(text) {
+ const tokens = [];
+ const lines = text.split('\n');
+
+ lines.forEach((lineText, lineNumber)=>{
+
+ if(/--[a-zA-Z0-9-_]+/gm.test(lineText)) {
+ const varRegex =/--[a-zA-Z0-9-_]+/gm;
+ let match;
+ while ((match = varRegex.exec(lineText)) !== null) {
+ tokens.push({
+ line : lineNumber,
+ from : match.index +1,
+ to : match.index + match.length[1] +1,
+ type : customTags.varProperty,
+ });
+ }
+ }
+ });
+
+ return tokens;
+}
+
+//assign classes to tags provided by lezer, not unlike the function above
+export const customHighlightStyle = HighlightStyle.define([
+ { tag: tags.heading, class: 'cm-header' },
+ { tag: tags.heading1, class: 'cm-header cm-header-1' },
+ { tag: tags.heading2, class: 'cm-header cm-header-2' },
+ { tag: tags.heading3, class: 'cm-header cm-header-3' },
+ { tag: tags.heading4, class: 'cm-header cm-header-4' },
+ { tag: tags.heading5, class: 'cm-header cm-header-5' },
+ { tag: tags.heading6, class: 'cm-header cm-header-6' },
+ { tag: tags.link, class: 'cm-link' },
+ { tag: tags.string, class: 'cm-string' },
+ { tag: tags.url, class: 'cm-string cm-url' },
+ { tag: tags.list, class: 'cm-list' },
+ { tag: tags.strong, class: 'cm-strong' },
+ { tag: tags.emphasis, class: 'cm-em' },
+ { tag: tags.quote, class: 'cm-quote' },
+ { tag: tags.comment, class: 'cm-comment' },
+ { tag: tags.monospace, class: 'cm-comment' },
+
+ //css tags
+
+ { tag: tags.tagName, class: 'cm-tag' },
+ { tag: tags.className, class: 'cm-class' },
+ { tag: tags.propertyName, class: 'cm-property' },
+ { tag: tags.attributeValue, class: 'cm-value' },
+ { tag: tags.keyword, class: 'cm-keyword' },
+ { tag: tags.atom, class: 'cm-atom' },
+ { tag: tags.integer, class: 'cm-integer' },
+ { tag: tags.unit, class: 'cm-unit' },
+ { tag: tags.color, class: 'cm-color' },
+ { tag: tags.paren, class: 'cm-paren' },
+ { tag: tags.variableName, class: 'cm-variable' },
+ { tag: tags.invalid, class: 'cm-error' },
+
+]);
+
+
+
diff --git a/client/components/codeEditor/customKeyMap.js b/client/components/codeEditor/customKeyMap.js
new file mode 100644
index 000000000..60a0bb60d
--- /dev/null
+++ b/client/components/codeEditor/customKeyMap.js
@@ -0,0 +1,238 @@
+/* eslint max-lines: ["error", { "max": 300 }] */
+import { keymap } from '@codemirror/view';
+import { undo, redo } from '@codemirror/commands';
+
+const insertTabAtCursor = (view)=>{
+ const { from } = view.state.selection.main;
+ view.dispatch({
+ changes : { from, insert: ' ' },
+ selection : { anchor: from + 1 }
+ });
+ return true;
+};
+
+const indentMore = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const lines = [];
+ for (let l = view.state.doc.lineAt(from).number; l <= view.state.doc.lineAt(to).number; l++) {
+ const line = view.state.doc.line(l);
+ lines.push({ from: line.from, to: line.from, insert: ' ' }); // 2 spaces for tab
+ }
+ view.dispatch({ changes: lines });
+ return true;
+};
+
+const indentLess = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const lines = [];
+ for (let l = view.state.doc.lineAt(from).number; l <= view.state.doc.lineAt(to).number; l++) {
+ const line = view.state.doc.line(l);
+ const match = line.text.match(/^ {1,2}/); // match up to 2 spaces
+ if(match) {
+ lines.push({ from: line.from, to: line.from + match[0].length, insert: '' });
+ }
+ }
+ if(lines.length > 0) view.dispatch({ changes: lines });
+ return true;
+};
+
+const makeBold = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('**') && selected.endsWith('**')
+ ? selected.slice(2, -2)
+ : `**${selected}**`;
+ view.dispatch({
+ changes : { from, to, insert: text },
+ selection : { anchor: from + text.length },
+ });
+ return true;
+};
+
+const makeItalic = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('*') && selected.endsWith('*')
+ ? selected.slice(1, -1)
+ : `*${selected}*`;
+ view.dispatch({
+ changes : { from, to, insert: text },
+ selection : { anchor: from + text.length },
+ });
+ return true;
+};
+
+const makeUnderline = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('
') && selected.endsWith('')
+ ? selected.slice(3, -4)
+ : `
${selected}`;
+ view.dispatch({
+ changes : { from, to, insert: text },
+ selection : { anchor: from + text.length },
+ });
+ return true;
+};
+
+const makeSuper = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('^') && selected.endsWith('^')
+ ? selected.slice(1, -1)
+ : `^${selected}^`;
+ view.dispatch({
+ changes : { from, to, insert: text },
+ selection : { anchor: from + text.length },
+ });
+ return true;
+};
+
+const makeSub = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('^^') && selected.endsWith('^^')
+ ? selected.slice(2, -2)
+ : `^^${selected}^^`;
+ view.dispatch({
+ changes : { from, to, insert: text },
+ selection : { anchor: from + text.length },
+ });
+ return true;
+};
+
+const makeNbsp = (view)=>{
+ const { from, to } = view.state.selection.main;
+ view.dispatch({ changes: { from, to, insert: ' ' } });
+ return true;
+};
+
+const makeSpace = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const match = selected.match(/^{{width:(\d+)% }}$/);
+ let newText = '{{width:10% }}';
+ if(match) {
+ const percent = Math.min(parseInt(match[1], 10) + 10, 100);
+ newText = `{{width:${percent}% }}`;
+ }
+ view.dispatch({ changes: { from, to, insert: newText } });
+ return true;
+};
+
+const removeSpace = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const match = selected.match(/^{{width:(\d+)% }}$/);
+ if(match) {
+ const percent = parseInt(match[1], 10) - 10;
+ const newText = percent > 0 ? `{{width:${percent}% }}` : '';
+ view.dispatch({ changes: { from, to, insert: newText } });
+ }
+ return true;
+};
+
+const makeSpan = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('{{') && selected.endsWith('}}')
+ ? selected.slice(2, -2)
+ : `{{${selected}}}`;
+ view.dispatch({ changes: { from, to, insert: text } });
+ return true;
+};
+
+const makeDiv = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = selected.startsWith('{{') && selected.endsWith('}}')
+ ? selected.slice(2, -2)
+ : `{{\n${selected}\n}}`;
+ view.dispatch({ changes: { from, to, insert: text } });
+ return true;
+};
+
+const makeComment = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const isHtmlComment = selected.startsWith('');
+ const text = isHtmlComment
+ ? selected.slice(4, -3)
+ : ``;
+ view.dispatch({ changes: { from, to, insert: text } });
+ return true;
+};
+
+const makeLink = (view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to).trim();
+ const isLink = /^\[(.*)\]\((.*)\)$/.exec(selected);
+ const text = isLink ? `${isLink[1]} ${isLink[2]}` : `[${selected || 'alt text'}](url)`;
+ view.dispatch({ changes: { from, to, insert: text } });
+ return true;
+};
+
+const makeList = (type)=>(view)=>{
+ const { from, to } = view.state.selection.main;
+ const lines = [];
+ for (let l = from; l <= to; l++) {
+ const lineText = view.state.doc.line(l + 1).text;
+ lines.push(lineText);
+ }
+ const joined = lines.join('\n');
+ let newText;
+ if(type === 'UL') newText = joined.replace(/^/gm, '- ');
+ else newText = joined.replace(/^/gm, (m, i)=>`${i + 1}. `);
+ view.dispatch({ changes: { from, to, insert: newText } });
+ return true;
+};
+
+const makeHeader = (level)=>(view)=>{
+ const { from, to } = view.state.selection.main;
+ const selected = view.state.doc.sliceString(from, to);
+ const text = `${'#'.repeat(level)} ${selected}`;
+ view.dispatch({ changes: { from, to, insert: text } });
+ return true;
+};
+
+const newColumn = (view)=>{
+ const { from, to } = view.state.selection.main;
+ view.dispatch({ changes: { from, to, insert: '\n\\column\n\n' } });
+ return true;
+};
+
+const newPage = (view)=>{
+ const { from, to } = view.state.selection.main;
+ view.dispatch({ changes: { from, to, insert: '\n\\page\n\n' } });
+ return true;
+};
+
+export default keymap.of([
+ { key: 'Tab', run: insertTabAtCursor },
+ //{ key: 'Shift-Tab', run: indentMore },
+ { key: 'Shift-Tab', run: indentLess },
+ { key: 'Mod-b', run: makeBold },
+ { key: 'Mod-i', run: makeItalic },
+ { key: 'Mod-u', run: makeUnderline },
+ { key: 'Shift-Mod-=', run: makeSuper },
+ { key: 'Mod-=', run: makeSub },
+ { key: 'Mod-.', run: makeNbsp },
+ { key: 'Shift-Mod-.', run: makeSpace },
+ { key: 'Shift-Mod-,', run: removeSpace },
+ { key: 'Mod-m', run: makeSpan },
+ { key: 'Shift-Mod-m', run: makeDiv },
+ { key: 'Mod-/', run: makeComment },
+ { key: 'Mod-k', run: makeLink },
+ { key: 'Mod-l', run: makeList('UL') },
+ { key: 'Shift-Mod-l', run: makeList('OL') },
+ { key: 'Shift-Mod-1', run: makeHeader(1) },
+ { key: 'Shift-Mod-2', run: makeHeader(2) },
+ { key: 'Shift-Mod-3', run: makeHeader(3) },
+ { key: 'Shift-Mod-4', run: makeHeader(4) },
+ { key: 'Shift-Mod-5', run: makeHeader(5) },
+ { key: 'Shift-Mod-6', run: makeHeader(6) },
+ { key: 'Shift-Mod-Enter', run: newColumn },
+ { key: 'Mod-Enter', run: newPage },
+ { key: 'Mod-z', run: undo }, //i think it may be unnecessary
+ { key: 'Mod-Shift-z', run: redo },
+]);
diff --git a/client/components/codeEditor/fold-css.js b/client/components/codeEditor/fold-css.js
deleted file mode 100644
index 06bfd96a4..000000000
--- a/client/components/codeEditor/fold-css.js
+++ /dev/null
@@ -1,44 +0,0 @@
-export default {
- registerHomebreweryHelper : function(CodeMirror) {
- CodeMirror.registerHelper('fold', 'homebrewerycss', function(cm, start) {
-
- // BRACE FOLDING
- const startMatcher = /\{[ \t]*$/;
- const endMatcher = /\}[ \t]*$/;
- const activeLine = cm.getLine(start.line);
-
-
- if(activeLine.match(startMatcher)) {
- const lastLineNo = cm.lastLine();
- let end = start.line + 1;
- let braceCount = 1;
-
- while (end < lastLineNo) {
- const curLine = cm.getLine(end);
- if(curLine.match(startMatcher)) braceCount++;
- if(curLine.match(endMatcher)) braceCount--;
- if(braceCount == 0) break;
- ++end;
- }
-
- return {
- from : CodeMirror.Pos(start.line, 0),
- to : CodeMirror.Pos(end, cm.getLine(end).length)
- };
- }
-
- // @import and data-url folding
- const importMatcher = /^@import.*?;/;
- const dataURLMatcher = /url\(.*?data\:.*\)/;
-
- if(activeLine.match(importMatcher) || activeLine.match(dataURLMatcher)) {
- return {
- from : CodeMirror.Pos(start.line, 0),
- to : CodeMirror.Pos(start.line, activeLine.length)
- };
- }
-
- return null;
- });
- }
-};
diff --git a/client/components/codeEditor/fold-pages.js b/client/components/codeEditor/fold-pages.js
deleted file mode 100644
index 1d8d19f6b..000000000
--- a/client/components/codeEditor/fold-pages.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export default {
- registerHomebreweryHelper : function(CodeMirror) {
- CodeMirror.registerHelper('fold', 'homebrewery', function(cm, start) {
- const matcher = /^\\page.*/;
- const prevLine = cm.getLine(start.line - 1);
-
- if(start.line === cm.firstLine() || prevLine.match(matcher)) {
- const lastLineNo = cm.lastLine();
- let end = start.line;
-
- while (end < lastLineNo) {
- if(cm.getLine(end + 1).match(matcher))
- break;
- ++end;
- }
-
- return {
- from : CodeMirror.Pos(start.line, 0),
- to : CodeMirror.Pos(end, cm.getLine(end).length)
- };
- }
-
- return null;
- });
- }
-};
diff --git a/client/components/codeEditor/legacyCustomHighlight.js b/client/components/codeEditor/legacyCustomHighlight.js
new file mode 100644
index 000000000..cccb6647b
--- /dev/null
+++ b/client/components/codeEditor/legacyCustomHighlight.js
@@ -0,0 +1,54 @@
+import { HighlightStyle } from '@codemirror/language';
+import { tags } from '@lezer/highlight';
+
+const customTags = {
+ pageLine : 'pageLine', // .cm-pageLine
+ snippetLine : 'snippetLine', // .cm-snippetLine
+};
+
+export function legacyTokenizeCustomMarkdown(text) {
+ const tokens = [];
+ const lines = text.split('\n');
+
+ lines.forEach((lineText, lineNumber)=>{
+ // --- Page / snippet lines ---
+ if(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m.test(lineText)) tokens.push({ line: lineNumber, type: customTags.pageLine });
+ if(/^\\snippet\ .*$/.test(lineText)) tokens.push({ line: lineNumber, type: customTags.snippetLine });
+ });
+
+ return tokens;
+}
+
+export const legacyCustomHighlightStyle = HighlightStyle.define([
+ { tag: tags.heading, class: 'cm-header' },
+ { tag: tags.heading1, class: 'cm-header cm-header-1' },
+ { tag: tags.heading2, class: 'cm-header cm-header-2' },
+ { tag: tags.heading3, class: 'cm-header cm-header-3' },
+ { tag: tags.heading4, class: 'cm-header cm-header-4' },
+ { tag: tags.heading5, class: 'cm-header cm-header-5' },
+ { tag: tags.heading6, class: 'cm-header cm-header-6' },
+ { tag: tags.link, class: 'cm-link' },
+ { tag: tags.string, class: 'cm-string' },
+ { tag: tags.url, class: 'cm-string cm-url' },
+ { tag: tags.list, class: 'cm-list' },
+ { tag: tags.strong, class: 'cm-strong' },
+ { tag: tags.emphasis, class: 'cm-em' },
+ { tag: tags.quote, class: 'cm-quote' },
+
+ //css tags
+
+ { tag: tags.tagName, class: 'cm-tag' },
+ { tag: tags.className, class: 'cm-class' },
+ { tag: tags.propertyName, class: 'cm-property' },
+ { tag: tags.attributeValue, class: 'cm-value' },
+ { tag: tags.keyword, class: 'cm-keyword' },
+ { tag: tags.atom, class: 'cm-atom' },
+ { tag: tags.integer, class: 'cm-integer' },
+ { tag: tags.unit, class: 'cm-unit' },
+ { tag: tags.color, class: 'cm-color' },
+ { tag: tags.paren, class: 'cm-paren' },
+ { tag: tags.variableName, class: 'cm-variable' },
+ { tag: tags.invalid, class: 'cm-error' },
+ { tag: tags.comment, class: 'cm-comment' },
+]);
+
diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx
index 06fd469a0..0916ac0d7 100644
--- a/client/homebrew/editor/editor.jsx
+++ b/client/homebrew/editor/editor.jsx
@@ -4,7 +4,6 @@ import React from 'react';
import createReactClass from 'create-react-class';
import _ from 'lodash';
import dedent from 'dedent';
-import Markdown from '@shared/markdown.js';
import CodeEditor from '../../components/codeEditor/codeEditor.jsx';
import SnippetBar from './snippetbar/snippetbar.jsx';
@@ -13,7 +12,7 @@ import MetadataEditor from './metadataEditor/metadataEditor.jsx';
const EDITOR_THEME_KEY = 'HB_editor_theme';
const PAGEBREAK_REGEX_V3 = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m;
-const SNIPPETBREAK_REGEX_V3 = /^\\snippet\ .*$/;
+//const SNIPPETBREAK_REGEX_V3 = /^\\snippet\ .*$/;
const DEFAULT_STYLE_TEXT = dedent`
/*=======--- Example CSS styling ---=======*/
/* Any CSS here will apply to your document! */
@@ -72,13 +71,9 @@ const Editor = createReactClass({
componentDidMount : function() {
- this.highlightCustomMarkdown();
document.getElementById('BrewRenderer').addEventListener('keydown', this.handleControlKeys);
document.addEventListener('keydown', this.handleControlKeys);
- this.codeEditor.current.codeMirror?.on('cursorActivity', (cm)=>{this.updateCurrentCursorPage(cm.getCursor());});
- this.codeEditor.current.codeMirror?.on('scroll', _.throttle(()=>{this.updateCurrentViewPage(this.codeEditor.current.getTopVisibleLine());}, 200));
-
const editorTheme = window.localStorage.getItem(EDITOR_THEME_KEY);
if(editorTheme) {
this.setState({
@@ -98,7 +93,6 @@ const Editor = createReactClass({
componentDidUpdate : function(prevProps, prevState, snapshot) {
- this.highlightCustomMarkdown();
if(prevProps.moveBrew !== this.props.moveBrew)
this.brewJump();
@@ -132,15 +126,15 @@ const Editor = createReactClass({
}
},
- updateCurrentCursorPage : function(cursor) {
- const lines = this.props.brew.text.split('\n').slice(1, cursor.line + 1);
+ updateCurrentCursorPage : function(lineNumber) {
+ const lines = this.props.brew.text.split('\n').slice(0, lineNumber);
const pageRegex = this.props.brew.renderer == 'V3' ? PAGEBREAK_REGEX_V3 : /\\page/;
const currentPage = lines.reduce((count, line)=>count + (pageRegex.test(line) ? 1 : 0), 1);
this.props.onCursorPageChange(currentPage);
},
- updateCurrentViewPage : function(topScrollLine) {
- const lines = this.props.brew.text.split('\n').slice(1, topScrollLine + 1);
+ updateCurrentViewPage : function(topLine) {
+ const lines = this.props.brew.text.split('\n').slice(0, topLine);
const pageRegex = this.props.brew.renderer == 'V3' ? PAGEBREAK_REGEX_V3 : /\\page/;
const currentPage = lines.reduce((count, line)=>count + (pageRegex.test(line) ? 1 : 0), 1);
this.props.onViewPageChange(currentPage);
@@ -160,175 +154,6 @@ const Editor = createReactClass({
});
},
- highlightCustomMarkdown : function(){
- if(!this.codeEditor.current?.codeMirror) return;
- if((this.state.view === 'text') ||(this.state.view === 'snippet')) {
- const codeMirror = this.codeEditor.current.codeMirror;
-
- codeMirror?.operation(()=>{ // Batch CodeMirror styling
-
- const foldLines = [];
-
- //reset custom text styles
- const customHighlights = codeMirror?.getAllMarks().filter((mark)=>{
- // Record details of folded sections
- if(mark.__isFold) {
- const fold = mark.find();
- foldLines.push({ from: fold.from?.line, to: fold.to?.line });
- }
- return !mark.__isFold;
- }); //Don't undo code folding
-
- for (let i=customHighlights.length - 1;i>=0;i--) customHighlights[i].clear();
-
- let userSnippetCount = 1; // start snippet count from snippet 1
- let editorPageCount = 1; // start page count from page 1
-
- const whichSource = this.state.view === 'text' ? this.props.brew.text : this.props.brew.snippets;
- _.forEach(whichSource?.split('\n'), (line, lineNumber)=>{
-
- const tabHighlight = this.state.view === 'text' ? 'pageLine' : 'snippetLine';
- const textOrSnip = this.state.view === 'text';
-
- //reset custom line styles
- codeMirror?.removeLineClass(lineNumber, 'background', 'pageLine');
- codeMirror?.removeLineClass(lineNumber, 'background', 'snippetLine');
- codeMirror?.removeLineClass(lineNumber, 'text');
- codeMirror?.removeLineClass(lineNumber, 'wrap', 'sourceMoveFlash');
-
- // Don't process lines inside folded text
- // If the current lineNumber is inside any folded marks, skip line styling
- if(foldLines.some((fold)=>lineNumber >= fold.from && lineNumber <= fold.to))
- return;
-
- // Styling for \page breaks
- if((this.props.renderer == 'legacy' && line.includes('\\page')) ||
- (this.props.renderer == 'V3' && line.match(textOrSnip ? PAGEBREAK_REGEX_V3 : SNIPPETBREAK_REGEX_V3))) {
-
- if((lineNumber > 0) && (textOrSnip)) // Since \page is optional on first line of document,
- editorPageCount += 1; // don't use it to increment page count; stay at 1
- else if(this.state.view !== 'text') userSnippetCount += 1;
-
- // add back the original class 'background' but also add the new class '.pageline'
- codeMirror?.addLineClass(lineNumber, 'background', tabHighlight);
- const pageCountElement = Object.assign(document.createElement('span'), {
- className : 'editor-page-count',
- textContent : textOrSnip ? editorPageCount : userSnippetCount
- });
- codeMirror?.setBookmark({ line: lineNumber, ch: line.length }, pageCountElement);
- };
-
-
- // New CodeMirror styling for V3 renderer
- if(this.props.renderer === 'V3') {
- if(line.match(/^\\column(?:break)?$/)){
- codeMirror?.addLineClass(lineNumber, 'text', 'columnSplit');
- }
-
- // definition lists
- if(line.includes('::')){
- if(/^:*$/.test(line) == true){ return; };
- const regex = /^([^\n]*?:?\s?)(::[^\n]*)(?:\n|$)/ymd; // the `d` flag, for match indices, throws an ESLint error.
- let match;
- while ((match = regex.exec(line)) != null){
- codeMirror?.markText({ line: lineNumber, ch: match.indices[0][0] }, { line: lineNumber, ch: match.indices[0][1] }, { className: 'dl-highlight' });
- codeMirror?.markText({ line: lineNumber, ch: match.indices[1][0] }, { line: lineNumber, ch: match.indices[1][1] }, { className: 'dt-highlight' });
- codeMirror?.markText({ line: lineNumber, ch: match.indices[2][0] }, { line: lineNumber, ch: match.indices[2][1] }, { className: 'dd-highlight' });
- const ddIndex = match.indices[2][0];
- const colons = /::/g;
- const colonMatches = colons.exec(match[2]);
- if(colonMatches !== null){
- codeMirror?.markText({ line: lineNumber, ch: colonMatches.index + ddIndex }, { line: lineNumber, ch: colonMatches.index + colonMatches[0].length + ddIndex }, { className: 'dl-colon-highlight' });
- }
- }
- }
-
- // Subscript & Superscript
- if(line.includes('^')) {
- let startIndex = line.indexOf('^');
- const superRegex = /\^(?!\s)(?=([^\n\^]*[^\s\^]))\1\^/gy;
- const subRegex = /\^\^(?!\s)(?=([^\n\^]*[^\s\^]))\1\^\^/gy;
-
- while (startIndex >= 0) {
- superRegex.lastIndex = subRegex.lastIndex = startIndex;
- let isSuper = false;
- const match = subRegex.exec(line) || superRegex.exec(line);
- if(match) {
- isSuper = !subRegex.lastIndex;
- codeMirror?.markText({ line: lineNumber, ch: match.index }, { line: lineNumber, ch: match.index + match[0].length }, { className: isSuper ? 'superscript' : 'subscript' });
- }
- startIndex = line.indexOf('^', Math.max(startIndex + 1, subRegex.lastIndex, superRegex.lastIndex));
- }
- }
-
- // Highlight injectors {style}
- if(line.includes('{') && line.includes('}')){
- const regex = /(?:^|[^{\n])({(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\2})/gm;
- let match;
- while ((match = regex.exec(line)) != null) {
- codeMirror?.markText({ line: lineNumber, ch: line.indexOf(match[1]) }, { line: lineNumber, ch: line.indexOf(match[1]) + match[1].length }, { className: 'injection' });
- }
- }
- // Highlight inline spans {{content}}
- if(line.includes('{{') && line.includes('}}')){
- const regex = /{{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1 *|}}/g;
- let match;
- let blockCount = 0;
- while ((match = regex.exec(line)) != null) {
- if(match[0].startsWith('{')) {
- blockCount += 1;
- } else {
- blockCount -= 1;
- }
- if(blockCount < 0) {
- blockCount = 0;
- continue;
- }
- codeMirror?.markText({ line: lineNumber, ch: match.index }, { line: lineNumber, ch: match.index + match[0].length }, { className: 'inline-block' });
- }
- } else if(line.trimLeft().startsWith('{{') || line.trimLeft().startsWith('}}')){
- // Highlight block divs {{\n Content \n}}
- let endCh = line.length+1;
-
- const match = line.match(/^ *{{(?=((?:[:=](?:"[\w,\-()#%. ]*"|[\w\-()#%.]*)|[^"':={}\s]*)*))\1 *$|^ *}}$/);
- if(match)
- endCh = match.index+match[0].length;
- codeMirror?.markText({ line: lineNumber, ch: 0 }, { line: lineNumber, ch: endCh }, { className: 'block' });
- }
-
- // Emojis
- if(line.match(/:[^\s:]+:/g)) {
- let startIndex = line.indexOf(':');
- const emojiRegex = /:[^\s:]+:/gy;
-
- while (startIndex >= 0) {
- emojiRegex.lastIndex = startIndex;
- const match = emojiRegex.exec(line);
- if(match) {
- let tokens = Markdown.marked.lexer(match[0]);
- tokens = tokens[0].tokens.filter((t)=>t.type == 'emoji');
- if(!tokens.length)
- return;
-
- const startPos = { line: lineNumber, ch: match.index };
- const endPos = { line: lineNumber, ch: match.index + match[0].length };
-
- // Iterate over conflicting marks and clear them
- const marks = codeMirror?.findMarks(startPos, endPos);
- marks.forEach(function(marker) {
- if(!marker.__isFold) marker.clear();
- });
- codeMirror?.markText(startPos, endPos, { className: 'emoji' });
- }
- startIndex = line.indexOf(':', Math.max(startIndex + 1, emojiRegex.lastIndex));
- }
- }
- }
- });
- });
- }
- },
-
brewJump : function(targetPage=this.props.currentEditorCursorPageNum, smooth=true){
if(!window || !this.isText() || isJumping)
return;
@@ -376,51 +201,41 @@ const Editor = createReactClass({
const textSplit = this.props.renderer == 'V3' ? PAGEBREAK_REGEX_V3 : /\\page/;
const textString = this.props.brew.text.split(textSplit).slice(0, targetPage-1).join(textSplit);
- const targetLine = textString.match('\n') ? textString.split('\n').length - 1 : -1;
+ const targetLine = textString.match('\n') ? textString.split('\n').length : 1;
- let currentY = this.codeEditor.current.codeMirror?.getScrollInfo().top;
- let targetY = this.codeEditor.current.codeMirror?.heightAtLine(targetLine, 'local', true);
+ const editor = this.codeEditor.current;
+
+ let currentY = editor.getScrollTop();
+ const targetY = editor.getLineTop(targetLine);
let scrollingTimeout;
const checkIfScrollComplete = ()=>{ // Prevent interrupting a scroll in progress if user clicks multiple times
clearTimeout(scrollingTimeout); // Reset the timer every time a scroll event occurs
scrollingTimeout = setTimeout(()=>{
isJumping = false;
- this.codeEditor.current.codeMirror?.off('scroll', checkIfScrollComplete);
}, 150); // If 150 ms pass without a scroll event, assume scrolling is done
};
isJumping = true;
checkIfScrollComplete();
- if(this.codeEditor.current?.codeMirror) {
- this.codeEditor.current.codeMirror?.on('scroll', checkIfScrollComplete);
- }
if(smooth) {
//Scroll 1/10 of the way every 10ms until 1px off.
const incrementalScroll = setInterval(()=>{
currentY += (targetY - currentY) / 10;
- this.codeEditor.current.codeMirror?.scrollTo(null, currentY);
+ editor.scrollToY(currentY);
- // Update target: target height is not accurate until within +-10 lines of the visible window
- if(Math.abs(targetY - currentY > 100))
- targetY = this.codeEditor.current.codeMirror?.heightAtLine(targetLine, 'local', true);
-
- // End when close enough
if(Math.abs(targetY - currentY) < 1) {
- this.codeEditor.current.codeMirror?.scrollTo(null, targetY); // Scroll any remaining difference
- this.codeEditor.current.setCursorPosition({ line: targetLine + 1, ch: 0 });
- this.codeEditor.current.codeMirror?.addLineClass(targetLine + 1, 'wrap', 'sourceMoveFlash');
+ editor.scrollToY(targetY);
+ editor.setCursorToLine(targetLine);
clearInterval(incrementalScroll);
}
}, 10);
} else {
- this.codeEditor.current.codeMirror?.scrollTo(null, targetY); // Scroll any remaining difference
- this.codeEditor.current.setCursorPosition({ line: targetLine + 1, ch: 0 });
- this.codeEditor.current.codeMirror?.addLineClass(targetLine + 1, 'wrap', 'sourceMoveFlash');
+ editor.scrollToY(targetY);
+ editor.setCursorToLine(targetLine);
}
},
-
//Called when there are changes to the editor's dimensions
update : function(){},
@@ -446,7 +261,10 @@ const Editor = createReactClass({
view={this.state.view}
value={this.props.brew.text}
onChange={this.props.onBrewChange('text')}
+ onCursorChange={(line)=>this.updateCurrentCursorPage(line)}
+ onViewChange={(line)=>this.updateCurrentViewPage(line)}
editorTheme={this.state.editorTheme}
+ renderer={this.props.brew.renderer}
rerenderParent={this.rerenderParent}
style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} />
>;
@@ -462,6 +280,7 @@ const Editor = createReactClass({
onChange={this.props.onBrewChange('style')}
enableFolding={true}
editorTheme={this.state.editorTheme}
+ renderer={this.props.brew.renderer}
rerenderParent={this.rerenderParent}
style={{ height: `calc(100% - ${this.state.snippetBarHeight}px)` }} />
>;
@@ -492,8 +311,9 @@ const Editor = createReactClass({
onChange={this.props.onBrewChange('snippets')}
enableFolding={true}
editorTheme={this.state.editorTheme}
+ renderer={this.props.brew.renderer}
rerenderParent={this.rerenderParent}
- style={{ height: `calc(100% -${this.state.snippetBarHeight}px)` }} />
+ style={{ height: `calc(100% - 25px)` }} />
>;
}
},
@@ -510,14 +330,13 @@ const Editor = createReactClass({
return this.codeEditor.current?.undo();
},
- foldCode : function(){
- return this.codeEditor.current?.foldAllCode();
- },
-
- unfoldCode : function(){
- return this.codeEditor.current?.unfoldAllCode();
- },
+foldCode: function() {
+ return this.codeEditor.current?.foldAll();
+},
+unfoldCode: function() {
+ return this.codeEditor.current?.unfoldAll();
+},
render : function(){
return (
@@ -547,4 +366,4 @@ const Editor = createReactClass({
}
});
-export default Editor;
+export default Editor;
\ No newline at end of file
diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less
index 3851b50c5..7503749fc 100644
--- a/client/homebrew/editor/editor.less
+++ b/client/homebrew/editor/editor.less
@@ -1,89 +1,120 @@
@import '@sharedStyles/core.less';
-@import '@themes/codeMirror/customEditorStyles.less';
-.editor {
- position : relative;
- width : 100%;
- height : 100%;
- container : editor / inline-size;
- background:white;
- .codeEditor {
+:where(.editor) {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ container : editor / inline-size;
+ background : white;
+ :where(.codeEditor) {
height : calc(100% - 25px);
- .CodeMirror { height : 100%; }
- .pageLine, .snippetLine {
+ .cm-editor { height : 100%;
+ outline:none !important;
+ }
+ &.brewSnippets .cm-snippetLine {
background : #33333328;
border-top : #333399 solid 1px;
}
- .editor-page-count {
- float : right;
- color : grey;
+
+ :where(&.brewText) .cm-pageLine {
+ background : #33333328;
+ border-top : #333399 solid 1px;
}
- .editor-snippet-count {
- float : right;
- color : grey;
- }
- .columnSplit {
- font-style : italic;
- color : grey;
- background-color : fade(#229999, 15%);
- border-bottom : #229999 solid 1px;
- }
- .define {
- &:not(.term):not(.definition) {
- font-weight : bold;
- color : #949494;
- background : #E5E5E5;
- border-radius : 3px;
+
+ &.brewSnippets {
+ .cm-pageLine {
+ background : #3e4e3e1b;
+ border-top : #3399423b solid 1px;
+ color:#777;
}
- &.term { color : rgb(96, 117, 143); }
- &.definition { color : rgb(97, 57, 178); }
}
- .block:not(.cm-comment) {
- font-weight : bold;
- color : purple;
- //font-style: italic;
- }
- .inline-block:not(.cm-comment) {
- font-weight : bold;
- color : red;
- //font-style: italic;
- }
- .injection:not(.cm-comment) {
- font-weight : bold;
- color : green;
- }
- .emoji:not(.cm-comment) {
- padding-bottom : 1px;
- margin-left : 2px;
- font-weight : bold;
- color : #360034;
- outline : solid 2px #FF96FC;
- outline-offset : -2px;
- background : #FFC8FF;
- border-radius : 6px;
- }
- .superscript:not(.cm-comment) {
- font-size : 0.9em;
- font-weight : bold;
- vertical-align : super;
- color : goldenrod;
- }
- .subscript:not(.cm-comment) {
- font-size : 0.9em;
- font-weight : bold;
- vertical-align : sub;
- color : rgb(123, 123, 15);
- }
- .dl-highlight {
- &.dl-colon-highlight {
- font-weight : bold;
- color : #949494;
- background : #E5E5E5;
- border-radius : 3px;
+
+ &:where(.brewText), &.brewSnippets {
+
+
+ .cm-tooltip-autocomplete {
+
+ li {
+ display : flex;
+ gap : 10px;
+ align-items : center;
+ justify-content : flex-start;
+
+ .cm-completionIcon { display : none; }
+ .cm-tooltip-autocomplete .cm-completionLabel { translate : 0 -2px; }
+ }
}
- &.dt-highlight { color : rgb(96, 117, 143); }
- &.dd-highlight { color : rgb(97, 57, 178); }
- }
+
+ .cm-pageLine[data-page-number]::after {
+ content:attr(data-page-number);
+ float:right;
+ color : grey;
+ }
+ .cm-columnSplit {
+ font-style : italic;
+ color : grey;
+ background-color : fade(#229999, 15%);
+ border-bottom : #229999 solid 1px;
+ }
+ .cm-define {
+ &:not(.term):not(.definition) {
+ font-weight : bold;
+ color : #949494;
+ background : #E5E5E5;
+ border-radius : 3px;
+ }
+ &.term { color : rgb(96, 117, 143); }
+ &.definition { color : rgb(97, 57, 178); }
+ }
+ .cm-block:not(.cm-comment) {
+ font-weight : bold;
+ color : purple;
+ }
+ .cm-inline-block:not(.cm-comment) {
+ font-weight : bold;
+ color : red ;
+ span { color : inherit }
+ }
+ .cm-injection:not(.cm-comment) {
+ font-weight : bold;
+ color : green;
+ span { color : inherit }
+ }
+ .cm-emoji:not(.cm-comment) {
+ padding-bottom : 1px;
+ margin-left : 2px;
+ font-weight : bold;
+ color : #360034;
+ outline : solid 2px #FF96FC;
+ outline-offset : -2px;
+ background : #FFC8FF;
+ border-radius : 6px;
+ }
+ .cm-superscript:not(.cm-comment) {
+ font-size : 0.9em;
+ font-weight : bold;
+ vertical-align : super;
+ color : goldenrod;
+ }
+ .cm-subscript:not(.cm-comment) {
+ font-size : 0.9em;
+ font-weight : bold;
+ vertical-align : sub;
+ color : rgb(123, 123, 15);
+ }
+ .cm-definitionList {
+ .cm-definitionTerm { color : rgb(96, 117, 143); }
+ .cm-definitionColon {
+ font-weight : bold;
+ color : #949494;
+ background : #E5E5E5;
+ border-radius : 3px;
+ }
+ .cm-definitionDesc { color : rgb(97, 57, 178); }
+ }
+
+ }
+
}
.brewJump {
diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx
index 304664ff5..3d489de4a 100644
--- a/client/homebrew/editor/snippetbar/snippetbar.jsx
+++ b/client/homebrew/editor/snippetbar/snippetbar.jsx
@@ -23,7 +23,20 @@ const ThemeSnippets = {
V3_Blank : V3_Blank,
};
-import EditorThemes from '../../../../build/homebrew/codeMirror/editorThemes.json';
+//import EditorThemes from '../../../../build/homebrew/codeMirror/editorThemes.json';
+import * as themesImport from '@uiw/codemirror-themes-all';
+import defaultCM5Theme from '@themes/codeMirror/default.js';
+import darkbrewery from '@themes/codeMirror/darkbrewery.js';
+
+const themes = { default: defaultCM5Theme, darkbrewery, ...themesImport };
+
+const EditorThemes = Object.entries(themes)
+ .filter(([name, value]) =>
+ Array.isArray(value) &&
+ !name.endsWith('Init') &&
+ !name.endsWith('Style')
+ )
+ .map(([name]) => name);
const execute = function(val, props){
if(_.isFunction(val)) return val(props);
@@ -232,11 +245,11 @@ const Snippetbar = createReactClass({
{ this.state.showHistory && this.renderHistoryItems() }
-
-
diff --git a/package-lock.json b/package-lock.json
index ea28999b3..5f89c27c4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,13 +15,26 @@
"@babel/preset-env": "^7.29.2",
"@babel/preset-react": "^7.28.5",
"@babel/runtime": "^7.29.2",
+ "@codemirror/autocomplete": "^6.20.1",
+ "@codemirror/commands": "^6.10.3",
+ "@codemirror/highlight": "^0.19.8",
+ "@codemirror/lang-css": "^6.3.1",
+ "@codemirror/lang-javascript": "^6.2.5",
+ "@codemirror/lang-markdown": "^6.5.0",
+ "@codemirror/language": "^6.12.2",
+ "@codemirror/language-data": "^6.5.2",
+ "@codemirror/search": "^6.6.0",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.40.0",
"@dmsnell/diff-match-patch": "^1.1.0",
"@googleapis/drive": "^20.1.0",
+ "@lezer/highlight": "^1.2.3",
"@sanity/diff-match-patch": "^3.2.0",
+ "@uiw/codemirror-themes-all": "^4.25.8",
"@vitejs/plugin-react": "^5.1.2",
"body-parser": "^2.2.0",
"classnames": "^2.5.1",
- "codemirror": "^5.65.6",
+ "cm6-theme-basic-light": "^0.2.0",
"cookie-parser": "^1.4.7",
"core-js": "^3.49.0",
"cors": "^2.8.5",
@@ -110,9 +123,9 @@
}
},
"node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
- "version": "11.2.6",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
- "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+ "version": "11.2.7",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
+ "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
@@ -134,9 +147,9 @@
}
},
"node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": {
- "version": "11.2.6",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
- "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+ "version": "11.2.7",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
+ "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
@@ -178,6 +191,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -286,9 +300,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz",
- "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz",
+ "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==",
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.28.6",
@@ -463,22 +477,22 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
"license": "MIT",
"dependencies": {
"@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/types": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.29.0"
@@ -1854,12 +1868,12 @@
}
},
"node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz",
- "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==",
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz",
+ "integrity": "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==",
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"core-js-compat": "^3.48.0"
},
"peerDependencies": {
@@ -2010,18 +2024,19 @@
"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@keyv/serialize": "^1.1.1"
}
},
"node_modules/@cacheable/utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.0.tgz",
- "integrity": "sha512-PeMMsqjVq+bF0WBsxFBxr/WozBJiZKY0rUojuaCoIaKnEl3Ju1wfEwS+SV1DU/cSe8fqHIPiYJFif8T3MVt4cQ==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz",
+ "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hashery": "^1.5.0",
+ "hashery": "^1.5.1",
"keyv": "^5.6.0"
}
},
@@ -2035,6 +2050,498 @@
"@keyv/serialize": "^1.1.1"
}
},
+ "node_modules/@codemirror/autocomplete": {
+ "version": "6.20.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.1.tgz",
+ "integrity": "sha512-1cvg3Vz1dSSToCNlJfRA2WSI4ht3K+WplO0UMOgmUYPivCyy2oueZY6Lx7M9wThm7SDUBViRmuT+OG/i8+ON9A==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/commands": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.3.tgz",
+ "integrity": "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.27.0",
+ "@lezer/common": "^1.1.0"
+ }
+ },
+ "node_modules/@codemirror/highlight": {
+ "version": "0.19.8",
+ "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz",
+ "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==",
+ "deprecated": "As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^0.19.0",
+ "@codemirror/rangeset": "^0.19.0",
+ "@codemirror/state": "^0.19.3",
+ "@codemirror/view": "^0.19.39",
+ "@lezer/common": "^0.15.0",
+ "style-mod": "^4.0.0"
+ }
+ },
+ "node_modules/@codemirror/highlight/node_modules/@codemirror/language": {
+ "version": "0.19.10",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz",
+ "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^0.19.0",
+ "@codemirror/text": "^0.19.0",
+ "@codemirror/view": "^0.19.0",
+ "@lezer/common": "^0.15.5",
+ "@lezer/lr": "^0.15.0"
+ }
+ },
+ "node_modules/@codemirror/highlight/node_modules/@codemirror/state": {
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz",
+ "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/text": "^0.19.0"
+ }
+ },
+ "node_modules/@codemirror/highlight/node_modules/@codemirror/view": {
+ "version": "0.19.48",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz",
+ "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/rangeset": "^0.19.5",
+ "@codemirror/state": "^0.19.3",
+ "@codemirror/text": "^0.19.0",
+ "style-mod": "^4.0.0",
+ "w3c-keyname": "^2.2.4"
+ }
+ },
+ "node_modules/@codemirror/highlight/node_modules/@lezer/common": {
+ "version": "0.15.12",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
+ "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==",
+ "license": "MIT"
+ },
+ "node_modules/@codemirror/highlight/node_modules/@lezer/lr": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
+ "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^0.15.0"
+ }
+ },
+ "node_modules/@codemirror/lang-angular": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz",
+ "integrity": "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/lang-javascript": "^6.1.2",
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.3.3"
+ }
+ },
+ "node_modules/@codemirror/lang-cpp": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz",
+ "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/cpp": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-css": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz",
+ "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.0.2",
+ "@lezer/css": "^1.1.7"
+ }
+ },
+ "node_modules/@codemirror/lang-go": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-go/-/lang-go-6.0.1.tgz",
+ "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.6.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/go": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-html": {
+ "version": "6.4.11",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz",
+ "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/lang-css": "^6.0.0",
+ "@codemirror/lang-javascript": "^6.0.0",
+ "@codemirror/language": "^6.4.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/css": "^1.1.0",
+ "@lezer/html": "^1.3.12"
+ }
+ },
+ "node_modules/@codemirror/lang-java": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.2.tgz",
+ "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/java": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-javascript": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz",
+ "integrity": "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.6.0",
+ "@codemirror/lint": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/javascript": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-jinja": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz",
+ "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.2.0",
+ "@lezer/lr": "^1.4.0"
+ }
+ },
+ "node_modules/@codemirror/lang-json": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz",
+ "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/json": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-less": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-less/-/lang-less-6.0.2.tgz",
+ "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-css": "^6.2.0",
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-liquid": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-liquid/-/lang-liquid-6.3.2.tgz",
+ "integrity": "sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.3.1"
+ }
+ },
+ "node_modules/@codemirror/lang-markdown": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz",
+ "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.7.1",
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/language": "^6.3.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.2.1",
+ "@lezer/markdown": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-php": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-php/-/lang-php-6.0.2.tgz",
+ "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/php": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-python": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.2.1.tgz",
+ "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.3.2",
+ "@codemirror/language": "^6.8.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.2.1",
+ "@lezer/python": "^1.1.4"
+ }
+ },
+ "node_modules/@codemirror/lang-rust": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz",
+ "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/rust": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-sass": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz",
+ "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-css": "^6.2.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.0.2",
+ "@lezer/sass": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-sql": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz",
+ "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-vue": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz",
+ "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/lang-javascript": "^6.1.2",
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.3.1"
+ }
+ },
+ "node_modules/@codemirror/lang-wast": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz",
+ "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-xml": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz",
+ "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.4.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.0.0",
+ "@lezer/xml": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/lang-yaml": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.3.tgz",
+ "integrity": "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.2.0",
+ "@lezer/lr": "^1.0.0",
+ "@lezer/yaml": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/language": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.3.tgz",
+ "integrity": "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.23.0",
+ "@lezer/common": "^1.5.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
+ "style-mod": "^4.0.0"
+ }
+ },
+ "node_modules/@codemirror/language-data": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz",
+ "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-angular": "^0.1.0",
+ "@codemirror/lang-cpp": "^6.0.0",
+ "@codemirror/lang-css": "^6.0.0",
+ "@codemirror/lang-go": "^6.0.0",
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/lang-java": "^6.0.0",
+ "@codemirror/lang-javascript": "^6.0.0",
+ "@codemirror/lang-jinja": "^6.0.0",
+ "@codemirror/lang-json": "^6.0.0",
+ "@codemirror/lang-less": "^6.0.0",
+ "@codemirror/lang-liquid": "^6.0.0",
+ "@codemirror/lang-markdown": "^6.0.0",
+ "@codemirror/lang-php": "^6.0.0",
+ "@codemirror/lang-python": "^6.0.0",
+ "@codemirror/lang-rust": "^6.0.0",
+ "@codemirror/lang-sass": "^6.0.0",
+ "@codemirror/lang-sql": "^6.0.0",
+ "@codemirror/lang-vue": "^0.1.1",
+ "@codemirror/lang-wast": "^6.0.0",
+ "@codemirror/lang-xml": "^6.0.0",
+ "@codemirror/lang-yaml": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/legacy-modes": "^6.4.0"
+ }
+ },
+ "node_modules/@codemirror/legacy-modes": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz",
+ "integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0"
+ }
+ },
+ "node_modules/@codemirror/lint": {
+ "version": "6.9.5",
+ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.5.tgz",
+ "integrity": "sha512-GElsbU9G7QT9xXhpUg1zWGmftA/7jamh+7+ydKRuT0ORpWS3wOSP0yT1FOlIZa7mIJjpVPipErsyvVqB9cfTFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.35.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/rangeset": {
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz",
+ "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==",
+ "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^0.19.0"
+ }
+ },
+ "node_modules/@codemirror/rangeset/node_modules/@codemirror/state": {
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz",
+ "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/text": "^0.19.0"
+ }
+ },
+ "node_modules/@codemirror/search": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.6.0.tgz",
+ "integrity": "sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.37.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/state": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.6.0.tgz",
+ "integrity": "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@marijn/find-cluster-break": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/text": {
+ "version": "0.19.6",
+ "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz",
+ "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==",
+ "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state",
+ "license": "MIT"
+ },
+ "node_modules/@codemirror/view": {
+ "version": "6.40.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.40.0.tgz",
+ "integrity": "sha512-WA0zdU7xfF10+5I3HhUUq3kqOx3KjqmtQ9lqZjfK7jtYk4G72YW9rezcSywpaUMCWOMlq+6E0pO1IWg1TNIhtg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@codemirror/state": "^6.6.0",
+ "crelt": "^1.0.6",
+ "style-mod": "^4.1.0",
+ "w3c-keyname": "^2.2.4"
+ }
+ },
"node_modules/@csstools/color-helpers": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz",
@@ -2123,6 +2630,7 @@
}
],
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.19.0"
},
@@ -2171,6 +2679,7 @@
}
],
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.19.0"
}
@@ -2286,9 +2795,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
- "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz",
+ "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==",
"cpu": [
"ppc64"
],
@@ -2302,9 +2811,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
- "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz",
+ "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==",
"cpu": [
"arm"
],
@@ -2318,9 +2827,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
- "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz",
+ "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==",
"cpu": [
"arm64"
],
@@ -2334,9 +2843,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
- "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz",
+ "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==",
"cpu": [
"x64"
],
@@ -2350,9 +2859,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
- "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz",
+ "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==",
"cpu": [
"arm64"
],
@@ -2366,9 +2875,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
- "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz",
+ "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==",
"cpu": [
"x64"
],
@@ -2382,9 +2891,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
- "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==",
"cpu": [
"arm64"
],
@@ -2398,9 +2907,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
- "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz",
+ "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==",
"cpu": [
"x64"
],
@@ -2414,9 +2923,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
- "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz",
+ "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==",
"cpu": [
"arm"
],
@@ -2430,9 +2939,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
- "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz",
+ "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==",
"cpu": [
"arm64"
],
@@ -2446,9 +2955,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
- "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz",
+ "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==",
"cpu": [
"ia32"
],
@@ -2462,9 +2971,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
- "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz",
+ "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==",
"cpu": [
"loong64"
],
@@ -2478,9 +2987,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
- "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz",
+ "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==",
"cpu": [
"mips64el"
],
@@ -2494,9 +3003,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
- "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz",
+ "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==",
"cpu": [
"ppc64"
],
@@ -2510,9 +3019,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
- "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz",
+ "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==",
"cpu": [
"riscv64"
],
@@ -2526,9 +3035,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
- "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz",
+ "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==",
"cpu": [
"s390x"
],
@@ -2542,9 +3051,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
- "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz",
+ "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==",
"cpu": [
"x64"
],
@@ -2558,9 +3067,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==",
"cpu": [
"arm64"
],
@@ -2574,9 +3083,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
- "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz",
+ "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==",
"cpu": [
"x64"
],
@@ -2590,9 +3099,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz",
+ "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==",
"cpu": [
"arm64"
],
@@ -2606,9 +3115,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
- "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz",
+ "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==",
"cpu": [
"x64"
],
@@ -2622,9 +3131,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
- "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz",
+ "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==",
"cpu": [
"arm64"
],
@@ -2638,9 +3147,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
- "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz",
+ "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==",
"cpu": [
"x64"
],
@@ -2654,9 +3163,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
- "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz",
+ "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==",
"cpu": [
"arm64"
],
@@ -2670,9 +3179,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
- "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz",
+ "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==",
"cpu": [
"ia32"
],
@@ -2686,9 +3195,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
- "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz",
+ "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==",
"cpu": [
"x64"
],
@@ -2759,9 +3268,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz",
- "integrity": "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==",
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz",
+ "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2772,7 +3281,7 @@
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.1",
- "minimatch": "^3.1.3",
+ "minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1"
},
"engines": {
@@ -2877,6 +3386,7 @@
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
@@ -2894,6 +3404,7 @@
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -2906,6 +3417,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
@@ -3360,6 +3872,190 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@lezer/common": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.1.tgz",
+ "integrity": "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==",
+ "license": "MIT"
+ },
+ "node_modules/@lezer/cpp": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.5.tgz",
+ "integrity": "sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/css": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.3.tgz",
+ "integrity": "sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.3.0"
+ }
+ },
+ "node_modules/@lezer/go": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@lezer/go/-/go-1.0.1.tgz",
+ "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.3.0"
+ }
+ },
+ "node_modules/@lezer/highlight": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz",
+ "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@lezer/common": "^1.3.0"
+ }
+ },
+ "node_modules/@lezer/html": {
+ "version": "1.3.13",
+ "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz",
+ "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/java": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.1.3.tgz",
+ "integrity": "sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/javascript": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz",
+ "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.1.3",
+ "@lezer/lr": "^1.3.0"
+ }
+ },
+ "node_modules/@lezer/json": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz",
+ "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/lr": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.8.tgz",
+ "integrity": "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/markdown": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.6.3.tgz",
+ "integrity": "sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.5.0",
+ "@lezer/highlight": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/php": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@lezer/php/-/php-1.0.5.tgz",
+ "integrity": "sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.1.0"
+ }
+ },
+ "node_modules/@lezer/python": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.18.tgz",
+ "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/rust": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.2.tgz",
+ "integrity": "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/sass": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@lezer/sass/-/sass-1.1.0.tgz",
+ "integrity": "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/xml": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz",
+ "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/yaml": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.4.tgz",
+ "integrity": "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.4.0"
+ }
+ },
+ "node_modules/@marijn/find-cluster-break": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
+ "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
+ "license": "MIT"
+ },
"node_modules/@mongodb-js/saslprep": {
"version": "1.4.6",
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz",
@@ -3387,6 +4083,7 @@
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^14.21.3 || >=16"
},
@@ -3445,6 +4142,7 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
"license": "MIT",
"optional": true,
"engines": {
@@ -3471,9 +4169,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
- "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz",
+ "integrity": "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==",
"cpu": [
"arm"
],
@@ -3484,9 +4182,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
- "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz",
+ "integrity": "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==",
"cpu": [
"arm64"
],
@@ -3497,9 +4195,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
- "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz",
+ "integrity": "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==",
"cpu": [
"arm64"
],
@@ -3510,9 +4208,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
- "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz",
+ "integrity": "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==",
"cpu": [
"x64"
],
@@ -3523,9 +4221,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
- "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz",
+ "integrity": "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==",
"cpu": [
"arm64"
],
@@ -3536,9 +4234,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
- "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz",
+ "integrity": "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==",
"cpu": [
"x64"
],
@@ -3549,9 +4247,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
- "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz",
+ "integrity": "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==",
"cpu": [
"arm"
],
@@ -3562,9 +4260,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
- "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz",
+ "integrity": "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==",
"cpu": [
"arm"
],
@@ -3575,9 +4273,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
- "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz",
+ "integrity": "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==",
"cpu": [
"arm64"
],
@@ -3588,9 +4286,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
- "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz",
+ "integrity": "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==",
"cpu": [
"arm64"
],
@@ -3601,9 +4299,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
- "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz",
+ "integrity": "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==",
"cpu": [
"loong64"
],
@@ -3614,9 +4312,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
- "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz",
+ "integrity": "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==",
"cpu": [
"loong64"
],
@@ -3627,9 +4325,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
- "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz",
+ "integrity": "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==",
"cpu": [
"ppc64"
],
@@ -3640,9 +4338,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
- "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz",
+ "integrity": "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==",
"cpu": [
"ppc64"
],
@@ -3653,9 +4351,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
- "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz",
+ "integrity": "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==",
"cpu": [
"riscv64"
],
@@ -3666,9 +4364,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
- "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz",
+ "integrity": "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==",
"cpu": [
"riscv64"
],
@@ -3679,9 +4377,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
- "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz",
+ "integrity": "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==",
"cpu": [
"s390x"
],
@@ -3692,9 +4390,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
- "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz",
+ "integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==",
"cpu": [
"x64"
],
@@ -3705,9 +4403,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
- "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz",
+ "integrity": "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==",
"cpu": [
"x64"
],
@@ -3718,9 +4416,9 @@
]
},
"node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
- "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz",
+ "integrity": "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==",
"cpu": [
"x64"
],
@@ -3731,9 +4429,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
- "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz",
+ "integrity": "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==",
"cpu": [
"arm64"
],
@@ -3744,9 +4442,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
- "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz",
+ "integrity": "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==",
"cpu": [
"arm64"
],
@@ -3757,9 +4455,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
- "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz",
+ "integrity": "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==",
"cpu": [
"ia32"
],
@@ -3770,9 +4468,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
- "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz",
+ "integrity": "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==",
"cpu": [
"x64"
],
@@ -3783,9 +4481,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
- "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz",
+ "integrity": "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==",
"cpu": [
"x64"
],
@@ -3805,9 +4503,9 @@
}
},
"node_modules/@sinclair/typebox": {
- "version": "0.34.48",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
- "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "version": "0.34.49",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.49.tgz",
+ "integrity": "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==",
"dev": true,
"license": "MIT"
},
@@ -3845,16 +4543,16 @@
}
},
"node_modules/@stylistic/stylelint-plugin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-5.0.1.tgz",
- "integrity": "sha512-NaVwCNVZ2LyPA3TnUwvjO9c6P6VUjgRB8UP8SOW+cAOJBVqPPuOIDawsvvtql/LhkuR3JuTdGvr/RM3dUl8l2Q==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-5.1.0.tgz",
+ "integrity": "sha512-TFvKCbJUEWUYCD+rDv45qhnStO6nRtbBngaCblS2JGh8c95S3jJi3fIotfF6EDo4IVM15UPa65WP+kp6GNvXRA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@csstools/css-parser-algorithms": "^4.0.0",
"@csstools/css-tokenizer": "^4.0.0",
"@csstools/media-query-list-parser": "^5.0.0",
- "postcss": "^8.5.6",
+ "postcss": "^8.5.8",
"postcss-selector-parser": "^7.1.1",
"postcss-value-parser": "^4.2.0",
"style-search": "^0.1.0"
@@ -3863,7 +4561,7 @@
"node": ">=20.19.0"
},
"peerDependencies": {
- "stylelint": "^17.0.0"
+ "stylelint": "^17.6.0"
}
},
"node_modules/@tybys/wasm-util": {
@@ -3952,9 +4650,9 @@
}
},
"node_modules/@types/node": {
- "version": "25.3.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
- "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
+ "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -4001,14 +4699,14 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz",
- "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz",
+ "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.56.1",
- "@typescript-eslint/types": "^8.56.1",
+ "@typescript-eslint/tsconfig-utils": "^8.57.2",
+ "@typescript-eslint/types": "^8.57.2",
"debug": "^4.4.3"
},
"engines": {
@@ -4023,14 +4721,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz",
- "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz",
+ "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1"
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4041,9 +4739,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz",
- "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz",
+ "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4058,9 +4756,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz",
- "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz",
+ "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4072,16 +4770,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz",
- "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz",
+ "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.56.1",
- "@typescript-eslint/tsconfig-utils": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/visitor-keys": "8.56.1",
+ "@typescript-eslint/project-service": "8.57.2",
+ "@typescript-eslint/tsconfig-utils": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@@ -4152,16 +4850,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz",
- "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz",
+ "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.56.1",
- "@typescript-eslint/types": "8.56.1",
- "@typescript-eslint/typescript-estree": "8.56.1"
+ "@typescript-eslint/scope-manager": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/typescript-estree": "8.57.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4176,13 +4874,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz",
- "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz",
+ "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.56.1",
+ "@typescript-eslint/types": "8.57.2",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@@ -4206,6 +4904,489 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@uiw/codemirror-theme-abcdef": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-abcdef/-/codemirror-theme-abcdef-4.25.9.tgz",
+ "integrity": "sha512-F6bZcm20N3r4ZeCMdyjjII/fYHqE17sbRk6pFWfU+NPxe522A/uaRKpEaBK/iDwYqpKZgI3XUz7j3KcYzA99Mg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-abyss": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-abyss/-/codemirror-theme-abyss-4.25.9.tgz",
+ "integrity": "sha512-zcMHX3abHsaV+IRhnHeWA5aYTP/9HTk/MR5Zh3pfwASv8YMsQlcjBva8vEZULV9pJDferW/9GXbKbbPdmceJeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-androidstudio": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-androidstudio/-/codemirror-theme-androidstudio-4.25.9.tgz",
+ "integrity": "sha512-HPIWpEC9ElhpJ2NZUKB6z+eStQzFDrkIGW9pTJxYHSCv2Los7FgD/R6eGqjTS4LVlBf9FR+KU/5E6dLT8DQHlw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-andromeda": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-andromeda/-/codemirror-theme-andromeda-4.25.9.tgz",
+ "integrity": "sha512-JSqK8/sVFbFfTyv/okaT4c8suulf9zasqd4YBuTSkPZo+Sd/50blxMSVe5IWwDSiW5hkiupb7FC2IP1siHhncw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-atomone": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-atomone/-/codemirror-theme-atomone-4.25.9.tgz",
+ "integrity": "sha512-EXG/+p+Y9j/StU2yAtz/+JZj/8WaSGqwjsad79CSBgpHrSU0ERzv4urYWXgEmLTKKkFimwTigy7qOJlLAwkN2A==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-aura": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-aura/-/codemirror-theme-aura-4.25.9.tgz",
+ "integrity": "sha512-cJyInS81wh0lWYs1XDiyFSxCCXrJ+4qifBsDHSYELdLgbnr441T3Kr6a9lyUobtL4DZVaIaCKE9rajrFdJIeAw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-basic": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-basic/-/codemirror-theme-basic-4.25.9.tgz",
+ "integrity": "sha512-40x+anangMmPziZSeEcg6P5YDLn7fF1ioS5VxEPXMGUTbikv0au4PXVNsf7CtP0VwO4MmGt87zZI6rQIexEP3w==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-bbedit": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-bbedit/-/codemirror-theme-bbedit-4.25.9.tgz",
+ "integrity": "sha512-SGXQ0tLsqcRvxXCrdeU/MiQ3liNKvr8DCxaSt4N5LP7EPGO94ebuvba0F+H/3LpeJJrn5Xq0FuhaPlMYJ10RXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-bespin": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-bespin/-/codemirror-theme-bespin-4.25.9.tgz",
+ "integrity": "sha512-Zr35B1FpM+VMIoHot397GP/dQBWkFz6SlFqf3JSX6wlwgy2d4ot3YF9fBglGkM3C3ITmkBBQRnlvELwke+dXBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-console": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-console/-/codemirror-theme-console-4.25.9.tgz",
+ "integrity": "sha512-vhN9QKStneKyiNzu+DuA5JOss9WfzecuDjvmEYApQL9zvRmNUAP6La0C2vpZCji1Y23OAFZUJvTU+eKbept3cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-copilot": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-copilot/-/codemirror-theme-copilot-4.25.9.tgz",
+ "integrity": "sha512-MLBXBEp+jDQC+BbFUQxxwsOKvhbCsIpIjwBgNfR4KKKQxD6tF6u+CE7ERcrRWJ6cCV2lDrs1IZRZGPQCSpHMIA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-darcula": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-darcula/-/codemirror-theme-darcula-4.25.9.tgz",
+ "integrity": "sha512-lrex1DXg/mx2BX1UtnyFlat7w6c3RyE5GMvyR8uPfXNAXMUEKjYxNRdUuQ9WGlOMzQZ3x+UbKnUZd/r6AmXwsw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-dracula": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-dracula/-/codemirror-theme-dracula-4.25.9.tgz",
+ "integrity": "sha512-0VTnpPCHPc+7LqYsQOX6nvW32XiiT+O6kJjReUbV7Eio3vPHsb+b9P4DKhz4AAvIIYMxmHkMuautHKuWktFXSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-duotone": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-duotone/-/codemirror-theme-duotone-4.25.9.tgz",
+ "integrity": "sha512-6IPZncdrtcgnU1EtQ1/IzaULZ+Jw5uAeVeQCae+rFBnW/m6Q8nWB8+iVnk8kCevgjT5ScZmRd9h4yqtSeJbUwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-eclipse": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-eclipse/-/codemirror-theme-eclipse-4.25.9.tgz",
+ "integrity": "sha512-0pT0vRyLAotj5UjIZbHSmsZ8oz7l8IU5bhx5p7MDrTOdi73ZjyTsG4YsDzSXndERnfgkBbZJrlZiExBkXnhtUA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-github": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.25.9.tgz",
+ "integrity": "sha512-AGpTamNiySKNzq3Jc7QjpwgQRVaHUaBtmOKiUDghYSfEGjsc5uW4NUW70sSU3BnkGv+lCTUnF3175KM24BWZbw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-gruvbox-dark": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-gruvbox-dark/-/codemirror-theme-gruvbox-dark-4.25.9.tgz",
+ "integrity": "sha512-9qIa1z4zwubN2kHAs+lJvdrmMMMf69JeyVPAwSoNaImL8wUQ/J3291qcfuoZjv8RsqSzrKTgxqLHtkAhB7xcwg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-kimbie": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-kimbie/-/codemirror-theme-kimbie-4.25.9.tgz",
+ "integrity": "sha512-zLjT7MkotuT07rx4ZPZOM1/H+sa+kCmJr5BDu2ASNpF7Sj4w0cTNcAyxKHj+N6LcgIM8PICxqB97CJhlurNTBA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-material": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-material/-/codemirror-theme-material-4.25.9.tgz",
+ "integrity": "sha512-6f2x+gmj2hHagqy6VkpnPbK7SWyP6kKruGgqpyIy09/f9pAUCqkW8mRY5ZEr28tA+YEGQaSY0Z2IBCHl8OKJog==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-monokai": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-monokai/-/codemirror-theme-monokai-4.25.9.tgz",
+ "integrity": "sha512-qKWRZOGpBCasZJdYU+SsXd92TjncF3QYHpraCPe29bxN22jeIxi2UC4MCuJHwa8hHljHOCSdx1XG/GuUMn7XiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-monokai-dimmed": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-monokai-dimmed/-/codemirror-theme-monokai-dimmed-4.25.9.tgz",
+ "integrity": "sha512-6/Z9tF4UFngaXifAKC4DI2l61G3rtcWOxvCwgs5zzNVMTciUI+Bl/K7eCvjf2y0LfLmK8Ovob8ODDBcVgwzp5g==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-noctis-lilac": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-noctis-lilac/-/codemirror-theme-noctis-lilac-4.25.9.tgz",
+ "integrity": "sha512-HXjQutWsVYfiBM6ze4SomXmSJNzYYJ/fUYJ3TJLhnp5cjIPNBsMsgOAaWp3L64xUqqorb0+1y6kdmUKxTEp6rQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-nord": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-nord/-/codemirror-theme-nord-4.25.9.tgz",
+ "integrity": "sha512-5c568xmMidwICADxACB1zIhKoEgqbdVrdeOUZ2p5pE6NNKGR4ATzk9OSqhvr1ZhZPNOktxqSLLRzihFaZG0bDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-okaidia": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-okaidia/-/codemirror-theme-okaidia-4.25.9.tgz",
+ "integrity": "sha512-lIJFUs/ws0prQz+dVo5ZIp0o6vxW7p6nf8iRFETN5S3KA3nJUR2cTF6u8mYLFwHMrFs2eReRsFyH94wjmuPWvg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-quietlight": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-quietlight/-/codemirror-theme-quietlight-4.25.9.tgz",
+ "integrity": "sha512-BWFcFb3WHTCVROkjExh/TMMTJ5SNcDafaVEIwneKypiHoTJoIY6RlSRBj6GA3O5IgKdrGmhje87s0Gx2OLIndg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-red": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-red/-/codemirror-theme-red-4.25.9.tgz",
+ "integrity": "sha512-pSOs2ByCVGJXbABhfTEU4TlRh/Wa9BJlDUa219iq1jO3AUDUM/LIPNLhmQvMtOituMX8WKJprspBrDcveXsisg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-solarized": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-solarized/-/codemirror-theme-solarized-4.25.9.tgz",
+ "integrity": "sha512-axUgU9+3JKXW83F+te454qcyTmQAm0+2Fxv0yoegiH6bdl7DjFq/lNVGGZtLwN47AQCj2Qwrheeet2t3GbY9VQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-sublime": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-sublime/-/codemirror-theme-sublime-4.25.9.tgz",
+ "integrity": "sha512-/Ha1K3P0sqFWrsYtCu6Uih/t8C73dVY6m5rObjCnnokr//kOusKwlwt1fJiEFdIcSKlH2WBIvW5tb75tcYitnw==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-tokyo-night": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night/-/codemirror-theme-tokyo-night-4.25.9.tgz",
+ "integrity": "sha512-NkSqguMpzRjsRBbTIfOrGS35tQkE3K8AAetZHlbRZC7fnI52RreZ11X41cOYrc/Dapt8xqUPlhlvclymGFgy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-tokyo-night-day": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night-day/-/codemirror-theme-tokyo-night-day-4.25.9.tgz",
+ "integrity": "sha512-1ziFletBO6tfRtX4FVWij1wYIf95uYi54dgnMz5CXe4A4u710rJ3uS3C4ijlnclRbwHjNTqtrMWNuicKDBMsPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-tokyo-night-storm": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night-storm/-/codemirror-theme-tokyo-night-storm-4.25.9.tgz",
+ "integrity": "sha512-qz8Vg+ze12TuLk+fqwx3oga3H6rDE+81PpKMGLfbI1BwPDgg7GZGTGrWZoN1Bpf6EV0dA4WO8K6lbzFhlS6S1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-tomorrow-night-blue": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tomorrow-night-blue/-/codemirror-theme-tomorrow-night-blue-4.25.9.tgz",
+ "integrity": "sha512-iG2wCXO/rkJIrvW7rJY7Ehh4yushw8X4vQnstjArxofR6uNrE9ay3Ut7M0cxrwY7z8YIU5f7NQFODE/h3HNmVA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-vscode": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-vscode/-/codemirror-theme-vscode-4.25.9.tgz",
+ "integrity": "sha512-9KTnScHTSk97yGnyNYvDm6QZuBCdbO1OzMQ5bHtoBSPSVtH0LjY3bS6CXsBagb22v8OLPx/XwrBYOjKFp409CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-white": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-white/-/codemirror-theme-white-4.25.9.tgz",
+ "integrity": "sha512-75PHfVejBvgF1EbponpEOgND/T6MJYZ673aODPuR7mKPZNfn8649qOSrp7wvMN/NEZ+W5CxV3U7tb9MQWPcM4A==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-theme-xcode": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-xcode/-/codemirror-theme-xcode-4.25.9.tgz",
+ "integrity": "sha512-sMiDpOiW0iiNsLyqL1Vx6wZKOSoVUNfmWbBDtaYzlkRcKzkyJQp68cPIq5VG8Mhl2z+PX5cPbOA0nZEegNLicA==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
+ "node_modules/@uiw/codemirror-themes": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.25.9.tgz",
+ "integrity": "sha512-DAHKb/L9ELwjY4nCf/MP/mIllHOn4GQe7RR4x8AMJuNeh9nGRRoo1uPxrxMmUL/bKqe6kDmDbIZ2AlhlqyIJuw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ },
+ "peerDependencies": {
+ "@codemirror/language": ">=6.0.0",
+ "@codemirror/state": ">=6.0.0",
+ "@codemirror/view": ">=6.0.0"
+ }
+ },
+ "node_modules/@uiw/codemirror-themes-all": {
+ "version": "4.25.9",
+ "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes-all/-/codemirror-themes-all-4.25.9.tgz",
+ "integrity": "sha512-OVcGb6dkgJ8NgcHFvSQkRLHHIRswZhBKK0XZZzRVMxDnCIXfmnDfeChNoKjuzwBr+C0jS7UAAqrWbcqrLj3mhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@uiw/codemirror-theme-abcdef": "4.25.9",
+ "@uiw/codemirror-theme-abyss": "4.25.9",
+ "@uiw/codemirror-theme-androidstudio": "4.25.9",
+ "@uiw/codemirror-theme-andromeda": "4.25.9",
+ "@uiw/codemirror-theme-atomone": "4.25.9",
+ "@uiw/codemirror-theme-aura": "4.25.9",
+ "@uiw/codemirror-theme-basic": "4.25.9",
+ "@uiw/codemirror-theme-bbedit": "4.25.9",
+ "@uiw/codemirror-theme-bespin": "4.25.9",
+ "@uiw/codemirror-theme-console": "4.25.9",
+ "@uiw/codemirror-theme-copilot": "4.25.9",
+ "@uiw/codemirror-theme-darcula": "4.25.9",
+ "@uiw/codemirror-theme-dracula": "4.25.9",
+ "@uiw/codemirror-theme-duotone": "4.25.9",
+ "@uiw/codemirror-theme-eclipse": "4.25.9",
+ "@uiw/codemirror-theme-github": "4.25.9",
+ "@uiw/codemirror-theme-gruvbox-dark": "4.25.9",
+ "@uiw/codemirror-theme-kimbie": "4.25.9",
+ "@uiw/codemirror-theme-material": "4.25.9",
+ "@uiw/codemirror-theme-monokai": "4.25.9",
+ "@uiw/codemirror-theme-monokai-dimmed": "4.25.9",
+ "@uiw/codemirror-theme-noctis-lilac": "4.25.9",
+ "@uiw/codemirror-theme-nord": "4.25.9",
+ "@uiw/codemirror-theme-okaidia": "4.25.9",
+ "@uiw/codemirror-theme-quietlight": "4.25.9",
+ "@uiw/codemirror-theme-red": "4.25.9",
+ "@uiw/codemirror-theme-solarized": "4.25.9",
+ "@uiw/codemirror-theme-sublime": "4.25.9",
+ "@uiw/codemirror-theme-tokyo-night": "4.25.9",
+ "@uiw/codemirror-theme-tokyo-night-day": "4.25.9",
+ "@uiw/codemirror-theme-tokyo-night-storm": "4.25.9",
+ "@uiw/codemirror-theme-tomorrow-night-blue": "4.25.9",
+ "@uiw/codemirror-theme-vscode": "4.25.9",
+ "@uiw/codemirror-theme-white": "4.25.9",
+ "@uiw/codemirror-theme-xcode": "4.25.9",
+ "@uiw/codemirror-themes": "4.25.9"
+ },
+ "funding": {
+ "url": "https://jaywcjlove.github.io/#/sponsor"
+ }
+ },
"node_modules/@ungap/structured-clone": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
@@ -4483,9 +5664,9 @@
]
},
"node_modules/@vitejs/plugin-react": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz",
- "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz",
+ "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==",
"license": "MIT",
"dependencies": {
"@babel/core": "^7.29.0",
@@ -4499,7 +5680,7 @@
"node": "^20.19.0 || >=22.12.0"
},
"peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/accepts": {
@@ -4521,6 +5702,7 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -4618,6 +5800,19 @@
"node": ">= 8"
}
},
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -4872,13 +6067,13 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.15",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz",
- "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==",
+ "version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz",
+ "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==",
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.28.6",
- "@babel/helper-define-polyfill-provider": "^0.6.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.8",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -4899,12 +6094,12 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz",
- "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==",
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz",
+ "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.6"
+ "@babel/helper-define-polyfill-provider": "^0.6.8"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -4972,6 +6167,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
@@ -4995,9 +6191,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
- "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "version": "2.10.12",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz",
+ "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==",
"license": "Apache-2.0",
"bin": {
"baseline-browser-mapping": "dist/cli.cjs"
@@ -5092,6 +6288,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -5148,9 +6345,9 @@
}
},
"node_modules/cacheable": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.3.tgz",
- "integrity": "sha512-iffYMX4zxKp54evOH27fm92hs+DeC1DhXmNVN8Tr94M/iZIV42dqTHSR2Ik4TOSPyOAwKr7Yu3rN9ALoLkbWyQ==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.4.tgz",
+ "integrity": "sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5158,7 +6355,7 @@
"@cacheable/utils": "^2.4.0",
"hookified": "^1.15.0",
"keyv": "^5.6.0",
- "qified": "^0.6.0"
+ "qified": "^0.9.0"
}
},
"node_modules/cacheable/node_modules/keyv": {
@@ -5240,9 +6437,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001776",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz",
- "integrity": "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==",
+ "version": "1.0.30001781",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz",
+ "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==",
"funding": [
{
"type": "opencollective",
@@ -5370,6 +6567,18 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/cm6-theme-basic-light": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/cm6-theme-basic-light/-/cm6-theme-basic-light-0.2.0.tgz",
+ "integrity": "sha512-1prg2gv44sYfpHscP26uLT/ePrh0mlmVwMSoSd3zYKQ92Ab3jPRLzyCnpyOCQLJbK+YdNs4HvMRqMNYdy4pMhA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/highlight": "^1.0.0"
+ }
+ },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -5381,12 +6590,6 @@
"node": ">= 0.12.0"
}
},
- "node_modules/codemirror": {
- "version": "5.65.21",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.21.tgz",
- "integrity": "sha512-6teYk0bA0nR3QP0ihGMoxuKzpl5W80FpnHpBJpgy66NK3cZv5b/d/HY8PnRvfSsCG1MTfr92u2WUl+wT0E40mQ==",
- "license": "MIT"
- },
"node_modules/collect-v8-coverage": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
@@ -5536,9 +6739,9 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.48.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz",
- "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==",
+ "version": "3.49.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz",
+ "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==",
"license": "MIT",
"dependencies": {
"browserslist": "^4.28.1"
@@ -5602,10 +6805,17 @@
"object-assign": "^4.1.1"
}
},
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "license": "MIT"
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -5670,9 +6880,9 @@
}
},
"node_modules/cssstyle/node_modules/lru-cache": {
- "version": "11.2.6",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
- "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+ "version": "11.2.7",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
+ "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
@@ -5916,6 +7126,7 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/ecdsa-sig-formatter": {
@@ -5934,9 +7145,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.307",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
- "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
+ "version": "1.5.328",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz",
+ "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==",
"license": "ISC"
},
"node_modules/emittery": {
@@ -5956,6 +7167,7 @@
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
"license": "MIT"
},
"node_modules/encodeurl": {
@@ -6101,9 +7313,9 @@
}
},
"node_modules/es-iterator-helpers": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz",
- "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.1.tgz",
+ "integrity": "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6122,6 +7334,7 @@
"has-symbols": "^1.1.0",
"internal-slot": "^1.1.0",
"iterator.prototype": "^1.1.5",
+ "math-intrinsics": "^1.1.0",
"safe-array-concat": "^1.1.3"
},
"engines": {
@@ -6187,9 +7400,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
- "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+ "version": "0.27.4",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz",
+ "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -6199,32 +7412,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.27.3",
- "@esbuild/android-arm": "0.27.3",
- "@esbuild/android-arm64": "0.27.3",
- "@esbuild/android-x64": "0.27.3",
- "@esbuild/darwin-arm64": "0.27.3",
- "@esbuild/darwin-x64": "0.27.3",
- "@esbuild/freebsd-arm64": "0.27.3",
- "@esbuild/freebsd-x64": "0.27.3",
- "@esbuild/linux-arm": "0.27.3",
- "@esbuild/linux-arm64": "0.27.3",
- "@esbuild/linux-ia32": "0.27.3",
- "@esbuild/linux-loong64": "0.27.3",
- "@esbuild/linux-mips64el": "0.27.3",
- "@esbuild/linux-ppc64": "0.27.3",
- "@esbuild/linux-riscv64": "0.27.3",
- "@esbuild/linux-s390x": "0.27.3",
- "@esbuild/linux-x64": "0.27.3",
- "@esbuild/netbsd-arm64": "0.27.3",
- "@esbuild/netbsd-x64": "0.27.3",
- "@esbuild/openbsd-arm64": "0.27.3",
- "@esbuild/openbsd-x64": "0.27.3",
- "@esbuild/openharmony-arm64": "0.27.3",
- "@esbuild/sunos-x64": "0.27.3",
- "@esbuild/win32-arm64": "0.27.3",
- "@esbuild/win32-ia32": "0.27.3",
- "@esbuild/win32-x64": "0.27.3"
+ "@esbuild/aix-ppc64": "0.27.4",
+ "@esbuild/android-arm": "0.27.4",
+ "@esbuild/android-arm64": "0.27.4",
+ "@esbuild/android-x64": "0.27.4",
+ "@esbuild/darwin-arm64": "0.27.4",
+ "@esbuild/darwin-x64": "0.27.4",
+ "@esbuild/freebsd-arm64": "0.27.4",
+ "@esbuild/freebsd-x64": "0.27.4",
+ "@esbuild/linux-arm": "0.27.4",
+ "@esbuild/linux-arm64": "0.27.4",
+ "@esbuild/linux-ia32": "0.27.4",
+ "@esbuild/linux-loong64": "0.27.4",
+ "@esbuild/linux-mips64el": "0.27.4",
+ "@esbuild/linux-ppc64": "0.27.4",
+ "@esbuild/linux-riscv64": "0.27.4",
+ "@esbuild/linux-s390x": "0.27.4",
+ "@esbuild/linux-x64": "0.27.4",
+ "@esbuild/netbsd-arm64": "0.27.4",
+ "@esbuild/netbsd-x64": "0.27.4",
+ "@esbuild/openbsd-arm64": "0.27.4",
+ "@esbuild/openbsd-x64": "0.27.4",
+ "@esbuild/openharmony-arm64": "0.27.4",
+ "@esbuild/sunos-x64": "0.27.4",
+ "@esbuild/win32-arm64": "0.27.4",
+ "@esbuild/win32-ia32": "0.27.4",
+ "@esbuild/win32-x64": "0.27.4"
}
},
"node_modules/escalade": {
@@ -6261,6 +7474,7 @@
"integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
@@ -6803,6 +8017,23 @@
"bser": "2.1.1"
}
},
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fetch-blob": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
@@ -6934,6 +8165,7 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.6",
@@ -7263,6 +8495,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
@@ -7296,6 +8529,7 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -7305,6 +8539,7 @@
"version": "9.0.9",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.2"
@@ -7395,9 +8630,9 @@
}
},
"node_modules/globby": {
- "version": "16.1.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz",
- "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==",
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.0.tgz",
+ "integrity": "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7459,14 +8694,14 @@
"license": "MIT"
},
"node_modules/google-auth-library": {
- "version": "10.6.1",
- "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.1.tgz",
- "integrity": "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==",
+ "version": "10.6.2",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz",
+ "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==",
"license": "Apache-2.0",
"dependencies": {
"base64-js": "^1.3.0",
"ecdsa-sig-formatter": "^1.0.11",
- "gaxios": "7.1.3",
+ "gaxios": "^7.1.4",
"gcp-metadata": "8.1.2",
"google-logging-utils": "1.1.3",
"jws": "^4.0.0"
@@ -7475,21 +8710,6 @@
"node": ">=18"
}
},
- "node_modules/google-auth-library/node_modules/gaxios": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz",
- "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "extend": "^3.0.2",
- "https-proxy-agent": "^7.0.1",
- "node-fetch": "^3.3.2",
- "rimraf": "^5.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/google-logging-utils": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz",
@@ -7619,13 +8839,13 @@
"license": "MIT"
},
"node_modules/hashery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.0.tgz",
- "integrity": "sha512-nhQ6ExaOIqti2FDWoEMWARUqIKyjr2VcZzXShrI+A3zpeiuPWzx6iPftt44LhP74E5sW36B75N6VHbvRtpvO6Q==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+ "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.14.0"
+ "hookified": "^1.15.0"
},
"engines": {
"node": ">=20"
@@ -8390,6 +9610,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
"license": "ISC"
},
"node_modules/istanbul-lib-coverage": {
@@ -8498,6 +9719,7 @@
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
@@ -8515,6 +9737,7 @@
"integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jest/core": "30.3.0",
"@jest/types": "30.3.0",
@@ -8764,19 +9987,6 @@
"fsevents": "^2.3.3"
}
},
- "node_modules/jest-haste-map/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-leak-detector": {
"version": "30.3.0",
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz",
@@ -8828,19 +10038,6 @@
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-message-util/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-mock": {
"version": "30.3.0",
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz",
@@ -9050,19 +10247,6 @@
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-util/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-validate": {
"version": "30.3.0",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
@@ -9171,6 +10355,7 @@
"integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@acemir/cssom": "^0.9.31",
"@asamuzakjp/dom-selector": "^6.8.1",
@@ -9548,6 +10733,7 @@
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
"integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
"license": "MIT",
+ "peer": true,
"bin": {
"marked": "bin/marked.js"
},
@@ -9764,6 +10950,19 @@
"node": ">=8.6"
}
},
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -9829,6 +11028,7 @@
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
"integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -9911,6 +11111,22 @@
"url": "https://opencollective.com/mongoose"
}
},
+ "node_modules/mongoose/node_modules/gcp-metadata": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz",
+ "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "gaxios": "^7.0.0",
+ "google-logging-utils": "^1.0.0",
+ "json-bigint": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/mongoose/node_modules/mongodb": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.1.1.tgz",
@@ -10113,9 +11329,9 @@
}
},
"node_modules/needle": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
- "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz",
+ "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -10504,6 +11720,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
"license": "BlueOak-1.0.0"
},
"node_modules/parent-module": {
@@ -10593,6 +11810,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10608,6 +11826,7 @@
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^10.2.0",
@@ -10624,6 +11843,7 @@
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
"license": "ISC"
},
"node_modules/path-to-regexp": {
@@ -10643,13 +11863,12 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "dev": true,
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"license": "MIT",
"engines": {
- "node": ">=8.6"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
@@ -10717,6 +11936,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -10772,6 +11992,7 @@
"integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -10781,12 +12002,11 @@
}
},
"node_modules/postcss-sorting": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz",
- "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-10.0.0.tgz",
+ "integrity": "sha512-TXbU+h6vVRW+86c/+ewhWq9k7pr7ijASTnepVhCQiC87zAOTkvB1v2dHyWP+ggstSTX/PNvjzS+IOqzejndz9w==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"postcss": "^8.4.20"
}
@@ -10859,6 +12079,7 @@
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
@@ -10918,18 +12139,25 @@
"license": "MIT"
},
"node_modules/qified": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/qified/-/qified-0.6.0.tgz",
- "integrity": "sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.9.0.tgz",
+ "integrity": "sha512-4q61YgkHbY6gmwkqm0BsxyLDO3UYdrdiJTJ7JiaZb3xpW1duxn135SB7KqUEkCiuu5O4W+TtwEWP2VjmSRanvA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.14.0"
+ "hookified": "^2.1.0"
},
"engines": {
"node": ">=20"
}
},
+ "node_modules/qified/node_modules/hookified": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.1.1.tgz",
+ "integrity": "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/qs": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
@@ -10995,6 +12223,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -11004,6 +12233,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -11012,9 +12242,9 @@
}
},
"node_modules/react-frame-component": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-5.3.1.tgz",
- "integrity": "sha512-nvhGilo7MqrYRSd2b1aO+vIxLMRnUM+85gqUxO2sRs1LTDK5BHn4QNkKoFJJAcB9jo2W0GWLTev1anDb2qF28Q==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-5.3.2.tgz",
+ "integrity": "sha512-ce0/9xAnnkLDY6zxnTegP3Yjchw5z9aEaz0qKEGecrdnh3nAnQ5kehO84sNeLj3wQPB5ZM0OoVVQDQilhaE/5Q==",
"license": "MIT",
"peerDependencies": {
"prop-types": "^15.8.1 || ^16.0.0 || ^17.0.0 || ^18.0.0",
@@ -11243,25 +12473,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/rimraf": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
- "license": "ISC",
- "dependencies": {
- "glob": "^10.3.7"
- },
- "bin": {
- "rimraf": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/rollup": {
- "version": "4.59.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
- "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "version": "4.60.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.0.tgz",
+ "integrity": "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==",
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.8"
@@ -11274,31 +12489,31 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.59.0",
- "@rollup/rollup-android-arm64": "4.59.0",
- "@rollup/rollup-darwin-arm64": "4.59.0",
- "@rollup/rollup-darwin-x64": "4.59.0",
- "@rollup/rollup-freebsd-arm64": "4.59.0",
- "@rollup/rollup-freebsd-x64": "4.59.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
- "@rollup/rollup-linux-arm64-gnu": "4.59.0",
- "@rollup/rollup-linux-arm64-musl": "4.59.0",
- "@rollup/rollup-linux-loong64-gnu": "4.59.0",
- "@rollup/rollup-linux-loong64-musl": "4.59.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
- "@rollup/rollup-linux-ppc64-musl": "4.59.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
- "@rollup/rollup-linux-riscv64-musl": "4.59.0",
- "@rollup/rollup-linux-s390x-gnu": "4.59.0",
- "@rollup/rollup-linux-x64-gnu": "4.59.0",
- "@rollup/rollup-linux-x64-musl": "4.59.0",
- "@rollup/rollup-openbsd-x64": "4.59.0",
- "@rollup/rollup-openharmony-arm64": "4.59.0",
- "@rollup/rollup-win32-arm64-msvc": "4.59.0",
- "@rollup/rollup-win32-ia32-msvc": "4.59.0",
- "@rollup/rollup-win32-x64-gnu": "4.59.0",
- "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "@rollup/rollup-android-arm-eabi": "4.60.0",
+ "@rollup/rollup-android-arm64": "4.60.0",
+ "@rollup/rollup-darwin-arm64": "4.60.0",
+ "@rollup/rollup-darwin-x64": "4.60.0",
+ "@rollup/rollup-freebsd-arm64": "4.60.0",
+ "@rollup/rollup-freebsd-x64": "4.60.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.60.0",
+ "@rollup/rollup-linux-arm64-musl": "4.60.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.60.0",
+ "@rollup/rollup-linux-loong64-musl": "4.60.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.60.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.60.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.60.0",
+ "@rollup/rollup-linux-x64-gnu": "4.60.0",
+ "@rollup/rollup-linux-x64-musl": "4.60.0",
+ "@rollup/rollup-openbsd-x64": "4.60.0",
+ "@rollup/rollup-openharmony-arm64": "4.60.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.60.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.60.0",
+ "@rollup/rollup-win32-x64-gnu": "4.60.0",
+ "@rollup/rollup-win32-x64-msvc": "4.60.0",
"fsevents": "~2.3.2"
}
},
@@ -11439,9 +12654,9 @@
}
},
"node_modules/sax": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz",
- "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+ "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
"license": "BlueOak-1.0.0",
"optional": true,
"engines": {
@@ -11592,6 +12807,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -11604,6 +12820,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -11691,6 +12908,7 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">=14"
@@ -11837,6 +13055,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
@@ -11855,6 +13074,7 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -11869,12 +13089,14 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
"license": "MIT"
},
"node_modules/string-width/node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -11887,6 +13109,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
@@ -12013,6 +13236,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -12054,6 +13278,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/style-mod": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz",
+ "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==",
+ "license": "MIT"
+ },
"node_modules/style-search": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
@@ -12077,6 +13307,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"@csstools/css-calc": "^3.1.1",
"@csstools/css-parser-algorithms": "^4.0.0",
@@ -12157,15 +13388,15 @@
}
},
"node_modules/stylelint-order": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.1.tgz",
- "integrity": "sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-8.1.1.tgz",
+ "integrity": "sha512-LqsEB6VggJuu5v10RtkrQsBObcdwBE7GuAOlwfc/LR3VL/w8UqKX2BOLIjhyGt0Gne/njo7gRNGiJAKhfmPMNw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "postcss": "^8.5.6",
- "postcss-sorting": "^9.1.0"
+ "postcss": "^8.5.8",
+ "postcss-sorting": "^10.0.0"
},
"engines": {
"node": ">=20.19.0"
@@ -12198,14 +13429,14 @@
}
},
"node_modules/stylelint/node_modules/flat-cache": {
- "version": "6.1.20",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.20.tgz",
- "integrity": "sha512-AhHYqwvN62NVLp4lObVXGVluiABTHapoB57EyegZVmazN+hhGhLTn3uZbOofoTw4DSDvVCadzzyChXhOAvy8uQ==",
+ "version": "6.1.22",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz",
+ "integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cacheable": "^2.3.2",
- "flatted": "^3.3.3",
+ "cacheable": "^2.3.4",
+ "flatted": "^3.4.2",
"hookified": "^1.15.0"
}
},
@@ -12542,52 +13773,23 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/tldts": {
- "version": "7.0.24",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.24.tgz",
- "integrity": "sha512-1r6vQTTt1rUiJkI5vX7KG8PR342Ru/5Oh13kEQP2SMbRSZpOey9SrBe27IDxkoWulx8ShWu4K6C0BkctP8Z1bQ==",
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz",
+ "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tldts-core": "^7.0.24"
+ "tldts-core": "^7.0.27"
},
"bin": {
"tldts": "bin/cli.js"
}
},
"node_modules/tldts-core": {
- "version": "7.0.24",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.24.tgz",
- "integrity": "sha512-pj7yygNMoMRqG7ML2SDQ0xNIOfN3IBDUcPVM2Sg6hP96oFNN2nqnzHreT3z9xLq85IWJyNTvD38O002DdOrPMw==",
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz",
+ "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==",
"dev": true,
"license": "MIT"
},
@@ -12621,9 +13823,9 @@
}
},
"node_modules/tough-cookie": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz",
- "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz",
+ "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -12656,9 +13858,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
- "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -13048,6 +14250,7 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -13117,34 +14320,11 @@
}
}
},
- "node_modules/vite/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/vite/node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "license": "MIT"
},
"node_modules/w3c-xmlserializer": {
"version": "5.0.0",
@@ -13217,6 +14397,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -13331,6 +14512,7 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
@@ -13349,6 +14531,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -13366,12 +14549,14 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi-cjs/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==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -13386,6 +14571,7 @@
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -13398,6 +14584,7 @@
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -13410,6 +14597,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
diff --git a/package.json b/package.json
index fdcf39184..942cf1117 100644
--- a/package.json
+++ b/package.json
@@ -91,13 +91,26 @@
"@babel/preset-env": "^7.29.2",
"@babel/preset-react": "^7.28.5",
"@babel/runtime": "^7.29.2",
+ "@codemirror/autocomplete": "^6.20.1",
+ "@codemirror/commands": "^6.10.3",
+ "@codemirror/highlight": "^0.19.8",
+ "@codemirror/lang-css": "^6.3.1",
+ "@codemirror/lang-javascript": "^6.2.5",
+ "@codemirror/lang-markdown": "^6.5.0",
+ "@codemirror/language": "^6.12.2",
+ "@codemirror/language-data": "^6.5.2",
+ "@codemirror/search": "^6.6.0",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.40.0",
"@dmsnell/diff-match-patch": "^1.1.0",
"@googleapis/drive": "^20.1.0",
+ "@lezer/highlight": "^1.2.3",
"@sanity/diff-match-patch": "^3.2.0",
+ "@uiw/codemirror-themes-all": "^4.25.8",
"@vitejs/plugin-react": "^5.1.2",
"body-parser": "^2.2.0",
"classnames": "^2.5.1",
- "codemirror": "^5.65.6",
+ "cm6-theme-basic-light": "^0.2.0",
"cookie-parser": "^1.4.7",
"core-js": "^3.49.0",
"cors": "^2.8.5",
diff --git a/themes/codeMirror/customEditorStyles.less b/themes/codeMirror/customEditorStyles.less
deleted file mode 100644
index 8c48c1b43..000000000
--- a/themes/codeMirror/customEditorStyles.less
+++ /dev/null
@@ -1,83 +0,0 @@
-.editor .codeEditor .CodeMirror {
- // Themes with dark backgrounds
- &.cm-s-3024-night,
- &.cm-s-abbott,
- &.cm-s-abcdef,
- &.cm-s-ambiance,
- &.cm-s-ayu-dark,
- &.cm-s-ayu-mirage,
- &.cm-s-base16-dark,
- &.cm-s-bespin,
- &.cm-s-blackboard,
- &.cm-s-cobalt,
- &.cm-s-colorforth,
- &.cm-s-darcula,
- &.cm-s-dracula,
- &.cm-s-duotone-dark,
- &.cm-s-erlang-dark,
- &.cm-s-gruvbox-dark,
- &.cm-s-hopscotch,
- &.cm-s-icecoder,
- &.cm-s-isotope,
- &.cm-s-lesser-dark,
- &.cm-s-liquibyte,
- &.cm-s-lucario,
- &.cm-s-material,
- &.cm-s-material-darker,
- &.cm-s-material-ocean,
- &.cm-s-material-palenight,
- &.cm-s-mbo,
- &.cm-s-midnight,
- &.cm-s-monokai,
- &.cm-s-moxer,
- &.cm-s-night,
- &.cm-s-nord,
- &.cm-s-oceanic-next,
- &.cm-s-panda-syntax,
- &.cm-s-paraiso-dark,
- &.cm-s-pastel-on-dark,
- &.cm-s-railscasts,
- &.cm-s-rubyblue,
- &.cm-s-seti,
- &.cm-s-shadowfox,
- &.cm-s-the-matrix,
- &.cm-s-tomorrow-night-bright,
- &.cm-s-tomorrow-night-eighties,
- &.cm-s-twilight,
- &.cm-s-vibrant-ink,
- &.cm-s-xq-dark,
- &.cm-s-yonce,
- &.cm-s-zenburn {
- .CodeMirror-code {
- .block:not(.cm-comment) { color : magenta; }
- .columnSplit {
- color : black;
- background-color : rgba(35,153,153,0.5);
- }
- .pageLine {
- background-color : rgba(255,255,255,0.5);
- & ~ pre.CodeMirror-line { color : black; }
- }
- }
- }
- // Themes with light backgrounds
- &.cm-s-default,
- &.cm-s-3024-day,
- &.cm-s-ambiance-mobile,
- &.cm-s-base16-light,
- &.cm-s-duotone-light,
- &.cm-s-eclipse,
- &.cm-s-elegant,
- &.cm-s-juejin,
- &.cm-s-neat,
- &.cm-s-neo,
- &.cm-s-paraiso-lightm
- &.cm-s-solarized,
- &.cm-s-ssms,
- &.cm-s-ttcn,
- &.cm-s-xq-light,
- &.cm-s-yeti {
- // Future styling for themes with light backgrounds
- --dummyVar : 'currently unused';
- }
-}
diff --git a/themes/codeMirror/customThemes/darkbrewery.css b/themes/codeMirror/customThemes/darkbrewery.css
deleted file mode 100644
index 6fba4001c..000000000
--- a/themes/codeMirror/customThemes/darkbrewery.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*stylelint-disable*/
-.editor .snippetBar {
- color: white;
- background-color: #2F393C;
- .dropdown {
- background-color: #2F393C;
- }
- .editors {
- border-color: #ccc;
- }
-}
-/* Main BG color and normal text color */
-.CodeMirror {
- --bg: #293134;
- --highlight: #bcbcbc;
- color: #91A6AA;
- background: var(--bg);
- .CodeMirror-scroll {
- .CodeMirror-gutters {
- border-right: 1px solid #555;
- background: var(--bg);
- .CodeMirror-gutter {
- background-color: var(--bg);
- &.CodeMirror-foldgutter {
- cursor: pointer;
- border-left: 1px solid #555;
- transition: background 0.1s;
- &:hover {
- background: #555;
- }
- }
- }
- }
- .CodeMirror-lines {
- /* Line numbers*/
- .CodeMirror-linenumber.CodeMirror-gutter-elt {
- background-color: var(--bg);
- color: #81969A;
- }
- /* Blinking cursor */
- .CodeMirror-cursor {
- border-left: 1px solid #E0E2E4;
- }
- .pageLine {
- color: #000000;
- background: #000000;
- border-bottom: 1px solid #FFFFFF;
- }
- .CodeMirror-code .CodeMirror-line {
- &.columnSplit {
- font-style: italic;
- color: inherit;
- background-color: #1F5763;
- border-bottom: #229999 solid 1px;
- }
- /*syntax*/
- .cm-header {
- font-weight: bold;
- color: #C51B1B;
- -webkit-text-stroke-width: 0.1px;
- -webkit-text-stroke-color: #000000;
- }
- .cm-strong {
- color: #309DD2;
- }
- .cm-em {
- /*italics*/
- }
- .cm-link {
- color: #DD6300;
- }
- .cm-string {
- color: #AA8261;
- }
- /* @import */
- .cm-def {
- color: #2986CC;
- }
- /* Bullets and such */
- .cm-variable-2 {
- color: #3CBF30;
- }
- .block:not(.cm-comment) {
- color: #E3E3E3;
- }
- .inline-block {
- color: #E3E3E3;
- }
- .cm-tag {
- color: #E3FF00;
- }
- .cm-attribute {
- color: #E3FF00;
- }
- .cm-atom {
- color: #c1939a;
- }
- .cm-number {
- color: #2986CC;
- }
- .cm-property:not(.cm-error) ~ .cm-variable {
- color:#9e1f9e;
- }
- .cm-qualifier {
- color: #EE1919;
- }
- .cm-comment {
- color: #BBC700;
- }
- .cm-keyword {
- color: white;
- }
- .cm-error {
- color: #C50202;
- }
- .CodeMirror-foldmarker {
- color: #F0FF00;
- }
- .cm-builtin {
- color: #FFFFFF;
- }
- .dt-highlight {
- background: #ffffff14;
- }
- .dl-colon-highlight {
- background: #ccc;
- }
- .dl-highlight.dd-highlight {
- color: #b5858d;
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/themes/codeMirror/darkbrewery.js b/themes/codeMirror/darkbrewery.js
new file mode 100644
index 000000000..4dca1e466
--- /dev/null
+++ b/themes/codeMirror/darkbrewery.js
@@ -0,0 +1,114 @@
+import { EditorView } from '@codemirror/view';
+
+
+export default EditorView.theme({
+ '&' : {
+ backgroundColor : '#293134',
+ color : '#91a6aa',
+ },
+ '.cm-content' : {
+ padding : '4px 0',
+ fontFamily : 'monospace',
+ fontSize : '13px',
+ lineHeight : '1',
+ },
+ '.cm-line' : {
+ padding : '0 4px',
+ },
+ '.cm-gutters' : {
+ borderRight : '1px solid #555',
+ backgroundColor : '#293134',
+ whiteSpace : 'nowrap',
+ },
+ '.cm-foldGutter' : {
+ borderLeft : '1px solid #555',
+ backgroundColor : '#293134',
+ },
+ '.cm-foldGutter:hover' : {
+ backgroundColor : '#555',
+ },
+ '.cm-gutterElement' : {
+ color : '#81969a',
+ },
+ '.cm-linenumber' : {
+ padding : '0 3px 0 5px',
+ minWidth : '20px',
+ textAlign : 'right',
+ color : '#999',
+ whiteSpace : 'nowrap',
+ },
+ '.cm-cursor' : {
+ borderLeft : '1px solid #E0E2E4',
+ },
+ '.cm-fat-cursor' : {
+ width : 'auto',
+ backgroundColor : '#7e7',
+ caretColor : 'transparent',
+ },
+ '.cm-activeLine' : {
+ backgroundColor : '#868c9323',
+ },
+ '.cm-gutterElement.cm-activeLineGutter' : {
+ backgroundColor : '#868c9323',
+ },
+ '.cm-activeLine' : {
+ backgroundColor : '#868c9323',
+ },
+ '.cm-selected' : {
+ backgroundColor : '#d7d4f0',
+ },
+ '.cm-pageLine' : {
+ backgroundColor : '#7ca97c',
+ color : '#000',
+ fontWeight : 'bold',
+ letterSpacing : '.5px',
+ borderTop : '1px solid #ff0',
+ },
+ '.cm-columnSplit' : {
+ backgroundColor : '#7ca97c',
+ color : 'black',
+ fontWeight : 'bold',
+ letterSpacing : '1px',
+ borderBottom : '1px solid #ff0',
+ },
+ '.cm-line.cm-block, .cm-line .cm-inline-block' : {
+ color : '#E3E3E3',
+ },
+ '.cm-definitionList .cm-definitionTerm' : {
+ color : '#E3E3E3',
+ },
+ '.cm-definitionList .cm-definitionColon' : {
+ backgroundColor : '#0000',
+ color : '#e3FF00',
+ },
+ '.cm-definitionList .cm-definitionDesc' : {
+ color : '#b5858d',
+ },
+
+ // Semantic classes
+ '.cm-header' : { color: '#C51B1B', fontWeight: 'bold' },
+ '.cm-strong' : { color: '#309dd2', fontWeight: 'bold' },
+ '.cm-em' : { fontStyle: 'italic' },
+ '.cm-keyword' : { color: '#fff' },
+ '.cm-atom, cm-value, cm-color' : { color: '#c1939a' },
+ '.cm-number' : { color: '#2986cc' },
+ '.cm-def' : { color: '#2986cc' },
+ '.cm-list' : { color: '#3cbf30' },
+ '.cm-variable, .cm-type' : { color: '#085' },
+ '.cm-comment' : { color: '#bbc700' },
+ '.cm-link' : { color: '#DD6300', textDecoration: 'underline' },
+ '.cm-string' : { color: '#AA8261', textDecoration: 'none' },
+ '.cm-string-2' : { color: '#f50', textDecoration: 'none' },
+ '.cm-meta, .cm-qualifier, .cm-class' : { color: '#19ee2b' },
+ '.cm-builtin' : { color: '#fff' },
+ '.cm-bracket' : { color: '#997' },
+ '.cm-tag, .cm-attribute' : { color: '#e3ff00' },
+ '.cm-hr' : { color: '#999' },
+ '.cm-negative' : { color: '#d44' },
+ '.cm-positive' : { color: '#292' },
+ '.cm-error, .cm-invalidchar' : { color: '#c50202' },
+ '.cm-matchingbracket' : { color: '#0b0' },
+ '.cm-nonmatchingbracket' : { color: '#a22' },
+ '.cm-matchingtag' : { backgroundColor: 'rgba(255, 150, 0, 0.3)' },
+ '.cm-quote' : { color: '#090' },
+}, { dark: true });
\ No newline at end of file
diff --git a/themes/codeMirror/customThemes/darkvision.css b/themes/codeMirror/darkvision.css
similarity index 89%
rename from themes/codeMirror/customThemes/darkvision.css
rename to themes/codeMirror/darkvision.css
index 4c74d105e..c88455c91 100644
--- a/themes/codeMirror/customThemes/darkvision.css
+++ b/themes/codeMirror/darkvision.css
@@ -1,3 +1,8 @@
+/*This document is old, from back when Codemirror was version 5,
+if someone wants to update it, feel free, it needs to be like default.js or darkbrewery.js
+Then imported in snippetbar.jsx and codeEditor.jsx.
+*/
+
.CodeMirror {
background: #0C0C0C;
color: #B9BDB6;
@@ -18,13 +23,13 @@
}
/* Line number stuff */
- .CodeMirror-gutter-elt {
+ .cm-gutter-elt {
color: #81969A;
}
.CodeMirror-linenumber {
background-color: #0C0C0C;
}
- .CodeMirror-gutter {
+ .cm-gutter {
background-color: #0C0C0C;
}
diff --git a/themes/codeMirror/default.js b/themes/codeMirror/default.js
new file mode 100644
index 000000000..0625ded76
--- /dev/null
+++ b/themes/codeMirror/default.js
@@ -0,0 +1,81 @@
+import { EditorView } from '@codemirror/view';
+
+//This theme is made of the base css for the codemirror 5 editor
+
+export default EditorView.theme({
+ '&' : {
+ backgroundColor : 'white',
+ color : 'black',
+ },
+ '.cm-content' : {
+ padding : '4px 0',
+ fontFamily : 'monospace',
+ fontSize : '13px',
+ lineHeight : '1',
+ },
+ '.cm-line' : {
+ padding : '0 4px',
+ },
+ '.cm-gutters' : {
+ borderRight : '1px solid #ddd',
+ backgroundColor : '#f7f7f7',
+ whiteSpace : 'nowrap',
+ },
+ '.cm-linenumber' : {
+ padding : '0 3px 0 5px',
+ minWidth : '20px',
+ textAlign : 'right',
+ color : '#999',
+ whiteSpace : 'nowrap',
+ },
+ '.cm-cursor' : {
+ borderLeft : '1px solid black',
+ },
+ '.cm-fat-cursor' : {
+ width : 'auto',
+ backgroundColor : '#7e7',
+ caretColor : 'transparent',
+ },
+ '.cm-activeLine' : {
+ backgroundColor : '#becee374',
+ },
+ '.cm-gutterElement.cm-activeLineGutter' : {
+ backgroundColor : '#becee374',
+ },
+ '.cm-selected' : {
+ backgroundColor : '#d7d4f0',
+ },
+ '.cm-foldmarker' : {
+ color : 'blue',
+ fontFamily : 'arial',
+ lineHeight : '0.3',
+ cursor : 'pointer',
+ },
+
+ '.cm-header' : { color: 'blue', fontWeight: 'bold' },
+ '.cm-strong' : { fontWeight: 'bold' },
+ '.cm-em' : { fontStyle: 'italic' },
+ '.cm-keyword' : { color: '#708' },
+ '.cm-atom, cm-value, cm-color' : { color: '#219' },
+ '.cm-number' : { color: '#164' },
+ '.cm-def' : { color: '#00f' },
+ '.cm-list' : { color: '#05a' },
+ '.cm-variable, .cm-type' : { color: '#085' },
+ '.cm-comment' : { color: '#a50' },
+ '.cm-link' : { color: '#00c', textDecoration: 'underline' },
+ '.cm-string' : { color: '#a11', textDecoration: 'none' },
+ '.cm-string-2' : { color: '#f50', textDecoration: 'none' },
+ '.cm-meta, .cm-qualifier, .cm-class' : { color: '#555' },
+ '.cm-builtin' : { color: '#30a' },
+ '.cm-bracket' : { color: '#997' },
+ '.cm-tag' : { color: '#170' },
+ '.cm-attribute' : { color: '#00c' },
+ '.cm-hr' : { color: '#999' },
+ '.cm-negative' : { color: '#d44' },
+ '.cm-positive' : { color: '#292' },
+ '.cm-error, .cm-invalidchar' : { color: '#f00' },
+ '.cm-matchingbracket' : { color: '#0b0' },
+ '.cm-nonmatchingbracket' : { color: '#a22' },
+ '.cm-matchingtag' : { backgroundColor: '#ff96004d' },
+ '.cm-quote' : { color: '#090' },
+}, { dark: false });
\ No newline at end of file
diff --git a/vitePlugins/generateAssetsPlugin.js b/vitePlugins/generateAssetsPlugin.js
index caea2c1e8..749cc5636 100644
--- a/vitePlugins/generateAssetsPlugin.js
+++ b/vitePlugins/generateAssetsPlugin.js
@@ -61,19 +61,6 @@ export function generateAssetsPlugin(isDev = false) {
await fs.copy('./themes/fonts', `${buildDir}/fonts`);
await fs.copy('./themes/assets', `${buildDir}/assets`);
await fs.copy('./client/icons', `${buildDir}/icons`);
-
- // Compile CodeMirror editor themes
- const editorThemesBuildDir = `${buildDir}/homebrew/cm-themes`;
- await fs.copy('./node_modules/codemirror/theme', editorThemesBuildDir);
- await fs.copy('./themes/codeMirror/customThemes', editorThemesBuildDir);
-
- const editorThemeFiles = fs.readdirSync(editorThemesBuildDir);
- await fs.outputFile(`${buildDir}/homebrew/codeMirror/editorThemes.json`,
- JSON.stringify(['default', ...editorThemeFiles.map((f)=>f.slice(0, -4))], null, 2),
- );
-
- // Copy remaining CodeMirror assets
- await fs.copy('./themes/codeMirror', `${buildDir}/homebrew/codeMirror`);
},
};
}