@erudit-js/prose 3.0.0-dev.25

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.
Files changed (355) hide show
  1. package/dist/app/appElement.d.ts +19 -0
  2. package/dist/app/appElement.js +12 -0
  3. package/dist/app/component.d.ts +6 -0
  4. package/dist/app/component.js +6 -0
  5. package/dist/app/composables/anchor.d.ts +16 -0
  6. package/dist/app/composables/anchor.js +89 -0
  7. package/dist/app/composables/appElement.d.ts +4 -0
  8. package/dist/app/composables/appElement.js +16 -0
  9. package/dist/app/composables/context.d.ts +22 -0
  10. package/dist/app/composables/context.js +5 -0
  11. package/dist/app/composables/elementIcon.d.ts +3 -0
  12. package/dist/app/composables/elementIcon.js +5 -0
  13. package/dist/app/composables/formatText.d.ts +1 -0
  14. package/dist/app/composables/formatText.js +5 -0
  15. package/dist/app/composables/language.d.ts +8 -0
  16. package/dist/app/composables/language.js +13 -0
  17. package/dist/app/composables/storage.d.ts +5 -0
  18. package/dist/app/composables/storage.js +23 -0
  19. package/dist/app/default/Inliners.vue +11 -0
  20. package/dist/app/default/Mix.vue +11 -0
  21. package/dist/app/default/Text.vue +21 -0
  22. package/dist/app/icon.d.ts +5 -0
  23. package/dist/app/icon.js +7 -0
  24. package/dist/app/index.d.ts +18 -0
  25. package/dist/app/index.js +18 -0
  26. package/dist/app/language/element.d.ts +10 -0
  27. package/dist/app/language/element.js +12 -0
  28. package/dist/app/language/list/en.d.ts +3 -0
  29. package/dist/app/language/list/en.js +5 -0
  30. package/dist/app/language/list/ru.d.ts +3 -0
  31. package/dist/app/language/list/ru.js +5 -0
  32. package/dist/app/language/prose.d.ts +9 -0
  33. package/dist/app/language/prose.js +4 -0
  34. package/dist/app/shared/Prose.vue +36 -0
  35. package/dist/app/shared/Render.vue +51 -0
  36. package/dist/app/shared/assets/block.svg +3 -0
  37. package/dist/app/shared/assets/check.svg +3 -0
  38. package/dist/app/shared/assets/inliner.svg +3 -0
  39. package/dist/app/shared/assets/plus.svg +3 -0
  40. package/dist/app/shared/assets/share.svg +3 -0
  41. package/dist/app/shared/block/AsideMenu.vue +44 -0
  42. package/dist/app/shared/block/AsideMenuButton.vue +53 -0
  43. package/dist/app/shared/block/AsideMenuCopyLink.vue +40 -0
  44. package/dist/app/shared/block/AsideMenuSeparator.vue +3 -0
  45. package/dist/app/shared/block/Block.vue +270 -0
  46. package/dist/app/shared/inliner/Inliner.vue +11 -0
  47. package/dist/app/shared/invert.d.ts +2 -0
  48. package/dist/app/shared/invert.js +2 -0
  49. package/dist/app/shared/photoswipe/composable.d.ts +9 -0
  50. package/dist/app/shared/photoswipe/composable.js +68 -0
  51. package/dist/app/shared/photoswipe/style.css +26 -0
  52. package/dist/context.d.ts +4 -0
  53. package/dist/context.js +1 -0
  54. package/dist/coreElement.d.ts +10 -0
  55. package/dist/coreElement.js +6 -0
  56. package/dist/elements/accent/Accent.vue +92 -0
  57. package/dist/elements/accent/AccentColumnSection.vue +61 -0
  58. package/dist/elements/accent/AccentRowSections.vue +65 -0
  59. package/dist/elements/accent/app.d.ts +21 -0
  60. package/dist/elements/accent/app.js +16 -0
  61. package/dist/elements/accent/core.d.ts +340 -0
  62. package/dist/elements/accent/core.js +175 -0
  63. package/dist/elements/callout/Callout.vue +88 -0
  64. package/dist/elements/callout/_global.d.ts +15 -0
  65. package/dist/elements/callout/app.d.ts +9 -0
  66. package/dist/elements/callout/app.js +11 -0
  67. package/dist/elements/callout/core.d.ts +80 -0
  68. package/dist/elements/callout/core.js +37 -0
  69. package/dist/elements/callout/icon.svg +3 -0
  70. package/dist/elements/callout/languages/en.d.ts +4 -0
  71. package/dist/elements/callout/languages/en.js +2 -0
  72. package/dist/elements/callout/languages/ru.d.ts +4 -0
  73. package/dist/elements/callout/languages/ru.js +2 -0
  74. package/dist/elements/callout/storage.d.ts +2 -0
  75. package/dist/elements/callout/storage.js +5 -0
  76. package/dist/elements/caption/Caption.vue +47 -0
  77. package/dist/elements/caption/_global.d.ts +26 -0
  78. package/dist/elements/caption/app.d.ts +9 -0
  79. package/dist/elements/caption/app.js +6 -0
  80. package/dist/elements/caption/core.d.ts +114 -0
  81. package/dist/elements/caption/core.js +61 -0
  82. package/dist/elements/details/Details.vue +51 -0
  83. package/dist/elements/details/_global.d.ts +27 -0
  84. package/dist/elements/details/app.d.ts +9 -0
  85. package/dist/elements/details/app.js +11 -0
  86. package/dist/elements/details/core.d.ts +68 -0
  87. package/dist/elements/details/core.js +30 -0
  88. package/dist/elements/details/icon.svg +3 -0
  89. package/dist/elements/details/languages/en.d.ts +4 -0
  90. package/dist/elements/details/languages/en.js +2 -0
  91. package/dist/elements/details/languages/ru.d.ts +4 -0
  92. package/dist/elements/details/languages/ru.js +2 -0
  93. package/dist/elements/diagram/Diagram.vue +364 -0
  94. package/dist/elements/diagram/_global.d.ts +19 -0
  95. package/dist/elements/diagram/app.d.ts +30 -0
  96. package/dist/elements/diagram/app.js +11 -0
  97. package/dist/elements/diagram/core.d.ts +194 -0
  98. package/dist/elements/diagram/core.js +36 -0
  99. package/dist/elements/diagram/icon.svg +3 -0
  100. package/dist/elements/diagram/languages/en.d.ts +4 -0
  101. package/dist/elements/diagram/languages/en.js +2 -0
  102. package/dist/elements/diagram/languages/ru.d.ts +4 -0
  103. package/dist/elements/diagram/languages/ru.js +2 -0
  104. package/dist/elements/emphasis/Emphasis.vue +25 -0
  105. package/dist/elements/emphasis/_global.d.ts +18 -0
  106. package/dist/elements/emphasis/app.d.ts +9 -0
  107. package/dist/elements/emphasis/app.js +6 -0
  108. package/dist/elements/emphasis/core.d.ts +90 -0
  109. package/dist/elements/emphasis/core.js +32 -0
  110. package/dist/elements/flex/Flex.vue +32 -0
  111. package/dist/elements/flex/_global.d.ts +23 -0
  112. package/dist/elements/flex/app.d.ts +9 -0
  113. package/dist/elements/flex/app.js +11 -0
  114. package/dist/elements/flex/core.d.ts +67 -0
  115. package/dist/elements/flex/core.js +28 -0
  116. package/dist/elements/flex/icon.svg +3 -0
  117. package/dist/elements/flex/languages/en.d.ts +4 -0
  118. package/dist/elements/flex/languages/en.js +2 -0
  119. package/dist/elements/flex/languages/ru.d.ts +4 -0
  120. package/dist/elements/flex/languages/ru.js +2 -0
  121. package/dist/elements/gallery/Gallery.vue +56 -0
  122. package/dist/elements/gallery/_global.d.ts +18 -0
  123. package/dist/elements/gallery/app.d.ts +23 -0
  124. package/dist/elements/gallery/app.js +11 -0
  125. package/dist/elements/gallery/core.d.ts +138 -0
  126. package/dist/elements/gallery/core.js +21 -0
  127. package/dist/elements/gallery/icon.svg +3 -0
  128. package/dist/elements/gallery/languages/en.d.ts +4 -0
  129. package/dist/elements/gallery/languages/en.js +2 -0
  130. package/dist/elements/gallery/languages/ru.d.ts +4 -0
  131. package/dist/elements/gallery/languages/ru.js +2 -0
  132. package/dist/elements/heading/Heading.vue +44 -0
  133. package/dist/elements/heading/_global.d.ts +45 -0
  134. package/dist/elements/heading/app.d.ts +9 -0
  135. package/dist/elements/heading/app.js +11 -0
  136. package/dist/elements/heading/core.d.ts +108 -0
  137. package/dist/elements/heading/core.js +52 -0
  138. package/dist/elements/heading/icon.svg +3 -0
  139. package/dist/elements/heading/languages/en.d.ts +4 -0
  140. package/dist/elements/heading/languages/en.js +2 -0
  141. package/dist/elements/heading/languages/ru.d.ts +4 -0
  142. package/dist/elements/heading/languages/ru.js +2 -0
  143. package/dist/elements/horizontalLine/HorizontalLine.vue +6 -0
  144. package/dist/elements/horizontalLine/_global.d.ts +17 -0
  145. package/dist/elements/horizontalLine/app.d.ts +9 -0
  146. package/dist/elements/horizontalLine/app.js +6 -0
  147. package/dist/elements/horizontalLine/core.d.ts +54 -0
  148. package/dist/elements/horizontalLine/core.js +19 -0
  149. package/dist/elements/image/Image.vue +15 -0
  150. package/dist/elements/image/ImageElement.vue +80 -0
  151. package/dist/elements/image/_global.d.ts +18 -0
  152. package/dist/elements/image/app.d.ts +16 -0
  153. package/dist/elements/image/app.js +11 -0
  154. package/dist/elements/image/core.d.ts +136 -0
  155. package/dist/elements/image/core.js +44 -0
  156. package/dist/elements/image/icon.svg +3 -0
  157. package/dist/elements/image/languages/en.d.ts +4 -0
  158. package/dist/elements/image/languages/en.js +2 -0
  159. package/dist/elements/image/languages/ru.d.ts +4 -0
  160. package/dist/elements/image/languages/ru.js +2 -0
  161. package/dist/elements/image/storage.d.ts +6 -0
  162. package/dist/elements/image/storage.js +23 -0
  163. package/dist/elements/lineBreak/LineBreak.vue +3 -0
  164. package/dist/elements/lineBreak/_global.d.ts +18 -0
  165. package/dist/elements/lineBreak/app.d.ts +9 -0
  166. package/dist/elements/lineBreak/app.js +6 -0
  167. package/dist/elements/lineBreak/core.d.ts +54 -0
  168. package/dist/elements/lineBreak/core.js +19 -0
  169. package/dist/elements/link/BlockLink.vue +111 -0
  170. package/dist/elements/link/Link.vue +93 -0
  171. package/dist/elements/link/core.d.ts +13 -0
  172. package/dist/elements/link/core.js +12 -0
  173. package/dist/elements/link/dependency/_global.d.ts +47 -0
  174. package/dist/elements/link/dependency/app.d.ts +16 -0
  175. package/dist/elements/link/dependency/app.js +14 -0
  176. package/dist/elements/link/dependency/core.d.ts +125 -0
  177. package/dist/elements/link/dependency/core.js +51 -0
  178. package/dist/elements/link/dependency/languages/en.d.ts +4 -0
  179. package/dist/elements/link/dependency/languages/en.js +2 -0
  180. package/dist/elements/link/dependency/languages/ru.d.ts +4 -0
  181. package/dist/elements/link/dependency/languages/ru.js +2 -0
  182. package/dist/elements/link/icon.svg +3 -0
  183. package/dist/elements/link/reference/_global.d.ts +49 -0
  184. package/dist/elements/link/reference/app.d.ts +16 -0
  185. package/dist/elements/link/reference/app.js +14 -0
  186. package/dist/elements/link/reference/core.d.ts +120 -0
  187. package/dist/elements/link/reference/core.js +35 -0
  188. package/dist/elements/link/reference/languages/en.d.ts +4 -0
  189. package/dist/elements/link/reference/languages/en.js +2 -0
  190. package/dist/elements/link/reference/languages/ru.d.ts +4 -0
  191. package/dist/elements/link/reference/languages/ru.js +2 -0
  192. package/dist/elements/link/storage.d.ts +34 -0
  193. package/dist/elements/link/storage.js +20 -0
  194. package/dist/elements/list/List.vue +63 -0
  195. package/dist/elements/list/_global.d.ts +50 -0
  196. package/dist/elements/list/app.d.ts +16 -0
  197. package/dist/elements/list/app.js +11 -0
  198. package/dist/elements/list/core.d.ts +169 -0
  199. package/dist/elements/list/core.js +49 -0
  200. package/dist/elements/list/icon.svg +3 -0
  201. package/dist/elements/list/languages/en.d.ts +4 -0
  202. package/dist/elements/list/languages/en.js +2 -0
  203. package/dist/elements/list/languages/ru.d.ts +4 -0
  204. package/dist/elements/list/languages/ru.js +2 -0
  205. package/dist/elements/math/_global.d.ts +72 -0
  206. package/dist/elements/math/_global.ts +3 -0
  207. package/dist/elements/math/app.d.ts +16 -0
  208. package/dist/elements/math/app.js +20 -0
  209. package/dist/elements/math/block.d.ts +75 -0
  210. package/dist/elements/math/block.js +115 -0
  211. package/dist/elements/math/components/BlockMath.vue +30 -0
  212. package/dist/elements/math/components/InlinerMath.vue +65 -0
  213. package/dist/elements/math/components/Katex.vue +89 -0
  214. package/dist/elements/math/components/MathGroup.vue +39 -0
  215. package/dist/elements/math/core.d.ts +66 -0
  216. package/dist/elements/math/core.js +11 -0
  217. package/dist/elements/math/icon.svg +3 -0
  218. package/dist/elements/math/inliner.d.ts +64 -0
  219. package/dist/elements/math/inliner.js +85 -0
  220. package/dist/elements/math/katex.d.ts +8 -0
  221. package/dist/elements/math/katex.js +18 -0
  222. package/dist/elements/math/languages/en.d.ts +4 -0
  223. package/dist/elements/math/languages/en.js +2 -0
  224. package/dist/elements/math/languages/ru.d.ts +4 -0
  225. package/dist/elements/math/languages/ru.js +2 -0
  226. package/dist/elements/math/macros.d.ts +13 -0
  227. package/dist/elements/math/macros.js +12 -0
  228. package/dist/elements/paragraph/Paragraph.vue +27 -0
  229. package/dist/elements/paragraph/_global.d.ts +27 -0
  230. package/dist/elements/paragraph/app.d.ts +9 -0
  231. package/dist/elements/paragraph/app.js +11 -0
  232. package/dist/elements/paragraph/core.d.ts +67 -0
  233. package/dist/elements/paragraph/core.js +29 -0
  234. package/dist/elements/paragraph/icon.svg +4 -0
  235. package/dist/elements/paragraph/languages/en.d.ts +4 -0
  236. package/dist/elements/paragraph/languages/en.js +2 -0
  237. package/dist/elements/paragraph/languages/ru.d.ts +4 -0
  238. package/dist/elements/paragraph/languages/ru.js +2 -0
  239. package/dist/elements/problem/_global.d.ts +112 -0
  240. package/dist/elements/problem/app.d.ts +30 -0
  241. package/dist/elements/problem/app.js +27 -0
  242. package/dist/elements/problem/assets/actions/answer.svg +3 -0
  243. package/dist/elements/problem/assets/actions/check.svg +3 -0
  244. package/dist/elements/problem/assets/actions/generate.svg +3 -0
  245. package/dist/elements/problem/assets/actions/hint.svg +3 -0
  246. package/dist/elements/problem/assets/actions/note.svg +3 -0
  247. package/dist/elements/problem/assets/actions/solution.svg +3 -0
  248. package/dist/elements/problem/assets/attributes/applied.svg +3 -0
  249. package/dist/elements/problem/assets/attributes/inter.svg +3 -0
  250. package/dist/elements/problem/assets/attributes/method.svg +3 -0
  251. package/dist/elements/problem/assets/attributes/pretty.svg +1 -0
  252. package/dist/elements/problem/assets/icon.svg +3 -0
  253. package/dist/elements/problem/components/Problem.vue +22 -0
  254. package/dist/elements/problem/components/ProblemButton.vue +21 -0
  255. package/dist/elements/problem/components/ProblemContainer.vue +9 -0
  256. package/dist/elements/problem/components/ProblemContent.vue +371 -0
  257. package/dist/elements/problem/components/ProblemExpander.vue +7 -0
  258. package/dist/elements/problem/components/ProblemExpanderSection.vue +58 -0
  259. package/dist/elements/problem/components/ProblemHeader.vue +106 -0
  260. package/dist/elements/problem/components/Problems.vue +87 -0
  261. package/dist/elements/problem/components/SubProblem.vue +14 -0
  262. package/dist/elements/problem/components/expanders/Check.vue +151 -0
  263. package/dist/elements/problem/components/expanders/Checks.vue +83 -0
  264. package/dist/elements/problem/components/expanders/DefaultPlusSections.vue +38 -0
  265. package/dist/elements/problem/components/expanders/Hint.vue +26 -0
  266. package/dist/elements/problem/composables/phrase.d.ts +2 -0
  267. package/dist/elements/problem/composables/phrase.js +7 -0
  268. package/dist/elements/problem/composables/problemScript.d.ts +3 -0
  269. package/dist/elements/problem/composables/problemScript.js +11 -0
  270. package/dist/elements/problem/core.d.ts +248 -0
  271. package/dist/elements/problem/core.js +17 -0
  272. package/dist/elements/problem/languages/en.d.ts +3 -0
  273. package/dist/elements/problem/languages/en.js +24 -0
  274. package/dist/elements/problem/languages/ru.d.ts +3 -0
  275. package/dist/elements/problem/languages/ru.js +24 -0
  276. package/dist/elements/problem/phrases.d.ts +16 -0
  277. package/dist/elements/problem/phrases.js +1 -0
  278. package/dist/elements/problem/problem.d.ts +106 -0
  279. package/dist/elements/problem/problem.js +37 -0
  280. package/dist/elements/problem/problemContent.d.ts +439 -0
  281. package/dist/elements/problem/problemContent.js +236 -0
  282. package/dist/elements/problem/problemScript.d.ts +26 -0
  283. package/dist/elements/problem/problemScript.js +79 -0
  284. package/dist/elements/problem/problems.d.ts +212 -0
  285. package/dist/elements/problem/problems.js +74 -0
  286. package/dist/elements/problem/rng.d.ts +18 -0
  287. package/dist/elements/problem/rng.js +76 -0
  288. package/dist/elements/problem/shared.d.ts +28 -0
  289. package/dist/elements/problem/shared.js +42 -0
  290. package/dist/elements/problem/step.d.ts +5 -0
  291. package/dist/elements/problem/step.js +13 -0
  292. package/dist/elements/problem/storage.d.ts +5 -0
  293. package/dist/elements/problem/storage.js +8 -0
  294. package/dist/elements/table/Table.vue +104 -0
  295. package/dist/elements/table/_global.d.ts +36 -0
  296. package/dist/elements/table/app.d.ts +30 -0
  297. package/dist/elements/table/app.js +11 -0
  298. package/dist/elements/table/core.d.ts +324 -0
  299. package/dist/elements/table/core.js +65 -0
  300. package/dist/elements/table/icon.svg +3 -0
  301. package/dist/elements/table/languages/en.d.ts +4 -0
  302. package/dist/elements/table/languages/en.js +2 -0
  303. package/dist/elements/table/languages/ru.d.ts +4 -0
  304. package/dist/elements/table/languages/ru.js +2 -0
  305. package/dist/elements/video/Video.vue +109 -0
  306. package/dist/elements/video/_global.d.ts +18 -0
  307. package/dist/elements/video/app.d.ts +16 -0
  308. package/dist/elements/video/app.js +11 -0
  309. package/dist/elements/video/core.d.ts +128 -0
  310. package/dist/elements/video/core.js +43 -0
  311. package/dist/elements/video/icon.svg +3 -0
  312. package/dist/elements/video/languages/en.d.ts +4 -0
  313. package/dist/elements/video/languages/en.js +2 -0
  314. package/dist/elements/video/languages/ru.d.ts +4 -0
  315. package/dist/elements/video/languages/ru.js +2 -0
  316. package/dist/elements/video/storage.d.ts +2 -0
  317. package/dist/elements/video/storage.js +5 -0
  318. package/dist/include.d.ts +6 -0
  319. package/dist/include.js +42 -0
  320. package/dist/index.d.ts +15 -0
  321. package/dist/index.js +15 -0
  322. package/dist/rawElement.d.ts +6 -0
  323. package/dist/rawElement.js +3 -0
  324. package/dist/resolve.d.ts +20 -0
  325. package/dist/resolve.js +99 -0
  326. package/dist/resolveStep.d.ts +9 -0
  327. package/dist/resolveStep.js +3 -0
  328. package/dist/shared/filePath.d.ts +5 -0
  329. package/dist/shared/filePath.js +11 -0
  330. package/dist/shared/invert.d.ts +1 -0
  331. package/dist/shared/invert.js +1 -0
  332. package/dist/shared/paragraphWrap.d.ts +3 -0
  333. package/dist/shared/paragraphWrap.js +15 -0
  334. package/dist/shared/photoswipe.d.ts +10 -0
  335. package/dist/shared/photoswipe.js +10 -0
  336. package/dist/slugify/index.d.ts +1 -0
  337. package/dist/slugify/index.js +12 -0
  338. package/dist/slugify/languages/en.d.ts +2 -0
  339. package/dist/slugify/languages/en.js +3 -0
  340. package/dist/slugify/languages/ru.d.ts +2 -0
  341. package/dist/slugify/languages/ru.js +38 -0
  342. package/dist/snippet.d.ts +66 -0
  343. package/dist/snippet.js +57 -0
  344. package/dist/tag.d.ts +22 -0
  345. package/dist/tag.js +20 -0
  346. package/dist/title.d.ts +8 -0
  347. package/dist/title.js +6 -0
  348. package/dist/toc.d.ts +34 -0
  349. package/dist/toc.js +52 -0
  350. package/dist/utils/case.d.ts +4 -0
  351. package/dist/utils/case.js +8 -0
  352. package/dist/utils/docs.d.ts +1 -0
  353. package/dist/utils/docs.js +22 -0
  354. package/package.json +48 -0
  355. package/types.d.ts +4 -0
