mirror of
https://github.com/zadam/trilium.git
synced 2025-12-04 14:34:24 +01:00
Mathlive
This commit is contained in:
parent
fc8042aa25
commit
c5d282d203
@ -71,6 +71,7 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@ckeditor/ckeditor5-icons": "47.2.0"
|
||||
"@ckeditor/ckeditor5-icons": "47.2.0",
|
||||
"mathlive": "0.108.2"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<TextareaView> {
|
||||
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,
|
||||
|
||||
105
packages/ckeditor5-math/src/ui/mathliveinputview.ts
Normal file
105
packages/ckeditor5-math/src/ui/mathliveinputview.ts
Normal file
@ -0,0 +1,105 @@
|
||||
import { View, type Locale } from 'ckeditor5';
|
||||
|
||||
/**
|
||||
* A view that wraps the MathLive `<math-field>` 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 `<math-field>` 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();
|
||||
}
|
||||
}
|
||||
61
packages/ckeditor5-math/src/ui/rawlatexinputview.ts
Normal file
61
packages/ckeditor5-math/src/ui/rawlatexinputview.ts
Normal file
@ -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<TextareaView> {
|
||||
/**
|
||||
* 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
|
||||
}
|
||||
}
|
||||
@ -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', () => {
|
||||
|
||||
4
packages/ckeditor5-math/theme/icons/cancel.svg
Normal file
4
packages/ckeditor5-math/theme/icons/cancel.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
|
||||
<path d="M4 4L12 12" />
|
||||
<path d="M12 4L4 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 192 B |
3
packages/ckeditor5-math/theme/icons/check.svg
Normal file
3
packages/ckeditor5-math/theme/icons/check.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M3.5 8.5L6.5 11.5 12.5 5.5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 207 B |
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
196
pnpm-lock.yaml
generated
196
pnpm-lock.yaml
generated
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user