@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.
- package/dist/app/appElement.d.ts +19 -0
- package/dist/app/appElement.js +12 -0
- package/dist/app/component.d.ts +6 -0
- package/dist/app/component.js +6 -0
- package/dist/app/composables/anchor.d.ts +16 -0
- package/dist/app/composables/anchor.js +89 -0
- package/dist/app/composables/appElement.d.ts +4 -0
- package/dist/app/composables/appElement.js +16 -0
- package/dist/app/composables/context.d.ts +22 -0
- package/dist/app/composables/context.js +5 -0
- package/dist/app/composables/elementIcon.d.ts +3 -0
- package/dist/app/composables/elementIcon.js +5 -0
- package/dist/app/composables/formatText.d.ts +1 -0
- package/dist/app/composables/formatText.js +5 -0
- package/dist/app/composables/language.d.ts +8 -0
- package/dist/app/composables/language.js +13 -0
- package/dist/app/composables/storage.d.ts +5 -0
- package/dist/app/composables/storage.js +23 -0
- package/dist/app/default/Inliners.vue +11 -0
- package/dist/app/default/Mix.vue +11 -0
- package/dist/app/default/Text.vue +21 -0
- package/dist/app/icon.d.ts +5 -0
- package/dist/app/icon.js +7 -0
- package/dist/app/index.d.ts +18 -0
- package/dist/app/index.js +18 -0
- package/dist/app/language/element.d.ts +10 -0
- package/dist/app/language/element.js +12 -0
- package/dist/app/language/list/en.d.ts +3 -0
- package/dist/app/language/list/en.js +5 -0
- package/dist/app/language/list/ru.d.ts +3 -0
- package/dist/app/language/list/ru.js +5 -0
- package/dist/app/language/prose.d.ts +9 -0
- package/dist/app/language/prose.js +4 -0
- package/dist/app/shared/Prose.vue +36 -0
- package/dist/app/shared/Render.vue +51 -0
- package/dist/app/shared/assets/block.svg +3 -0
- package/dist/app/shared/assets/check.svg +3 -0
- package/dist/app/shared/assets/inliner.svg +3 -0
- package/dist/app/shared/assets/plus.svg +3 -0
- package/dist/app/shared/assets/share.svg +3 -0
- package/dist/app/shared/block/AsideMenu.vue +44 -0
- package/dist/app/shared/block/AsideMenuButton.vue +53 -0
- package/dist/app/shared/block/AsideMenuCopyLink.vue +40 -0
- package/dist/app/shared/block/AsideMenuSeparator.vue +3 -0
- package/dist/app/shared/block/Block.vue +270 -0
- package/dist/app/shared/inliner/Inliner.vue +11 -0
- package/dist/app/shared/invert.d.ts +2 -0
- package/dist/app/shared/invert.js +2 -0
- package/dist/app/shared/photoswipe/composable.d.ts +9 -0
- package/dist/app/shared/photoswipe/composable.js +68 -0
- package/dist/app/shared/photoswipe/style.css +26 -0
- package/dist/context.d.ts +4 -0
- package/dist/context.js +1 -0
- package/dist/coreElement.d.ts +10 -0
- package/dist/coreElement.js +6 -0
- package/dist/elements/accent/Accent.vue +92 -0
- package/dist/elements/accent/AccentColumnSection.vue +61 -0
- package/dist/elements/accent/AccentRowSections.vue +65 -0
- package/dist/elements/accent/app.d.ts +21 -0
- package/dist/elements/accent/app.js +16 -0
- package/dist/elements/accent/core.d.ts +340 -0
- package/dist/elements/accent/core.js +175 -0
- package/dist/elements/callout/Callout.vue +88 -0
- package/dist/elements/callout/_global.d.ts +15 -0
- package/dist/elements/callout/app.d.ts +9 -0
- package/dist/elements/callout/app.js +11 -0
- package/dist/elements/callout/core.d.ts +80 -0
- package/dist/elements/callout/core.js +37 -0
- package/dist/elements/callout/icon.svg +3 -0
- package/dist/elements/callout/languages/en.d.ts +4 -0
- package/dist/elements/callout/languages/en.js +2 -0
- package/dist/elements/callout/languages/ru.d.ts +4 -0
- package/dist/elements/callout/languages/ru.js +2 -0
- package/dist/elements/callout/storage.d.ts +2 -0
- package/dist/elements/callout/storage.js +5 -0
- package/dist/elements/caption/Caption.vue +47 -0
- package/dist/elements/caption/_global.d.ts +26 -0
- package/dist/elements/caption/app.d.ts +9 -0
- package/dist/elements/caption/app.js +6 -0
- package/dist/elements/caption/core.d.ts +114 -0
- package/dist/elements/caption/core.js +61 -0
- package/dist/elements/details/Details.vue +51 -0
- package/dist/elements/details/_global.d.ts +27 -0
- package/dist/elements/details/app.d.ts +9 -0
- package/dist/elements/details/app.js +11 -0
- package/dist/elements/details/core.d.ts +68 -0
- package/dist/elements/details/core.js +30 -0
- package/dist/elements/details/icon.svg +3 -0
- package/dist/elements/details/languages/en.d.ts +4 -0
- package/dist/elements/details/languages/en.js +2 -0
- package/dist/elements/details/languages/ru.d.ts +4 -0
- package/dist/elements/details/languages/ru.js +2 -0
- package/dist/elements/diagram/Diagram.vue +364 -0
- package/dist/elements/diagram/_global.d.ts +19 -0
- package/dist/elements/diagram/app.d.ts +30 -0
- package/dist/elements/diagram/app.js +11 -0
- package/dist/elements/diagram/core.d.ts +194 -0
- package/dist/elements/diagram/core.js +36 -0
- package/dist/elements/diagram/icon.svg +3 -0
- package/dist/elements/diagram/languages/en.d.ts +4 -0
- package/dist/elements/diagram/languages/en.js +2 -0
- package/dist/elements/diagram/languages/ru.d.ts +4 -0
- package/dist/elements/diagram/languages/ru.js +2 -0
- package/dist/elements/emphasis/Emphasis.vue +25 -0
- package/dist/elements/emphasis/_global.d.ts +18 -0
- package/dist/elements/emphasis/app.d.ts +9 -0
- package/dist/elements/emphasis/app.js +6 -0
- package/dist/elements/emphasis/core.d.ts +90 -0
- package/dist/elements/emphasis/core.js +32 -0
- package/dist/elements/flex/Flex.vue +32 -0
- package/dist/elements/flex/_global.d.ts +23 -0
- package/dist/elements/flex/app.d.ts +9 -0
- package/dist/elements/flex/app.js +11 -0
- package/dist/elements/flex/core.d.ts +67 -0
- package/dist/elements/flex/core.js +28 -0
- package/dist/elements/flex/icon.svg +3 -0
- package/dist/elements/flex/languages/en.d.ts +4 -0
- package/dist/elements/flex/languages/en.js +2 -0
- package/dist/elements/flex/languages/ru.d.ts +4 -0
- package/dist/elements/flex/languages/ru.js +2 -0
- package/dist/elements/gallery/Gallery.vue +56 -0
- package/dist/elements/gallery/_global.d.ts +18 -0
- package/dist/elements/gallery/app.d.ts +23 -0
- package/dist/elements/gallery/app.js +11 -0
- package/dist/elements/gallery/core.d.ts +138 -0
- package/dist/elements/gallery/core.js +21 -0
- package/dist/elements/gallery/icon.svg +3 -0
- package/dist/elements/gallery/languages/en.d.ts +4 -0
- package/dist/elements/gallery/languages/en.js +2 -0
- package/dist/elements/gallery/languages/ru.d.ts +4 -0
- package/dist/elements/gallery/languages/ru.js +2 -0
- package/dist/elements/heading/Heading.vue +44 -0
- package/dist/elements/heading/_global.d.ts +45 -0
- package/dist/elements/heading/app.d.ts +9 -0
- package/dist/elements/heading/app.js +11 -0
- package/dist/elements/heading/core.d.ts +108 -0
- package/dist/elements/heading/core.js +52 -0
- package/dist/elements/heading/icon.svg +3 -0
- package/dist/elements/heading/languages/en.d.ts +4 -0
- package/dist/elements/heading/languages/en.js +2 -0
- package/dist/elements/heading/languages/ru.d.ts +4 -0
- package/dist/elements/heading/languages/ru.js +2 -0
- package/dist/elements/horizontalLine/HorizontalLine.vue +6 -0
- package/dist/elements/horizontalLine/_global.d.ts +17 -0
- package/dist/elements/horizontalLine/app.d.ts +9 -0
- package/dist/elements/horizontalLine/app.js +6 -0
- package/dist/elements/horizontalLine/core.d.ts +54 -0
- package/dist/elements/horizontalLine/core.js +19 -0
- package/dist/elements/image/Image.vue +15 -0
- package/dist/elements/image/ImageElement.vue +80 -0
- package/dist/elements/image/_global.d.ts +18 -0
- package/dist/elements/image/app.d.ts +16 -0
- package/dist/elements/image/app.js +11 -0
- package/dist/elements/image/core.d.ts +136 -0
- package/dist/elements/image/core.js +44 -0
- package/dist/elements/image/icon.svg +3 -0
- package/dist/elements/image/languages/en.d.ts +4 -0
- package/dist/elements/image/languages/en.js +2 -0
- package/dist/elements/image/languages/ru.d.ts +4 -0
- package/dist/elements/image/languages/ru.js +2 -0
- package/dist/elements/image/storage.d.ts +6 -0
- package/dist/elements/image/storage.js +23 -0
- package/dist/elements/lineBreak/LineBreak.vue +3 -0
- package/dist/elements/lineBreak/_global.d.ts +18 -0
- package/dist/elements/lineBreak/app.d.ts +9 -0
- package/dist/elements/lineBreak/app.js +6 -0
- package/dist/elements/lineBreak/core.d.ts +54 -0
- package/dist/elements/lineBreak/core.js +19 -0
- package/dist/elements/link/BlockLink.vue +111 -0
- package/dist/elements/link/Link.vue +93 -0
- package/dist/elements/link/core.d.ts +13 -0
- package/dist/elements/link/core.js +12 -0
- package/dist/elements/link/dependency/_global.d.ts +47 -0
- package/dist/elements/link/dependency/app.d.ts +16 -0
- package/dist/elements/link/dependency/app.js +14 -0
- package/dist/elements/link/dependency/core.d.ts +125 -0
- package/dist/elements/link/dependency/core.js +51 -0
- package/dist/elements/link/dependency/languages/en.d.ts +4 -0
- package/dist/elements/link/dependency/languages/en.js +2 -0
- package/dist/elements/link/dependency/languages/ru.d.ts +4 -0
- package/dist/elements/link/dependency/languages/ru.js +2 -0
- package/dist/elements/link/icon.svg +3 -0
- package/dist/elements/link/reference/_global.d.ts +49 -0
- package/dist/elements/link/reference/app.d.ts +16 -0
- package/dist/elements/link/reference/app.js +14 -0
- package/dist/elements/link/reference/core.d.ts +120 -0
- package/dist/elements/link/reference/core.js +35 -0
- package/dist/elements/link/reference/languages/en.d.ts +4 -0
- package/dist/elements/link/reference/languages/en.js +2 -0
- package/dist/elements/link/reference/languages/ru.d.ts +4 -0
- package/dist/elements/link/reference/languages/ru.js +2 -0
- package/dist/elements/link/storage.d.ts +34 -0
- package/dist/elements/link/storage.js +20 -0
- package/dist/elements/list/List.vue +63 -0
- package/dist/elements/list/_global.d.ts +50 -0
- package/dist/elements/list/app.d.ts +16 -0
- package/dist/elements/list/app.js +11 -0
- package/dist/elements/list/core.d.ts +169 -0
- package/dist/elements/list/core.js +49 -0
- package/dist/elements/list/icon.svg +3 -0
- package/dist/elements/list/languages/en.d.ts +4 -0
- package/dist/elements/list/languages/en.js +2 -0
- package/dist/elements/list/languages/ru.d.ts +4 -0
- package/dist/elements/list/languages/ru.js +2 -0
- package/dist/elements/math/_global.d.ts +72 -0
- package/dist/elements/math/_global.ts +3 -0
- package/dist/elements/math/app.d.ts +16 -0
- package/dist/elements/math/app.js +20 -0
- package/dist/elements/math/block.d.ts +75 -0
- package/dist/elements/math/block.js +115 -0
- package/dist/elements/math/components/BlockMath.vue +30 -0
- package/dist/elements/math/components/InlinerMath.vue +65 -0
- package/dist/elements/math/components/Katex.vue +89 -0
- package/dist/elements/math/components/MathGroup.vue +39 -0
- package/dist/elements/math/core.d.ts +66 -0
- package/dist/elements/math/core.js +11 -0
- package/dist/elements/math/icon.svg +3 -0
- package/dist/elements/math/inliner.d.ts +64 -0
- package/dist/elements/math/inliner.js +85 -0
- package/dist/elements/math/katex.d.ts +8 -0
- package/dist/elements/math/katex.js +18 -0
- package/dist/elements/math/languages/en.d.ts +4 -0
- package/dist/elements/math/languages/en.js +2 -0
- package/dist/elements/math/languages/ru.d.ts +4 -0
- package/dist/elements/math/languages/ru.js +2 -0
- package/dist/elements/math/macros.d.ts +13 -0
- package/dist/elements/math/macros.js +12 -0
- package/dist/elements/paragraph/Paragraph.vue +27 -0
- package/dist/elements/paragraph/_global.d.ts +27 -0
- package/dist/elements/paragraph/app.d.ts +9 -0
- package/dist/elements/paragraph/app.js +11 -0
- package/dist/elements/paragraph/core.d.ts +67 -0
- package/dist/elements/paragraph/core.js +29 -0
- package/dist/elements/paragraph/icon.svg +4 -0
- package/dist/elements/paragraph/languages/en.d.ts +4 -0
- package/dist/elements/paragraph/languages/en.js +2 -0
- package/dist/elements/paragraph/languages/ru.d.ts +4 -0
- package/dist/elements/paragraph/languages/ru.js +2 -0
- package/dist/elements/problem/_global.d.ts +112 -0
- package/dist/elements/problem/app.d.ts +30 -0
- package/dist/elements/problem/app.js +27 -0
- package/dist/elements/problem/assets/actions/answer.svg +3 -0
- package/dist/elements/problem/assets/actions/check.svg +3 -0
- package/dist/elements/problem/assets/actions/generate.svg +3 -0
- package/dist/elements/problem/assets/actions/hint.svg +3 -0
- package/dist/elements/problem/assets/actions/note.svg +3 -0
- package/dist/elements/problem/assets/actions/solution.svg +3 -0
- package/dist/elements/problem/assets/attributes/applied.svg +3 -0
- package/dist/elements/problem/assets/attributes/inter.svg +3 -0
- package/dist/elements/problem/assets/attributes/method.svg +3 -0
- package/dist/elements/problem/assets/attributes/pretty.svg +1 -0
- package/dist/elements/problem/assets/icon.svg +3 -0
- package/dist/elements/problem/components/Problem.vue +22 -0
- package/dist/elements/problem/components/ProblemButton.vue +21 -0
- package/dist/elements/problem/components/ProblemContainer.vue +9 -0
- package/dist/elements/problem/components/ProblemContent.vue +371 -0
- package/dist/elements/problem/components/ProblemExpander.vue +7 -0
- package/dist/elements/problem/components/ProblemExpanderSection.vue +58 -0
- package/dist/elements/problem/components/ProblemHeader.vue +106 -0
- package/dist/elements/problem/components/Problems.vue +87 -0
- package/dist/elements/problem/components/SubProblem.vue +14 -0
- package/dist/elements/problem/components/expanders/Check.vue +151 -0
- package/dist/elements/problem/components/expanders/Checks.vue +83 -0
- package/dist/elements/problem/components/expanders/DefaultPlusSections.vue +38 -0
- package/dist/elements/problem/components/expanders/Hint.vue +26 -0
- package/dist/elements/problem/composables/phrase.d.ts +2 -0
- package/dist/elements/problem/composables/phrase.js +7 -0
- package/dist/elements/problem/composables/problemScript.d.ts +3 -0
- package/dist/elements/problem/composables/problemScript.js +11 -0
- package/dist/elements/problem/core.d.ts +248 -0
- package/dist/elements/problem/core.js +17 -0
- package/dist/elements/problem/languages/en.d.ts +3 -0
- package/dist/elements/problem/languages/en.js +24 -0
- package/dist/elements/problem/languages/ru.d.ts +3 -0
- package/dist/elements/problem/languages/ru.js +24 -0
- package/dist/elements/problem/phrases.d.ts +16 -0
- package/dist/elements/problem/phrases.js +1 -0
- package/dist/elements/problem/problem.d.ts +106 -0
- package/dist/elements/problem/problem.js +37 -0
- package/dist/elements/problem/problemContent.d.ts +439 -0
- package/dist/elements/problem/problemContent.js +236 -0
- package/dist/elements/problem/problemScript.d.ts +26 -0
- package/dist/elements/problem/problemScript.js +79 -0
- package/dist/elements/problem/problems.d.ts +212 -0
- package/dist/elements/problem/problems.js +74 -0
- package/dist/elements/problem/rng.d.ts +18 -0
- package/dist/elements/problem/rng.js +76 -0
- package/dist/elements/problem/shared.d.ts +28 -0
- package/dist/elements/problem/shared.js +42 -0
- package/dist/elements/problem/step.d.ts +5 -0
- package/dist/elements/problem/step.js +13 -0
- package/dist/elements/problem/storage.d.ts +5 -0
- package/dist/elements/problem/storage.js +8 -0
- package/dist/elements/table/Table.vue +104 -0
- package/dist/elements/table/_global.d.ts +36 -0
- package/dist/elements/table/app.d.ts +30 -0
- package/dist/elements/table/app.js +11 -0
- package/dist/elements/table/core.d.ts +324 -0
- package/dist/elements/table/core.js +65 -0
- package/dist/elements/table/icon.svg +3 -0
- package/dist/elements/table/languages/en.d.ts +4 -0
- package/dist/elements/table/languages/en.js +2 -0
- package/dist/elements/table/languages/ru.d.ts +4 -0
- package/dist/elements/table/languages/ru.js +2 -0
- package/dist/elements/video/Video.vue +109 -0
- package/dist/elements/video/_global.d.ts +18 -0
- package/dist/elements/video/app.d.ts +16 -0
- package/dist/elements/video/app.js +11 -0
- package/dist/elements/video/core.d.ts +128 -0
- package/dist/elements/video/core.js +43 -0
- package/dist/elements/video/icon.svg +3 -0
- package/dist/elements/video/languages/en.d.ts +4 -0
- package/dist/elements/video/languages/en.js +2 -0
- package/dist/elements/video/languages/ru.d.ts +4 -0
- package/dist/elements/video/languages/ru.js +2 -0
- package/dist/elements/video/storage.d.ts +2 -0
- package/dist/elements/video/storage.js +5 -0
- package/dist/include.d.ts +6 -0
- package/dist/include.js +42 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +15 -0
- package/dist/rawElement.d.ts +6 -0
- package/dist/rawElement.js +3 -0
- package/dist/resolve.d.ts +20 -0
- package/dist/resolve.js +99 -0
- package/dist/resolveStep.d.ts +9 -0
- package/dist/resolveStep.js +3 -0
- package/dist/shared/filePath.d.ts +5 -0
- package/dist/shared/filePath.js +11 -0
- package/dist/shared/invert.d.ts +1 -0
- package/dist/shared/invert.js +1 -0
- package/dist/shared/paragraphWrap.d.ts +3 -0
- package/dist/shared/paragraphWrap.js +15 -0
- package/dist/shared/photoswipe.d.ts +10 -0
- package/dist/shared/photoswipe.js +10 -0
- package/dist/slugify/index.d.ts +1 -0
- package/dist/slugify/index.js +12 -0
- package/dist/slugify/languages/en.d.ts +2 -0
- package/dist/slugify/languages/en.js +3 -0
- package/dist/slugify/languages/ru.d.ts +2 -0
- package/dist/slugify/languages/ru.js +38 -0
- package/dist/snippet.d.ts +66 -0
- package/dist/snippet.js +57 -0
- package/dist/tag.d.ts +22 -0
- package/dist/tag.js +20 -0
- package/dist/title.d.ts +8 -0
- package/dist/title.js +6 -0
- package/dist/toc.d.ts +34 -0
- package/dist/toc.js +52 -0
- package/dist/utils/case.d.ts +4 -0
- package/dist/utils/case.js +8 -0
- package/dist/utils/docs.d.ts +1 -0
- package/dist/utils/docs.js +22 -0
- package/package.json +48 -0
- 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,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,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,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>
|