@@ -0,0 +1,85 @@
1
+ import { defineRegistryItem, defineSchema, ensureTagChild, ProseError, textSchema } from "@jsprose/core";
2
+ import { defineEruditTag } from "../../tag.js";
3
+ import { latexToHtml, normalizeKatex } from "./katex.js";
4
+ /**
5
+ * Apply typographical replacements to improve math rendering
6
+ */
7
+ function prettifyMathString(mathString) {
8
+ mathString = mathString.replace(/([\w\(\[\)\]])\s*([-+=])\s*([\w\(\[\)\]])/g, "$1 $2 $3").replace(/-/g, "–");
9
+ return mathString;
10
+ }
11
+ /**
12
+ * Try to use simple text mode for inline math as it is significantly better for SEO, faster and smaller.
13
+ */
14
+ export function tryTextInlinerMath(expression) {
15
+ if (!expression) return undefined;
16
+ expression = prettifyMathString(expression);
17
+ const tokens = (() => {
18
+ const hasComplexSymbols = /[\^\\{}_]/gm.test(expression);
19
+ if (hasComplexSymbols) return false;
20
+ const wordRegexp = /([\p{L}']+)|([^\p{L}']+)/gu;
21
+ const _tokens = [];
22
+ let match;
23
+ while ((match = wordRegexp.exec(expression)) !== null) {
24
+ if (match[1]) _tokens.push({
25
+ type: "word",
26
+ value: match[1]
27
+ });
28
+ else if (match[2]) _tokens.push({
29
+ type: "other",
30
+ value: match[2]
31
+ });
32
+ }
33
+ return _tokens;
34
+ })();
35
+ if (tokens) {
36
+ return {
37
+ type: "text",
38
+ tokens
39
+ };
40
+ }
41
+ return undefined;
42
+ }
43
+ //
44
+ //
45
+ //
46
+ export const inlinerMathSchema = defineSchema({
47
+ name: "inlinerMath",
48
+ type: "inliner",
49
+ linkable: true
50
+ })();
51
+ export const M = defineEruditTag({
52
+ tagName: "M",
53
+ schema: inlinerMathSchema
54
+ })(({ element, tagName, children }) => {
55
+ ensureTagChild(tagName, children, textSchema);
56
+ const katex = normalizeKatex(children[0].data);
57
+ if (!katex) {
58
+ throw new ProseError(`<${tagName}> tag must contain non-empty KaTeX math expression.`);
59
+ }
60
+ element.data = katex;
61
+ element.storageKey = `$ ${katex} $`;
62
+ });
63
+ export const inlinerMathRegistryItem = defineRegistryItem({
64
+ schema: inlinerMathSchema,
65
+ tags: [M],
66
+ async createStorage(element) {
67
+ return createInlinerMathStorage(element.data);
68
+ }
69
+ });
70
+ export async function createInlinerMathStorage(katex) {
71
+ const tokens = tryTextInlinerMath(katex);
72
+ if (tokens) {
73
+ return tokens;
74
+ }
75
+ let mathHtml = "<span style=\"color: red\">KaTeX Error!</span>";
76
+ try {
77
+ mathHtml = await latexToHtml(katex, "inline");
78
+ } catch (error) {
79
+ console.error("Error while rendering math:", error);
80
+ }
81
+ return {
82
+ type: "katex",
83
+ mathHtml
84
+ };
85
+ }
@@ -0,0 +1,8 @@
1
+ export declare const katexDependency: {
2
+ katex: {
3
+ optimise: boolean;
4
+ transpile: boolean;
5
+ };
6
+ };
7
+ export declare function normalizeKatex(katex: string): string;
8
+ export declare function latexToHtml(katex: string, mode: 'block' | 'inline'): Promise<string>;
@@ -0,0 +1,18 @@
1
+ export const katexDependency = { katex: {
2
+ optimise: true,
3
+ transpile: true
4
+ } };
5
+ export function normalizeKatex(katex) {
6
+ katex = katex.replace(/[\s\n]+/g, " ").trim();
7
+ return katex;
8
+ }
9
+ export async function latexToHtml(katex, mode) {
10
+ const katexLib = (await import("katex")).default;
11
+ const macros = (await import("./macros.js")).default;
12
+ const html = katexLib.renderToString(katex, {
13
+ displayMode: mode === "block",
14
+ strict: false,
15
+ macros
16
+ });
17
+ return html;
18
+ }
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ element_name: string;
3
+ };
4
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { defineElementLanguage } from "../../../app/language/element.js";
2
+ export default defineElementLanguage({ element_name: "Math" });
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ element_name: string;
3
+ };
4
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { defineElementLanguage } from "../../../app/language/element.js";
2
+ export default defineElementLanguage({ element_name: "Математика" });
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ '\\brand': string;
3
+ '\\blue': string;
4
+ '\\green': string;
5
+ '\\yellow': string;
6
+ '\\red': string;
7
+ '\\default': string;
8
+ '\\set': string;
9
+ '\\floor': string;
10
+ '\\andcases': string;
11
+ '\\orcases': string;
12
+ };
13
+ export default _default;
@@ -0,0 +1,12 @@
1
+ export default {
2
+ "\\brand": "\\textcolor{##100000}{#1}",
3
+ "\\blue": "\\textcolor{##200000}{#1}",
4
+ "\\green": "\\textcolor{##300000}{#1}",
5
+ "\\yellow": "\\textcolor{##400000}{#1}",
6
+ "\\red": "\\textcolor{##500000}{#1}",
7
+ "\\default": "\\textcolor{##600000}{#1}",
8
+ "\\set": "\\left\\{#1\\right\\}",
9
+ "\\floor": "\\left\\lfloor #1 \\right\\rfloor",
10
+ "\\andcases": "\\begin{cases}#1\\end{cases}",
11
+ "\\orcases": "\\left[\\begin{array}{ll} #1 \\end{array}\\right."
12
+ };
@@ -0,0 +1,27 @@
1
+ <script setup lang="ts">
2
+ import type { ProseElement } from '@jsprose/core';
3
+
4
+ import type { paragraphSchema } from './core.js';
5
+ import Block from '../../app/shared/block/Block.vue';
6
+ import Render from '../../app/shared/Render.vue';
7
+
8
+ defineProps<{ element: ProseElement<typeof paragraphSchema> }>();
9
+ </script>
10
+
11
+ <template>
12
+ <Block :element>
13
+ <div
14
+ :class="[
15
+ 'wrap-break-word transition-[color]',
16
+ element.data?.center
17
+ ? 'text-center'
18
+ : 'micro:text-justify text-left',
19
+ {
20
+ 'font-serif': element.data?.serif,
21
+ },
22
+ ]"
23
+ >
24
+ <Render v-for="child of element.children" :element="child" />
25
+ </div>
26
+ </Block>
27
+ </template>
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Paragraph are general prose containers.
3
+ *
4
+ * When writing paragraphs, stick to **"rule of 3"**:
5
+ * * Ideally **3** sentences per paragraph.
6
+ * * After each **3** paragraphs use a different block: heading, list, image, formula, etc.
7
+ *
8
+ * Paragraphs can be centered via `center` prop, and can use serif font style via `serif` prop.
9
+ * Use these with extra caution, as they reduce readability if overused!
10
+ *
11
+ * @title Paragraph
12
+ * @layout block
13
+ * @example
14
+ * ```tsx
15
+ * <P>Normal Paragraph</P>
16
+ *
17
+ * <P center>Centered Paragraph</P>
18
+ * <P serif>Paragraph with serif font style</P>
19
+ * <P center serif>Centered Paragraph with serif font style</P>
20
+ *
21
+ * <P>
22
+ * Paragraph<Br />
23
+ * With Line Break
24
+ * </P>
25
+ * ```
26
+ */
27
+ export const P = '_tag_';
@@ -0,0 +1,9 @@
1
+ declare const _default: import("../../app/appElement.js").AppElement<{
2
+ name: "paragraph";
3
+ type: "block";
4
+ linkable: true;
5
+ Data: import("./core.js").ParagraphData;
6
+ Storage: undefined;
7
+ Children: import("@jsprose/core").InlinerSchema[];
8
+ }>;
9
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { defineEruditProseAppElement } from "../../app/appElement.js";
2
+ import { paragraphSchema } from "./core.js";
3
+ export default defineEruditProseAppElement({
4
+ schema: paragraphSchema,
5
+ component: () => import("./Paragraph.vue"),
6
+ languages: {
7
+ en: () => import("./languages/en.js"),
8
+ ru: () => import("./languages/ru.js")
9
+ },
10
+ icon: () => import("./icon.svg?raw")
11
+ });
@@ -0,0 +1,67 @@
1
+ import { type InlinerSchema, type TagChildren } from '@jsprose/core';
2
+ export declare const paragraphSchema: {
3
+ name: "paragraph";
4
+ type: "block";
5
+ linkable: true;
6
+ Data: ParagraphData;
7
+ Storage: undefined;
8
+ Children: InlinerSchema[];
9
+ };
10
+ export type ParagraphData = undefined | {
11
+ center?: boolean;
12
+ serif?: boolean;
13
+ };
14
+ export declare const P: import("@jsprose/core").Tag<"P", {
15
+ name: "paragraph";
16
+ type: "block";
17
+ linkable: true;
18
+ Data: ParagraphData;
19
+ Storage: undefined;
20
+ Children: InlinerSchema[];
21
+ }, {
22
+ center?: true;
23
+ serif?: true;
24
+ } & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
25
+ export declare const paragraphRegistryItem: import("@jsprose/core").RegistryItem<{
26
+ name: "paragraph";
27
+ type: "block";
28
+ linkable: true;
29
+ Data: ParagraphData;
30
+ Storage: undefined;
31
+ Children: InlinerSchema[];
32
+ }, {
33
+ P: import("@jsprose/core").Tag<"P", {
34
+ name: "paragraph";
35
+ type: "block";
36
+ linkable: true;
37
+ Data: ParagraphData;
38
+ Storage: undefined;
39
+ Children: InlinerSchema[];
40
+ }, {
41
+ center?: true;
42
+ serif?: true;
43
+ } & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
44
+ }, undefined>;
45
+ declare const _default: {
46
+ registryItem: import("@jsprose/core").RegistryItem<{
47
+ name: "paragraph";
48
+ type: "block";
49
+ linkable: true;
50
+ Data: ParagraphData;
51
+ Storage: undefined;
52
+ Children: InlinerSchema[];
53
+ }, {
54
+ P: import("@jsprose/core").Tag<"P", {
55
+ name: "paragraph";
56
+ type: "block";
57
+ linkable: true;
58
+ Data: ParagraphData;
59
+ Storage: undefined;
60
+ Children: InlinerSchema[];
61
+ }, {
62
+ center?: true;
63
+ serif?: true;
64
+ } & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
65
+ }, undefined>;
66
+ };
67
+ export default _default;
@@ -0,0 +1,29 @@
1
+ import { defineRegistryItem, defineSchema, ensureTagInlinerChildren } from "@jsprose/core";
2
+ import { defineEruditProseCoreElement } from "../../coreElement.js";
3
+ import { defineEruditTag } from "../../tag.js";
4
+ export const paragraphSchema = defineSchema({
5
+ name: "paragraph",
6
+ type: "block",
7
+ linkable: true
8
+ })();
9
+ export const P = defineEruditTag({
10
+ tagName: "P",
11
+ schema: paragraphSchema
12
+ })(({ element, tagName, props, children, registry }) => {
13
+ ensureTagInlinerChildren(tagName, children, registry);
14
+ element.children = children;
15
+ if (props.center || props.serif) {
16
+ element.data = {};
17
+ if (props.center) {
18
+ element.data.center = true;
19
+ }
20
+ if (props.serif) {
21
+ element.data.serif = true;
22
+ }
23
+ }
24
+ });
25
+ export const paragraphRegistryItem = defineRegistryItem({
26
+ schema: paragraphSchema,
27
+ tags: [P]
28
+ });
29
+ export default defineEruditProseCoreElement({ registryItem: paragraphRegistryItem });
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="a" data-name="Слой 1" xmlns="http://www.w3.org/2000/svg" width="960" height="960" viewBox="0 0 960 960">
3
+ <path d="M143.89,732.05c-11.9,0-21.9-4.02-29.94-12.05-8.04-8.04-12.05-18.04-12.05-29.94s4.02-21.9,12.05-29.94c8.04-8.04,18.04-12.05,29.94-12.05h420.12c11.9,0,21.9,4.02,29.94,12.05s12.05,18.04,12.05,29.94-4.02,21.9-12.05,29.94-18.04,12.05-29.94,12.05H143.89ZM143.89,521.95c-11.9,0-21.9-4.02-29.94-12.05-8.04-8.04-12.05-18.04-12.05-29.94s4.02-21.9,12.05-29.94c8.04-8.04,18.04-12.05,29.94-12.05h672.21c11.9,0,21.9,4.02,29.94,12.05,8.04,8.04,12.05,18.04,12.05,29.94s-4.02,21.9-12.05,29.94c-8.04,8.04-18.04,12.05-29.94,12.05H143.89ZM143.89,311.93c-11.9,0-21.9-4.02-29.94-12.05-8.04-8.04-12.05-18.04-12.05-29.94s4.02-21.9,12.05-29.94c8.04-8.04,18.04-12.05,29.94-12.05h672.21c11.9,0,21.9,4.02,29.94,12.05s12.05,18.04,12.05,29.94-4.02,21.9-12.05,29.94-18.04,12.05-29.94,12.05H143.89Z"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ element_name: string;
3
+ };
4
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { defineElementLanguage } from "../../../app/language/element.js";
2
+ export default defineElementLanguage({ element_name: "Paragraph" });
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ element_name: string;
3
+ };
4
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { defineElementLanguage } from "../../../app/language/element.js";
2
+ export default defineElementLanguage({ element_name: "Параграф" });
@@ -0,0 +1,112 @@
1
+ import type { ProblemCustomAttribute as PAC } from './shared.js';
2
+
3
+ /**
4
+ * Problems are used to present exercises and questions to the reader.
5
+ * See the example for a full breakdown of the sub-elements available.
6
+ *
7
+ * All problems are added to TOC and search by default (can be disabled via tag properties).
8
+ *
9
+ * @title Problem
10
+ * @layout block
11
+ * @example
12
+ * ```tsx
13
+ * // Static problem
14
+ * <Problem title="Find the square" level="easy">
15
+ * <ProblemDescription>
16
+ * <P>What is the square of 2?</P>
17
+ * <P>Think carefully about your answer before proceeding to the hints and solution.</P>
18
+ * </ProblemDescription>
19
+ *
20
+ * <ProblemHint>
21
+ * <P>Recall that squaring a number means multiplying it by itself.</P>
22
+ * </ProblemHint>
23
+ * <ProblemHint>
24
+ * <P>For example, the square of 3 is 9, since 3 * 3 = 9.</P>
25
+ * </ProblemHint>
26
+ * // More hints...
27
+ *
28
+ * <ProblemSolution>
29
+ * <P>Some general phrases visible immediately.</P>
30
+ *
31
+ * <ProblemSection title="Detailed Solution">
32
+ * <P>The square of 2 is 4, since 2 * 2 = 4.</P>
33
+ * </ProblemSection>
34
+ * // More sections...
35
+ *
36
+ * </ProblemSolution>
37
+ *
38
+ * <ProblemAnswer>
39
+ * <P><M>4</M></P>
40
+ * </ProblemAnswer>
41
+ *
42
+ * <ProblemCheck label="The square of 2 is" answer={4} />
43
+ * // More checks...
44
+ *
45
+ * <ProblemNote>
46
+ * In fact, you can find the square of any number by multiplying it by itself!
47
+ * </ProblemNote>
48
+ * </Problem>
49
+ *
50
+ * // Script problem
51
+ * export const fooScript = defineProblemScript({
52
+ * isGenerator: true,
53
+ * })(({ initial, random }) => {
54
+ * const a = initial.nextInt(1, 10);
55
+ * const b = initial.nextInt(1, 10);
56
+ *
57
+ * return (
58
+ * <>
59
+ * <ProblemDescription>
60
+ * What is <M>{a} + {b}</M>?
61
+ * </ProblemDescription>
62
+ * <ProblemAnswer>
63
+ * <M>{a + b}</M>
64
+ * </ProblemAnswer>
65
+ * <ProblemCheck label="The answer is" answer={a + b} />
66
+ * </>
67
+ * );
68
+ * });
69
+ *
70
+ * <Problem title="Addition Problem" level="medium" script={fooScript} />
71
+ * ```
72
+ */
73
+ export const Problem = '_tag_';
74
+ export const ProblemDescription = '_tag_';
75
+ export const ProblemHint = '_tag_';
76
+ export const ProblemSection = '_tag_';
77
+ export const ProblemSolution = '_tag_';
78
+ export const ProblemAnswer = '_tag_';
79
+ export const ProblemNote = '_tag_';
80
+ export const ProblemCheck = '_tag_';
81
+
82
+ /**
83
+ * Problem set is a collection of related problems presented together.
84
+ * `<Problems>` tag contains general problem information and insude can have multiple `<SubProblem>` tags.
85
+ *
86
+ * Each `<SubProblem>` contains the same problem content tags as single `<Problem>` tag.
87
+ *
88
+ * All problems are added to TOC and search by default (can be disabled via tag properties).
89
+ *
90
+ * @title Problems
91
+ * @layout block
92
+ * @example
93
+ * ```tsx
94
+ * // export const problemScript = defineProblemScript(...) ~> see Problem docs for details
95
+ * <Problems title="Sample Problem Set" level="hard">
96
+ * <SubProblem label="Example">
97
+ * <ProblemDescription>
98
+ * This is an example sub-problem.
99
+ * </ProblemDescription>
100
+ * </SubProblem>
101
+ *
102
+ * <SubProblem script={problemScript} />
103
+ * </Problems>
104
+ * ```
105
+ */
106
+ export const Problems = '_tag_';
107
+ export const SubProblem = '_tag_';
108
+
109
+ /**
110
+ * Typeguard for creating custom problem attributes.
111
+ */
112
+ export type ProblemCustomAttribute = PAC;
@@ -0,0 +1,30 @@
1
+ declare const _default: (import("../../app/appElement.js").AppElement<{
2
+ name: "problem";
3
+ type: "block";
4
+ linkable: true;
5
+ Data: import("./problem.js").ProblemData;
6
+ Storage: import("./storage.js").ProblemScriptStorage;
7
+ Children: import("./problemContent.js").ProblemContentChild[];
8
+ }> | import("../../app/appElement.js").AppElement<{
9
+ name: "subProblem";
10
+ type: "block";
11
+ linkable: false;
12
+ Data: import("./problems.js").SubProblemData;
13
+ Storage: import("./storage.js").ProblemScriptStorage;
14
+ Children: import("./problemContent.js").ProblemContentChild[];
15
+ }> | import("../../app/appElement.js").AppElement<{
16
+ name: "problems";
17
+ type: "block";
18
+ linkable: true;
19
+ Data: import("./shared.js").ProblemInfo;
20
+ Storage: undefined;
21
+ Children: (import("@jsprose/core").BlockSchema | {
22
+ name: "subProblem";
23
+ type: "block";
24
+ linkable: false;
25
+ Data: import("./problems.js").SubProblemData;
26
+ Storage: import("./storage.js").ProblemScriptStorage;
27
+ Children: import("./problemContent.js").ProblemContentChild[];
28
+ })[];
29
+ }>)[];
30
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import { defineEruditProseAppElement } from "../../app/appElement.js";
2
+ import { problemSchema } from "./problem.js";
3
+ import { problemsSchema, subProblemSchema } from "./problems.js";
4
+ export default [
5
+ defineEruditProseAppElement({
6
+ schema: problemSchema,
7
+ component: () => import("./components/Problem.vue"),
8
+ languages: {
9
+ en: () => import("./languages/en.js"),
10
+ ru: () => import("./languages/ru.js")
11
+ },
12
+ icon: () => import("./assets/icon.svg?raw")
13
+ }),
14
+ defineEruditProseAppElement({
15
+ schema: subProblemSchema,
16
+ component: () => import("./components/SubProblem.vue")
17
+ }),
18
+ defineEruditProseAppElement({
19
+ schema: problemsSchema,
20
+ component: () => import("./components/Problems.vue"),
21
+ languages: {
22
+ en: () => import("./languages/en.js"),
23
+ ru: () => import("./languages/ru.js")
24
+ },
25
+ icon: () => import("./assets/icon.svg?raw")
26
+ })
27
+ ];
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
2
+ <path d="M8.86,13.75l5.75-5.75-1.14-1.14-4.61,4.61-2.32-2.32-1.14,1.14,3.47,3.47ZM10,18.15c-1.13,0-2.19-.21-3.18-.64-.99-.43-1.86-1.01-2.59-1.74-.73-.73-1.31-1.6-1.74-2.59-.43-.99-.64-2.05-.64-3.18,0-1.13.21-2.19.64-3.18s1.01-1.86,1.74-2.59c.73-.73,1.6-1.31,2.59-1.74s2.05-.64,3.18-.64c1.13,0,2.19.21,3.18.64.99.43,1.86,1.01,2.59,1.74.73.73,1.31,1.6,1.74,2.59.43.99.64,2.05.64,3.18s-.22,2.19-.64,3.18c-.43.99-1.01,1.86-1.74,2.59s-1.6,1.31-2.59,1.74c-.99.43-2.05.64-3.18.64M10,16.52c1.82,0,3.36-.63,4.63-1.9s1.9-2.81,1.9-4.63-.63-3.36-1.9-4.63c-1.26-1.26-2.81-1.9-4.63-1.9-1.82,0-3.36.63-4.63,1.9s-1.9,2.81-1.9,4.63c0,1.82.63,3.36,1.9,4.63,1.26,1.26,2.81,1.9,4.63,1.9"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <path d="M28.58,6.4l-7.8,20.14c-.26.67-1.01,1-1.68.74-.16-.06-.3-.15-.43-.27l-4.39-4.21-2.7,2.7c-.26.26-.66.26-.92,0-.12-.12-.19-.29-.19-.46v-5.87l-6.74-6.46c-.52-.5-.54-1.32-.04-1.84.17-.18.38-.3.62-.36l22.74-5.84c.7-.18,1.4.24,1.58.94.06.26.05.54-.05.79h0ZM25.42,7.88l-14.25,9.29,2.26,2.16,12-11.45h0Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
2
+ <path d="M2,2v1.5h2.1l-.37.3c-.6.6-1.02,1.25-1.27,1.95-.3.7-.45,1.42-.45,2.17,0,1.4.42,2.65,1.27,3.75.8,1.05,1.87,1.77,3.22,2.17v-1.57c-.9-.35-1.62-.92-2.17-1.72-.55-.75-.82-1.62-.82-2.62,0-.55.1-1.07.3-1.57.2-.55.55-1.05,1.05-1.5l.15-.15v1.8h1.5V2H2ZM9.5,2.23v1.57c.9.3,1.62.85,2.17,1.65.55.75.82,1.62.82,2.62,0,.55-.1,1.07-.3,1.57-.25.55-.57,1.05-.97,1.5l-.22.15v-1.8h-1.5v4.5h4.5v-1.5h-2.02l.22-.22c.65-.65,1.1-1.32,1.35-2.02.3-.75.45-1.47.45-2.17,0-1.4-.42-2.65-1.27-3.75-.8-1.1-1.87-1.82-3.22-2.17v.07Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
2
+ <path d="M11,6.36c2.56,0,4.64,2.08,4.64,4.64,0,1.72-.93,3.21-2.32,4.02v1.39c0,.43-.35.77-.77.77h-3.09c-.43,0-.77-.35-.77-.77v-1.39c-1.38-.8-2.32-2.3-2.32-4.02,0-2.56,2.08-4.64,4.64-4.64M12.55,17.95v.77c0,.43-.35.77-.77.77h-1.55c-.43,0-.77-.35-.77-.77v-.77h3.09ZM17.18,10.23h2.32v1.55h-2.32v-1.55ZM2.5,10.23h2.32v1.55h-2.32v-1.55ZM11.77,2.5v2.32h-1.55v-2.32h1.55ZM5.53,4.43l1.65,1.65-1.1,1.09-1.65-1.64,1.1-1.1ZM14.83,6.08l1.64-1.65,1.11,1.1-1.65,1.64-1.1-1.1Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.97 16.97">
2
+ <path d="M10.41,4.64c0-.31.2-.57.43-.79.21-.2.34-.45.34-.72,0-.63-.69-1.15-1.53-1.15s-1.53.51-1.53,1.15c0,.28.13.53.35.73.22.2.42.46.42.76,0,.41-.33.74-.74.75-.02,0-.03,0-.05,0-.77-.05-1.54-.13-2.31-.23-.31-.04-.6.17-.65.49,0,.05,0,.11,0,.16.11.76.19,1.53.23,2.31.02.41-.29.76-.7.78-.02,0-.03,0-.05,0-.3,0-.56-.19-.76-.42-.2-.22-.45-.35-.73-.35-.63,0-1.15.69-1.15,1.53s.51,1.53,1.15,1.53c.27,0,.52-.13.72-.34.21-.23.48-.43.79-.43.42,0,.77.34.77.76,0,.01,0,.02,0,.03-.04.96-.12,1.91-.24,2.86-.04.31.18.6.49.64.8.11,1.62.19,2.44.24.41.02.76-.29.78-.7,0-.02,0-.03,0-.05,0-.3-.19-.56-.42-.76-.22-.2-.35-.45-.35-.73,0-.63.69-1.15,1.53-1.15s1.53.51,1.53,1.15c0,.27-.13.52-.34.72-.23.21-.43.48-.43.79,0,.42.34.77.76.77,0,0,.02,0,.03,0,1.02-.04,2.04-.12,3.03-.26.26-.03.46-.24.49-.49.13-1,.22-2.01.26-3.03.01-.42-.32-.78-.74-.79,0,0-.02,0-.03,0-.31,0-.57.2-.79.43-.2.21-.45.34-.72.34-.63,0-1.15-.69-1.15-1.53s.51-1.53,1.15-1.53c.28,0,.53.13.73.35.2.22.46.42.76.42.41,0,.75-.33.75-.74,0-.02,0-.03,0-.05-.05-.82-.13-1.63-.24-2.44-.04-.31-.33-.53-.64-.49-.94.13-1.89.21-2.86.24-.42.01-.77-.32-.79-.74,0-.01,0-.02,0-.03"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 560">
2
+ <path d="M119.1,480c-8.15,0-14.95-2.75-20.41-8.26-5.51-5.45-8.26-12.25-8.26-20.41s2.75-14.9,8.26-20.41c5.45-5.45,12.25-8.18,20.41-8.18h229.09c8.15,0,14.95,2.73,20.41,8.18s8.26,12.31,8.26,20.41c0,8.15-2.75,14.95-8.26,20.41-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,365.42c-8.1,0-14.9-2.75-20.41-8.26-5.45-5.45-8.18-12.25-8.18-20.41s2.73-14.9,8.18-20.41c5.51-5.45,12.31-8.18,20.41-8.18h401c8.15,0,14.95,2.73,20.41,8.18,5.51,5.51,8.26,12.31,8.26,20.41s-2.75,14.95-8.26,20.41c-5.45,5.51-12.25,8.26-20.41,8.26H119.1ZM119.1,250.83c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1ZM119.1,136.25c-8.1,0-14.9-2.73-20.41-8.18-5.45-5.51-8.18-12.31-8.18-20.41s2.73-14.95,8.18-20.41c5.51-5.51,12.31-8.26,20.41-8.26h401c8.15,0,14.95,2.75,20.41,8.26,5.51,5.45,8.26,12.25,8.26,20.41s-2.75,14.9-8.26,20.41c-5.45,5.45-12.25,8.18-20.41,8.18H119.1Z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path d="M6.125 12.15q.65-1.65 1.563-3.175T9.75 6.1l-1.3-.275q-.5-.1-.975.05t-.825.5L3.5 9.525q-.375.375-.288.9t.588.725zm14.7-9.75q-2.65-.125-5.037 1.025T11.525 6.45q-1.2 1.2-2.113 2.6T7.826 12q-.125.325-.125.663t.25.587l3.125 3.125q.25.25.588.25t.662-.125q1.55-.675 2.95-1.588t2.6-2.112q1.875-1.875 3.025-4.262T21.925 3.5q0-.2-.1-.4t-.25-.35t-.35-.25t-.4-.1m-6.35 7.45q-.575-.575-.575-1.412t.575-1.413t1.413-.575t1.412.575t.575 1.413T17.3 9.85t-1.412.575t-1.413-.575m-2.3 8.35l1 2.325q.2.5.725.6t.9-.275l3.15-3.15q.35-.35.5-.837t.05-.988l-.25-1.3q-1.375 1.15-2.887 2.063T12.175 18.2M4.05 16.05q.875-.875 2.125-.888t2.125.863t.875 2.125t-.875 2.125q-1.2 1.2-2.838 1.425t-3.287.45q.225-1.65.463-3.287T4.05 16.05"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
2
+ <path d="M174.63 81.37a80 80 0 1 0-93.26 93.26a80 80 0 1 0 93.26-93.26M32 96a64 64 0 0 1 126-16a80.08 80.08 0 0 0-77.95 78A64.11 64.11 0 0 1 32 96m128 128a64.11 64.11 0 0 1-62-48a80.08 80.08 0 0 0 78-78a64 64 0 0 1-16 126"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
2
+ <path d="M12.67 13.67c-.47.46-1.04.83-1.67 1.06V23H8v-2H5v-3h3v-3.28c-1.74-.62-3-2.26-3-4.22C5 8 7 6 9.5 6h.1c-.47.95-.68 2-.57 3.08c-.59.2-1.03.76-1.03 1.42c0 .83.67 1.5 1.5 1.5c.23 0 .45-.06.65-.15c.64.84 1.52 1.47 2.52 1.82m8.06 5.77l-2.76 1.16l-.78-1.84l-2.76 1.17l-1.17-2.77L16.03 16l-1.27-3c-1.85.08-3.65-.95-4.41-2.75c-.96-2.29.12-4.93 2.41-5.9c.24-.1.5-.17.74-.23C12.84 2.87 11.5 2 10 2C7.79 2 6 3.79 6 6v.24c-.3.26-.6.58-.85.91C5.06 6.78 5 6.4 5 6c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.42-.6 2.67-1.55 3.57c.42.43 1.05.56 1.63.31c.77-.32 1.12-1.2.8-1.96a1 1 0 0 0-.14-.26C15.9 7.13 16 6.58 16 6c0-.63-.1-1.24-.28-1.81c1.28.36 2.38 1.25 2.93 2.57c.76 1.8.24 3.81-1.15 5.05zM13 8.6c.37-.41.65-.89.82-1.42c-.54.27-.85.82-.82 1.42"/>
3
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M17 3a2 2 0 0 1 1.492.668l.108.132l3.704 4.939a2 2 0 0 1-.012 2.416l-.108.13l-9.259 10.184a1.25 1.25 0 0 1-1.753.096l-.097-.096l-9.259-10.185a2 2 0 0 1-.215-2.407l.095-.138L5.4 3.8a2 2 0 0 1 1.43-.793L7 3zm-2.477 8H9.477L12 17.307zm5.217 0h-3.063l-2.406 6.015zM7.323 11H4.261l5.468 6.015zm5.059-6h-.764l-2 4h4.764zM17 5h-2.382l2 4H20zM9.382 5H7L4 9h3.382z"/></g></svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800">
2
+ <path d="M400,715.16c-43.6,0-84.57-8.27-122.91-24.82-38.34-16.55-71.7-39-100.06-67.37-28.36-28.36-50.82-61.72-67.37-100.06-16.55-38.34-24.82-79.32-24.82-122.91s8.27-84.57,24.82-122.91c16.55-38.34,39-71.7,67.37-100.06,28.36-28.36,61.72-50.82,100.06-67.37,38.34-16.55,79.32-24.82,122.91-24.82,34.14,0,66.45,4.99,96.91,14.97,30.47,9.98,58.57,23.9,84.31,41.76l-45.7,46.49c-19.96-12.61-41.23-22.46-63.82-29.55-22.59-7.09-46.49-10.64-71.7-10.64-69.86,0-129.35,24.56-178.46,73.67-49.11,49.11-73.67,108.6-73.67,178.46s24.56,129.35,73.67,178.46c49.11,49.11,108.6,73.67,178.46,73.67s129.35-24.56,178.46-73.67c49.11-49.11,73.67-108.6,73.67-178.46,0-9.45-.53-18.91-1.58-28.36-1.05-9.45-2.63-18.65-4.73-27.58l51.21-51.21c5.78,16.81,10.24,34.14,13.39,52,3.15,17.86,4.73,36.24,4.73,55.15,0,43.6-8.27,84.57-24.82,122.91-16.55,38.34-39,71.7-67.37,100.06-28.36,28.36-61.72,50.82-100.06,67.37-38.34,16.55-79.32,24.82-122.91,24.82ZM355.88,544.97l-133.94-133.94,44.12-44.12,89.82,89.82,315.16-315.95,44.12,44.12-359.29,360.07Z"/>
3
+ </svg>
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import type { ProseElement } from '@jsprose/core';
3
+
4
+ import { problemSchema } from '../problem.js';
5
+ import Block from '../../../app/shared/block/Block.vue';
6
+ import ProblemContainer from './ProblemContainer.vue';
7
+ import ProblemHeader from './ProblemHeader.vue';
8
+ import ProblemContent from './ProblemContent.vue';
9
+
10
+ const { element } = defineProps<{
11
+ element: ProseElement<typeof problemSchema>;
12
+ }>();
13
+ </script>
14
+
15
+ <template>
16
+ <Block :element>
17
+ <ProblemContainer>
18
+ <ProblemHeader :info="element.data.info" />
19
+ <ProblemContent :element :initialElements="element.children" />
20
+ </ProblemContainer>
21
+ </Block>
22
+ </template>
@@ -0,0 +1,21 @@
1
+ <script lang="ts" setup>
2
+ defineProps<{ active?: boolean }>();
3
+ </script>
4
+
5
+ <template>
6
+ <button
7
+ :class="[
8
+ `bg-bg-main border-border/80 text-main-xs min-w-[50px]
9
+ cursor-pointer rounded border px-2.5 py-[5px] font-semibold shadow
10
+ shadow-[light-dark(#d9d9d9,#3c3c3c)]
11
+ transition-[color,background,border,box-shadow]`,
12
+ {
13
+ 'border-brand/50 bg-brand/10 text-brand': active,
14
+ ['text-text-muted hocus:text-brand hocus:border-brand/50']:
15
+ !active,
16
+ },
17
+ ]"
18
+ >
19
+ <slot></slot>
20
+ </button>
21
+ </template>