@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,88 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { ProseElement } from '@jsprose/core';
|
|
3
|
+
|
|
4
|
+
import type { calloutSchema } from './core.js';
|
|
5
|
+
import { useElementStorage } from '../../app/composables/storage.js';
|
|
6
|
+
import { useFormatText } from '../../app/composables/formatText.js';
|
|
7
|
+
import Block from '../../app/shared/block/Block.vue';
|
|
8
|
+
import Render from '../../app/shared/Render.vue';
|
|
9
|
+
|
|
10
|
+
const { element } = defineProps<{
|
|
11
|
+
element: ProseElement<typeof calloutSchema>;
|
|
12
|
+
}>();
|
|
13
|
+
const calloutStorage = await useElementStorage<typeof calloutSchema>(element);
|
|
14
|
+
const formatText = useFormatText();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Block :element>
|
|
19
|
+
<div
|
|
20
|
+
:style="{ '--calloutBg': 'light-dark(#f7f7f7, #1c1c1c)' }"
|
|
21
|
+
class="gap-big flex"
|
|
22
|
+
>
|
|
23
|
+
<div class="max-micro:hidden shrink-0">
|
|
24
|
+
<img
|
|
25
|
+
:src="calloutStorage.resolvedIconSrc"
|
|
26
|
+
loading="lazy"
|
|
27
|
+
class="outline-border size-[60px] rounded-full border-2
|
|
28
|
+
border-transparent outline-2 transition-[outline]"
|
|
29
|
+
/>
|
|
30
|
+
</div>
|
|
31
|
+
<div
|
|
32
|
+
class="border-border/90 relative flex-1 rounded-xl border
|
|
33
|
+
bg-(--calloutBg) py-(--proseAsideWidth) font-serif shadow-md
|
|
34
|
+
transition-[border,background]"
|
|
35
|
+
>
|
|
36
|
+
<div
|
|
37
|
+
:class="$style.arrow"
|
|
38
|
+
class="max-micro:hidden transition-[border]"
|
|
39
|
+
>
|
|
40
|
+
<div :class="$style.fill" class="transition-[border]"></div>
|
|
41
|
+
</div>
|
|
42
|
+
<header
|
|
43
|
+
class="gap-small mb-(--proseAsideWidth) flex items-center
|
|
44
|
+
px-(--proseAsideWidth) font-semibold transition-[color]"
|
|
45
|
+
>
|
|
46
|
+
<img
|
|
47
|
+
:src="calloutStorage.resolvedIconSrc"
|
|
48
|
+
class="micro:hidden size-[30px] shrink-0 rounded-full"
|
|
49
|
+
/>
|
|
50
|
+
<div class="text-text-deep flex-1">
|
|
51
|
+
{{ formatText(element.data.title) }}
|
|
52
|
+
</div>
|
|
53
|
+
</header>
|
|
54
|
+
<main class="text-main-sm">
|
|
55
|
+
<Render
|
|
56
|
+
v-for="child of element.children"
|
|
57
|
+
:element="child"
|
|
58
|
+
/>
|
|
59
|
+
</main>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</Block>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<style module>
|
|
66
|
+
.arrow {
|
|
67
|
+
--arrowSize: 18px;
|
|
68
|
+
border-bottom: var(--arrowSize) solid transparent;
|
|
69
|
+
border-right: var(--arrowSize) solid var(--color-border);
|
|
70
|
+
border-top: var(--arrowSize) solid transparent;
|
|
71
|
+
height: 0;
|
|
72
|
+
position: absolute;
|
|
73
|
+
left: calc(-1 * var(--arrowSize));
|
|
74
|
+
top: calc(var(--proseAsideWidth) - var(--arrowSize) / 4);
|
|
75
|
+
width: 0;
|
|
76
|
+
|
|
77
|
+
.fill {
|
|
78
|
+
border-bottom: calc(var(--arrowSize) - 1px) solid transparent;
|
|
79
|
+
border-right: calc(var(--arrowSize) - 1px) solid var(--calloutBg);
|
|
80
|
+
border-top: calc(var(--arrowSize) - 1px) solid transparent;
|
|
81
|
+
height: 0;
|
|
82
|
+
left: 1.5px;
|
|
83
|
+
position: absolute;
|
|
84
|
+
transform: translateY(-50%);
|
|
85
|
+
width: 0;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callouts are used to highlight important information, warnings, or tips within the content.
|
|
3
|
+
*
|
|
4
|
+
* @title Callout
|
|
5
|
+
* @layout block
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* // import warningIcon from './assets/warning-icon.svg';
|
|
9
|
+
*
|
|
10
|
+
* <Callout icon={warningIcon} title="Important Notice" invert="dark">
|
|
11
|
+
* <P>Please be aware of the upcoming changes to the schedule.</P>
|
|
12
|
+
* </Callout>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export const Callout = '_tag_';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: import("../../app/appElement.js").AppElement<{
|
|
2
|
+
name: "callout";
|
|
3
|
+
type: "block";
|
|
4
|
+
linkable: true;
|
|
5
|
+
Data: import("./core.js").CalloutData;
|
|
6
|
+
Storage: import("./core.js").CalloutStorage;
|
|
7
|
+
Children: import("@jsprose/core").BlockSchema[];
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineEruditProseAppElement } from "../../app/appElement.js";
|
|
2
|
+
import { calloutSchema } from "./core.js";
|
|
3
|
+
export default defineEruditProseAppElement({
|
|
4
|
+
schema: calloutSchema,
|
|
5
|
+
component: () => import("./Callout.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,80 @@
|
|
|
1
|
+
import { type BlockSchema, type TagChildren } from '@jsprose/core';
|
|
2
|
+
import type { Invert } from '../../shared/invert.js';
|
|
3
|
+
export interface CalloutData {
|
|
4
|
+
iconSrc: string;
|
|
5
|
+
iconInvert?: Invert;
|
|
6
|
+
title: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CalloutStorage {
|
|
9
|
+
resolvedIconSrc: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const calloutSchema: {
|
|
12
|
+
name: "callout";
|
|
13
|
+
type: "block";
|
|
14
|
+
linkable: true;
|
|
15
|
+
Data: CalloutData;
|
|
16
|
+
Storage: CalloutStorage;
|
|
17
|
+
Children: BlockSchema[];
|
|
18
|
+
};
|
|
19
|
+
export declare const Callout: import("@jsprose/core").Tag<"Callout", {
|
|
20
|
+
name: "callout";
|
|
21
|
+
type: "block";
|
|
22
|
+
linkable: true;
|
|
23
|
+
Data: CalloutData;
|
|
24
|
+
Storage: CalloutStorage;
|
|
25
|
+
Children: BlockSchema[];
|
|
26
|
+
}, {
|
|
27
|
+
icon: string;
|
|
28
|
+
invert?: Invert;
|
|
29
|
+
title: string;
|
|
30
|
+
} & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
|
|
31
|
+
export declare const calloutRegistryItem: import("@jsprose/core").RegistryItem<{
|
|
32
|
+
name: "callout";
|
|
33
|
+
type: "block";
|
|
34
|
+
linkable: true;
|
|
35
|
+
Data: CalloutData;
|
|
36
|
+
Storage: CalloutStorage;
|
|
37
|
+
Children: BlockSchema[];
|
|
38
|
+
}, {
|
|
39
|
+
Callout: import("@jsprose/core").Tag<"Callout", {
|
|
40
|
+
name: "callout";
|
|
41
|
+
type: "block";
|
|
42
|
+
linkable: true;
|
|
43
|
+
Data: CalloutData;
|
|
44
|
+
Storage: CalloutStorage;
|
|
45
|
+
Children: BlockSchema[];
|
|
46
|
+
}, {
|
|
47
|
+
icon: string;
|
|
48
|
+
invert?: Invert;
|
|
49
|
+
title: string;
|
|
50
|
+
} & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
|
|
51
|
+
}, undefined>;
|
|
52
|
+
declare const _default: {
|
|
53
|
+
registryItem: import("@jsprose/core").RegistryItem<{
|
|
54
|
+
name: "callout";
|
|
55
|
+
type: "block";
|
|
56
|
+
linkable: true;
|
|
57
|
+
Data: CalloutData;
|
|
58
|
+
Storage: CalloutStorage;
|
|
59
|
+
Children: BlockSchema[];
|
|
60
|
+
}, {
|
|
61
|
+
Callout: import("@jsprose/core").Tag<"Callout", {
|
|
62
|
+
name: "callout";
|
|
63
|
+
type: "block";
|
|
64
|
+
linkable: true;
|
|
65
|
+
Data: CalloutData;
|
|
66
|
+
Storage: CalloutStorage;
|
|
67
|
+
Children: BlockSchema[];
|
|
68
|
+
}, {
|
|
69
|
+
icon: string;
|
|
70
|
+
invert?: Invert;
|
|
71
|
+
title: string;
|
|
72
|
+
} & TagChildren & import("../../toc.js").ObjPropToc & import("../../snippet.js").ObjPropSnippet & import("../../snippet.js").ObjPropSearch & import("../../snippet.js").ObjPropQuick & import("../../snippet.js").ObjPropSeo>;
|
|
73
|
+
}, undefined>;
|
|
74
|
+
};
|
|
75
|
+
export default _default;
|
|
76
|
+
export declare const calloutIconSrcStep: ({ rawElement }: {
|
|
77
|
+
context: import("../../context.js").EruditProseContext;
|
|
78
|
+
rawElement: import("../../rawElement.js").EruditRawElement<import("@jsprose/core").AnySchema>;
|
|
79
|
+
proseElement: import("@jsprose/core").ProseElement<import("@jsprose/core").AnySchema>;
|
|
80
|
+
}) => string | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { defineRegistryItem, defineSchema, ensureTagBlockChildren, isRawElement } from "@jsprose/core";
|
|
2
|
+
import { defineEruditTag } from "../../tag.js";
|
|
3
|
+
import { defineEruditProseCoreElement } from "../../coreElement.js";
|
|
4
|
+
import { defineResolveStep } from "../../resolveStep.js";
|
|
5
|
+
export const calloutSchema = defineSchema({
|
|
6
|
+
name: "callout",
|
|
7
|
+
type: "block",
|
|
8
|
+
linkable: true
|
|
9
|
+
})();
|
|
10
|
+
export const Callout = defineEruditTag({
|
|
11
|
+
tagName: "Callout",
|
|
12
|
+
schema: calloutSchema
|
|
13
|
+
})(({ element, tagName, props, children, registry }) => {
|
|
14
|
+
ensureTagBlockChildren(tagName, children, registry);
|
|
15
|
+
element.children = children;
|
|
16
|
+
element.data = {
|
|
17
|
+
iconSrc: props.icon,
|
|
18
|
+
title: props.title
|
|
19
|
+
};
|
|
20
|
+
element.storageKey = props.icon;
|
|
21
|
+
if (props.invert) {
|
|
22
|
+
element.data.iconInvert = props.invert;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export const calloutRegistryItem = defineRegistryItem({
|
|
26
|
+
schema: calloutSchema,
|
|
27
|
+
tags: [Callout]
|
|
28
|
+
});
|
|
29
|
+
export default defineEruditProseCoreElement({ registryItem: calloutRegistryItem });
|
|
30
|
+
//
|
|
31
|
+
// Resolve
|
|
32
|
+
//
|
|
33
|
+
export const calloutIconSrcStep = defineResolveStep(({ rawElement }) => {
|
|
34
|
+
if (isRawElement(rawElement, calloutSchema)) {
|
|
35
|
+
return rawElement.data.iconSrc;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960">
|
|
2
|
+
<path d="m349-310 31-80h194l30 80h-50q-14 0-24.5 10.5T519-275q0 14 10.5 24.5T554-240h141q14 0 24.5-10.5T730-275q0-14-10.5-24.5T695-310h-5L539-692q-5-13-16-20.5t-25-7.5h-35q-14 0-25 7.5T422-692L270-310h-5q-14 0-24.5 10.5T230-275q0 14 10.5 24.5T265-240h136q14 0 24.5-10.5T436-275q0-14-11-24.5T400-310h-51Zm56-145 68-177h7l68 177H405ZM160-80q-33 0-56.5-23.5T80-160v-640q0-33 23.5-56.5T160-880h640q33 0 56.5 23.5T880-800v640q0 33-23.5 56.5T800-80H160Zm0-80h640v-640H160v640Zm0 0v-640 640Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { projectRelFilePath } from "../../shared/filePath.js";
|
|
2
|
+
export function createCalloutStorage(projectAbsPath, projectBaseUrl, calloutAbsoluteIconSrc) {
|
|
3
|
+
const resolvedIconSrc = projectBaseUrl + "file/" + projectRelFilePath(projectAbsPath, calloutAbsoluteIconSrc);
|
|
4
|
+
return { resolvedIconSrc };
|
|
5
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { onMounted, useTemplateRef } from 'vue';
|
|
3
|
+
import { isProseElement, type ProseElement } from '@jsprose/core';
|
|
4
|
+
|
|
5
|
+
import { captionSecondarySchema, type captionSchema } from './core.js';
|
|
6
|
+
import Render from '../../app/shared/Render.vue';
|
|
7
|
+
|
|
8
|
+
const { caption } = defineProps<{
|
|
9
|
+
caption: ProseElement<typeof captionSchema>;
|
|
10
|
+
}>();
|
|
11
|
+
|
|
12
|
+
const emit = defineEmits(['captionMounted']);
|
|
13
|
+
|
|
14
|
+
const captionElement = useTemplateRef('caption');
|
|
15
|
+
|
|
16
|
+
const captionSecondary = caption.children.find((child) =>
|
|
17
|
+
isProseElement(child, captionSecondarySchema),
|
|
18
|
+
);
|
|
19
|
+
const mainInliners = caption.children.filter(
|
|
20
|
+
(child) => child !== captionSecondary,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const width = caption.data?.width ? `min(${caption.data.width}, 100%)` : '';
|
|
24
|
+
|
|
25
|
+
onMounted(() => {
|
|
26
|
+
emit('captionMounted', captionElement.value);
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<div
|
|
32
|
+
ref="caption"
|
|
33
|
+
class="text-text-muted text-main-sm mt-small micro:mt-normal m-auto
|
|
34
|
+
text-center"
|
|
35
|
+
v-bind="width ? { style: { width } } : {}"
|
|
36
|
+
>
|
|
37
|
+
<div class="font-semibold">
|
|
38
|
+
<Render v-for="child of mainInliners" :element="child" />
|
|
39
|
+
</div>
|
|
40
|
+
<div v-if="captionSecondary">
|
|
41
|
+
<Render
|
|
42
|
+
v-for="child of captionSecondary.children"
|
|
43
|
+
:element="child"
|
|
44
|
+
/>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Captions are used to provide descriptive text for images, videos, and other media elements.
|
|
3
|
+
* They can contain content (which is treated as the main caption) and an optional secondary caption for additional context.
|
|
4
|
+
*
|
|
5
|
+
* @title Caption
|
|
6
|
+
* @layout inliner
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <Image src={triangleA}>
|
|
10
|
+
* <Caption width="300px">
|
|
11
|
+
* A right-angled triangle with sides <M>A</M>, <M>B</M> and hypotenuse <M>C</M>.
|
|
12
|
+
* </Caption>
|
|
13
|
+
* </Image>
|
|
14
|
+
*
|
|
15
|
+
* <Video src={lawOfSines}>
|
|
16
|
+
* <Caption>
|
|
17
|
+
* Law of sines explanation.
|
|
18
|
+
* <CaptionSecondary>
|
|
19
|
+
* Pay attention to the angle notation!
|
|
20
|
+
* </CaptionSecondary>
|
|
21
|
+
* </Caption>
|
|
22
|
+
* </Video>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const Caption = '_tag_';
|
|
26
|
+
export const CaptionSecondary = '_tag_';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: import("../../app/appElement.js").AppElement<{
|
|
2
|
+
name: "caption";
|
|
3
|
+
type: "inliner";
|
|
4
|
+
linkable: false;
|
|
5
|
+
Data: import("./core.js").CaptionData | undefined;
|
|
6
|
+
Storage: undefined;
|
|
7
|
+
Children: import("@jsprose/core").InlinerSchema[];
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type InlinerSchema, type TagChildren } from '@jsprose/core';
|
|
2
|
+
export declare const captionSecondarySchema: {
|
|
3
|
+
name: "captionSecondary";
|
|
4
|
+
type: "inliner";
|
|
5
|
+
linkable: false;
|
|
6
|
+
Data: undefined;
|
|
7
|
+
Storage: undefined;
|
|
8
|
+
Children: InlinerSchema[];
|
|
9
|
+
};
|
|
10
|
+
export declare const CaptionSecondary: import("@jsprose/core").Tag<"CaptionSecondary", {
|
|
11
|
+
name: "captionSecondary";
|
|
12
|
+
type: "inliner";
|
|
13
|
+
linkable: false;
|
|
14
|
+
Data: undefined;
|
|
15
|
+
Storage: undefined;
|
|
16
|
+
Children: InlinerSchema[];
|
|
17
|
+
}, TagChildren>;
|
|
18
|
+
export declare const captionSecondaryRegistryItem: import("@jsprose/core").RegistryItem<{
|
|
19
|
+
name: "captionSecondary";
|
|
20
|
+
type: "inliner";
|
|
21
|
+
linkable: false;
|
|
22
|
+
Data: undefined;
|
|
23
|
+
Storage: undefined;
|
|
24
|
+
Children: InlinerSchema[];
|
|
25
|
+
}, {
|
|
26
|
+
CaptionSecondary: import("@jsprose/core").Tag<"CaptionSecondary", {
|
|
27
|
+
name: "captionSecondary";
|
|
28
|
+
type: "inliner";
|
|
29
|
+
linkable: false;
|
|
30
|
+
Data: undefined;
|
|
31
|
+
Storage: undefined;
|
|
32
|
+
Children: InlinerSchema[];
|
|
33
|
+
}, TagChildren>;
|
|
34
|
+
}, undefined>;
|
|
35
|
+
export interface CaptionData {
|
|
36
|
+
width?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const captionSchema: {
|
|
39
|
+
name: "caption";
|
|
40
|
+
type: "inliner";
|
|
41
|
+
linkable: false;
|
|
42
|
+
Data: CaptionData | undefined;
|
|
43
|
+
Storage: undefined;
|
|
44
|
+
Children: InlinerSchema[];
|
|
45
|
+
};
|
|
46
|
+
export declare const Caption: import("@jsprose/core").Tag<"Caption", {
|
|
47
|
+
name: "caption";
|
|
48
|
+
type: "inliner";
|
|
49
|
+
linkable: false;
|
|
50
|
+
Data: CaptionData | undefined;
|
|
51
|
+
Storage: undefined;
|
|
52
|
+
Children: InlinerSchema[];
|
|
53
|
+
}, {
|
|
54
|
+
width?: string;
|
|
55
|
+
} & TagChildren>;
|
|
56
|
+
export declare const captionRegistryItem: import("@jsprose/core").RegistryItem<{
|
|
57
|
+
name: "caption";
|
|
58
|
+
type: "inliner";
|
|
59
|
+
linkable: false;
|
|
60
|
+
Data: CaptionData | undefined;
|
|
61
|
+
Storage: undefined;
|
|
62
|
+
Children: InlinerSchema[];
|
|
63
|
+
}, {
|
|
64
|
+
Caption: import("@jsprose/core").Tag<"Caption", {
|
|
65
|
+
name: "caption";
|
|
66
|
+
type: "inliner";
|
|
67
|
+
linkable: false;
|
|
68
|
+
Data: CaptionData | undefined;
|
|
69
|
+
Storage: undefined;
|
|
70
|
+
Children: InlinerSchema[];
|
|
71
|
+
}, {
|
|
72
|
+
width?: string;
|
|
73
|
+
} & TagChildren>;
|
|
74
|
+
}, undefined>;
|
|
75
|
+
declare const _default: [{
|
|
76
|
+
registryItem: import("@jsprose/core").RegistryItem<{
|
|
77
|
+
name: "caption";
|
|
78
|
+
type: "inliner";
|
|
79
|
+
linkable: false;
|
|
80
|
+
Data: CaptionData | undefined;
|
|
81
|
+
Storage: undefined;
|
|
82
|
+
Children: InlinerSchema[];
|
|
83
|
+
}, {
|
|
84
|
+
Caption: import("@jsprose/core").Tag<"Caption", {
|
|
85
|
+
name: "caption";
|
|
86
|
+
type: "inliner";
|
|
87
|
+
linkable: false;
|
|
88
|
+
Data: CaptionData | undefined;
|
|
89
|
+
Storage: undefined;
|
|
90
|
+
Children: InlinerSchema[];
|
|
91
|
+
}, {
|
|
92
|
+
width?: string;
|
|
93
|
+
} & TagChildren>;
|
|
94
|
+
}, undefined>;
|
|
95
|
+
}, {
|
|
96
|
+
registryItem: import("@jsprose/core").RegistryItem<{
|
|
97
|
+
name: "captionSecondary";
|
|
98
|
+
type: "inliner";
|
|
99
|
+
linkable: false;
|
|
100
|
+
Data: undefined;
|
|
101
|
+
Storage: undefined;
|
|
102
|
+
Children: InlinerSchema[];
|
|
103
|
+
}, {
|
|
104
|
+
CaptionSecondary: import("@jsprose/core").Tag<"CaptionSecondary", {
|
|
105
|
+
name: "captionSecondary";
|
|
106
|
+
type: "inliner";
|
|
107
|
+
linkable: false;
|
|
108
|
+
Data: undefined;
|
|
109
|
+
Storage: undefined;
|
|
110
|
+
Children: InlinerSchema[];
|
|
111
|
+
}, TagChildren>;
|
|
112
|
+
}, undefined>;
|
|
113
|
+
}];
|
|
114
|
+
export default _default;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { defineRegistryItem, defineSchema, ensureTagInlinerChildren, isRawElement, ProseError } from "@jsprose/core";
|
|
2
|
+
import { defineEruditTag } from "../../tag.js";
|
|
3
|
+
import { defineEruditProseCoreElements } from "../../coreElement.js";
|
|
4
|
+
//
|
|
5
|
+
// Caption Secondary
|
|
6
|
+
//
|
|
7
|
+
export const captionSecondarySchema = defineSchema({
|
|
8
|
+
name: "captionSecondary",
|
|
9
|
+
type: "inliner",
|
|
10
|
+
linkable: false
|
|
11
|
+
})();
|
|
12
|
+
export const CaptionSecondary = defineEruditTag({
|
|
13
|
+
tagName: "CaptionSecondary",
|
|
14
|
+
schema: captionSecondarySchema
|
|
15
|
+
})(({ element, tagName, children, registry }) => {
|
|
16
|
+
ensureTagInlinerChildren(tagName, children, registry);
|
|
17
|
+
element.children = children;
|
|
18
|
+
});
|
|
19
|
+
export const captionSecondaryRegistryItem = defineRegistryItem({
|
|
20
|
+
schema: captionSecondarySchema,
|
|
21
|
+
tags: [CaptionSecondary]
|
|
22
|
+
});
|
|
23
|
+
export const captionSchema = defineSchema({
|
|
24
|
+
name: "caption",
|
|
25
|
+
type: "inliner",
|
|
26
|
+
linkable: false
|
|
27
|
+
})();
|
|
28
|
+
export const Caption = defineEruditTag({
|
|
29
|
+
tagName: "Caption",
|
|
30
|
+
schema: captionSchema
|
|
31
|
+
})(({ tagName, element, props, children, registry }) => {
|
|
32
|
+
ensureTagInlinerChildren(tagName, children, registry);
|
|
33
|
+
let containsNonSecondary = false;
|
|
34
|
+
let containsSecondary = false;
|
|
35
|
+
for (const child of children) {
|
|
36
|
+
if (isRawElement(child, captionSecondarySchema)) {
|
|
37
|
+
if (containsSecondary) {
|
|
38
|
+
throw new ProseError(`Duplicate <${CaptionSecondary.tagName}> detected!`);
|
|
39
|
+
}
|
|
40
|
+
containsSecondary = true;
|
|
41
|
+
} else {
|
|
42
|
+
containsNonSecondary = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (containsSecondary && !containsNonSecondary) {
|
|
46
|
+
throw new ProseError(`Cannot have a <${CaptionSecondary.tagName}> without a main caption content!`);
|
|
47
|
+
}
|
|
48
|
+
element.children = children;
|
|
49
|
+
if (props.width) {
|
|
50
|
+
element.data = element.data || {};
|
|
51
|
+
element.data.width = props.width;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
export const captionRegistryItem = defineRegistryItem({
|
|
55
|
+
schema: captionSchema,
|
|
56
|
+
tags: [Caption]
|
|
57
|
+
});
|
|
58
|
+
//
|
|
59
|
+
// Erudit Core Elements
|
|
60
|
+
//
|
|
61
|
+
export default defineEruditProseCoreElements({ registryItem: captionRegistryItem }, { registryItem: captionSecondaryRegistryItem });
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { ProseElement } from '@jsprose/core';
|
|
3
|
+
|
|
4
|
+
import type { detailsSchema } from './core.js';
|
|
5
|
+
import { useFormatText } from '../../app/composables/formatText.js';
|
|
6
|
+
import { useProseContext } from '../../app/composables/context.js';
|
|
7
|
+
import {
|
|
8
|
+
useIsAnchor,
|
|
9
|
+
useContainsAnchor,
|
|
10
|
+
} from '../../app/composables/anchor.js';
|
|
11
|
+
import { useElementIcon } from '../../app/composables/elementIcon.js';
|
|
12
|
+
import { useElementPhrase } from '../../app/composables/language.js';
|
|
13
|
+
import Block from '../../app/shared/block/Block.vue';
|
|
14
|
+
import Render from '../../app/shared/Render.vue';
|
|
15
|
+
|
|
16
|
+
const { element } = defineProps<{
|
|
17
|
+
element: ProseElement<typeof detailsSchema>;
|
|
18
|
+
}>();
|
|
19
|
+
|
|
20
|
+
const { EruditIcon } = useProseContext();
|
|
21
|
+
const formatText = useFormatText();
|
|
22
|
+
const icon = await useElementIcon(element);
|
|
23
|
+
const phrase = await useElementPhrase(element);
|
|
24
|
+
const { mode } = useProseContext();
|
|
25
|
+
const isAnchor = useIsAnchor(element);
|
|
26
|
+
const containsAnchor = useContainsAnchor(element);
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
<Block :element v-if="isAnchor || containsAnchor || mode !== 'generate'">
|
|
31
|
+
<div
|
|
32
|
+
class="border-border bg-bg-accent/30 rounded-xl border-2
|
|
33
|
+
border-dashed transition-[border,background]
|
|
34
|
+
dark:border-white/30 dark:bg-white/5"
|
|
35
|
+
>
|
|
36
|
+
<div class="text-text-muted p-(--proseAsideWidth) font-medium">
|
|
37
|
+
<EruditIcon
|
|
38
|
+
:name="icon"
|
|
39
|
+
class="text-main-sm mr-small relative top-0.5 inline
|
|
40
|
+
align-baseline"
|
|
41
|
+
/>
|
|
42
|
+
<span>
|
|
43
|
+
{{ formatText(element.data.title || phrase.element_name) }}
|
|
44
|
+
</span>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="pb-(--proseAsideWidth)">
|
|
47
|
+
<Render v-for="child in element.children" :element="child" />
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</Block>
|
|
51
|
+
</template>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Details are used to hide additional explanations or secondary content.
|
|
3
|
+
* Default title "Details" can be changed via `title` prop.
|
|
4
|
+
*
|
|
5
|
+
* Clicking on a link to the details block will show it in preview area.
|
|
6
|
+
* That is why **all** details blocks **have to be unique elements**!
|
|
7
|
+
* You can not create details block without unique attached to it.
|
|
8
|
+
*
|
|
9
|
+
* Opening a link to the details block in new tab will make it visible inside main prose content.
|
|
10
|
+
* Because of this you should place them near the link pointing to them to keep context.
|
|
11
|
+
*
|
|
12
|
+
* Details blocks can't be added to Table of Contents and can't have snippets.
|
|
13
|
+
*
|
|
14
|
+
* @title Details
|
|
15
|
+
* @layout block
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <P>
|
|
19
|
+
* The number 4 is even, which is <A to={{uniques.whyEven}}>obvious</A>.
|
|
20
|
+
* </P>
|
|
21
|
+
*
|
|
22
|
+
* <Details $={{uniques.whyEven}} title="Why is 4 even?">
|
|
23
|
+
* <P>Because it is divisible by 2 without a remainder.</P>
|
|
24
|
+
* </Details>
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export const Details = '_tag_';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: import("../../app/appElement.js").AppElement<{
|
|
2
|
+
name: "details";
|
|
3
|
+
type: "block";
|
|
4
|
+
linkable: true;
|
|
5
|
+
Data: import("./core.js").DetailsData;
|
|
6
|
+
Storage: undefined;
|
|
7
|
+
Children: import("@jsprose/core").AnySchema[];
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineEruditProseAppElement } from "../../app/appElement.js";
|
|
2
|
+
import { detailsSchema } from "./core.js";
|
|
3
|
+
export default defineEruditProseAppElement({
|
|
4
|
+
schema: detailsSchema,
|
|
5
|
+
component: () => import("./Details.vue"),
|
|
6
|
+
languages: {
|
|
7
|
+
en: () => import("./languages/en.js"),
|
|
8
|
+
ru: () => import("./languages/ru.js")
|
|
9
|
+
},
|
|
10
|
+
icon: () => import("./icon.svg?raw")
|
|
11
|
+
});
|