diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 5a18b797d..583a448cc 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -71,6 +71,7 @@ ] }, "dependencies": { - "@ckeditor/ckeditor5-icons": "47.2.0" + "@ckeditor/ckeditor5-icons": "47.2.0", + "mathlive": "0.108.2" } } diff --git a/packages/ckeditor5-math/src/index.ts b/packages/ckeditor5-math/src/index.ts index 6d6982ae2..b3475309f 100644 --- a/packages/ckeditor5-math/src/index.ts +++ b/packages/ckeditor5-math/src/index.ts @@ -1,6 +1,8 @@ import ckeditor from './../theme/icons/math.svg?raw'; import './augmentation.js'; import "../theme/mathform.css"; +import 'mathlive/fonts.css'; +import 'mathlive/static.css'; export { default as Math } from './math.js'; export { default as MathUI } from './mathui.js'; diff --git a/packages/ckeditor5-math/src/mathui.ts b/packages/ckeditor5-math/src/mathui.ts index 4c4a2794c..2ac4c79cd 100644 --- a/packages/ckeditor5-math/src/mathui.ts +++ b/packages/ckeditor5-math/src/mathui.ts @@ -4,6 +4,7 @@ import mathIcon from '../theme/icons/math.svg?raw'; import { Plugin, ClickObserver, ButtonView, ContextualBalloon, clickOutsideHandler, CKEditorError, uid } from 'ckeditor5'; import { getBalloonPositionData } from './utils.js'; import MathCommand from './mathcommand.js'; +import 'mathlive'; const mathKeystroke = 'Ctrl+M'; @@ -56,7 +57,7 @@ export default class MathUI extends Plugin { this._balloon.showStack( 'main' ); requestAnimationFrame(() => { - this.formView?.mathInputView.fieldView.element?.focus(); + this.formView?.mathInputView.focus(); }); } @@ -89,7 +90,7 @@ export default class MathUI extends Plugin { mathConfig.katexRenderOptions! ); - formView.mathInputView.bind( 'value' ).to( mathCommand, 'value' ); + formView.mathInputView.bind( 'value' ).to( mathCommand, value => value ?? '' ); formView.displayButtonView.bind( 'isOn' ).to( mathCommand, 'display' ); // Form elements should be read-only when corresponding commands are disabled. @@ -122,18 +123,6 @@ export default class MathUI extends Plugin { } }); - // Allow the textarea to be resizable - formView.mathInputView.fieldView.once('render', () => { - const textarea = formView.mathInputView.fieldView.element; - if (!textarea) return; - Object.assign(textarea.style, { - resize: 'both', - height: '100px', - width: '400px', - minWidth: '100%', - }); - }); - return formView; } @@ -162,7 +151,7 @@ export default class MathUI extends Plugin { } ); if ( this._balloon.visibleView === this.formView ) { - this.formView.mathInputView.fieldView.element?.select(); + this.formView.mathInputView.focus(); } // Show preview element diff --git a/packages/ckeditor5-math/src/ui/mainformview.ts b/packages/ckeditor5-math/src/ui/mainformview.ts index 2d1c59793..ef818e203 100644 --- a/packages/ckeditor5-math/src/ui/mainformview.ts +++ b/packages/ckeditor5-math/src/ui/mainformview.ts @@ -1,23 +1,18 @@ -import { ButtonView, createLabeledTextarea, FocusCycler, LabelView, LabeledFieldView, submitHandler, SwitchButtonView, View, ViewCollection, type TextareaView, type FocusableView, Locale, FocusTracker, KeystrokeHandler } from 'ckeditor5'; -import IconCheck from "@ckeditor/ckeditor5-icons/theme/icons/check.svg?raw"; -import IconCancel from "@ckeditor/ckeditor5-icons/theme/icons/cancel.svg?raw"; +import { ButtonView, FocusCycler, LabelView, submitHandler, SwitchButtonView, View, ViewCollection, type FocusableView, Locale, FocusTracker, KeystrokeHandler } from 'ckeditor5'; +import IconCheck from '../../theme/icons/check.svg?raw'; +import IconCancel from '../../theme/icons/cancel.svg?raw'; import { extractDelimiters, hasDelimiters } from '../utils.js'; import MathView from './mathview.js'; +import MathLiveInputView from './mathliveinputview.js'; +import RawLatexInputView from './rawlatexinputview.js'; import '../../theme/mathform.css'; import type { KatexOptions } from '../typings-external.js'; -class MathInputView extends LabeledFieldView { - public value: null | string = null; - public isReadOnly = false; - - constructor( locale: Locale ) { - super( locale, createLabeledTextarea ); - } -} - export default class MainFormView extends View { public saveButtonView: ButtonView; - public mathInputView: MathInputView; + public mathInputView: MathLiveInputView; + public rawLatexInputView: RawLatexInputView; + public rawLatexLabel: LabelView; public displayButtonView: SwitchButtonView; public cancelButtonView: ButtonView; public previewEnabled: boolean; @@ -54,6 +49,13 @@ export default class MainFormView extends View { // Equation input this.mathInputView = this._createMathInput(); + // Raw LaTeX input + this.rawLatexInputView = this._createRawLatexInput(); + + // Raw LaTeX label + this.rawLatexLabel = new LabelView( locale ); + this.rawLatexLabel.text = t( 'LaTeX' ); + // Display button this.displayButtonView = this._createDisplayButton(); @@ -74,6 +76,8 @@ export default class MainFormView extends View { children = [ this.mathInputView, + this.rawLatexLabel, + this.rawLatexInputView, this.displayButtonView, this.previewLabel, this.mathView @@ -81,6 +85,8 @@ export default class MainFormView extends View { } else { children = [ this.mathInputView, + this.rawLatexLabel, + this.rawLatexInputView, this.displayButtonView ]; } @@ -101,14 +107,28 @@ export default class MainFormView extends View { { tag: 'div', attributes: { - class: [ - 'ck-math-view' - ] + class: [ 'ck-math-scroll' ] }, - children + children: [ + { + tag: 'div', + attributes: { + class: [ 'ck-math-view' ] + }, + children + } + ] }, - this.saveButtonView, - this.cancelButtonView + { + tag: 'div', + attributes: { + class: [ 'ck-math-button-row' ] + }, + children: [ + this.saveButtonView, + this.cancelButtonView + ] + } ] } ); } @@ -124,6 +144,7 @@ export default class MainFormView extends View { // Register form elements to focusable elements const childViews = [ this.mathInputView, + this.rawLatexInputView, this.displayButtonView, this.saveButtonView, this.cancelButtonView @@ -147,13 +168,12 @@ export default class MainFormView extends View { } public get equation(): string { - return this.mathInputView.fieldView.element?.value ?? ''; + return this.mathInputView.value ?? ''; } public set equation( equation: string ) { - if ( this.mathInputView.fieldView.element ) { - this.mathInputView.fieldView.element.value = equation; - } + this.mathInputView.value = equation; + this.rawLatexInputView.value = equation; if ( this.previewEnabled && this.mathView ) { this.mathView.value = equation; } @@ -172,46 +192,79 @@ export default class MainFormView extends View { } } ); + /** + * Creates the MathLive visual equation editor. + * + * Handles bidirectional synchronization with the raw LaTeX input and preview. + */ private _createMathInput() { - const t = this.locale.t; - - // Create equation input - const mathInput = new MathInputView( this.locale ); - const fieldView = mathInput.fieldView; - mathInput.infoText = t( 'Insert equation in TeX format.' ); + const mathInput = new MathLiveInputView( this.locale ); const onInput = () => { - if ( fieldView.element != null ) { - let equationInput = fieldView.element.value.trim(); + const rawValue = mathInput.value ?? ''; + let equationInput = rawValue.trim(); - // If input has delimiters - if ( hasDelimiters( equationInput ) ) { - // Get equation without delimiters - const params = extractDelimiters( equationInput ); + // If input has delimiters + if ( hasDelimiters( equationInput ) ) { + // Get equation without delimiters + const params = extractDelimiters( equationInput ); - // Remove delimiters from input field - fieldView.element.value = params.equation; + // Remove delimiters from input field + mathInput.value = params.equation; - equationInput = params.equation; + equationInput = params.equation; - // update display button and preview - this.displayButtonView.isOn = params.display; - } - if ( this.previewEnabled && this.mathView ) { - // Update preview view - this.mathView.value = equationInput; - } - - this.saveButtonView.isEnabled = !!equationInput; + // update display button and preview + this.displayButtonView.isOn = params.display; } + + // Sync to raw LaTeX input + this.rawLatexInputView.value = equationInput; + + if ( this.previewEnabled && this.mathView ) { + // Update preview view + this.mathView.value = equationInput; + } + + this.saveButtonView.isEnabled = !!equationInput; }; - fieldView.on( 'render', onInput ); - fieldView.on( 'input', onInput ); + mathInput.on( 'change:value', onInput ); return mathInput; } + /** + * Creates the raw LaTeX code textarea editor. + * + * Provides direct LaTeX editing and synchronizes changes with the MathLive visual editor. + */ + private _createRawLatexInput() { + const t = this.locale.t; + const rawLatexInput = new RawLatexInputView( this.locale ); + rawLatexInput.label = t( 'LaTeX' ); + + // Sync raw LaTeX changes to MathLive visual editor + rawLatexInput.on( 'change:value', () => { + const rawValue = rawLatexInput.value ?? ''; + const equationInput = rawValue.trim(); + + // Update MathLive field + if ( this.mathInputView.value !== equationInput ) { + this.mathInputView.value = equationInput; + } + + // Update preview if enabled + if ( this.previewEnabled && this.mathView ) { + this.mathView.value = equationInput; + } + + this.saveButtonView.isEnabled = !!equationInput; + } ); + + return rawLatexInput; + } + private _createButton( label: string, icon: string, diff --git a/packages/ckeditor5-math/src/ui/mathliveinputview.ts b/packages/ckeditor5-math/src/ui/mathliveinputview.ts new file mode 100644 index 000000000..a09ec641d --- /dev/null +++ b/packages/ckeditor5-math/src/ui/mathliveinputview.ts @@ -0,0 +1,105 @@ +import { View, type Locale } from 'ckeditor5'; + +/** + * A view that wraps the MathLive `` web component for interactive LaTeX equation editing. + * + * MathLive provides a rich math input experience with live rendering, virtual keyboard support, + * and various accessibility features. + * + * @see https://cortexjs.io/mathlive/ + */ +export default class MathLiveInputView extends View { + /** + * The current LaTeX value of the math field. + * + * @observable + */ + public declare value: string; + + /** + * Whether the input is in read-only mode. + * + * @observable + */ + public declare isReadOnly: boolean; + + /** + * Reference to the `` DOM element. + */ + public mathfield: HTMLElement | null = null; + + constructor( locale: Locale ) { + super( locale ); + + this.set( 'value', '' ); + this.set( 'isReadOnly', false ); + + this.setTemplate( { + tag: 'div', + attributes: { + class: [ 'ck', 'ck-mathlive-input' ] + } + } ); + }git config --local credential.helper "" + + /** + * @inheritDoc + */ + public override render(): void { + super.render(); + + // Create the MathLive math-field custom element + const mathfield = document.createElement( 'math-field' ) as any; + this.mathfield = mathfield; + + // Configure the virtual keyboard to be manually controlled (shown by user interaction) + mathfield.setAttribute( 'virtual-keyboard-mode', 'manual' ); + + // Set initial value + if ( this.value ) { + ( mathfield as any ).value = this.value; + } + + // Bind readonly state + if ( this.isReadOnly ) { + ( mathfield as any ).readOnly = true; + } + + // Sync math-field changes to observable value + mathfield.addEventListener( 'input', () => { + this.value = ( mathfield as any ).value; + } ); + + // Sync observable value changes back to math-field + this.on( 'change:value', () => { + if ( ( mathfield as any ).value !== this.value ) { + ( mathfield as any ).value = this.value; + } + } ); + + // Sync readonly state to math-field + this.on( 'change:isReadOnly', () => { + ( mathfield as any ).readOnly = this.isReadOnly; + } ); + + this.element?.appendChild( mathfield ); + } + + /** + * Focuses the math-field element. + */ + public focus(): void { + this.mathfield?.focus(); + } + + /** + * @inheritDoc + */ + public override destroy(): void { + if ( this.mathfield ) { + this.mathfield.remove(); + this.mathfield = null; + } + super.destroy(); + } +} diff --git a/packages/ckeditor5-math/src/ui/rawlatexinputview.ts b/packages/ckeditor5-math/src/ui/rawlatexinputview.ts new file mode 100644 index 000000000..871f23e72 --- /dev/null +++ b/packages/ckeditor5-math/src/ui/rawlatexinputview.ts @@ -0,0 +1,61 @@ +import { LabeledFieldView, createLabeledTextarea, type Locale, type TextareaView } from 'ckeditor5'; + +/** + * A labeled textarea view for direct LaTeX code editing. + * + * This provides a plain text input for users who prefer to write LaTeX syntax directly + * or need to paste/edit raw LaTeX code. + */ +export default class RawLatexInputView extends LabeledFieldView { + /** + * The current LaTeX value. + * + * @observable + */ + public declare value: string; + + /** + * Whether the input is in read-only mode. + * + * @observable + */ + public declare isReadOnly: boolean; + + constructor( locale: Locale ) { + super( locale, createLabeledTextarea ); + + this.set( 'value', '' ); + this.set( 'isReadOnly', false ); + + const fieldView = this.fieldView; + + // Sync textarea input to observable value + fieldView.on( 'input', () => { + if ( fieldView.element ) { + this.value = fieldView.element.value; + } + } ); + + // Sync observable value changes back to textarea + this.on( 'change:value', () => { + if ( fieldView.element && fieldView.element.value !== this.value ) { + fieldView.element.value = this.value; + } + } ); + + // Sync readonly state (manual binding to avoid CKEditor observable rebind error) + this.on( 'change:isReadOnly', () => { + if ( fieldView.element ) { + fieldView.element.readOnly = this.isReadOnly; + } + } ); + } + + /** + * @inheritDoc + */ + public override render(): void { + super.render(); + // All styling is handled via CSS in mathform.css + } +} diff --git a/packages/ckeditor5-math/tests/mathui.ts b/packages/ckeditor5-math/tests/mathui.ts index 5a392c0db..a55fda523 100644 --- a/packages/ckeditor5-math/tests/mathui.ts +++ b/packages/ckeditor5-math/tests/mathui.ts @@ -410,7 +410,7 @@ describe( 'MathUI', () => { it( 'should bind mainFormView.mathInputView#value to math command value', () => { const command = editor.commands.get( 'math' ); - expect( formView!.mathInputView.value ).to.null; + expect( formView!.mathInputView.value ).to.be.null; command!.value = 'x^2'; expect( formView!.mathInputView.value ).to.equal( 'x^2' ); @@ -419,10 +419,10 @@ describe( 'MathUI', () => { it( 'should execute math command on mainFormView#submit event', () => { const executeSpy = vi.spyOn( editor, 'execute' ); - formView!.mathInputView.fieldView.element!.value = 'x^2'; + formView!.mathInputView.value = 'x^2'; formView!.fire( 'submit' ); - expect(executeSpy.mock.lastCall?.slice(0, 2)).toMatchObject(['math', 'x^2']); + expect( executeSpy.mock.lastCall?.slice( 0, 2 ) ).toMatchObject( [ 'math', 'x^2' ] ); } ); it( 'should hide the balloon on mainFormView#cancel if math command does not have a value', () => { diff --git a/packages/ckeditor5-math/theme/icons/cancel.svg b/packages/ckeditor5-math/theme/icons/cancel.svg new file mode 100644 index 000000000..6f755ce79 --- /dev/null +++ b/packages/ckeditor5-math/theme/icons/cancel.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/ckeditor5-math/theme/icons/check.svg b/packages/ckeditor5-math/theme/icons/check.svg new file mode 100644 index 000000000..d62f08d2e --- /dev/null +++ b/packages/ckeditor5-math/theme/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ckeditor5-math/theme/mathform.css b/packages/ckeditor5-math/theme/mathform.css index 3b7b4047f..45446d8f7 100644 --- a/packages/ckeditor5-math/theme/mathform.css +++ b/packages/ckeditor5-math/theme/mathform.css @@ -1,35 +1,227 @@ +/** + * Math equation editor dialog styles + * + * This stylesheet provides the layout and styling for the math equation editor, + * which includes a MathLive visual editor, a raw LaTeX textarea, and control buttons. + * The dialog is resizable and uses a flexible layout to accommodate different content sizes. + */ + +/* ============================================================================ + Form Layout + ========================================================================= */ + .ck.ck-math-form { display: flex; - align-items: flex-start; - flex-direction: row; - flex-wrap: nowrap; + flex-direction: column; padding: var(--ck-spacing-standard); + width: 100%; + height: 100%; + box-sizing: border-box; @media screen and (max-width: 600px) { flex-wrap: wrap; - - & .ck-math-view { - flex-basis: 100%; - - & .ck-labeled-view { - flex-basis: 100%; - } - - & .ck-label { - flex-basis: 100%; - } - } - - & .ck-button { - flex-basis: 50%; - } } } -.ck-math-tex.ck-placeholder::before { + +/* ============================================================================ + Button Row + ========================================================================= */ + +/* Button row */ +.ck-math-button-row { + display: flex; + gap: var(--ck-spacing-standard); + flex-shrink: 0; + margin-top: var(--ck-spacing-standard); + width: fit-content; +} + +/* Scrollable content area */ +.ck-math-scroll { + display: flex; + flex-direction: column; + flex: 1 1 auto; + min-height: 0; + min-width: 0; + overflow: hidden; +} + +/* ============================================================================ + Math Panel Layout + ========================================================================= */ + +/* Math panel layout */ +.ck-math-view { + display: flex; + flex-direction: column; + gap: var(--ck-spacing-standard); + flex: 1 1 auto; + min-height: fit-content; +} + +/* ============================================================================ + MathLive Integration + ========================================================================= */ + +/* MathLive input container */ +.ck.ck-mathlive-input { + display: inline-block; + flex: 0 0 auto; + width: auto; + min-width: 100%; + min-height: 140px; + max-height: 70vh; + resize: both; + overflow: auto; + padding-bottom: var(--ck-spacing-small); + box-sizing: border-box; +} + +/* MathLive field styling */ +.ck.ck-mathlive-input math-field { + display: block !important; + width: 100%; + height: 100%; + min-height: 140px; + box-sizing: border-box; + resize: none !important; + overflow: hidden !important; +} + +/* Style MathLive shadow DOM parts so the whole area is interactive */ +.ck.ck-math-form math-field::part(container), +.ck.ck-math-form math-field::part(content), +.ck.ck-math-form math-field::part(field) { + display: flex; + flex-direction: column; + flex: 1 1 auto; + min-height: 100%; + height: 100%; + align-items: flex-start; + justify-content: flex-start; +} + + +/* Position MathLive virtual keyboard toggle button */ +.ck.ck-math-form math-field::part(virtual-keyboard-toggle) { + position: absolute; + right: 8px; + top: 8px; +} + +/* Position MathLive menu toggle button and ensure it's always visible */ +.ck.ck-math-form math-field::part(menu-toggle) { + position: absolute; + right: 8px; + top: 48px; + /* Force visibility even when field is empty */ + display: flex !important; + visibility: visible !important; +} + + +/* ============================================================================ + Raw LaTeX Integration + ========================================================================= */ + +/* Mirror MathLive container behavior for the labeled textarea wrapper */ + + +.ck-math-view .ck-labeled-field-view { + display: flex; + flex-direction: column; + flex: 0 0 auto; + width: 100%; + min-width: 100%; + min-height: 140px; + max-height: 70vh; + resize: vertical; + overflow: auto; + padding-bottom: 0; + box-sizing: border-box; + background: transparent; + border: none; + border-radius: 0; + outline: none; +} + +/* Let the internal wrapper stretch so the textarea can fill the space */ +.ck-math-view .ck-labeled-field-view .ck-labeled-field-view__input-wrapper { + display: flex; + flex-direction: column; + flex: 1 1 auto; + width: 100%; + height: auto; + min-height: 100px; + margin: 0; + padding: 0; + background: transparent; + border: none; + box-shadow: none; +} + +/* Ensure the raw textarea fills its wrapper like MathLive's math-field */ +.ck-math-view .ck-labeled-field-view textarea { + display: block; + width: 100% !important; + flex: 1 1 auto; + height: 100%; + min-height: 140px; + box-sizing: border-box; + resize: none !important; + overflow: hidden !important; +} + + +/* ============================================================================ + Shared Input Styling (MathLive & Raw LaTeX) + ========================================================================= */ + +/* Base styling for both MathLive field and raw LaTeX textarea */ +.ck.ck-math-form math-field, +.ck.ck-math-form textarea { + padding: var(--ck-spacing-small); + border: none !important; + border-radius: var(--ck-border-radius, 6px); + font-size: var(--ck-font-size-base); + box-sizing: border-box; + background: var(--input-background-color); + color: var(--input-text-color); + outline: 3px solid transparent; + outline-offset: 6px; +} + +/* Hover state */ +.ck.ck-math-form math-field:hover, +.ck.ck-math-form textarea:hover { + background: var(--input-hover-background); + color: var(--input-hover-color); +} + +/* Make the raw LaTeX textarea flat (no rounded corners or hover animation) */ +.ck-math-view .ck-labeled-field-view textarea { + border-radius: 0 !important; + outline: none !important; + box-shadow: none !important; + transition: none !important; +} + +.ck-math-view .ck-labeled-field-view textarea:hover, +.ck-math-view .ck-labeled-field-view textarea:focus { + background: var(--input-background-color); + color: var(--input-text-color); + outline: none !important; + box-shadow: none !important; + transition: none !important; +} + +/* Hide the internal label (we use a separate label element for better layout control) */ +.ck-math-view .ck-labeled-field-view .ck-label { display: none !important; } -.ck.ck-toolbar-container { - z-index: calc(var(--ck-z-panel) + 2); -} + + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad305250f..c23634f4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -641,7 +641,7 @@ importers: version: 3.0.0 debug: specifier: 4.4.3 - version: 4.4.3(supports-color@6.0.0) + version: 4.4.3(supports-color@8.1.1) ejs: specifier: 3.1.10 version: 3.1.10 @@ -1058,6 +1058,9 @@ importers: '@ckeditor/ckeditor5-icons': specifier: 47.2.0 version: 47.2.0 + mathlive: + specifier: 0.108.2 + version: 0.108.2 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': specifier: 43.1.0 @@ -2101,6 +2104,10 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@cortex-js/compute-engine@0.30.2': + resolution: {integrity: sha512-Zx+iisk9WWdbxjm8EYsneIBszvjfUs7BHNwf1jBtSINIgfWGpHrTTq9vW0J59iGCFt6bOFxbmWyxNMRSmksHMA==} + engines: {node: '>=21.7.3', npm: '>=10.5.0'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -6823,6 +6830,10 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + complex-esm@2.1.1-esm1: + resolution: {integrity: sha512-IShBEWHILB9s7MnfyevqNGxV0A1cfcSnewL/4uPFiSxkcQL4Mm3FxJ0pXMtCXuWLjYz3lRRyk6OfkeDZcjD6nw==} + engines: {node: '>=16.14.2', npm: '>=8.5.0'} + component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -10138,6 +10149,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mathlive@0.108.2: + resolution: {integrity: sha512-GIZkfprGTxrbHckOvwo92ZmOOxdD018BHDzlrEwYUU+pzR5KabhqI1s43lxe/vqXdF5RLiQKgDcuk5jxEjhkYg==} + mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} @@ -15329,7 +15343,7 @@ snapshots: '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -15446,7 +15460,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -15459,7 +15473,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15471,7 +15485,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15692,6 +15706,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.2.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15756,8 +15772,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 '@ckeditor/ckeditor5-watchdog': 47.2.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15952,8 +15966,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.2.0': dependencies: @@ -16866,6 +16878,11 @@ snapshots: '@colors/colors@1.5.0': {} + '@cortex-js/compute-engine@0.30.2': + dependencies: + complex-esm: 2.1.1-esm1 + decimal.js: 10.6.0 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -16935,7 +16952,7 @@ snapshots: '@listr2/prompt-adapter-inquirer': 2.0.22(@inquirer/prompts@6.0.1) chalk: 4.1.2 commander: 11.1.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 10.1.0 listr2: 7.0.2 log-symbols: 4.1.0 @@ -16955,7 +16972,7 @@ snapshots: '@electron/rebuild': 3.7.2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) find-up: 5.0.0 fs-extra: 10.1.0 log-symbols: 4.1.0 @@ -16984,7 +17001,7 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 '@vscode/sudo-prompt': 9.3.1 chalk: 4.1.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 filenamify: 4.3.0 find-up: 5.0.0 @@ -17120,7 +17137,7 @@ snapshots: '@electron-forge/core-utils': 7.10.2 '@electron-forge/shared-types': 7.10.2 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 10.1.0 semver: 7.7.3 username: 5.1.0 @@ -17182,7 +17199,7 @@ snapshots: '@electron/get@2.0.3': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -17196,7 +17213,7 @@ snapshots: '@electron/get@3.1.0': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -17226,7 +17243,7 @@ snapshots: '@electron/notarize@2.5.0': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: @@ -17235,7 +17252,7 @@ snapshots: '@electron/osx-sign@1.3.3': dependencies: compare-version: 0.1.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -17251,7 +17268,7 @@ snapshots: '@electron/osx-sign': 1.3.3 '@electron/universal': 2.0.2 '@electron/windows-sign': 1.2.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) extract-zip: 2.0.1 filenamify: 4.3.0 fs-extra: 11.3.2 @@ -17272,7 +17289,7 @@ snapshots: '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) detect-libc: 2.1.1 fs-extra: 10.1.0 got: 11.8.6 @@ -17291,7 +17308,7 @@ snapshots: dependencies: '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) detect-libc: 2.0.4 got: 11.8.6 graceful-fs: 4.2.11 @@ -17314,7 +17331,7 @@ snapshots: dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) dir-compare: 4.2.0 fs-extra: 11.3.2 minimatch: 9.0.5 @@ -17325,7 +17342,7 @@ snapshots: '@electron/windows-sign@1.2.1': dependencies: cross-dirname: 0.1.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 11.3.2 minimist: 1.2.8 postject: 1.0.0-alpha.6 @@ -17612,7 +17629,7 @@ snapshots: '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -17636,7 +17653,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -17996,7 +18013,7 @@ snapshots: '@antfu/install-pkg': 1.1.0 '@antfu/utils': 9.2.0 '@iconify/types': 2.0.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) globals: 15.15.0 kolorist: 1.8.0 local-pkg: 1.1.1 @@ -18414,7 +18431,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18498,7 +18515,7 @@ snapshots: '@malept/electron-installer-flatpak@0.11.4': dependencies: '@malept/flatpak-bundler': 0.4.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) electron-installer-common: 0.10.4 lodash: 4.17.21 semver: 7.7.3 @@ -18509,7 +18526,7 @@ snapshots: '@malept/flatpak-bundler@0.4.0': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 lodash: 4.17.21 tmp-promise: 3.0.3 @@ -18968,7 +18985,7 @@ snapshots: '@puppeteer/browsers@2.10.10': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 @@ -20249,7 +20266,7 @@ snapshots: '@tokenizer/inflate@0.2.7': dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fflate: 0.8.2 token-types: 6.0.0 transitivePeerDependencies: @@ -20866,7 +20883,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -20876,7 +20893,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) '@typescript-eslint/types': 8.46.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -20895,7 +20912,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.1(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 @@ -20910,7 +20927,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -20992,7 +21009,7 @@ snapshots: '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4)': dependencies: '@istanbuljs/schema': 0.1.3 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 @@ -21010,7 +21027,7 @@ snapshots: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 ast-v8-to-istanbul: 0.3.3 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -21321,7 +21338,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -21765,7 +21782,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -22442,6 +22459,8 @@ snapshots: compare-versions@6.1.1: {} + complex-esm@2.1.1-esm1: {} + component-emitter@1.3.1: {} compress-commons@6.0.2: @@ -23225,8 +23244,7 @@ snapshots: decimal.js@10.5.0: {} - decimal.js@10.6.0: - optional: true + decimal.js@10.6.0: {} decko@1.2.0: {} @@ -23524,7 +23542,7 @@ snapshots: dependencies: '@electron/asar': 3.4.1 '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 9.1.0 glob: 7.2.3 lodash: 4.17.21 @@ -23540,7 +23558,7 @@ snapshots: electron-installer-debian@3.2.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) electron-installer-common: 0.10.4 fs-extra: 9.1.0 get-folder-size: 2.0.1 @@ -23554,7 +23572,7 @@ snapshots: electron-installer-dmg@5.0.1: dependencies: '@types/appdmg': 0.5.5 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) minimist: 1.2.8 optionalDependencies: appdmg: 0.6.6 @@ -23565,7 +23583,7 @@ snapshots: electron-installer-redhat@3.4.0: dependencies: '@malept/cross-spawn-promise': 1.1.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) electron-installer-common: 0.10.4 fs-extra: 9.1.0 lodash: 4.17.21 @@ -23581,7 +23599,7 @@ snapshots: electron-localshortcut@3.2.1: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) electron-is-accelerator: 0.1.2 keyboardevent-from-electron-accelerator: 2.0.0 keyboardevents-areequal: 0.2.2 @@ -23606,7 +23624,7 @@ snapshots: electron-winstaller@5.4.0: dependencies: '@electron/asar': 3.4.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 7.0.1 lodash: 4.17.21 temp: 0.9.4 @@ -24154,7 +24172,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -24264,7 +24282,7 @@ snapshots: express-http-proxy@2.1.2: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) es6-promise: 4.2.8 raw-body: 2.5.2 transitivePeerDependencies: @@ -24275,7 +24293,7 @@ snapshots: base64url: 3.0.1 clone: 2.1.2 cookie: 0.7.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) express: 5.1.0 futoin-hkdf: 1.5.3 http-errors: 1.8.1 @@ -24349,7 +24367,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -24398,7 +24416,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -24540,7 +24558,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -24596,7 +24614,7 @@ snapshots: flora-colossus@2.0.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 10.1.0 transitivePeerDependencies: - supports-color @@ -24608,7 +24626,7 @@ snapshots: follow-redirects@1.15.9(debug@4.4.3): optionalDependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) for-each@0.3.5: dependencies: @@ -24749,7 +24767,7 @@ snapshots: galactus@1.0.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) flora-colossus: 2.0.0 fs-extra: 10.1.0 transitivePeerDependencies: @@ -24865,7 +24883,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -25342,7 +25360,7 @@ snapshots: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -25350,14 +25368,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -25410,14 +25428,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -25812,7 +25830,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -26426,7 +26444,7 @@ snapshots: log4js@6.9.1: dependencies: date-format: 4.0.14 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) flatted: 3.3.3 rfdc: 1.4.1 streamroller: 3.1.5 @@ -26642,6 +26660,10 @@ snapshots: math-intrinsics@1.1.0: {} + mathlive@0.108.2: + dependencies: + '@cortex-js/compute-engine': 0.30.2 + mathml-tag-names@2.1.3: {} mdast-util-find-and-replace@3.0.2: @@ -27019,7 +27041,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -27857,7 +27879,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -28133,7 +28155,7 @@ snapshots: portfinder@1.0.36: dependencies: async: 3.2.6 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -28978,7 +29000,7 @@ snapshots: proxy-agent@6.5.0: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -29196,7 +29218,7 @@ snapshots: read-binary-file-arch@1.0.6: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -29639,7 +29661,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -29900,7 +29922,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -30117,13 +30139,13 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color simple-websocket@9.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) queue-microtask: 1.2.3 randombytes: 2.1.0 readable-stream: 3.6.2 @@ -30217,7 +30239,7 @@ snapshots: socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.4 transitivePeerDependencies: - supports-color @@ -30226,7 +30248,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -30234,7 +30256,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.7 transitivePeerDependencies: - supports-color @@ -30295,7 +30317,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -30306,7 +30328,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -30390,7 +30412,7 @@ snapshots: streamroller@3.1.5: dependencies: date-format: 4.0.14 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -30641,7 +30663,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.0.4) css-functions-list: 3.2.3 css-tree: 3.1.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 file-entry-cache: 10.1.4 @@ -30685,7 +30707,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.9.3) css-functions-list: 3.2.3 css-tree: 3.1.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 file-entry-cache: 10.1.4 @@ -30731,7 +30753,7 @@ snapshots: sumchecker@3.0.1: dependencies: - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -30739,7 +30761,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) fast-safe-stringify: 2.1.1 form-data: 4.0.4 formidable: 3.5.4 @@ -31196,7 +31218,7 @@ snapshots: tuf-js@4.0.0: dependencies: '@tufjs/models': 4.0.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) make-fetch-happen: 15.0.3 transitivePeerDependencies: - supports-color @@ -31566,7 +31588,7 @@ snapshots: vite-node@3.2.4(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 vite: 7.2.2(@types/node@24.10.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -31591,7 +31613,7 @@ snapshots: '@volar/typescript': 2.4.13 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 1.1.1 magic-string: 0.30.17 @@ -31658,7 +31680,7 @@ snapshots: '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 chai: 5.2.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) expect-type: 1.2.1 magic-string: 0.30.18 pathe: 2.0.3 @@ -31741,7 +31763,7 @@ snapshots: dependencies: chalk: 4.1.2 commander: 9.5.0 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color