@drghaliasri/butex 3.2.2 → 4.0.1

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.
package/dist/react.js CHANGED
@@ -584,6 +584,24 @@ var ATOMIC_OPERATOR_COMMANDS = {
584
584
  title: "\u0623\u0643\u0628\u0631 \u0645\u0646 \u0623\u0648 \u064A\u0633\u0627\u0648\u064A",
585
585
  svg_path: null
586
586
  },
587
+ coloneqq: {
588
+ id: "coloneqq",
589
+ category: "operators1",
590
+ Tex: "\\coloneqq",
591
+ mirror: true,
592
+ Label: "\u2254",
593
+ title: "\u064A\u0639\u0631\u0641 \u0628\u0623\u0646\u0647 \u064A\u0633\u0627\u0648\u064A",
594
+ svg_path: null
595
+ },
596
+ eqqcolon: {
597
+ id: "eqqcolon",
598
+ category: "operators1",
599
+ Tex: "\\eqqcolon",
600
+ mirror: true,
601
+ Label: "\u2255",
602
+ title: "\u064A\u0633\u0627\u0648\u064A \u0628\u0627\u0644\u062A\u0639\u0631\u064A\u0641",
603
+ svg_path: null
604
+ },
587
605
  ///// Operators 2
588
606
  propto: {
589
607
  id: "propto",
@@ -750,6 +768,60 @@ var ATOMIC_OPERATOR_COMMANDS = {
750
768
  title: "\u064A\u0643\u0627\u0641\u0626",
751
769
  svg_path: null
752
770
  },
771
+ implies: {
772
+ id: "implies",
773
+ category: "operators3",
774
+ Tex: "\\implies",
775
+ mirror: true,
776
+ Label: "\u21D2",
777
+ title: "\u064A\u0633\u062A\u0644\u0632\u0645",
778
+ svg_path: null
779
+ },
780
+ impliedby: {
781
+ id: "impliedby",
782
+ category: "operators3",
783
+ Tex: "\\impliedby",
784
+ mirror: true,
785
+ Label: "\u21D0",
786
+ title: "\u0645\u0633\u062A\u0644\u0632\u0645 \u0645\u0646",
787
+ svg_path: null
788
+ },
789
+ iff: {
790
+ id: "iff",
791
+ category: "operators3",
792
+ Tex: "\\iff",
793
+ mirror: false,
794
+ Label: "\u21D4",
795
+ title: "\u0625\u0630\u0627 \u0648\u0641\u0642\u0637 \u0625\u0630\u0627",
796
+ svg_path: null
797
+ },
798
+ Longrightarrow: {
799
+ id: "Longrightarrow",
800
+ category: "operators3",
801
+ Tex: "\\Longrightarrow",
802
+ mirror: true,
803
+ Label: "\u27F9",
804
+ title: "\u0633\u0647\u0645 \u0645\u0632\u062F\u0648\u062C \u0637\u0648\u064A\u0644 \u0625\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646",
805
+ svg_path: null
806
+ },
807
+ Longleftarrow: {
808
+ id: "Longleftarrow",
809
+ category: "operators3",
810
+ Tex: "\\Longleftarrow",
811
+ mirror: true,
812
+ Label: "\u27F8",
813
+ title: "\u0633\u0647\u0645 \u0645\u0632\u062F\u0648\u062C \u0637\u0648\u064A\u0644 \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631",
814
+ svg_path: null
815
+ },
816
+ to: {
817
+ id: "to",
818
+ category: "operators3",
819
+ Tex: "\\to",
820
+ mirror: true,
821
+ Label: "\u2192",
822
+ title: "\u064A\u0624\u0648\u0644 \u0625\u0644\u0649",
823
+ svg_path: null
824
+ },
753
825
  rightleftharpoons: {
754
826
  id: "rightleftharpoons",
755
827
  category: "operators3",
@@ -1669,6 +1741,321 @@ function undoRedoCanRedo(stacks) {
1669
1741
  return stacks.future.length > 0;
1670
1742
  }
1671
1743
 
1744
+ // src/editor/uiLocale.ts
1745
+ var ENGLISH_COMMAND_TITLES = {
1746
+ cos: "Cosine",
1747
+ sin: "Sine",
1748
+ tan: "Tangent",
1749
+ cot: "Cotangent",
1750
+ sec: "Secant",
1751
+ csc: "Cosecant",
1752
+ arccos: "Inverse cosine",
1753
+ arcsin: "Inverse sine",
1754
+ arctan: "Inverse tangent",
1755
+ arccot: "Inverse cotangent",
1756
+ arcsec: "Inverse secant",
1757
+ arccsc: "Inverse cosecant",
1758
+ cosh: "Hyperbolic cosine",
1759
+ sinh: "Hyperbolic sine",
1760
+ tanh: "Hyperbolic tangent",
1761
+ coth: "Hyperbolic cotangent",
1762
+ sum: "Sum",
1763
+ prod: "Product",
1764
+ lim: "Limit",
1765
+ max: "Maximum",
1766
+ min: "Minimum",
1767
+ sup: "Supremum",
1768
+ inf: "Infimum",
1769
+ pi: "Pi",
1770
+ exp: "Exponential",
1771
+ ln: "Natural logarithm",
1772
+ log: "Logarithm",
1773
+ det: "Determinant",
1774
+ N: "Natural numbers",
1775
+ Z: "Integers",
1776
+ Q: "Rational numbers",
1777
+ R: "Real numbers",
1778
+ C: "Complex numbers",
1779
+ H: "Quaternions",
1780
+ negThinSpace: "Negative thin space",
1781
+ mediumSpace: "Medium space",
1782
+ thickSpace: "Thick space",
1783
+ quadSpace: "Large space",
1784
+ qquadSpace: "Extra-large space"
1785
+ };
1786
+ var ENGLISH_OPERATOR_TITLES = {
1787
+ inf: "Infinity",
1788
+ times: "Multiplication",
1789
+ div: "Division",
1790
+ pm: "Plus or minus",
1791
+ mp: "Minus or plus",
1792
+ neq: "Not equal",
1793
+ approx: "Approximately equal",
1794
+ sim: "Similar",
1795
+ mid: "Divides",
1796
+ leq: "Less than or equal",
1797
+ geq: "Greater than or equal",
1798
+ coloneqq: "Defined as equal to",
1799
+ eqqcolon: "Equal by definition",
1800
+ propto: "Proportional to",
1801
+ in: "Element of",
1802
+ notin: "Not an element of",
1803
+ subset: "Subset of",
1804
+ supset: "Superset of",
1805
+ subseteq: "Subset of or equal",
1806
+ supseteq: "Superset of or equal",
1807
+ cap: "Intersection",
1808
+ cup: "Union",
1809
+ emptyset: "Empty set",
1810
+ nsubseteq: "Not a subset of or equal",
1811
+ nsupseteq: "Not a superset of or equal",
1812
+ ldots: "Horizontal dots",
1813
+ cdot: "Multiplication dot",
1814
+ cdots: "Centered horizontal dots",
1815
+ vdots: "Vertical dots",
1816
+ ddots: "Diagonal dots",
1817
+ leftrightarrowDouble: "Equivalent",
1818
+ implies: "Implies",
1819
+ impliedby: "Implied by",
1820
+ iff: "If and only if",
1821
+ Longrightarrow: "Long double arrow right",
1822
+ Longleftarrow: "Long double arrow left",
1823
+ to: "Maps to",
1824
+ rightleftharpoons: "Equilibrium",
1825
+ leftarrow: "Left arrow",
1826
+ rightarrow: "Right arrow",
1827
+ leftarrowDouble: "Double left arrow",
1828
+ rightarrowDouble: "Double right arrow",
1829
+ leftharpoonup: "Upper left harpoon",
1830
+ rightharpoonup: "Upper right harpoon",
1831
+ leftharpoondown: "Lower left harpoon",
1832
+ rightharpoondown: "Lower right harpoon",
1833
+ int: "Integral",
1834
+ iint: "Double integral",
1835
+ iiint: "Triple integral",
1836
+ iiiint: "Quadruple integral",
1837
+ oint: "Contour integral",
1838
+ oiint: "Closed surface integral",
1839
+ oiiint: "Closed volume integral"
1840
+ };
1841
+ var EQUATION_EDITOR_MESSAGES = {
1842
+ ar: {
1843
+ undoRedo: "\u062A\u0631\u0627\u062C\u0639 \u0648\u0625\u0639\u0627\u062F\u0629",
1844
+ undo: "\u062A\u0631\u0627\u062C\u0639",
1845
+ redo: "\u0625\u0639\u0627\u062F\u0629",
1846
+ clipboard: "\u0627\u0644\u062D\u0627\u0641\u0638\u0629",
1847
+ copy: "\u0646\u0633\u062E",
1848
+ cut: "\u0642\u0635",
1849
+ paste: "\u0644\u0635\u0642",
1850
+ editorSettings: "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u062D\u0631\u0631",
1851
+ toggleSide: "\u062A\u0628\u062F\u064A\u0644 \u0639\u0631\u0628\u064A / \u0625\u0646\u062C\u0644\u064A\u0632\u064A",
1852
+ structures: "\u0627\u0644\u0628\u0646\u0649",
1853
+ insertDelimiters: "\u0625\u062F\u0631\u0627\u062C \u0645\u062D\u062F\u062F\u0627\u062A",
1854
+ insertParentheses: "\u0625\u062F\u0631\u0627\u062C \u0642\u0648\u0633\u064A\u0646",
1855
+ insertBrackets: "\u0625\u062F\u0631\u0627\u062C \u0645\u0639\u0642\u0648\u0641\u064A\u0646",
1856
+ insertBraces: "\u0625\u062F\u0631\u0627\u062C \u062D\u0627\u0635\u0631\u062A\u064A\u0646",
1857
+ insertFraction: "\u0625\u062F\u0631\u0627\u062C \u0643\u0633\u0631",
1858
+ insertRoot: "\u0625\u062F\u0631\u0627\u062C \u062C\u0630\u0631",
1859
+ environments: "\u0627\u0644\u0628\u064A\u0626\u0627\u062A",
1860
+ insertEnvironment: "\u0625\u062F\u0631\u0627\u062C \u0628\u064A\u0626\u0629 \u0634\u0628\u0643\u064A\u0629",
1861
+ environmentType: "\u0646\u0648\u0639 \u0627\u0644\u0628\u064A\u0626\u0629",
1862
+ matrix: "\u0645\u0635\u0641\u0648\u0641\u0629",
1863
+ array: "\u062C\u062F\u0648\u0644",
1864
+ aligned: "\u0645\u062D\u0627\u0630\u0627\u0629",
1865
+ matrixType: "\u0646\u0648\u0639 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629",
1866
+ chooseEnvironmentSize: "\u0627\u062E\u062A\u064A\u0627\u0631 \u062D\u062C\u0645 \u0627\u0644\u0628\u064A\u0626\u0629",
1867
+ rows: "\u0635\u0641\u0648\u0641",
1868
+ columns: "\u0623\u0639\u0645\u062F\u0629",
1869
+ row: "\u0635\u0641",
1870
+ column: "\u0639\u0645\u0648\u062F",
1871
+ insert: "\u0625\u062F\u0631\u0627\u062C",
1872
+ editSelectedEnvironment: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u064A\u0626\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629",
1873
+ applySelectedMatrixStyle: "\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0646\u0645\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629",
1874
+ applyStyle: "\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0646\u0645\u0637",
1875
+ addRow: "\u0625\u0636\u0627\u0641\u0629 \u0635\u0641",
1876
+ removeRow: "\u062D\u0630\u0641 \u0635\u0641",
1877
+ addColumn: "\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u0648\u062F",
1878
+ removeColumn: "\u062D\u0630\u0641 \u0639\u0645\u0648\u062F",
1879
+ spaces: "\u0627\u0644\u0641\u0631\u0627\u063A\u0627\u062A",
1880
+ insertSpace: "\u0625\u062F\u0631\u0627\u062C \u0641\u0631\u0627\u063A",
1881
+ functions: "\u0627\u0644\u062F\u0648\u0627\u0644",
1882
+ insertFunction: "\u0625\u062F\u0631\u0627\u062C \u062F\u0627\u0644\u0629",
1883
+ insertLimitsSeries: "\u0625\u062F\u0631\u0627\u062C \u062D\u062F\u0648\u062F \u0648\u0645\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
1884
+ insertAdditionalFunctions: "\u0625\u062F\u0631\u0627\u062C \u062F\u0648\u0627\u0644 \u0625\u0636\u0627\u0641\u064A\u0629",
1885
+ insertNumberSets: "\u0625\u062F\u0631\u0627\u062C \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0623\u0639\u062F\u0627\u062F",
1886
+ operations: "\u0627\u0644\u0639\u0645\u0644\u064A\u0627\u062A",
1887
+ insertOperation: "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0632 \u0639\u0645\u0644\u064A\u0629",
1888
+ insertRelationsSets: "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0648\u0632 \u0639\u0644\u0627\u0642\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0627\u062A",
1889
+ insertArrows: "\u0625\u062F\u0631\u0627\u062C \u0623\u0633\u0647\u0645",
1890
+ insertDots: "\u0625\u062F\u0631\u0627\u062C \u0646\u0642\u0627\u0637",
1891
+ insertIntegrals: "\u0625\u062F\u0631\u0627\u062C \u062A\u0643\u0627\u0645\u0644\u0627\u062A",
1892
+ scripts: "\u0627\u0644\u0623\u0633 \u0648\u0627\u0644\u0633\u0641\u0644\u064A",
1893
+ addSuperscript: "\u0625\u0636\u0627\u0641\u0629 \u0623\u0633",
1894
+ addSubscript: "\u0625\u0636\u0627\u0641\u0629 \u0633\u0641\u0644\u064A",
1895
+ removeSuperscript: "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0623\u0633",
1896
+ removeSubscript: "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0641\u0644\u064A",
1897
+ inputStyles: "\u0623\u0646\u0645\u0627\u0637 \u0627\u0644\u0625\u062F\u062E\u0627\u0644",
1898
+ deleteSelectedStructure: "\u062D\u0630\u0641 \u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629",
1899
+ toggleLetterMerging: "\u062A\u0628\u062F\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641",
1900
+ disableLetterMerging: "\u062A\u0639\u0637\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641",
1901
+ enableLetterMerging: "\u062A\u0641\u0639\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641",
1902
+ chooseWritingFont: "\u0627\u062E\u062A\u064A\u0627\u0631 \u062E\u0637 \u0627\u0644\u0643\u062A\u0627\u0628\u0629",
1903
+ chooseDigitForm: "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645",
1904
+ defaultFont: "\u0627\u0644\u062E\u0637 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A",
1905
+ takweenFont: "\u062E\u0637 \u062A\u0643\u0648\u064A\u0646",
1906
+ diwaniFont: "\u062E\u0637 \u062F\u064A\u0648\u0627\u0646\u064A",
1907
+ diwaniOutlineFont: "\u062E\u0637 \u062F\u064A\u0648\u0627\u0646\u064A \u0645\u0638\u0644\u0644",
1908
+ writeDefaultFont: "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u0627\u0644\u062E\u0637 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A",
1909
+ writeTakweenFont: "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u062E\u0637 \u062A\u0643\u0648\u064A\u0646",
1910
+ westernDigits: "\u0623\u0631\u0642\u0627\u0645 \u063A\u0631\u0628\u064A\u0629",
1911
+ arabicIndicDigits: "\u0623\u0631\u0642\u0627\u0645 \u0639\u0631\u0628\u064A\u0629 \u0647\u0646\u062F\u064A\u0629",
1912
+ persianIndicDigits: "\u0623\u0631\u0642\u0627\u0645 \u0641\u0627\u0631\u0633\u064A\u0629 \u0647\u0646\u062F\u064A\u0629",
1913
+ equationEditor: "\u0645\u062D\u0631\u0631 \u0627\u0644\u0645\u0639\u0627\u062F\u0644\u0627\u062A",
1914
+ renderPreview: "\u0645\u0639\u0627\u064A\u0646\u0629 \u0627\u0644\u0631\u0633\u0645",
1915
+ development: "\u062A\u0637\u0648\u064A\u0631",
1916
+ showDebugLog: "\u0625\u0638\u0647\u0627\u0631 \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D",
1917
+ hideDebugLog: "\u0625\u062E\u0641\u0627\u0621 \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D",
1918
+ copyDebugLog: "\u0646\u0633\u062E \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D",
1919
+ empty: "\u0641\u0627\u0631\u063A",
1920
+ englishLatex: "LaTeX \u0625\u0646\u062C\u0644\u064A\u0632\u064A",
1921
+ arabicLatex: "LaTeX \u0639\u0631\u0628\u064A",
1922
+ inactiveEnglish: "\u0627\u0644\u0633\u0644\u0633\u0644\u0629 \u063A\u064A\u0631 \u0627\u0644\u0646\u0634\u0637\u0629 (\u0625\u0646\u062C\u0644\u064A\u0632\u064A)",
1923
+ inactiveArabic: "\u0627\u0644\u0633\u0644\u0633\u0644\u0629 \u063A\u064A\u0631 \u0627\u0644\u0646\u0634\u0637\u0629 (\u0639\u0631\u0628\u064A)",
1924
+ mathJaxError: "\u062E\u0637\u0623 MathJax",
1925
+ previewError: "\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u0645\u0639\u0627\u064A\u0646\u0629",
1926
+ activeSide: "\u0627\u0644\u062C\u0627\u0646\u0628 \u0627\u0644\u0646\u0634\u0637",
1927
+ syncState: "\u062D\u0627\u0644\u0629 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629",
1928
+ arabicSide: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
1929
+ englishSide: "\u0627\u0644\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629",
1930
+ synced: "\u0645\u062A\u0632\u0627\u0645\u0646",
1931
+ differentItems: "\u0639\u0646\u0627\u0635\u0631 \u0645\u062E\u062A\u0644\u0641\u0629",
1932
+ alignLeft: "\u064A\u0633\u0627\u0631",
1933
+ alignCenter: "\u0648\u0633\u0637",
1934
+ alignRight: "\u064A\u0645\u064A\u0646",
1935
+ alignColumnLeft: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631",
1936
+ alignColumnCenter: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0641\u064A \u0627\u0644\u0648\u0633\u0637",
1937
+ alignColumnRight: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0625\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646",
1938
+ matrixNoDelimiters: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u0644\u0627 \u0623\u0642\u0648\u0627\u0633",
1939
+ matrixParentheses: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u0642\u0648\u0633\u064A\u0646",
1940
+ matrixBrackets: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u0645\u0639\u0642\u0648\u0641\u064A\u0646",
1941
+ matrixBraces: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062D\u0627\u0635\u0631\u062A\u064A\u0646",
1942
+ matrixBars: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062E\u0637\u064A\u0646",
1943
+ matrixDoubleBars: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062E\u0637\u064A\u0646 \u0645\u0632\u062F\u0648\u062C\u064A\u0646"
1944
+ },
1945
+ en: {
1946
+ undoRedo: "Undo and redo",
1947
+ undo: "Undo",
1948
+ redo: "Redo",
1949
+ clipboard: "Clipboard",
1950
+ copy: "Copy",
1951
+ cut: "Cut",
1952
+ paste: "Paste",
1953
+ editorSettings: "Editor settings",
1954
+ toggleSide: "Switch Arabic / English equation side",
1955
+ structures: "Structures",
1956
+ insertDelimiters: "Insert delimiters",
1957
+ insertParentheses: "Insert parentheses",
1958
+ insertBrackets: "Insert brackets",
1959
+ insertBraces: "Insert braces",
1960
+ insertFraction: "Insert fraction",
1961
+ insertRoot: "Insert root",
1962
+ environments: "Environments",
1963
+ insertEnvironment: "Insert grid environment",
1964
+ environmentType: "Environment type",
1965
+ matrix: "Matrix",
1966
+ array: "Array",
1967
+ aligned: "Aligned",
1968
+ matrixType: "Matrix type",
1969
+ chooseEnvironmentSize: "Choose environment size",
1970
+ rows: "Rows",
1971
+ columns: "Columns",
1972
+ row: "Row",
1973
+ column: "Column",
1974
+ insert: "Insert",
1975
+ editSelectedEnvironment: "Edit selected environment",
1976
+ applySelectedMatrixStyle: "Apply style to selected matrix",
1977
+ applyStyle: "Apply style",
1978
+ addRow: "Add row",
1979
+ removeRow: "Remove row",
1980
+ addColumn: "Add column",
1981
+ removeColumn: "Remove column",
1982
+ spaces: "Spacing",
1983
+ insertSpace: "Insert space",
1984
+ functions: "Functions",
1985
+ insertFunction: "Insert function",
1986
+ insertLimitsSeries: "Insert limits and series",
1987
+ insertAdditionalFunctions: "Insert additional functions",
1988
+ insertNumberSets: "Insert number sets",
1989
+ operations: "Operators",
1990
+ insertOperation: "Insert operator",
1991
+ insertRelationsSets: "Insert relation or set symbol",
1992
+ insertArrows: "Insert arrow",
1993
+ insertDots: "Insert dots",
1994
+ insertIntegrals: "Insert integral",
1995
+ scripts: "Superscript and subscript",
1996
+ addSuperscript: "Add superscript",
1997
+ addSubscript: "Add subscript",
1998
+ removeSuperscript: "Remove superscript",
1999
+ removeSubscript: "Remove subscript",
2000
+ inputStyles: "Input styles",
2001
+ deleteSelectedStructure: "Delete selected structure",
2002
+ toggleLetterMerging: "Toggle letter merging",
2003
+ disableLetterMerging: "Disable letter merging",
2004
+ enableLetterMerging: "Enable letter merging",
2005
+ chooseWritingFont: "Choose writing font",
2006
+ chooseDigitForm: "Choose digit form",
2007
+ defaultFont: "Default font",
2008
+ takweenFont: "Takween font",
2009
+ diwaniFont: "Diwani font",
2010
+ diwaniOutlineFont: "Outlined Diwani font",
2011
+ writeDefaultFont: "Write with the default font",
2012
+ writeTakweenFont: "Write with Takween font",
2013
+ westernDigits: "Western digits",
2014
+ arabicIndicDigits: "Arabic-Indic digits",
2015
+ persianIndicDigits: "Persian digits",
2016
+ equationEditor: "Equation editor",
2017
+ renderPreview: "Rendered preview",
2018
+ development: "Development",
2019
+ showDebugLog: "Show debug log",
2020
+ hideDebugLog: "Hide debug log",
2021
+ copyDebugLog: "Copy debug log",
2022
+ empty: "Empty",
2023
+ englishLatex: "English LaTeX",
2024
+ arabicLatex: "Arabic LaTeX",
2025
+ inactiveEnglish: "Inactive chain (English)",
2026
+ inactiveArabic: "Inactive chain (Arabic)",
2027
+ mathJaxError: "MathJax error",
2028
+ previewError: "Preview error",
2029
+ activeSide: "Active side",
2030
+ syncState: "Sync state",
2031
+ arabicSide: "Arabic",
2032
+ englishSide: "English",
2033
+ synced: "Synced",
2034
+ differentItems: "different items",
2035
+ alignLeft: "Left",
2036
+ alignCenter: "Center",
2037
+ alignRight: "Right",
2038
+ alignColumnLeft: "Align column left",
2039
+ alignColumnCenter: "Align column center",
2040
+ alignColumnRight: "Align column right",
2041
+ matrixNoDelimiters: "Matrix without delimiters",
2042
+ matrixParentheses: "Matrix in parentheses",
2043
+ matrixBrackets: "Matrix in brackets",
2044
+ matrixBraces: "Matrix in braces",
2045
+ matrixBars: "Matrix between bars",
2046
+ matrixDoubleBars: "Matrix between double bars"
2047
+ }
2048
+ };
2049
+ function equationEditorMessages(locale) {
2050
+ return EQUATION_EDITOR_MESSAGES[locale];
2051
+ }
2052
+ function atomicCommandTitle(spec, locale) {
2053
+ return locale === "en" ? ENGLISH_COMMAND_TITLES[spec.id] ?? spec.title : spec.title;
2054
+ }
2055
+ function atomicOperatorCommandTitle(spec, locale) {
2056
+ return locale === "en" ? ENGLISH_OPERATOR_TITLES[spec.id] ?? spec.title : spec.title;
2057
+ }
2058
+
1672
2059
  // src/editor/state.ts
1673
2060
  function ensureSyncEntry(session, nodeId) {
1674
2061
  if (!session.sync[nodeId]) {
@@ -3365,8 +3752,8 @@ function spacingArrowForSide(spec, side) {
3365
3752
  }
3366
3753
  return side === "arabic" ? "\u2192" : "\u2190";
3367
3754
  }
3368
- function spacingTooltipForSide(spec, side) {
3369
- return `${spec.title} ${spacingArrowForSide(spec, side).repeat(spec.spacing.level)}`;
3755
+ function spacingTooltipForSide(spec, side, uiLocale = "ar") {
3756
+ return `${atomicCommandTitle(spec, uiLocale)} ${spacingArrowForSide(spec, side).repeat(spec.spacing.level)}`;
3370
3757
  }
3371
3758
  function buildFunctionAtomicCommandBody(node, side, spec) {
3372
3759
  const value = document.createElement("span");
@@ -3390,19 +3777,19 @@ function buildFunctionAtomicCommandBody(node, side, spec) {
3390
3777
  value.textContent = side === "arabic" ? spec?.arabicLabel ?? node.expr : spec?.englishTex.replace("\\", "") ?? node.expr;
3391
3778
  return value;
3392
3779
  }
3393
- function buildSpacingAtomicCommandBody(spec, side) {
3780
+ function buildSpacingAtomicCommandBody(spec, side, uiLocale) {
3394
3781
  const value = document.createElement("span");
3395
3782
  value.className = `atomic-spacing atomic-spacing--${spec.spacing.direction} atomic-spacing--level-${String(spec.spacing.level)}`;
3396
- value.title = spacingTooltipForSide(spec, side);
3783
+ value.title = spacingTooltipForSide(spec, side, uiLocale);
3397
3784
  const marker = document.createElement("span");
3398
3785
  marker.className = "atomic-spacing__marker";
3399
3786
  value.appendChild(marker);
3400
3787
  return value;
3401
3788
  }
3402
- function buildAtomicCommandNodeBody(node, side) {
3789
+ function buildAtomicCommandNodeBody(node, side, uiLocale = "ar") {
3403
3790
  const spec = atomicCommandSpec(node.expr);
3404
3791
  if (isSpacingCommandSpec(spec)) {
3405
- return buildSpacingAtomicCommandBody(spec, side);
3792
+ return buildSpacingAtomicCommandBody(spec, side, uiLocale);
3406
3793
  }
3407
3794
  return buildFunctionAtomicCommandBody(node, side, spec);
3408
3795
  }
@@ -3436,11 +3823,11 @@ function buildOperatorLabel(spec) {
3436
3823
  value.textContent = spec.Label;
3437
3824
  return value;
3438
3825
  }
3439
- function buildAtomicOperatorCommandNodeBody(node, side) {
3826
+ function buildAtomicOperatorCommandNodeBody(node, side, uiLocale = "ar") {
3440
3827
  const spec = atomicOperatorCommandSpec(node.expr);
3441
3828
  const value = document.createElement("span");
3442
3829
  value.className = "atomic-operator-command";
3443
- value.title = spec?.title ?? node.expr;
3830
+ value.title = spec ? atomicOperatorCommandTitle(spec, uiLocale) : node.expr;
3444
3831
  if (side === "arabic" && shouldMirrorOperatorDisplay(spec)) {
3445
3832
  value.classList.add("atomic-operator-command--mirrored");
3446
3833
  }
@@ -3494,7 +3881,7 @@ function buildNodeScripts(node, buildChain) {
3494
3881
  }
3495
3882
 
3496
3883
  // src/editor/display/index.ts
3497
- function buildNodeBody(node, buildChain, side, digitForm = "western") {
3884
+ function buildNodeBody(node, buildChain, side, digitForm = "western", uiLocale = "ar") {
3498
3885
  if (node.kind === "delimiter") {
3499
3886
  return buildDelimiterNodeBody(node, buildChain);
3500
3887
  }
@@ -3508,10 +3895,10 @@ function buildNodeBody(node, buildChain, side, digitForm = "western") {
3508
3895
  return buildMatrixEnvNodeBody(node, buildChain, side);
3509
3896
  }
3510
3897
  if (node.kind === "atomicCommand") {
3511
- return buildAtomicCommandNodeBody(node, side);
3898
+ return buildAtomicCommandNodeBody(node, side, uiLocale);
3512
3899
  }
3513
3900
  if (node.kind === "atomicOperatorCommand") {
3514
- return buildAtomicOperatorCommandNodeBody(node, side);
3901
+ return buildAtomicOperatorCommandNodeBody(node, side, uiLocale);
3515
3902
  }
3516
3903
  return buildBaseNodeBody(node, digitForm);
3517
3904
  }
@@ -3732,6 +4119,10 @@ function createEditorRuntime(options) {
3732
4119
  const buttonElements = options.buttonElements ?? {};
3733
4120
  const outsidePointerIgnoreSelectors = options.outsidePointerIgnoreSelectors ?? [];
3734
4121
  let session = options.initialSession ?? createStarterSession();
4122
+ let uiLocale = options.uiLocale ?? "ar";
4123
+ if (options.defaultSide) {
4124
+ session = { ...session, activeSide: options.defaultSide };
4125
+ }
3735
4126
  const undoRedo = createUndoRedoStacks();
3736
4127
  let lastInternalFragment = null;
3737
4128
  let initialKeyboardFocusPending = true;
@@ -3763,14 +4154,15 @@ function createEditorRuntime(options) {
3763
4154
  return index >= start && index < end;
3764
4155
  }
3765
4156
  function refreshUndoRedoButtons() {
4157
+ const messages = equationEditorMessages(uiLocale);
3766
4158
  if (buttonElements.undoBtn) {
3767
4159
  buttonElements.undoBtn.disabled = !undoRedoCanUndo(undoRedo);
3768
4160
  const arabicEquation = session.activeSide === "arabic";
3769
4161
  const undoArrow = arabicEquation ? "\u21B7" : "\u21B6";
3770
4162
  const vs = "\uFE0E";
3771
4163
  buttonElements.undoBtn.textContent = `${undoArrow}${vs}`;
3772
- buttonElements.undoBtn.title = "\u062A\u0631\u0627\u062C\u0639";
3773
- buttonElements.undoBtn.setAttribute("aria-label", "\u062A\u0631\u0627\u062C\u0639");
4164
+ buttonElements.undoBtn.title = messages.undo;
4165
+ buttonElements.undoBtn.setAttribute("aria-label", messages.undo);
3774
4166
  }
3775
4167
  if (buttonElements.redoBtn) {
3776
4168
  buttonElements.redoBtn.disabled = !undoRedoCanRedo(undoRedo);
@@ -3778,8 +4170,8 @@ function createEditorRuntime(options) {
3778
4170
  const redoArrow = arabicEquation ? "\u21B6" : "\u21B7";
3779
4171
  const vs = "\uFE0E";
3780
4172
  buttonElements.redoBtn.textContent = `${redoArrow}${vs}`;
3781
- buttonElements.redoBtn.title = "\u0625\u0639\u0627\u062F\u0629";
3782
- buttonElements.redoBtn.setAttribute("aria-label", "\u0625\u0639\u0627\u062F\u0629");
4173
+ buttonElements.redoBtn.title = messages.redo;
4174
+ buttonElements.redoBtn.setAttribute("aria-label", messages.redo);
3783
4175
  }
3784
4176
  }
3785
4177
  function refreshClipboardButtons() {
@@ -3798,9 +4190,10 @@ function createEditorRuntime(options) {
3798
4190
  return;
3799
4191
  }
3800
4192
  const mergeOn = !session.splitLeafTyping;
4193
+ const messages = equationEditorMessages(uiLocale);
3801
4194
  buttonElements.splitTypingBtn.textContent = mergeOn ? "\u0633\u0635\u0639" : "\u0633 \u0635 \u0639";
3802
- buttonElements.splitTypingBtn.title = mergeOn ? "\u062A\u0639\u0637\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641" : "\u062A\u0641\u0639\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641";
3803
- buttonElements.splitTypingBtn.setAttribute("aria-label", mergeOn ? "\u062A\u0639\u0637\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641" : "\u062A\u0641\u0639\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641");
4195
+ buttonElements.splitTypingBtn.title = mergeOn ? messages.disableLetterMerging : messages.enableLetterMerging;
4196
+ buttonElements.splitTypingBtn.setAttribute("aria-label", mergeOn ? messages.disableLetterMerging : messages.enableLetterMerging);
3804
4197
  buttonElements.splitTypingBtn.setAttribute("aria-pressed", mergeOn ? "true" : "false");
3805
4198
  buttonElements.splitTypingBtn.classList.toggle("accent", mergeOn);
3806
4199
  }
@@ -3809,9 +4202,10 @@ function createEditorRuntime(options) {
3809
4202
  return;
3810
4203
  }
3811
4204
  const takweenOn = (session.currentCharacterFont ?? "default") === "takween";
4205
+ const messages = equationEditorMessages(uiLocale);
3812
4206
  buttonElements.characterFontBtn.textContent = "\u062A\u0643";
3813
- buttonElements.characterFontBtn.title = takweenOn ? "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u0627\u0644\u062E\u0637 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A" : "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u062E\u0637 \u062A\u0643\u0648\u064A\u0646";
3814
- buttonElements.characterFontBtn.setAttribute("aria-label", takweenOn ? "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u0627\u0644\u062E\u0637 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A" : "\u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0628\u062E\u0637 \u062A\u0643\u0648\u064A\u0646");
4207
+ buttonElements.characterFontBtn.title = takweenOn ? messages.writeDefaultFont : messages.writeTakweenFont;
4208
+ buttonElements.characterFontBtn.setAttribute("aria-label", takweenOn ? messages.writeDefaultFont : messages.writeTakweenFont);
3815
4209
  buttonElements.characterFontBtn.setAttribute("aria-pressed", takweenOn ? "true" : "false");
3816
4210
  buttonElements.characterFontBtn.classList.toggle("accent", takweenOn);
3817
4211
  }
@@ -3822,8 +4216,9 @@ function createEditorRuntime(options) {
3822
4216
  const digitForm = session.currentDigitForm ?? "western";
3823
4217
  const label = digitForm === "arabicIndic" ? "\u0664\u0665\u0666" : digitForm === "persianIndic" ? "\u06F4\u06F5\u06F6" : "456";
3824
4218
  buttonElements.digitFormBtn.textContent = label;
3825
- buttonElements.digitFormBtn.title = "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645";
3826
- buttonElements.digitFormBtn.setAttribute("aria-label", "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645");
4219
+ const messages = equationEditorMessages(uiLocale);
4220
+ buttonElements.digitFormBtn.title = messages.chooseDigitForm;
4221
+ buttonElements.digitFormBtn.setAttribute("aria-label", messages.chooseDigitForm);
3827
4222
  buttonElements.digitFormBtn.dataset.digitForm = digitForm;
3828
4223
  }
3829
4224
  function applyStructural(updater) {
@@ -4025,7 +4420,7 @@ function createEditorRuntime(options) {
4025
4420
  const atomicSpec = node.kind === "atomicCommand" ? atomicCommandSpec(node.expr) : null;
4026
4421
  if (isSpacingCommandSpec(atomicSpec)) {
4027
4422
  nodeEl.classList.add("node--atomic-spacing");
4028
- nodeEl.title = spacingTooltipForSide(atomicSpec, session.activeSide);
4423
+ nodeEl.title = spacingTooltipForSide(atomicSpec, session.activeSide, uiLocale);
4029
4424
  }
4030
4425
  if (session.selectedNodeId === node.id || session.selectedStructureNodeId === node.id) {
4031
4426
  nodeEl.classList.add("selected");
@@ -4055,7 +4450,7 @@ function createEditorRuntime(options) {
4055
4450
  });
4056
4451
  const body = document.createElement("span");
4057
4452
  body.className = "node-body";
4058
- body.appendChild(buildNodeBody(node, buildChain, session.activeSide, session.currentDigitForm ?? "western"));
4453
+ body.appendChild(buildNodeBody(node, buildChain, session.activeSide, session.currentDigitForm ?? "western", uiLocale));
4059
4454
  nodeEl.appendChild(body);
4060
4455
  const scripts = buildNodeScripts(node, buildChain);
4061
4456
  if (scripts) {
@@ -4336,6 +4731,13 @@ function createEditorRuntime(options) {
4336
4731
  session = next;
4337
4732
  render();
4338
4733
  },
4734
+ setUiLocale: (locale) => {
4735
+ if (uiLocale === locale) {
4736
+ return;
4737
+ }
4738
+ uiLocale = locale;
4739
+ render();
4740
+ },
4339
4741
  performUndo,
4340
4742
  performRedo,
4341
4743
  performCopy,
@@ -5729,18 +6131,23 @@ function injectWidgetChromeCss(doc) {
5729
6131
  d.head.appendChild(style);
5730
6132
  }
5731
6133
 
6134
+ // src/uiLocale.ts
6135
+ function uiLocaleDirection(locale) {
6136
+ return locale === "ar" ? "rtl" : "ltr";
6137
+ }
6138
+
5732
6139
  // src/react/ButexEditor.tsx
5733
6140
  var import_jsx_runtime = require("react/jsx-runtime");
5734
6141
  var DIGIT_FORM_OPTIONS = [
5735
- { id: "western", label: "456", title: "\u0623\u0631\u0642\u0627\u0645 \u063A\u0631\u0628\u064A\u0629" },
5736
- { id: "arabicIndic", label: "\u0664\u0665\u0666", title: "\u0623\u0631\u0642\u0627\u0645 \u0639\u0631\u0628\u064A\u0629 \u0647\u0646\u062F\u064A\u0629" },
5737
- { id: "persianIndic", label: "\u06F4\u06F5\u06F6", title: "\u0623\u0631\u0642\u0627\u0645 \u0641\u0627\u0631\u0633\u064A\u0629 \u0647\u0646\u062F\u064A\u0629" }
6142
+ { id: "western", label: "456" },
6143
+ { id: "arabicIndic", label: "\u0664\u0665\u0666" },
6144
+ { id: "persianIndic", label: "\u06F4\u06F5\u06F6" }
5738
6145
  ];
5739
6146
  var CHARACTER_FONT_OPTIONS = [
5740
- { id: "default", label: "\u0633", title: "\u0627\u0644\u062E\u0637 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A" },
5741
- { id: "takween", label: "\u062A\u0643", title: "\u062E\u0637 \u062A\u0643\u0648\u064A\u0646" },
5742
- { id: "diwani", label: "\u062F\u064A\u0648", title: "\u062E\u0637 \u062F\u064A\u0648\u0627\u0646\u064A" },
5743
- { id: "diwaniOutline", label: "\u0638\u0644", title: "\u062E\u0637 \u062F\u064A\u0648\u0627\u0646\u064A \u0645\u0638\u0644\u0644" }
6147
+ { id: "default", label: "\u0633" },
6148
+ { id: "takween", label: "\u062A\u0643" },
6149
+ { id: "diwani", label: "\u062F\u064A\u0648" },
6150
+ { id: "diwaniOutline", label: "\u0638\u0644" }
5744
6151
  ];
5745
6152
  var FUNCTION_COMMANDS = atomicCommandsByCategory("function");
5746
6153
  var LIMITS_SERIES_COMMANDS = atomicCommandsByCategory("limits_series");
@@ -5753,20 +6160,20 @@ var OPERATOR3_COMMANDS = atomicOperatorCommandsByCategory("operators3");
5753
6160
  var DOT_COMMANDS = atomicOperatorCommandsByCategory("dots");
5754
6161
  var INTEGRAL_COMMANDS = atomicOperatorCommandsByCategory("integrals");
5755
6162
  var MATRIX_STYLES = [
5756
- { id: "matrix", label: "\u25A1", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u0644\u0627 \u0623\u0642\u0648\u0627\u0633" },
5757
- { id: "pmatrix", label: "(\u25A1)", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u0642\u0648\u0633\u064A\u0646" },
5758
- { id: "bmatrix", label: "[\u25A1]", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u0645\u0639\u0642\u0648\u0641\u064A\u0646" },
5759
- { id: "Bmatrix", label: "{\u25A1}", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062D\u0627\u0635\u0631\u062A\u064A\u0646" },
5760
- { id: "vmatrix", label: "|\u25A1|", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062E\u0637\u064A\u0646" },
5761
- { id: "Vmatrix", label: "||\u25A1||", title: "\u0645\u0635\u0641\u0648\u0641\u0629 \u0628\u064A\u0646 \u062E\u0637\u064A\u0646 \u0645\u0632\u062F\u0648\u062C\u064A\u0646" }
6163
+ { id: "matrix", label: "\u25A1" },
6164
+ { id: "pmatrix", label: "(\u25A1)" },
6165
+ { id: "bmatrix", label: "[\u25A1]" },
6166
+ { id: "Bmatrix", label: "{\u25A1}" },
6167
+ { id: "vmatrix", label: "|\u25A1|" },
6168
+ { id: "Vmatrix", label: "||\u25A1||" }
5762
6169
  ];
5763
6170
  var ARRAY_ALIGNMENTS = [
5764
- { id: "l", label: "\u064A\u0633\u0627\u0631", title: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631" },
5765
- { id: "c", label: "\u0648\u0633\u0637", title: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0641\u064A \u0627\u0644\u0648\u0633\u0637" },
5766
- { id: "r", label: "\u064A\u0645\u064A\u0646", title: "\u0645\u062D\u0627\u0630\u0627\u0629 \u0627\u0644\u0639\u0645\u0648\u062F \u0625\u0644\u0649 \u0627\u0644\u064A\u0645\u064A\u0646" }
6171
+ { id: "l" },
6172
+ { id: "c" },
6173
+ { id: "r" }
5767
6174
  ];
5768
- function matrixSizeLabel(rows, columns) {
5769
- return `${String(rows)} \u0635\u0641 \xD7 ${String(columns)} \u0639\u0645\u0648\u062F`;
6175
+ function matrixSizeLabel(rows, columns, messages) {
6176
+ return `${String(rows)} ${messages.row} \xD7 ${String(columns)} ${messages.column}`;
5770
6177
  }
5771
6178
  function clampMatrixSize(value) {
5772
6179
  return Math.max(1, Math.min(12, Math.trunc(value)));
@@ -5777,6 +6184,30 @@ function digitFormLabel(digitForm) {
5777
6184
  function characterFontOption(fontId) {
5778
6185
  return CHARACTER_FONT_OPTIONS.find((option) => option.id === fontId) ?? CHARACTER_FONT_OPTIONS[0];
5779
6186
  }
6187
+ function characterFontTitle(fontId, messages) {
6188
+ if (fontId === "takween") return messages.takweenFont;
6189
+ if (fontId === "diwani") return messages.diwaniFont;
6190
+ if (fontId === "diwaniOutline") return messages.diwaniOutlineFont;
6191
+ return messages.defaultFont;
6192
+ }
6193
+ function digitFormTitle(digitForm, messages) {
6194
+ if (digitForm === "arabicIndic") return messages.arabicIndicDigits;
6195
+ if (digitForm === "persianIndic") return messages.persianIndicDigits;
6196
+ return messages.westernDigits;
6197
+ }
6198
+ function matrixStyleTitle(style, messages) {
6199
+ if (style === "pmatrix") return messages.matrixParentheses;
6200
+ if (style === "bmatrix") return messages.matrixBrackets;
6201
+ if (style === "Bmatrix") return messages.matrixBraces;
6202
+ if (style === "vmatrix") return messages.matrixBars;
6203
+ if (style === "Vmatrix") return messages.matrixDoubleBars;
6204
+ return messages.matrixNoDelimiters;
6205
+ }
6206
+ function alignmentCopy(alignment, messages) {
6207
+ if (alignment === "l") return { label: messages.alignLeft, title: messages.alignColumnLeft };
6208
+ if (alignment === "r") return { label: messages.alignRight, title: messages.alignColumnRight };
6209
+ return { label: messages.alignCenter, title: messages.alignColumnCenter };
6210
+ }
5780
6211
  function spacingArrow(spec, side) {
5781
6212
  const pointsWithFlow = spec.spacing.direction === "positive";
5782
6213
  if (pointsWithFlow) {
@@ -5815,16 +6246,17 @@ function renderOperatorMenuButtonLabel(command, fallback) {
5815
6246
  }
5816
6247
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: shouldMirrorOperatorDisplay(command) ? "operator-command-label operator-command-label--mirror" : "operator-command-label", children: renderOperatorCommandLabel(command) });
5817
6248
  }
5818
- function passiveTreeText(session) {
6249
+ function passiveTreeText(session, messages) {
5819
6250
  const passive = session.activeSide === "arabic" ? session.englishTree : session.arabicTree;
5820
- const title = session.activeSide === "arabic" ? "\u0627\u0644\u0633\u0644\u0633\u0644\u0629 \u063A\u064A\u0631 \u0627\u0644\u0646\u0634\u0637\u0629 (\u0625\u0646\u062C\u0644\u064A\u0632\u064A)" : "\u0627\u0644\u0633\u0644\u0633\u0644\u0629 \u063A\u064A\u0631 \u0627\u0644\u0646\u0634\u0637\u0629 (\u0639\u0631\u0628\u064A)";
6251
+ const title = session.activeSide === "arabic" ? messages.inactiveEnglish : messages.inactiveArabic;
5821
6252
  const latex = session.activeSide === "arabic" ? renderChainEnglish(passive) : renderChainArabic(passive);
5822
6253
  return `${title}
5823
6254
 
5824
- ${latex || "\u0641\u0627\u0631\u063A"}`;
6255
+ ${latex || messages.empty}`;
5825
6256
  }
5826
6257
  var ButexEditor = (0, import_react.forwardRef)(
5827
- function ButexEditor2({ className, debug = false, initialSession, onSessionChange }, ref) {
6258
+ function ButexEditor2({ className, debug = false, defaultSide, uiLocale = "ar", initialSession, onSessionChange }, ref) {
6259
+ const messages = equationEditorMessages(uiLocale);
5828
6260
  const wrapperRef = (0, import_react.useRef)(null);
5829
6261
  const surfaceRef = (0, import_react.useRef)(null);
5830
6262
  const mathOutputRef = (0, import_react.useRef)(null);
@@ -5842,6 +6274,8 @@ var ButexEditor = (0, import_react.forwardRef)(
5842
6274
  const runtimeRef = (0, import_react.useRef)(null);
5843
6275
  const debugRef = (0, import_react.useRef)(debug);
5844
6276
  debugRef.current = debug;
6277
+ const uiLocaleRef = (0, import_react.useRef)(uiLocale);
6278
+ uiLocaleRef.current = uiLocale;
5845
6279
  const onSessionChangeRef = (0, import_react.useRef)(onSessionChange);
5846
6280
  onSessionChangeRef.current = onSessionChange;
5847
6281
  const debugBodyHiddenRef = (0, import_react.useRef)(false);
@@ -5883,14 +6317,15 @@ var ButexEditor = (0, import_react.forwardRef)(
5883
6317
  const arabic = renderArabicLatexFromSession(session);
5884
6318
  const activeLatex = session.activeSide === "arabic" ? arabic : english;
5885
6319
  if (debugRef.current && latexLinesEl) {
5886
- latexLinesEl.textContent = `LaTeX \u0625\u0646\u062C\u0644\u064A\u0632\u064A:
5887
- ${english || "\u0641\u0627\u0631\u063A"}
6320
+ const currentMessages = equationEditorMessages(uiLocaleRef.current);
6321
+ latexLinesEl.textContent = `${currentMessages.englishLatex}:
6322
+ ${english || currentMessages.empty}
5888
6323
 
5889
- LaTeX \u0639\u0631\u0628\u064A:
5890
- ${arabic || "\u0641\u0627\u0631\u063A"}`;
6324
+ ${currentMessages.arabicLatex}:
6325
+ ${arabic || currentMessages.empty}`;
5891
6326
  }
5892
6327
  if (debugRef.current && passivePreviewEl) {
5893
- passivePreviewEl.textContent = passiveTreeText(session);
6328
+ passivePreviewEl.textContent = passiveTreeText(session, equationEditorMessages(uiLocaleRef.current));
5894
6329
  passivePreviewEl.classList.toggle("passive--ltr", session.activeSide === "arabic");
5895
6330
  }
5896
6331
  if (debugRef.current && debugLogEl) {
@@ -5916,7 +6351,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
5916
6351
  } catch (err) {
5917
6352
  const message = err instanceof Error ? err.message : String(err);
5918
6353
  renderErrorEl.hidden = false;
5919
- renderErrorEl.textContent = `\u062E\u0637\u0623 MathJax: ${message}`;
6354
+ renderErrorEl.textContent = `${equationEditorMessages(uiLocaleRef.current).mathJaxError}: ${message}`;
5920
6355
  if (runtimeRef.current) {
5921
6356
  runtimeRef.current.setSession(setRenderError(runtimeRef.current.getSession(), message));
5922
6357
  }
@@ -5934,6 +6369,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
5934
6369
  const runtime = createEditorRuntime({
5935
6370
  surfaceEl,
5936
6371
  initialSession,
6372
+ defaultSide,
6373
+ uiLocale,
5937
6374
  buttonElements: {
5938
6375
  undoBtn: undoBtnRef.current,
5939
6376
  redoBtn: redoBtnRef.current,
@@ -5953,7 +6390,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
5953
6390
  const el = renderErrorRef.current;
5954
6391
  if (el) {
5955
6392
  el.hidden = false;
5956
- el.textContent = `\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u0645\u0639\u0627\u064A\u0646\u0629: ${message}`;
6393
+ el.textContent = `${equationEditorMessages(uiLocaleRef.current).previewError}: ${message}`;
5957
6394
  }
5958
6395
  });
5959
6396
  }
@@ -5978,6 +6415,13 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
5978
6415
  runtimeRef.current = null;
5979
6416
  };
5980
6417
  }, []);
6418
+ (0, import_react.useEffect)(() => {
6419
+ runtimeRef.current?.setUiLocale(uiLocale);
6420
+ const session = runtimeRef.current?.getSession();
6421
+ if (session) {
6422
+ void updatePreviewRef.current(session);
6423
+ }
6424
+ }, [uiLocale]);
5981
6425
  function focusSurface() {
5982
6426
  surfaceRef.current?.focus();
5983
6427
  }
@@ -5995,26 +6439,26 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
5995
6439
  {
5996
6440
  ref: wrapperRef,
5997
6441
  className: `butex-widget ${className ?? ""}`.trim(),
5998
- dir: "rtl",
5999
- lang: "ar",
6442
+ dir: uiLocaleDirection(uiLocale),
6443
+ lang: uiLocale,
6000
6444
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "butex-widget-layout", children: [
6001
6445
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "panel", children: [
6002
6446
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar", children: [
6003
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-history", role: "group", "aria-label": "\u062A\u0631\u0627\u062C\u0639 \u0648\u0625\u0639\u0627\u062F\u0629", children: [
6004
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: undoBtnRef, id: "btn-undo", type: "button", className: "icon-btn", title: "\u062A\u0631\u0627\u062C\u0639", "aria-label": "\u062A\u0631\u0627\u062C\u0639", children: "\u21B7" }),
6005
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: redoBtnRef, id: "btn-redo", type: "button", className: "icon-btn", title: "\u0625\u0639\u0627\u062F\u0629", "aria-label": "\u0625\u0639\u0627\u062F\u0629", children: "\u21B6" })
6447
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-history", role: "group", "aria-label": messages.undoRedo, children: [
6448
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: undoBtnRef, id: "btn-undo", type: "button", className: "icon-btn", title: messages.undo, "aria-label": messages.undo, children: "\u21B7" }),
6449
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: redoBtnRef, id: "btn-redo", type: "button", className: "icon-btn", title: messages.redo, "aria-label": messages.redo, children: "\u21B6" })
6006
6450
  ] }),
6007
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-clipboard", role: "group", "aria-label": "\u0627\u0644\u062D\u0627\u0641\u0638\u0629", children: [
6008
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: copyBtnRef, id: "btn-copy", type: "button", className: "icon-btn", title: "\u0646\u0633\u062E", "aria-label": "\u0646\u0633\u062E", disabled: true, children: "\u29C9" }),
6009
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: cutBtnRef, id: "btn-cut", type: "button", className: "icon-btn", title: "\u0642\u0635", "aria-label": "\u0642\u0635", disabled: true, children: "\u2702" }),
6451
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-clipboard", role: "group", "aria-label": messages.clipboard, children: [
6452
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: copyBtnRef, id: "btn-copy", type: "button", className: "icon-btn", title: messages.copy, "aria-label": messages.copy, disabled: true, children: "\u29C9" }),
6453
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: cutBtnRef, id: "btn-cut", type: "button", className: "icon-btn", title: messages.cut, "aria-label": messages.cut, disabled: true, children: "\u2702" }),
6010
6454
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6011
6455
  "button",
6012
6456
  {
6013
6457
  id: "btn-paste",
6014
6458
  type: "button",
6015
6459
  className: "icon-btn",
6016
- title: "\u0644\u0635\u0642",
6017
- "aria-label": "\u0644\u0635\u0642",
6460
+ title: messages.paste,
6461
+ "aria-label": messages.paste,
6018
6462
  onClick: () => {
6019
6463
  void runtimeRef.current?.performPaste().then(() => {
6020
6464
  focusSurface();
@@ -6024,8 +6468,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6024
6468
  }
6025
6469
  )
6026
6470
  ] }),
6027
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": "\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u062D\u0631\u0631", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn accent", type: "button", title: "\u062A\u0628\u062F\u064A\u0644 \u0639\u0631\u0628\u064A / \u0625\u0646\u062C\u0644\u064A\u0632\u064A", "aria-label": "\u062A\u0628\u062F\u064A\u0644 \u0639\u0631\u0628\u064A / \u0625\u0646\u062C\u0644\u064A\u0632\u064A", onClick: () => runtimeRef.current?.toggleSide(), children: "\u21C4" }) }),
6028
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-structures", role: "group", "aria-label": "\u0627\u0644\u0628\u0646\u0649", children: [
6471
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": messages.editorSettings, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn accent", type: "button", title: messages.toggleSide, "aria-label": messages.toggleSide, onClick: () => runtimeRef.current?.toggleSide(), children: "\u21C4" }) }),
6472
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-structures", role: "group", "aria-label": messages.structures, children: [
6029
6473
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6030
6474
  "div",
6031
6475
  {
@@ -6042,15 +6486,15 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6042
6486
  {
6043
6487
  className: "icon-btn delimiter-command-btn",
6044
6488
  type: "button",
6045
- title: "\u0625\u062F\u0631\u0627\u062C \u0645\u062D\u062F\u062F\u0627\u062A",
6046
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0645\u062D\u062F\u062F\u0627\u062A",
6489
+ title: messages.insertDelimiters,
6490
+ "aria-label": messages.insertDelimiters,
6047
6491
  "aria-haspopup": "listbox",
6048
6492
  "aria-expanded": delimiterMenuOpen,
6049
6493
  onClick: () => setDelimiterMenuOpen((open) => !open),
6050
6494
  children: "()"
6051
6495
  }
6052
6496
  ),
6053
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "delimiter-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0645\u062D\u062F\u062F\u0627\u062A", hidden: !delimiterMenuOpen, children: [
6497
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "delimiter-command-options", role: "listbox", "aria-label": messages.insertDelimiters, hidden: !delimiterMenuOpen, children: [
6054
6498
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6055
6499
  "button",
6056
6500
  {
@@ -6058,8 +6502,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6058
6502
  "data-delim": "paren",
6059
6503
  type: "button",
6060
6504
  role: "option",
6061
- title: "\u0625\u062F\u0631\u0627\u062C \u0642\u0648\u0633\u064A\u0646",
6062
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0642\u0648\u0633\u064A\u0646",
6505
+ title: messages.insertParentheses,
6506
+ "aria-label": messages.insertParentheses,
6063
6507
  onMouseDown: (event) => event.preventDefault(),
6064
6508
  onClick: () => {
6065
6509
  runtimeRef.current?.insertDelimiterByKind("paren");
@@ -6076,8 +6520,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6076
6520
  "data-delim": "bracket",
6077
6521
  type: "button",
6078
6522
  role: "option",
6079
- title: "\u0625\u062F\u0631\u0627\u062C \u0645\u0639\u0642\u0648\u0641\u064A\u0646",
6080
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0645\u0639\u0642\u0648\u0641\u064A\u0646",
6523
+ title: messages.insertBrackets,
6524
+ "aria-label": messages.insertBrackets,
6081
6525
  onMouseDown: (event) => event.preventDefault(),
6082
6526
  onClick: () => {
6083
6527
  runtimeRef.current?.insertDelimiterByKind("bracket");
@@ -6094,8 +6538,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6094
6538
  "data-delim": "brace",
6095
6539
  type: "button",
6096
6540
  role: "option",
6097
- title: "\u0625\u062F\u0631\u0627\u062C \u062D\u0627\u0635\u0631\u062A\u064A\u0646",
6098
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062D\u0627\u0635\u0631\u062A\u064A\u0646",
6541
+ title: messages.insertBraces,
6542
+ "aria-label": messages.insertBraces,
6099
6543
  onMouseDown: (event) => event.preventDefault(),
6100
6544
  onClick: () => {
6101
6545
  runtimeRef.current?.insertDelimiterByKind("brace");
@@ -6109,19 +6553,19 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6109
6553
  ]
6110
6554
  }
6111
6555
  ),
6112
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { id: "insert-frac", className: "icon-btn frac-icon-btn", type: "button", title: "\u0625\u062F\u0631\u0627\u062C \u0643\u0633\u0631", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0643\u0633\u0631", onClick: () => {
6556
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { id: "insert-frac", className: "icon-btn frac-icon-btn", type: "button", title: messages.insertFraction, "aria-label": messages.insertFraction, onClick: () => {
6113
6557
  runtimeRef.current?.insertFraction();
6114
6558
  focusSurface();
6115
6559
  }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-frac-icon", "aria-hidden": "true", children: [
6116
6560
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0623" }),
6117
6561
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0628" })
6118
6562
  ] }) }),
6119
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { id: "insert-sqrt", className: "icon-btn", type: "button", title: "\u0625\u062F\u0631\u0627\u062C \u062C\u0630\u0631", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062C\u0630\u0631", onClick: () => {
6563
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { id: "insert-sqrt", className: "icon-btn", type: "button", title: messages.insertRoot, "aria-label": messages.insertRoot, onClick: () => {
6120
6564
  runtimeRef.current?.insertSqrt();
6121
6565
  focusSurface();
6122
6566
  }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "toolbar-sqrt-icon", "aria-hidden": "true", children: "\u221A" }) })
6123
6567
  ] }),
6124
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-environments", role: "group", "aria-label": "\u0627\u0644\u0628\u064A\u0626\u0627\u062A", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6568
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-environments", role: "group", "aria-label": messages.environments, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6125
6569
  "div",
6126
6570
  {
6127
6571
  className: "matrix-command-menu",
@@ -6137,8 +6581,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6137
6581
  {
6138
6582
  className: "icon-btn matrix-command-btn",
6139
6583
  type: "button",
6140
- title: "\u0625\u062F\u0631\u0627\u062C \u0628\u064A\u0626\u0629 \u0634\u0628\u0643\u064A\u0629",
6141
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0628\u064A\u0626\u0629 \u0634\u0628\u0643\u064A\u0629",
6584
+ title: messages.insertEnvironment,
6585
+ "aria-label": messages.insertEnvironment,
6142
6586
  "aria-haspopup": "dialog",
6143
6587
  "aria-expanded": matrixMenuOpen,
6144
6588
  onClick: () => setMatrixMenuOpen((open) => !open),
@@ -6150,11 +6594,11 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6150
6594
  ] })
6151
6595
  }
6152
6596
  ),
6153
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "matrix-command-popover", role: "dialog", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0628\u064A\u0626\u0629 \u0634\u0628\u0643\u064A\u0629", hidden: !matrixMenuOpen, children: [
6154
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-style-options", role: "listbox", "aria-label": "\u0646\u0648\u0639 \u0627\u0644\u0628\u064A\u0626\u0629", children: [
6155
- { id: "matrix", label: "\u0645\u0635\u0641\u0648\u0641\u0629" },
6156
- { id: "array", label: "\u062C\u062F\u0648\u0644" },
6157
- { id: "aligned", label: "\u0645\u062D\u0627\u0630\u0627\u0629" }
6597
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "matrix-command-popover", role: "dialog", "aria-label": messages.insertEnvironment, hidden: !matrixMenuOpen, children: [
6598
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-style-options", role: "listbox", "aria-label": messages.environmentType, children: [
6599
+ { id: "matrix", label: messages.matrix },
6600
+ { id: "array", label: messages.array },
6601
+ { id: "aligned", label: messages.aligned }
6158
6602
  ].map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6159
6603
  "button",
6160
6604
  {
@@ -6173,14 +6617,14 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6173
6617
  },
6174
6618
  option.id
6175
6619
  )) }),
6176
- envPaletteMode === "matrix" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-style-options", role: "listbox", "aria-label": "\u0646\u0648\u0639 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629", children: MATRIX_STYLES.map((style) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6620
+ envPaletteMode === "matrix" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-style-options", role: "listbox", "aria-label": messages.matrixType, children: MATRIX_STYLES.map((style) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6177
6621
  "button",
6178
6622
  {
6179
6623
  type: "button",
6180
6624
  role: "option",
6181
6625
  "aria-selected": matrixStyle === style.id,
6182
6626
  className: "matrix-style-option",
6183
- title: style.title,
6627
+ title: matrixStyleTitle(style.id, messages),
6184
6628
  onMouseDown: (event) => event.preventDefault(),
6185
6629
  onClick: () => {
6186
6630
  setMatrixStyle(style.id);
@@ -6189,8 +6633,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6189
6633
  },
6190
6634
  style.id
6191
6635
  )) }) : null,
6192
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-size-readout", children: matrixHover ? matrixSizeLabel(matrixHover.rows, matrixHover.columns) : matrixSizeLabel(matrixRows, matrixColumns) }),
6193
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-grid-picker", "aria-label": "\u0627\u062E\u062A\u064A\u0627\u0631 \u062D\u062C\u0645 \u0627\u0644\u0628\u064A\u0626\u0629", children: Array.from(
6636
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-size-readout", children: matrixHover ? matrixSizeLabel(matrixHover.rows, matrixHover.columns, messages) : matrixSizeLabel(matrixRows, matrixColumns, messages) }),
6637
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "matrix-grid-picker", "aria-label": messages.chooseEnvironmentSize, children: Array.from(
6194
6638
  { length: 8 },
6195
6639
  (_, rowIndex) => Array.from({ length: 8 }, (_2, columnIndex) => {
6196
6640
  const rows = rowIndex + 1;
@@ -6202,8 +6646,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6202
6646
  {
6203
6647
  type: "button",
6204
6648
  className: rows <= activeRows && columns <= activeColumns ? "matrix-grid-cell active" : "matrix-grid-cell",
6205
- title: matrixSizeLabel(rows, columns),
6206
- "aria-label": matrixSizeLabel(rows, columns),
6649
+ title: matrixSizeLabel(rows, columns, messages),
6650
+ "aria-label": matrixSizeLabel(rows, columns, messages),
6207
6651
  onMouseEnter: () => setMatrixHover({ rows, columns }),
6208
6652
  onMouseDown: (event) => event.preventDefault(),
6209
6653
  onClick: () => {
@@ -6221,7 +6665,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6221
6665
  ) }),
6222
6666
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "matrix-custom-size", children: [
6223
6667
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
6224
- "\u0635\u0641",
6668
+ messages.row,
6225
6669
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6226
6670
  "input",
6227
6671
  {
@@ -6234,7 +6678,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6234
6678
  )
6235
6679
  ] }),
6236
6680
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
6237
- "\u0639\u0645\u0648\u062F",
6681
+ messages.column,
6238
6682
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6239
6683
  "input",
6240
6684
  {
@@ -6260,15 +6704,15 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6260
6704
  setMatrixHover(null);
6261
6705
  focusSurface();
6262
6706
  },
6263
- children: "\u0625\u062F\u0631\u0627\u062C"
6707
+ children: messages.insert
6264
6708
  }
6265
6709
  )
6266
6710
  ] }),
6267
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "matrix-edit-actions", "aria-label": "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u064A\u0626\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", children: [
6268
- envPaletteMode === "matrix" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: "\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0646\u0645\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.setMatrixEnvStyle(matrixStyle), children: "\u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u0646\u0645\u0637" }) : null,
6711
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "matrix-edit-actions", "aria-label": messages.editSelectedEnvironment, children: [
6712
+ envPaletteMode === "matrix" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: messages.applySelectedMatrixStyle, onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.setMatrixEnvStyle(matrixStyle), children: messages.applyStyle }) : null,
6269
6713
  envPaletteMode === "array" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
6270
6714
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { children: [
6271
- "\u0639\u0645\u0648\u062F",
6715
+ messages.column,
6272
6716
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6273
6717
  "input",
6274
6718
  {
@@ -6284,24 +6728,36 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6284
6728
  "button",
6285
6729
  {
6286
6730
  type: "button",
6287
- title: alignment.title,
6731
+ title: alignmentCopy(alignment.id, messages).title,
6288
6732
  onMouseDown: (event) => event.preventDefault(),
6289
6733
  onClick: () => runtimeRef.current?.setArrayColumnAlignment(arrayAlignmentColumn - 1, alignment.id),
6290
- children: alignment.label
6734
+ children: alignmentCopy(alignment.id, messages).label
6291
6735
  },
6292
6736
  alignment.id
6293
6737
  ))
6294
6738
  ] }) : null,
6295
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: "\u0625\u0636\u0627\u0641\u0629 \u0635\u0641", onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.addMatrixRow(), children: "+\u0635\u0641" }),
6296
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: "\u062D\u0630\u0641 \u0635\u0641", onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.removeMatrixRow(), children: "-\u0635\u0641" }),
6297
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: "\u0625\u0636\u0627\u0641\u0629 \u0639\u0645\u0648\u062F", onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.addMatrixColumn(), children: "+\u0639\u0645\u0648\u062F" }),
6298
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "button", title: "\u062D\u0630\u0641 \u0639\u0645\u0648\u062F", onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.removeMatrixColumn(), children: "-\u0639\u0645\u0648\u062F" })
6739
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", title: messages.addRow, onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.addMatrixRow(), children: [
6740
+ "+",
6741
+ messages.row
6742
+ ] }),
6743
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", title: messages.removeRow, onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.removeMatrixRow(), children: [
6744
+ "-",
6745
+ messages.row
6746
+ ] }),
6747
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", title: messages.addColumn, onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.addMatrixColumn(), children: [
6748
+ "+",
6749
+ messages.column
6750
+ ] }),
6751
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", title: messages.removeColumn, onMouseDown: (event) => event.preventDefault(), onClick: () => runtimeRef.current?.removeMatrixColumn(), children: [
6752
+ "-",
6753
+ messages.column
6754
+ ] })
6299
6755
  ] })
6300
6756
  ] })
6301
6757
  ]
6302
6758
  }
6303
6759
  ) }),
6304
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": "\u0627\u0644\u0641\u0631\u0627\u063A\u0627\u062A", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6760
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": messages.spaces, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6305
6761
  "div",
6306
6762
  {
6307
6763
  className: `spacing-command-menu spacing-command-menu--${activeEditorSide}`,
@@ -6317,8 +6773,8 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6317
6773
  {
6318
6774
  className: "icon-btn spacing-command-btn",
6319
6775
  type: "button",
6320
- title: "\u0625\u062F\u0631\u0627\u062C \u0641\u0631\u0627\u063A",
6321
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0641\u0631\u0627\u063A",
6776
+ title: messages.insertSpace,
6777
+ "aria-label": messages.insertSpace,
6322
6778
  "aria-haspopup": "listbox",
6323
6779
  "aria-expanded": spacingMenuOpen,
6324
6780
  onClick: () => setSpacingMenuOpen((open) => !open),
@@ -6328,13 +6784,13 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6328
6784
  ] })
6329
6785
  }
6330
6786
  ),
6331
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "spacing-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0641\u0631\u0627\u063A", hidden: !spacingMenuOpen, children: SPACING_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6787
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "spacing-command-options", role: "listbox", "aria-label": messages.insertSpace, hidden: !spacingMenuOpen, children: SPACING_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6332
6788
  "button",
6333
6789
  {
6334
6790
  type: "button",
6335
6791
  role: "option",
6336
6792
  className: `spacing-command-option spacing-command-option--${command.spacing.direction}`,
6337
- title: command.title,
6793
+ title: atomicCommandTitle(command, uiLocale),
6338
6794
  onMouseDown: (event) => event.preventDefault(),
6339
6795
  onClick: () => {
6340
6796
  runtimeRef.current?.insertAtomicCommand(command.id);
@@ -6347,7 +6803,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6347
6803
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "spacing-command-glyph__bar" }),
6348
6804
  command.spacing.direction === "positive" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "spacing-command-glyph__arrow", children: spacingArrow(command, activeEditorSide) }) : null
6349
6805
  ] }),
6350
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "spacing-command-option__name", children: command.title })
6806
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "spacing-command-option__name", children: atomicCommandTitle(command, uiLocale) })
6351
6807
  ]
6352
6808
  },
6353
6809
  command.id
@@ -6355,7 +6811,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6355
6811
  ]
6356
6812
  }
6357
6813
  ) }),
6358
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-functions", role: "group", "aria-label": "\u0627\u0644\u062F\u0648\u0627\u0644", children: [
6814
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-functions", role: "group", "aria-label": messages.functions, children: [
6359
6815
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6360
6816
  "div",
6361
6817
  {
@@ -6372,22 +6828,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6372
6828
  {
6373
6829
  className: "icon-btn function-command-btn",
6374
6830
  type: "button",
6375
- title: "\u0625\u062F\u0631\u0627\u062C \u062F\u0627\u0644\u0629",
6376
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062F\u0627\u0644\u0629",
6831
+ title: messages.insertFunction,
6832
+ "aria-label": messages.insertFunction,
6377
6833
  "aria-haspopup": "listbox",
6378
6834
  "aria-expanded": functionMenuOpen,
6379
6835
  onClick: () => setFunctionMenuOpen((open) => !open),
6380
6836
  children: FUNCTION_COMMANDS[0]?.arabicLabel ?? "\u062F"
6381
6837
  }
6382
6838
  ),
6383
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062F\u0627\u0644\u0629", hidden: !functionMenuOpen, children: FUNCTION_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6839
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": messages.insertFunction, hidden: !functionMenuOpen, children: FUNCTION_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6384
6840
  "button",
6385
6841
  {
6386
6842
  className: "function-command-option",
6387
6843
  type: "button",
6388
6844
  role: "option",
6389
- title: command.title,
6390
- "aria-label": command.title,
6845
+ title: atomicCommandTitle(command, uiLocale),
6846
+ "aria-label": atomicCommandTitle(command, uiLocale),
6391
6847
  onMouseDown: (event) => event.preventDefault(),
6392
6848
  onClick: () => {
6393
6849
  runtimeRef.current?.insertAtomicCommand(command.id);
@@ -6417,22 +6873,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6417
6873
  {
6418
6874
  className: "icon-btn function-command-btn",
6419
6875
  type: "button",
6420
- title: "\u0625\u062F\u0631\u0627\u062C \u062D\u062F\u0648\u062F \u0648\u0645\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
6421
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062D\u062F\u0648\u062F \u0648\u0645\u062A\u0633\u0644\u0633\u0644\u0627\u062A",
6876
+ title: messages.insertLimitsSeries,
6877
+ "aria-label": messages.insertLimitsSeries,
6422
6878
  "aria-haspopup": "listbox",
6423
6879
  "aria-expanded": limitsSeriesMenuOpen,
6424
6880
  onClick: () => setLimitsSeriesMenuOpen((open) => !open),
6425
6881
  children: LIMITS_SERIES_COMMANDS[0]?.arabicLabel ?? "\u062D\u062F"
6426
6882
  }
6427
6883
  ),
6428
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062D\u062F\u0648\u062F \u0648\u0645\u062A\u0633\u0644\u0633\u0644\u0627\u062A", hidden: !limitsSeriesMenuOpen, children: LIMITS_SERIES_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6884
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": messages.insertLimitsSeries, hidden: !limitsSeriesMenuOpen, children: LIMITS_SERIES_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6429
6885
  "button",
6430
6886
  {
6431
6887
  className: "function-command-option",
6432
6888
  type: "button",
6433
6889
  role: "option",
6434
- title: command.title,
6435
- "aria-label": command.title,
6890
+ title: atomicCommandTitle(command, uiLocale),
6891
+ "aria-label": atomicCommandTitle(command, uiLocale),
6436
6892
  onMouseDown: (event) => event.preventDefault(),
6437
6893
  onClick: () => {
6438
6894
  runtimeRef.current?.insertAtomicCommand(command.id);
@@ -6462,22 +6918,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6462
6918
  {
6463
6919
  className: "icon-btn function-command-btn",
6464
6920
  type: "button",
6465
- title: "\u0625\u062F\u0631\u0627\u062C \u062F\u0648\u0627\u0644 \u0625\u0636\u0627\u0641\u064A\u0629",
6466
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062F\u0648\u0627\u0644 \u0625\u0636\u0627\u0641\u064A\u0629",
6921
+ title: messages.insertAdditionalFunctions,
6922
+ "aria-label": messages.insertAdditionalFunctions,
6467
6923
  "aria-haspopup": "listbox",
6468
6924
  "aria-expanded": function2MenuOpen,
6469
6925
  onClick: () => setFunction2MenuOpen((open) => !open),
6470
6926
  children: FUNCTION2_COMMANDS[0]?.arabicLabel ?? "\u062F"
6471
6927
  }
6472
6928
  ),
6473
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062F\u0648\u0627\u0644 \u0625\u0636\u0627\u0641\u064A\u0629", hidden: !function2MenuOpen, children: FUNCTION2_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6929
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": messages.insertAdditionalFunctions, hidden: !function2MenuOpen, children: FUNCTION2_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6474
6930
  "button",
6475
6931
  {
6476
6932
  className: "function-command-option",
6477
6933
  type: "button",
6478
6934
  role: "option",
6479
- title: command.title,
6480
- "aria-label": command.title,
6935
+ title: atomicCommandTitle(command, uiLocale),
6936
+ "aria-label": atomicCommandTitle(command, uiLocale),
6481
6937
  onMouseDown: (event) => event.preventDefault(),
6482
6938
  onClick: () => {
6483
6939
  runtimeRef.current?.insertAtomicCommand(command.id);
@@ -6507,22 +6963,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6507
6963
  {
6508
6964
  className: "icon-btn function-command-btn",
6509
6965
  type: "button",
6510
- title: "\u0625\u062F\u0631\u0627\u062C \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0623\u0639\u062F\u0627\u062F",
6511
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0623\u0639\u062F\u0627\u062F",
6966
+ title: messages.insertNumberSets,
6967
+ "aria-label": messages.insertNumberSets,
6512
6968
  "aria-haspopup": "listbox",
6513
6969
  "aria-expanded": groupMenuOpen,
6514
6970
  onClick: () => setGroupMenuOpen((open) => !open),
6515
6971
  children: GROUP_COMMANDS[0]?.arabicLabel ?? "\u0645"
6516
6972
  }
6517
6973
  ),
6518
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0623\u0639\u062F\u0627\u062F", hidden: !groupMenuOpen, children: GROUP_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6974
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options", role: "listbox", "aria-label": messages.insertNumberSets, hidden: !groupMenuOpen, children: GROUP_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6519
6975
  "button",
6520
6976
  {
6521
6977
  className: "function-command-option",
6522
6978
  type: "button",
6523
6979
  role: "option",
6524
- title: command.title,
6525
- "aria-label": command.title,
6980
+ title: atomicCommandTitle(command, uiLocale),
6981
+ "aria-label": atomicCommandTitle(command, uiLocale),
6526
6982
  onMouseDown: (event) => event.preventDefault(),
6527
6983
  onClick: () => {
6528
6984
  runtimeRef.current?.insertAtomicCommand(command.id);
@@ -6537,7 +6993,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6537
6993
  }
6538
6994
  )
6539
6995
  ] }),
6540
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-operators", role: "group", "aria-label": "\u0627\u0644\u0639\u0645\u0644\u064A\u0627\u062A", children: [
6996
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-operators", role: "group", "aria-label": messages.operations, children: [
6541
6997
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6542
6998
  "div",
6543
6999
  {
@@ -6554,22 +7010,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6554
7010
  {
6555
7011
  className: "icon-btn function-command-btn operator-command-btn",
6556
7012
  type: "button",
6557
- title: "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0632 \u0639\u0645\u0644\u064A\u0629",
6558
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0632 \u0639\u0645\u0644\u064A\u0629",
7013
+ title: messages.insertOperation,
7014
+ "aria-label": messages.insertOperation,
6559
7015
  "aria-haspopup": "listbox",
6560
7016
  "aria-expanded": operatorMenuOpen,
6561
7017
  onClick: () => setOperatorMenuOpen((open) => !open),
6562
7018
  children: renderOperatorMenuButtonLabel(OPERATOR_COMMANDS[0], "\u2217")
6563
7019
  }
6564
7020
  ),
6565
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0632 \u0639\u0645\u0644\u064A\u0629", hidden: !operatorMenuOpen, children: OPERATOR_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7021
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": messages.insertOperation, hidden: !operatorMenuOpen, children: OPERATOR_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6566
7022
  "button",
6567
7023
  {
6568
7024
  className: "function-command-option operator-command-option",
6569
7025
  type: "button",
6570
7026
  role: "option",
6571
- title: command.title,
6572
- "aria-label": command.title,
7027
+ title: atomicOperatorCommandTitle(command, uiLocale),
7028
+ "aria-label": atomicOperatorCommandTitle(command, uiLocale),
6573
7029
  onMouseDown: (event) => event.preventDefault(),
6574
7030
  onClick: () => {
6575
7031
  runtimeRef.current?.insertAtomicOperatorCommand(command.id);
@@ -6599,22 +7055,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6599
7055
  {
6600
7056
  className: "icon-btn function-command-btn operator-command-btn",
6601
7057
  type: "button",
6602
- title: "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0648\u0632 \u0639\u0644\u0627\u0642\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0627\u062A",
6603
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0648\u0632 \u0639\u0644\u0627\u0642\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0627\u062A",
7058
+ title: messages.insertRelationsSets,
7059
+ "aria-label": messages.insertRelationsSets,
6604
7060
  "aria-haspopup": "listbox",
6605
7061
  "aria-expanded": operator2MenuOpen,
6606
7062
  onClick: () => setOperator2MenuOpen((open) => !open),
6607
7063
  children: "\u2229"
6608
7064
  }
6609
7065
  ),
6610
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0631\u0645\u0648\u0632 \u0639\u0644\u0627\u0642\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0627\u062A", hidden: !operator2MenuOpen, children: OPERATOR2_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7066
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": messages.insertRelationsSets, hidden: !operator2MenuOpen, children: OPERATOR2_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6611
7067
  "button",
6612
7068
  {
6613
7069
  className: "function-command-option operator-command-option",
6614
7070
  type: "button",
6615
7071
  role: "option",
6616
- title: command.title,
6617
- "aria-label": command.title,
7072
+ title: atomicOperatorCommandTitle(command, uiLocale),
7073
+ "aria-label": atomicOperatorCommandTitle(command, uiLocale),
6618
7074
  onMouseDown: (event) => event.preventDefault(),
6619
7075
  onClick: () => {
6620
7076
  runtimeRef.current?.insertAtomicOperatorCommand(command.id);
@@ -6644,22 +7100,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6644
7100
  {
6645
7101
  className: "icon-btn function-command-btn operator-command-btn",
6646
7102
  type: "button",
6647
- title: "\u0625\u062F\u0631\u0627\u062C \u0623\u0633\u0647\u0645",
6648
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0623\u0633\u0647\u0645",
7103
+ title: messages.insertArrows,
7104
+ "aria-label": messages.insertArrows,
6649
7105
  "aria-haspopup": "listbox",
6650
7106
  "aria-expanded": operator3MenuOpen,
6651
7107
  onClick: () => setOperator3MenuOpen((open) => !open),
6652
7108
  children: renderOperatorMenuButtonLabel(OPERATOR3_COMMANDS[0], "\u21D2")
6653
7109
  }
6654
7110
  ),
6655
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0623\u0633\u0647\u0645", hidden: !operator3MenuOpen, children: OPERATOR3_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7111
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": messages.insertArrows, hidden: !operator3MenuOpen, children: OPERATOR3_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6656
7112
  "button",
6657
7113
  {
6658
7114
  className: "function-command-option operator-command-option",
6659
7115
  type: "button",
6660
7116
  role: "option",
6661
- title: command.title,
6662
- "aria-label": command.title,
7117
+ title: atomicOperatorCommandTitle(command, uiLocale),
7118
+ "aria-label": atomicOperatorCommandTitle(command, uiLocale),
6663
7119
  onMouseDown: (event) => event.preventDefault(),
6664
7120
  onClick: () => {
6665
7121
  runtimeRef.current?.insertAtomicOperatorCommand(command.id);
@@ -6689,22 +7145,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6689
7145
  {
6690
7146
  className: "icon-btn function-command-btn operator-command-btn",
6691
7147
  type: "button",
6692
- title: "\u0625\u062F\u0631\u0627\u062C \u0646\u0642\u0627\u0637",
6693
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0646\u0642\u0627\u0637",
7148
+ title: messages.insertDots,
7149
+ "aria-label": messages.insertDots,
6694
7150
  "aria-haspopup": "listbox",
6695
7151
  "aria-expanded": dotMenuOpen,
6696
7152
  onClick: () => setDotMenuOpen((open) => !open),
6697
7153
  children: renderOperatorMenuButtonLabel(DOT_COMMANDS[0], "\u2026")
6698
7154
  }
6699
7155
  ),
6700
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u0646\u0642\u0627\u0637", hidden: !dotMenuOpen, children: DOT_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7156
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": messages.insertDots, hidden: !dotMenuOpen, children: DOT_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6701
7157
  "button",
6702
7158
  {
6703
7159
  className: "function-command-option operator-command-option",
6704
7160
  type: "button",
6705
7161
  role: "option",
6706
- title: command.title,
6707
- "aria-label": command.title,
7162
+ title: atomicOperatorCommandTitle(command, uiLocale),
7163
+ "aria-label": atomicOperatorCommandTitle(command, uiLocale),
6708
7164
  onMouseDown: (event) => event.preventDefault(),
6709
7165
  onClick: () => {
6710
7166
  runtimeRef.current?.insertAtomicOperatorCommand(command.id);
@@ -6734,22 +7190,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6734
7190
  {
6735
7191
  className: "icon-btn function-command-btn operator-command-btn",
6736
7192
  type: "button",
6737
- title: "\u0625\u062F\u0631\u0627\u062C \u062A\u0643\u0627\u0645\u0644\u0627\u062A",
6738
- "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062A\u0643\u0627\u0645\u0644\u0627\u062A",
7193
+ title: messages.insertIntegrals,
7194
+ "aria-label": messages.insertIntegrals,
6739
7195
  "aria-haspopup": "listbox",
6740
7196
  "aria-expanded": integralMenuOpen,
6741
7197
  onClick: () => setIntegralMenuOpen((open) => !open),
6742
7198
  children: renderOperatorMenuButtonLabel(INTEGRAL_COMMANDS[0], "\u222B")
6743
7199
  }
6744
7200
  ),
6745
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": "\u0625\u062F\u0631\u0627\u062C \u062A\u0643\u0627\u0645\u0644\u0627\u062A", hidden: !integralMenuOpen, children: INTEGRAL_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7201
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "function-command-options operator-command-options", role: "listbox", "aria-label": messages.insertIntegrals, hidden: !integralMenuOpen, children: INTEGRAL_COMMANDS.map((command) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6746
7202
  "button",
6747
7203
  {
6748
7204
  className: "function-command-option operator-command-option",
6749
7205
  type: "button",
6750
7206
  role: "option",
6751
- title: command.title,
6752
- "aria-label": command.title,
7207
+ title: atomicOperatorCommandTitle(command, uiLocale),
7208
+ "aria-label": atomicOperatorCommandTitle(command, uiLocale),
6753
7209
  onMouseDown: (event) => event.preventDefault(),
6754
7210
  onClick: () => {
6755
7211
  runtimeRef.current?.insertAtomicOperatorCommand(command.id);
@@ -6764,27 +7220,27 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6764
7220
  }
6765
7221
  )
6766
7222
  ] }),
6767
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-scripts", role: "group", "aria-label": "\u0627\u0644\u0623\u0633 \u0648\u0627\u0644\u0633\u0641\u0644\u064A", children: [
6768
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn", type: "button", title: "\u0625\u0636\u0627\u0641\u0629 \u0623\u0633", "aria-label": "\u0625\u0636\u0627\u0641\u0629 \u0623\u0633", onClick: () => runtimeRef.current?.addSup(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-script-icon toolbar-script-icon--sup", "aria-hidden": "true", children: [
7223
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-scripts", role: "group", "aria-label": messages.scripts, children: [
7224
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn", type: "button", title: messages.addSuperscript, "aria-label": messages.addSuperscript, onClick: () => runtimeRef.current?.addSup(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-script-icon toolbar-script-icon--sup", "aria-hidden": "true", children: [
6769
7225
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0646" }),
6770
7226
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0633" })
6771
7227
  ] }) }),
6772
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn", type: "button", title: "\u0625\u0636\u0627\u0641\u0629 \u0633\u0641\u0644\u064A", "aria-label": "\u0625\u0636\u0627\u0641\u0629 \u0633\u0641\u0644\u064A", onClick: () => runtimeRef.current?.addSub(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-script-icon toolbar-script-icon--sub", "aria-hidden": "true", children: [
7228
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn", type: "button", title: messages.addSubscript, "aria-label": messages.addSubscript, onClick: () => runtimeRef.current?.addSub(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-script-icon toolbar-script-icon--sub", "aria-hidden": "true", children: [
6773
7229
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0646" }),
6774
7230
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0633" })
6775
7231
  ] }) }),
6776
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn remove-script-btn", type: "button", title: "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0623\u0633", "aria-label": "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0623\u0633", onClick: () => runtimeRef.current?.removeSup(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-remove-script-icon toolbar-remove-script-icon--sup", "aria-hidden": "true", children: [
7232
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn remove-script-btn", type: "button", title: messages.removeSuperscript, "aria-label": messages.removeSuperscript, onClick: () => runtimeRef.current?.removeSup(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-remove-script-icon toolbar-remove-script-icon--sup", "aria-hidden": "true", children: [
6777
7233
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0646" }),
6778
7234
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\xD7" })
6779
7235
  ] }) }),
6780
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn remove-script-btn", type: "button", title: "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0641\u0644\u064A", "aria-label": "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0633\u0641\u0644\u064A", onClick: () => runtimeRef.current?.removeSub(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-remove-script-icon toolbar-remove-script-icon--sub", "aria-hidden": "true", children: [
7236
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn script-icon-btn remove-script-btn", type: "button", title: messages.removeSubscript, "aria-label": messages.removeSubscript, onClick: () => runtimeRef.current?.removeSub(), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "toolbar-remove-script-icon toolbar-remove-script-icon--sub", "aria-hidden": "true", children: [
6781
7237
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\u0646" }),
6782
7238
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\xD7" })
6783
7239
  ] }) })
6784
7240
  ] }),
6785
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": "\u0623\u0646\u0645\u0627\u0637 \u0627\u0644\u0625\u062F\u062E\u0627\u0644", children: [
6786
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn delete-node-btn", type: "button", title: "\u062D\u0630\u0641 \u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", "aria-label": "\u062D\u0630\u0641 \u0627\u0644\u0628\u0646\u064A\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", onClick: () => runtimeRef.current?.deleteStructure(), children: "\xD7" }),
6787
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: splitTypingBtnRef, id: "toggle-split-leaf-typing", className: "icon-btn ligature-btn", type: "button", title: "\u062A\u0628\u062F\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641", "aria-label": "\u062A\u0628\u062F\u064A\u0644 \u062F\u0645\u062C \u0627\u0644\u062D\u0631\u0648\u0641", onClick: () => runtimeRef.current?.toggleSplitLeafTyping(), children: "\u0633\u0635\u0639" }),
7241
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "toolbar-group toolbar-settings", role: "group", "aria-label": messages.inputStyles, children: [
7242
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "icon-btn delete-node-btn", type: "button", title: messages.deleteSelectedStructure, "aria-label": messages.deleteSelectedStructure, onClick: () => runtimeRef.current?.deleteStructure(), children: "\xD7" }),
7243
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref: splitTypingBtnRef, id: "toggle-split-leaf-typing", className: "icon-btn ligature-btn", type: "button", title: messages.toggleLetterMerging, "aria-label": messages.toggleLetterMerging, onClick: () => runtimeRef.current?.toggleSplitLeafTyping(), children: "\u0633\u0635\u0639" }),
6788
7244
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
6789
7245
  "div",
6790
7246
  {
@@ -6803,22 +7259,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6803
7259
  id: "select-character-font",
6804
7260
  className: `icon-btn font-mode-btn font-mode-btn--${selectedCharacterFont}`,
6805
7261
  type: "button",
6806
- title: characterFontOption(selectedCharacterFont).title,
6807
- "aria-label": "\u0627\u062E\u062A\u064A\u0627\u0631 \u062E\u0637 \u0627\u0644\u0643\u062A\u0627\u0628\u0629",
7262
+ title: characterFontTitle(selectedCharacterFont, messages),
7263
+ "aria-label": messages.chooseWritingFont,
6808
7264
  "aria-haspopup": "listbox",
6809
7265
  "aria-expanded": characterFontMenuOpen,
6810
7266
  onClick: () => setCharacterFontMenuOpen((open) => !open),
6811
7267
  children: characterFontOption(selectedCharacterFont).label
6812
7268
  }
6813
7269
  ),
6814
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "character-font-options", role: "listbox", "aria-label": "\u0627\u062E\u062A\u064A\u0627\u0631 \u062E\u0637 \u0627\u0644\u0643\u062A\u0627\u0628\u0629", hidden: !characterFontMenuOpen, children: CHARACTER_FONT_OPTIONS.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7270
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "character-font-options", role: "listbox", "aria-label": messages.chooseWritingFont, hidden: !characterFontMenuOpen, children: CHARACTER_FONT_OPTIONS.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6815
7271
  "button",
6816
7272
  {
6817
7273
  type: "button",
6818
7274
  role: "option",
6819
7275
  "aria-selected": selectedCharacterFont === option.id,
6820
7276
  className: `character-font-option character-font-option--${option.id}`,
6821
- title: option.title,
7277
+ title: characterFontTitle(option.id, messages),
6822
7278
  onMouseDown: (event) => event.preventDefault(),
6823
7279
  onClick: () => {
6824
7280
  runtimeRef.current?.setCurrentCharacterFont(option.id);
@@ -6851,22 +7307,22 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6851
7307
  id: "select-digit-form",
6852
7308
  className: "icon-btn digit-form-btn",
6853
7309
  type: "button",
6854
- title: "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645",
6855
- "aria-label": "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645",
7310
+ title: messages.chooseDigitForm,
7311
+ "aria-label": messages.chooseDigitForm,
6856
7312
  "aria-haspopup": "listbox",
6857
7313
  "aria-expanded": digitMenuOpen,
6858
7314
  onClick: () => setDigitMenuOpen((open) => !open),
6859
7315
  children: digitFormLabel(selectedDigitForm2)
6860
7316
  }
6861
7317
  ),
6862
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "digit-form-options", role: "listbox", "aria-label": "\u0627\u062E\u062A\u064A\u0627\u0631 \u0634\u0643\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645", hidden: !digitMenuOpen, children: DIGIT_FORM_OPTIONS.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
7318
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "digit-form-options", role: "listbox", "aria-label": messages.chooseDigitForm, hidden: !digitMenuOpen, children: DIGIT_FORM_OPTIONS.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
6863
7319
  "button",
6864
7320
  {
6865
7321
  type: "button",
6866
7322
  role: "option",
6867
7323
  "aria-selected": selectedDigitForm2 === option.id,
6868
7324
  className: "digit-form-option",
6869
- title: option.title,
7325
+ title: digitFormTitle(option.id, messages),
6870
7326
  onMouseDown: (event) => event.preventDefault(),
6871
7327
  onClick: () => {
6872
7328
  runtimeRef.current?.setCurrentDigitForm(option.id);
@@ -6890,15 +7346,15 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6890
7346
  id: "butex-editor-surface",
6891
7347
  className: "surface surface--arabic",
6892
7348
  tabIndex: 0,
6893
- "aria-label": "\u0645\u062D\u0631\u0631 \u0627\u0644\u0645\u0639\u0627\u062F\u0644\u0627\u062A"
7349
+ "aria-label": messages.equationEditor
6894
7350
  }
6895
7351
  ),
6896
7352
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: renderErrorRef, className: "error", hidden: true })
6897
7353
  ] }),
6898
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { className: "panel panel-preview", "aria-label": "\u0645\u0639\u0627\u064A\u0646\u0629 \u0627\u0644\u0631\u0633\u0645", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: mathOutputRef, className: "preview-box" }) }),
7354
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { className: "panel panel-preview", "aria-label": messages.renderPreview, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: mathOutputRef, className: "preview-box" }) }),
6899
7355
  debug ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "panel", children: [
6900
7356
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dev-strip", children: [
6901
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "dev-badge", children: "\u062A\u0637\u0648\u064A\u0631" }),
7357
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "dev-badge", children: messages.development }),
6902
7358
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: latexLinesRef, className: "ascii" }),
6903
7359
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: passivePreviewRef, className: "passive-preview-text" })
6904
7360
  ] }),
@@ -6921,7 +7377,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6921
7377
  return next;
6922
7378
  });
6923
7379
  },
6924
- children: debugBodyHidden ? "\u0625\u0638\u0647\u0627\u0631 \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D" : "\u0625\u062E\u0641\u0627\u0621 \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D"
7380
+ children: debugBodyHidden ? messages.showDebugLog : messages.hideDebugLog
6925
7381
  }
6926
7382
  ),
6927
7383
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -6935,7 +7391,7 @@ ${arabic || "\u0641\u0627\u0631\u063A"}`;
6935
7391
  } catch {
6936
7392
  }
6937
7393
  },
6938
- children: "\u0646\u0633\u062E \u0633\u062C\u0644 \u0627\u0644\u062A\u0635\u062D\u064A\u062D"
7394
+ children: messages.copyDebugLog
6939
7395
  }
6940
7396
  )
6941
7397
  ] }),