@drghaliasri/butex 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,153 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type ArabicNodeJson = {
4
+ node_type: string;
5
+ expr?: string;
6
+ name?: string;
7
+ superscript?: ChainJson | null;
8
+ subscript?: ChainJson | null;
9
+ left_delim_expr?: string;
10
+ right_delim_expr?: string;
11
+ inner_expr?: ChainJson;
12
+ optional_args?: ChainJson[];
13
+ mandatory_args?: ChainJson[];
14
+ opening?: string;
15
+ closing?: string;
16
+ lines?: ChainJson[];
17
+ };
18
+ type ChainJson = {
19
+ node_type: 'ChainClass';
20
+ chain: ArabicNodeJson[];
21
+ };
22
+ declare class State {
23
+ }
24
+ declare class BaseAstNode {
25
+ state: State;
26
+ superscript: ChainNode | null;
27
+ subscript: ChainNode | null;
28
+ nodeType: string;
29
+ constructor(state?: State | null);
30
+ latex(): string;
31
+ arabicLatex(): string;
32
+ toArabicLatex(): string;
33
+ /** Latin-style scripts: `^{...}` and `_{...}` for english_json rendering. */
34
+ latexScripts(): string;
35
+ /**
36
+ * Arabic scripts use \\prescript{sup}{sub}{content} (matches reference Python output).
37
+ * Call with rendered strings for sup/sub chains (may be empty strings).
38
+ */
39
+ arabicLatexScripts(sup: string, sub: string, content: string): string;
40
+ }
41
+ declare class ChainNode {
42
+ chain: BaseAstNode[];
43
+ constructor(chain?: BaseAstNode[]);
44
+ latex(): string;
45
+ toEnglishLatex(): string;
46
+ /** RTL: reverse order relative to Latin chain (see test/ref_tests.txt). */
47
+ arabicLatex(): string;
48
+ toArabicLatex(): string;
49
+ }
50
+
51
+ type MathObjectJson = {
52
+ node_type: 'MathObject';
53
+ math_mode: string;
54
+ lines: ChainJson[];
55
+ closing: string;
56
+ };
57
+ type DocumentJson = {
58
+ node_type: 'DocumentObject';
59
+ blocks: DocumentBlockJson[];
60
+ };
61
+ type DocumentBlockJson = {
62
+ command: string;
63
+ value?: string;
64
+ math_objects?: MathObjectJson[];
65
+ options?: Record<string, string>;
66
+ closing?: string;
67
+ items?: DocumentListItemJson[];
68
+ rows?: string[][];
69
+ columns?: string;
70
+ };
71
+ type DocumentListItemJson = {
72
+ value: string;
73
+ math_objects?: MathObjectJson[];
74
+ blocks?: DocumentBlockJson[];
75
+ };
76
+ type MathNode = {
77
+ nodeType: 'MathObject';
78
+ mathMode: string;
79
+ lines: ChainNode[];
80
+ closing: string;
81
+ };
82
+ type TextInline = {
83
+ kind: 'text';
84
+ text: string;
85
+ };
86
+ type MathInline = {
87
+ kind: 'math';
88
+ source: string;
89
+ math: MathNode | null;
90
+ };
91
+ type DocumentInline = TextInline | MathInline;
92
+ type TextBlockNode = {
93
+ kind: 'textBlock';
94
+ command: '\\section' | '\\subsection' | '\\subsubsection' | '\\paragraph';
95
+ value: string;
96
+ inlines: DocumentInline[];
97
+ };
98
+ type ListItemNode = {
99
+ value: string;
100
+ inlines: DocumentInline[];
101
+ blocks: DocumentBlockNode[];
102
+ };
103
+ type ListBlockNode = {
104
+ kind: 'list';
105
+ command: '\\begin{itemize}' | '\\begin{enumerate}';
106
+ closing: '\\end{itemize}' | '\\end{enumerate}';
107
+ items: ListItemNode[];
108
+ };
109
+ type TableBlockNode = {
110
+ kind: 'table';
111
+ command: '\\begin{tabular}';
112
+ closing: '\\end{tabular}';
113
+ columns: string;
114
+ rows: DocumentInline[][][];
115
+ };
116
+ type ImageBlockNode = {
117
+ kind: 'image';
118
+ command: '\\includegraphics';
119
+ value: string;
120
+ options: Record<string, string>;
121
+ };
122
+ type RawBlockNode = {
123
+ kind: 'raw';
124
+ command: '\\raw';
125
+ value: string;
126
+ };
127
+ type DocumentBlockNode = TextBlockNode | ListBlockNode | TableBlockNode | ImageBlockNode | RawBlockNode;
128
+ type DocumentNode = {
129
+ nodeType: 'DocumentObject';
130
+ blocks: DocumentBlockNode[];
131
+ };
132
+
133
+ type ButexDocumentEditorProps = {
134
+ initialDocument?: DocumentJson | DocumentNode;
135
+ className?: string;
136
+ debug?: boolean;
137
+ onDocumentChange?: (document: DocumentNode) => void;
138
+ onLatexChange?: (latex: string) => void;
139
+ };
140
+ type DocumentInitialState = {
141
+ document: DocumentNode;
142
+ error: string | null;
143
+ };
144
+ declare function resolveInitialDocument(initialDocument: DocumentJson | DocumentNode | undefined): DocumentInitialState;
145
+ declare function ButexDocumentEditor({ initialDocument, className, debug, onDocumentChange, onLatexChange, }: ButexDocumentEditorProps): react_jsx_runtime.JSX.Element;
146
+ declare namespace ButexDocumentEditor {
147
+ var displayName: string;
148
+ }
149
+
150
+ declare const DOCUMENT_WIDGET_CSS = "\n.butex-document-widget {\n --butex-document-bg: var(--butex-bg, #f8fafc);\n --butex-document-fg: var(--butex-fg, #0f172a);\n --butex-document-muted: var(--butex-muted, #64748b);\n --butex-document-panel: var(--butex-panel, #ffffff);\n --butex-document-border: var(--butex-border, #e2e8f0);\n --butex-document-accent: var(--butex-accent, #0d9488);\n --butex-document-accent-hover: var(--butex-accent-hover, #0f766e);\n --butex-document-accent-bg: var(--butex-toolbar-hover-bg, rgba(13, 148, 136, 0.08));\n --butex-document-focus-shadow: var(--butex-focus-shadow, rgba(13, 148, 136, 0.16));\n --butex-document-danger: var(--butex-danger, #dc2626);\n --butex-document-error: var(--butex-error, #b91c1c);\n --butex-document-error-bg: var(--butex-error-bg, #fef2f2);\n --butex-document-shadow: var(--butex-shadow-md, 0 4px 14px rgba(15, 23, 42, 0.08));\n --butex-document-preview-bg: var(--butex-preview-bg, #ffffff);\n --butex-document-preview-fg: var(--butex-preview-fg, var(--butex-document-fg));\n --butex-document-preview-font: \"Amiri\", \"Noto Serif Arabic\", Georgia, \"Times New Roman\", serif;\n --butex-document-drawer-bg: var(--butex-document-panel);\n --butex-document-input-bg: #ffffff;\n --butex-document-input-border: var(--butex-document-border);\n --butex-document-table-border: var(--butex-document-border);\n --butex-document-raw-bg: #f8fafc;\n --butex-document-math-bg: var(--butex-document-accent-bg);\n --butex-document-math-border: rgba(13, 148, 136, 0.35);\n --butex-document-dev-bg: var(--butex-dev-bg, #fffbeb);\n --butex-document-dev-border: var(--butex-dev-border, #fcd34d);\n --butex-document-dev-code-bg: var(--butex-dev-inset-bg, #ffffff);\n --butex-document-dev-code-fg: var(--butex-dev-inset-fg, var(--butex-document-fg));\n box-sizing: border-box;\n color: var(--butex-document-fg);\n direction: rtl;\n font-family: ui-sans-serif, system-ui, \"Segoe UI\", Tahoma, Arial, sans-serif;\n line-height: 1.45;\n}\n\n.butex-document-widget *,\n.butex-document-widget *::before,\n.butex-document-widget *::after {\n box-sizing: inherit;\n}\n\n.butex-document-widget__shell {\n display: grid;\n gap: 12px;\n}\n\n.butex-document-widget__toolbar,\n.butex-document-widget__panel {\n border: 1px solid var(--butex-document-border);\n border-radius: 10px;\n background: var(--butex-document-panel);\n box-shadow: var(--butex-document-shadow);\n}\n\n.butex-document-widget__toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px;\n}\n\n.butex-document-widget button {\n border: 1px solid var(--butex-document-border);\n border-radius: 8px;\n background: var(--butex-document-panel);\n color: var(--butex-document-fg);\n cursor: pointer;\n min-height: 32px;\n padding: 0 10px;\n transition: border-color 0.14s ease, background 0.14s ease, box-shadow 0.14s ease, color 0.14s ease;\n}\n\n.butex-document-widget button[aria-pressed=\"true\"],\n.butex-document-widget button:hover {\n border-color: var(--butex-document-accent);\n background: var(--butex-document-accent-bg);\n}\n\n.butex-document-widget button:focus-visible,\n.butex-document-widget input:focus-visible,\n.butex-document-widget textarea:focus-visible {\n border-color: var(--butex-document-accent);\n box-shadow: 0 0 0 3px var(--butex-document-focus-shadow);\n outline: none;\n}\n\n.butex-document-widget button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.butex-document-widget__panel {\n padding: 16px;\n}\n\n.butex-document-widget__layout {\n align-items: start;\n display: grid;\n gap: 12px;\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n transition: grid-template-columns 0.22s ease;\n}\n\n.butex-document-widget__layout--editor-open.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n}\n\n.butex-document-widget__layout--editor-open.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__layout--editor-closed.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 0fr) minmax(0, 1fr);\n}\n\n.butex-document-widget__layout--editor-closed.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n}\n\n.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__editor-panel,\n.butex-document-widget__preview-panel {\n min-width: 0;\n opacity: 1;\n overflow-x: hidden;\n overflow-y: auto;\n transform: translateX(0);\n transition:\n opacity 0.18s ease,\n transform 0.22s ease,\n padding 0.22s ease,\n border-width 0.22s ease,\n box-shadow 0.22s ease;\n}\n\n.butex-document-widget__layout--editor-closed .butex-document-widget__editor-panel {\n border-width: 0;\n box-shadow: none;\n opacity: 0;\n padding-inline: 0;\n pointer-events: none;\n transform: translateX(10px);\n visibility: hidden;\n}\n\n.butex-document-widget__layout--preview-closed .butex-document-widget__preview-panel {\n border-width: 0;\n box-shadow: none;\n opacity: 0;\n padding-inline: 0;\n pointer-events: none;\n transform: translateX(-10px);\n visibility: hidden;\n}\n\n.butex-document-widget__block {\n border: 1px solid var(--butex-document-border);\n border-radius: 9px;\n background: var(--butex-document-panel);\n display: grid;\n gap: 10px;\n margin-bottom: 12px;\n padding: 10px;\n}\n\n.butex-document-widget__block-head,\n.butex-document-widget__row-actions,\n.butex-document-widget__drawer-head {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n justify-content: space-between;\n}\n\n.butex-document-widget__row-actions {\n justify-content: flex-start;\n}\n\n.butex-document-widget__field {\n display: grid;\n gap: 6px;\n}\n\n.butex-document-widget__field--short {\n max-width: 220px;\n}\n\n.butex-document-widget input,\n.butex-document-widget textarea {\n background: var(--butex-document-input-bg);\n border: 1px solid var(--butex-document-input-border);\n border-radius: 8px;\n color: var(--butex-document-fg);\n font: inherit;\n min-height: 34px;\n padding: 7px 9px;\n}\n\n.butex-document-widget textarea {\n min-height: 72px;\n resize: vertical;\n}\n\n.butex-document-widget__chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.butex-document-widget .butex-document-widget__math-chip {\n background: var(--butex-document-math-bg);\n border-color: var(--butex-document-math-border);\n direction: ltr;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n min-height: 28px;\n unicode-bidi: isolate;\n}\n\n.butex-document-widget__list-editor,\n.butex-document-widget__image-editor {\n display: grid;\n gap: 10px;\n}\n\n.butex-document-widget__list-item {\n border-inline-start: 3px solid var(--butex-document-border);\n display: grid;\n gap: 8px;\n padding-inline-start: 10px;\n}\n\n.butex-document-widget__nested {\n display: grid;\n gap: 6px;\n}\n\n.butex-document-widget__nested-block {\n border: 1px dashed var(--butex-document-border);\n border-radius: 8px;\n color: var(--butex-document-muted);\n background: var(--butex-document-bg);\n padding: 8px;\n}\n\n.butex-document-widget__table-editor {\n display: grid;\n gap: 10px;\n}\n\n.butex-document-widget__table-grid {\n display: grid;\n gap: 6px;\n overflow-x: auto;\n}\n\n.butex-document-widget__table-row {\n display: flex;\n gap: 6px;\n}\n\n.butex-document-widget__table-cell {\n display: grid;\n gap: 4px;\n min-width: 120px;\n}\n\n.butex-document-widget__placeholder,\n.butex-document-widget__error {\n margin: 0;\n color: var(--butex-document-muted);\n}\n\n.butex-document-widget__error {\n border: 1px solid var(--butex-document-error);\n border-radius: 8px;\n background: var(--butex-document-error-bg);\n color: var(--butex-document-error);\n padding: 10px;\n}\n\n.butex-document-widget__preview {\n background: var(--butex-document-preview-bg);\n color: var(--butex-document-preview-fg);\n direction: rtl;\n font-family: var(--butex-document-preview-font);\n font-size: 1.08rem;\n line-height: 1.9;\n}\n\n.butex-document-widget__preview h1,\n.butex-document-widget__preview h2,\n.butex-document-widget__preview h3,\n.butex-document-widget__preview p,\n.butex-document-widget__preview li,\n.butex-document-widget__preview td {\n overflow: visible;\n}\n\n.butex-document-widget__preview h1,\n.butex-document-widget__preview h2,\n.butex-document-widget__preview h3,\n.butex-document-widget__preview p {\n margin: 0 0 12px;\n}\n\n.butex-document-widget__preview ul,\n.butex-document-widget__preview ol {\n margin: 0 0 12px;\n padding-inline-start: 24px;\n}\n\n.butex-document-widget__preview img {\n display: block;\n height: auto;\n max-width: 100%;\n}\n\n.butex-document-widget__preview table {\n border-collapse: collapse;\n margin: 12px 0;\n width: 100%;\n}\n\n.butex-document-widget__preview td {\n border: 1px solid var(--butex-document-table-border);\n padding: 6px 8px;\n}\n\n.butex-document-widget .butex-document-math-island {\n direction: ltr;\n display: inline-block;\n line-height: normal;\n margin: 0 2px;\n overflow: visible;\n padding: 0;\n unicode-bidi: isolate;\n vertical-align: middle;\n}\n\n.butex-document-widget .butex-document-math-island mjx-container {\n display: inline-block !important;\n line-height: normal;\n margin: 0;\n overflow: visible;\n vertical-align: middle;\n}\n\n.butex-document-widget .butex-document-math-island[data-math-display=\"true\"] {\n display: block;\n margin: 10px 0;\n overflow: visible;\n text-align: center;\n}\n\n.butex-document-widget .butex-document-math-island[data-math-display=\"true\"] mjx-container {\n display: block !important;\n margin-inline: auto;\n}\n\n.butex-document-widget__preview-error {\n border: 1px solid var(--butex-document-error);\n border-radius: 8px;\n background: var(--butex-document-error-bg);\n color: var(--butex-document-error);\n margin: 12px 0 0;\n padding: 8px 10px;\n}\n\n.butex-document-widget__dev {\n border: 1px solid var(--butex-document-dev-border);\n border-radius: 10px;\n background: var(--butex-document-dev-bg);\n box-shadow: var(--butex-document-shadow);\n display: grid;\n gap: 10px;\n padding: 12px;\n}\n\n.butex-document-widget__dev pre {\n border: 1px solid var(--butex-document-dev-border);\n border-radius: 8px;\n background: var(--butex-document-dev-code-bg);\n color: var(--butex-document-dev-code-fg);\n direction: ltr;\n margin: 0;\n max-height: 220px;\n overflow: auto;\n padding: 10px;\n text-align: left;\n white-space: pre-wrap;\n}\n\n.butex-document-widget__drawer {\n background: var(--butex-document-drawer-bg);\n border-inline-start: 1px solid var(--butex-document-border);\n bottom: 0;\n box-shadow: -8px 0 22px rgba(15, 23, 42, 0.12);\n display: grid;\n gap: 12px;\n max-width: min(680px, 94vw);\n overflow: auto;\n padding: 14px;\n position: fixed;\n right: 0;\n top: 0;\n width: 640px;\n z-index: 30;\n}\n\n@media (max-width: 900px) {\n .butex-document-widget__layout {\n grid-template-columns: 1fr;\n }\n\n .butex-document-widget__layout--preview-closed .butex-document-widget__preview-panel {\n display: none;\n }\n\n .butex-document-widget__layout--editor-closed .butex-document-widget__editor-panel {\n display: none;\n }\n\n .butex-document-widget__drawer {\n border-inline-start: 0;\n left: 0;\n max-width: none;\n width: 100%;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .butex-document-widget__layout,\n .butex-document-widget__editor-panel,\n .butex-document-widget__preview-panel {\n transition: none;\n }\n}\n";
151
+ declare function injectBuTeXDocumentStyles(doc?: Document): void;
152
+
153
+ export { ButexDocumentEditor, type ButexDocumentEditorProps, DOCUMENT_WIDGET_CSS, type DocumentInitialState, injectBuTeXDocumentStyles, resolveInitialDocument };
@@ -0,0 +1,153 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type ArabicNodeJson = {
4
+ node_type: string;
5
+ expr?: string;
6
+ name?: string;
7
+ superscript?: ChainJson | null;
8
+ subscript?: ChainJson | null;
9
+ left_delim_expr?: string;
10
+ right_delim_expr?: string;
11
+ inner_expr?: ChainJson;
12
+ optional_args?: ChainJson[];
13
+ mandatory_args?: ChainJson[];
14
+ opening?: string;
15
+ closing?: string;
16
+ lines?: ChainJson[];
17
+ };
18
+ type ChainJson = {
19
+ node_type: 'ChainClass';
20
+ chain: ArabicNodeJson[];
21
+ };
22
+ declare class State {
23
+ }
24
+ declare class BaseAstNode {
25
+ state: State;
26
+ superscript: ChainNode | null;
27
+ subscript: ChainNode | null;
28
+ nodeType: string;
29
+ constructor(state?: State | null);
30
+ latex(): string;
31
+ arabicLatex(): string;
32
+ toArabicLatex(): string;
33
+ /** Latin-style scripts: `^{...}` and `_{...}` for english_json rendering. */
34
+ latexScripts(): string;
35
+ /**
36
+ * Arabic scripts use \\prescript{sup}{sub}{content} (matches reference Python output).
37
+ * Call with rendered strings for sup/sub chains (may be empty strings).
38
+ */
39
+ arabicLatexScripts(sup: string, sub: string, content: string): string;
40
+ }
41
+ declare class ChainNode {
42
+ chain: BaseAstNode[];
43
+ constructor(chain?: BaseAstNode[]);
44
+ latex(): string;
45
+ toEnglishLatex(): string;
46
+ /** RTL: reverse order relative to Latin chain (see test/ref_tests.txt). */
47
+ arabicLatex(): string;
48
+ toArabicLatex(): string;
49
+ }
50
+
51
+ type MathObjectJson = {
52
+ node_type: 'MathObject';
53
+ math_mode: string;
54
+ lines: ChainJson[];
55
+ closing: string;
56
+ };
57
+ type DocumentJson = {
58
+ node_type: 'DocumentObject';
59
+ blocks: DocumentBlockJson[];
60
+ };
61
+ type DocumentBlockJson = {
62
+ command: string;
63
+ value?: string;
64
+ math_objects?: MathObjectJson[];
65
+ options?: Record<string, string>;
66
+ closing?: string;
67
+ items?: DocumentListItemJson[];
68
+ rows?: string[][];
69
+ columns?: string;
70
+ };
71
+ type DocumentListItemJson = {
72
+ value: string;
73
+ math_objects?: MathObjectJson[];
74
+ blocks?: DocumentBlockJson[];
75
+ };
76
+ type MathNode = {
77
+ nodeType: 'MathObject';
78
+ mathMode: string;
79
+ lines: ChainNode[];
80
+ closing: string;
81
+ };
82
+ type TextInline = {
83
+ kind: 'text';
84
+ text: string;
85
+ };
86
+ type MathInline = {
87
+ kind: 'math';
88
+ source: string;
89
+ math: MathNode | null;
90
+ };
91
+ type DocumentInline = TextInline | MathInline;
92
+ type TextBlockNode = {
93
+ kind: 'textBlock';
94
+ command: '\\section' | '\\subsection' | '\\subsubsection' | '\\paragraph';
95
+ value: string;
96
+ inlines: DocumentInline[];
97
+ };
98
+ type ListItemNode = {
99
+ value: string;
100
+ inlines: DocumentInline[];
101
+ blocks: DocumentBlockNode[];
102
+ };
103
+ type ListBlockNode = {
104
+ kind: 'list';
105
+ command: '\\begin{itemize}' | '\\begin{enumerate}';
106
+ closing: '\\end{itemize}' | '\\end{enumerate}';
107
+ items: ListItemNode[];
108
+ };
109
+ type TableBlockNode = {
110
+ kind: 'table';
111
+ command: '\\begin{tabular}';
112
+ closing: '\\end{tabular}';
113
+ columns: string;
114
+ rows: DocumentInline[][][];
115
+ };
116
+ type ImageBlockNode = {
117
+ kind: 'image';
118
+ command: '\\includegraphics';
119
+ value: string;
120
+ options: Record<string, string>;
121
+ };
122
+ type RawBlockNode = {
123
+ kind: 'raw';
124
+ command: '\\raw';
125
+ value: string;
126
+ };
127
+ type DocumentBlockNode = TextBlockNode | ListBlockNode | TableBlockNode | ImageBlockNode | RawBlockNode;
128
+ type DocumentNode = {
129
+ nodeType: 'DocumentObject';
130
+ blocks: DocumentBlockNode[];
131
+ };
132
+
133
+ type ButexDocumentEditorProps = {
134
+ initialDocument?: DocumentJson | DocumentNode;
135
+ className?: string;
136
+ debug?: boolean;
137
+ onDocumentChange?: (document: DocumentNode) => void;
138
+ onLatexChange?: (latex: string) => void;
139
+ };
140
+ type DocumentInitialState = {
141
+ document: DocumentNode;
142
+ error: string | null;
143
+ };
144
+ declare function resolveInitialDocument(initialDocument: DocumentJson | DocumentNode | undefined): DocumentInitialState;
145
+ declare function ButexDocumentEditor({ initialDocument, className, debug, onDocumentChange, onLatexChange, }: ButexDocumentEditorProps): react_jsx_runtime.JSX.Element;
146
+ declare namespace ButexDocumentEditor {
147
+ var displayName: string;
148
+ }
149
+
150
+ declare const DOCUMENT_WIDGET_CSS = "\n.butex-document-widget {\n --butex-document-bg: var(--butex-bg, #f8fafc);\n --butex-document-fg: var(--butex-fg, #0f172a);\n --butex-document-muted: var(--butex-muted, #64748b);\n --butex-document-panel: var(--butex-panel, #ffffff);\n --butex-document-border: var(--butex-border, #e2e8f0);\n --butex-document-accent: var(--butex-accent, #0d9488);\n --butex-document-accent-hover: var(--butex-accent-hover, #0f766e);\n --butex-document-accent-bg: var(--butex-toolbar-hover-bg, rgba(13, 148, 136, 0.08));\n --butex-document-focus-shadow: var(--butex-focus-shadow, rgba(13, 148, 136, 0.16));\n --butex-document-danger: var(--butex-danger, #dc2626);\n --butex-document-error: var(--butex-error, #b91c1c);\n --butex-document-error-bg: var(--butex-error-bg, #fef2f2);\n --butex-document-shadow: var(--butex-shadow-md, 0 4px 14px rgba(15, 23, 42, 0.08));\n --butex-document-preview-bg: var(--butex-preview-bg, #ffffff);\n --butex-document-preview-fg: var(--butex-preview-fg, var(--butex-document-fg));\n --butex-document-preview-font: \"Amiri\", \"Noto Serif Arabic\", Georgia, \"Times New Roman\", serif;\n --butex-document-drawer-bg: var(--butex-document-panel);\n --butex-document-input-bg: #ffffff;\n --butex-document-input-border: var(--butex-document-border);\n --butex-document-table-border: var(--butex-document-border);\n --butex-document-raw-bg: #f8fafc;\n --butex-document-math-bg: var(--butex-document-accent-bg);\n --butex-document-math-border: rgba(13, 148, 136, 0.35);\n --butex-document-dev-bg: var(--butex-dev-bg, #fffbeb);\n --butex-document-dev-border: var(--butex-dev-border, #fcd34d);\n --butex-document-dev-code-bg: var(--butex-dev-inset-bg, #ffffff);\n --butex-document-dev-code-fg: var(--butex-dev-inset-fg, var(--butex-document-fg));\n box-sizing: border-box;\n color: var(--butex-document-fg);\n direction: rtl;\n font-family: ui-sans-serif, system-ui, \"Segoe UI\", Tahoma, Arial, sans-serif;\n line-height: 1.45;\n}\n\n.butex-document-widget *,\n.butex-document-widget *::before,\n.butex-document-widget *::after {\n box-sizing: inherit;\n}\n\n.butex-document-widget__shell {\n display: grid;\n gap: 12px;\n}\n\n.butex-document-widget__toolbar,\n.butex-document-widget__panel {\n border: 1px solid var(--butex-document-border);\n border-radius: 10px;\n background: var(--butex-document-panel);\n box-shadow: var(--butex-document-shadow);\n}\n\n.butex-document-widget__toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px;\n}\n\n.butex-document-widget button {\n border: 1px solid var(--butex-document-border);\n border-radius: 8px;\n background: var(--butex-document-panel);\n color: var(--butex-document-fg);\n cursor: pointer;\n min-height: 32px;\n padding: 0 10px;\n transition: border-color 0.14s ease, background 0.14s ease, box-shadow 0.14s ease, color 0.14s ease;\n}\n\n.butex-document-widget button[aria-pressed=\"true\"],\n.butex-document-widget button:hover {\n border-color: var(--butex-document-accent);\n background: var(--butex-document-accent-bg);\n}\n\n.butex-document-widget button:focus-visible,\n.butex-document-widget input:focus-visible,\n.butex-document-widget textarea:focus-visible {\n border-color: var(--butex-document-accent);\n box-shadow: 0 0 0 3px var(--butex-document-focus-shadow);\n outline: none;\n}\n\n.butex-document-widget button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.butex-document-widget__panel {\n padding: 16px;\n}\n\n.butex-document-widget__layout {\n align-items: start;\n display: grid;\n gap: 12px;\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n transition: grid-template-columns 0.22s ease;\n}\n\n.butex-document-widget__layout--editor-open.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n}\n\n.butex-document-widget__layout--editor-open.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__layout--editor-closed.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 0fr) minmax(0, 1fr);\n}\n\n.butex-document-widget__layout--editor-closed.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__layout--preview-open {\n grid-template-columns: minmax(0, 1fr) minmax(280px, 0.9fr);\n}\n\n.butex-document-widget__layout--preview-closed {\n grid-template-columns: minmax(0, 1fr) minmax(0, 0fr);\n}\n\n.butex-document-widget__editor-panel,\n.butex-document-widget__preview-panel {\n min-width: 0;\n opacity: 1;\n overflow-x: hidden;\n overflow-y: auto;\n transform: translateX(0);\n transition:\n opacity 0.18s ease,\n transform 0.22s ease,\n padding 0.22s ease,\n border-width 0.22s ease,\n box-shadow 0.22s ease;\n}\n\n.butex-document-widget__layout--editor-closed .butex-document-widget__editor-panel {\n border-width: 0;\n box-shadow: none;\n opacity: 0;\n padding-inline: 0;\n pointer-events: none;\n transform: translateX(10px);\n visibility: hidden;\n}\n\n.butex-document-widget__layout--preview-closed .butex-document-widget__preview-panel {\n border-width: 0;\n box-shadow: none;\n opacity: 0;\n padding-inline: 0;\n pointer-events: none;\n transform: translateX(-10px);\n visibility: hidden;\n}\n\n.butex-document-widget__block {\n border: 1px solid var(--butex-document-border);\n border-radius: 9px;\n background: var(--butex-document-panel);\n display: grid;\n gap: 10px;\n margin-bottom: 12px;\n padding: 10px;\n}\n\n.butex-document-widget__block-head,\n.butex-document-widget__row-actions,\n.butex-document-widget__drawer-head {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n justify-content: space-between;\n}\n\n.butex-document-widget__row-actions {\n justify-content: flex-start;\n}\n\n.butex-document-widget__field {\n display: grid;\n gap: 6px;\n}\n\n.butex-document-widget__field--short {\n max-width: 220px;\n}\n\n.butex-document-widget input,\n.butex-document-widget textarea {\n background: var(--butex-document-input-bg);\n border: 1px solid var(--butex-document-input-border);\n border-radius: 8px;\n color: var(--butex-document-fg);\n font: inherit;\n min-height: 34px;\n padding: 7px 9px;\n}\n\n.butex-document-widget textarea {\n min-height: 72px;\n resize: vertical;\n}\n\n.butex-document-widget__chips {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.butex-document-widget .butex-document-widget__math-chip {\n background: var(--butex-document-math-bg);\n border-color: var(--butex-document-math-border);\n direction: ltr;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n min-height: 28px;\n unicode-bidi: isolate;\n}\n\n.butex-document-widget__list-editor,\n.butex-document-widget__image-editor {\n display: grid;\n gap: 10px;\n}\n\n.butex-document-widget__list-item {\n border-inline-start: 3px solid var(--butex-document-border);\n display: grid;\n gap: 8px;\n padding-inline-start: 10px;\n}\n\n.butex-document-widget__nested {\n display: grid;\n gap: 6px;\n}\n\n.butex-document-widget__nested-block {\n border: 1px dashed var(--butex-document-border);\n border-radius: 8px;\n color: var(--butex-document-muted);\n background: var(--butex-document-bg);\n padding: 8px;\n}\n\n.butex-document-widget__table-editor {\n display: grid;\n gap: 10px;\n}\n\n.butex-document-widget__table-grid {\n display: grid;\n gap: 6px;\n overflow-x: auto;\n}\n\n.butex-document-widget__table-row {\n display: flex;\n gap: 6px;\n}\n\n.butex-document-widget__table-cell {\n display: grid;\n gap: 4px;\n min-width: 120px;\n}\n\n.butex-document-widget__placeholder,\n.butex-document-widget__error {\n margin: 0;\n color: var(--butex-document-muted);\n}\n\n.butex-document-widget__error {\n border: 1px solid var(--butex-document-error);\n border-radius: 8px;\n background: var(--butex-document-error-bg);\n color: var(--butex-document-error);\n padding: 10px;\n}\n\n.butex-document-widget__preview {\n background: var(--butex-document-preview-bg);\n color: var(--butex-document-preview-fg);\n direction: rtl;\n font-family: var(--butex-document-preview-font);\n font-size: 1.08rem;\n line-height: 1.9;\n}\n\n.butex-document-widget__preview h1,\n.butex-document-widget__preview h2,\n.butex-document-widget__preview h3,\n.butex-document-widget__preview p,\n.butex-document-widget__preview li,\n.butex-document-widget__preview td {\n overflow: visible;\n}\n\n.butex-document-widget__preview h1,\n.butex-document-widget__preview h2,\n.butex-document-widget__preview h3,\n.butex-document-widget__preview p {\n margin: 0 0 12px;\n}\n\n.butex-document-widget__preview ul,\n.butex-document-widget__preview ol {\n margin: 0 0 12px;\n padding-inline-start: 24px;\n}\n\n.butex-document-widget__preview img {\n display: block;\n height: auto;\n max-width: 100%;\n}\n\n.butex-document-widget__preview table {\n border-collapse: collapse;\n margin: 12px 0;\n width: 100%;\n}\n\n.butex-document-widget__preview td {\n border: 1px solid var(--butex-document-table-border);\n padding: 6px 8px;\n}\n\n.butex-document-widget .butex-document-math-island {\n direction: ltr;\n display: inline-block;\n line-height: normal;\n margin: 0 2px;\n overflow: visible;\n padding: 0;\n unicode-bidi: isolate;\n vertical-align: middle;\n}\n\n.butex-document-widget .butex-document-math-island mjx-container {\n display: inline-block !important;\n line-height: normal;\n margin: 0;\n overflow: visible;\n vertical-align: middle;\n}\n\n.butex-document-widget .butex-document-math-island[data-math-display=\"true\"] {\n display: block;\n margin: 10px 0;\n overflow: visible;\n text-align: center;\n}\n\n.butex-document-widget .butex-document-math-island[data-math-display=\"true\"] mjx-container {\n display: block !important;\n margin-inline: auto;\n}\n\n.butex-document-widget__preview-error {\n border: 1px solid var(--butex-document-error);\n border-radius: 8px;\n background: var(--butex-document-error-bg);\n color: var(--butex-document-error);\n margin: 12px 0 0;\n padding: 8px 10px;\n}\n\n.butex-document-widget__dev {\n border: 1px solid var(--butex-document-dev-border);\n border-radius: 10px;\n background: var(--butex-document-dev-bg);\n box-shadow: var(--butex-document-shadow);\n display: grid;\n gap: 10px;\n padding: 12px;\n}\n\n.butex-document-widget__dev pre {\n border: 1px solid var(--butex-document-dev-border);\n border-radius: 8px;\n background: var(--butex-document-dev-code-bg);\n color: var(--butex-document-dev-code-fg);\n direction: ltr;\n margin: 0;\n max-height: 220px;\n overflow: auto;\n padding: 10px;\n text-align: left;\n white-space: pre-wrap;\n}\n\n.butex-document-widget__drawer {\n background: var(--butex-document-drawer-bg);\n border-inline-start: 1px solid var(--butex-document-border);\n bottom: 0;\n box-shadow: -8px 0 22px rgba(15, 23, 42, 0.12);\n display: grid;\n gap: 12px;\n max-width: min(680px, 94vw);\n overflow: auto;\n padding: 14px;\n position: fixed;\n right: 0;\n top: 0;\n width: 640px;\n z-index: 30;\n}\n\n@media (max-width: 900px) {\n .butex-document-widget__layout {\n grid-template-columns: 1fr;\n }\n\n .butex-document-widget__layout--preview-closed .butex-document-widget__preview-panel {\n display: none;\n }\n\n .butex-document-widget__layout--editor-closed .butex-document-widget__editor-panel {\n display: none;\n }\n\n .butex-document-widget__drawer {\n border-inline-start: 0;\n left: 0;\n max-width: none;\n width: 100%;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .butex-document-widget__layout,\n .butex-document-widget__editor-panel,\n .butex-document-widget__preview-panel {\n transition: none;\n }\n}\n";
151
+ declare function injectBuTeXDocumentStyles(doc?: Document): void;
152
+
153
+ export { ButexDocumentEditor, type ButexDocumentEditorProps, DOCUMENT_WIDGET_CSS, type DocumentInitialState, injectBuTeXDocumentStyles, resolveInitialDocument };