@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,19 @@
|
|
|
1
|
+
import type { AnySchema, ProseElement } from '@jsprose/core';
|
|
2
|
+
import { type ElementIcon, type ElementIconRaw } from './icon.js';
|
|
3
|
+
import { type ElementComponent, type ElementComponentRaw } from './component.js';
|
|
4
|
+
import { type ElementLanguages, type ElementLanguagesRaw, type ElementPhrases } from './language/element.js';
|
|
5
|
+
export interface AppElementDefinition<TSchema extends AnySchema> {
|
|
6
|
+
schema: TSchema;
|
|
7
|
+
component: ElementComponentRaw;
|
|
8
|
+
languages?: ElementLanguagesRaw<ElementPhrases>;
|
|
9
|
+
icon?: ElementIconRaw;
|
|
10
|
+
createStorage?: (proseElement: ProseElement<TSchema>) => Promise<TSchema['Storage']> | TSchema['Storage'];
|
|
11
|
+
}
|
|
12
|
+
export interface AppElement<TSchema extends AnySchema = AnySchema> {
|
|
13
|
+
schema: TSchema;
|
|
14
|
+
component: ElementComponent;
|
|
15
|
+
languages: ElementLanguages<ElementPhrases>;
|
|
16
|
+
icon: ElementIcon;
|
|
17
|
+
createStorage?: (proseElement: ProseElement<TSchema>) => Promise<any> | any;
|
|
18
|
+
}
|
|
19
|
+
export declare function defineEruditProseAppElement<TSchema extends AnySchema>(appElement: AppElementDefinition<TSchema>): AppElement<TSchema>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { resolveElementIcon } from "./icon.js";
|
|
2
|
+
import { resolveElementComponent } from "./component.js";
|
|
3
|
+
import { resolveElementLanguages } from "./language/element.js";
|
|
4
|
+
export function defineEruditProseAppElement(appElement) {
|
|
5
|
+
return {
|
|
6
|
+
schema: appElement.schema,
|
|
7
|
+
component: resolveElementComponent(appElement.component),
|
|
8
|
+
languages: resolveElementLanguages(appElement.schema.name, appElement.languages),
|
|
9
|
+
icon: resolveElementIcon(appElement.schema.type === "block", appElement.icon),
|
|
10
|
+
createStorage: appElement.createStorage
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
export type ElementComponentRaw = () => Promise<{
|
|
3
|
+
default: Component;
|
|
4
|
+
}>;
|
|
5
|
+
export type ElementComponent = () => Promise<Component>;
|
|
6
|
+
export declare function resolveElementComponent(componentRaw: ElementComponentRaw): ElementComponent;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type InjectionKey, type Ref } from 'vue';
|
|
2
|
+
import type { AnySchema, ProseElement } from '@jsprose/core';
|
|
3
|
+
export interface AnchorState {
|
|
4
|
+
anchorResolving: Ref<boolean>;
|
|
5
|
+
allowJumpToAnchor: Ref<boolean>;
|
|
6
|
+
anchorElement: Ref<ProseElement<AnySchema> | undefined>;
|
|
7
|
+
containsAnchorElements: Ref<Set<ProseElement<AnySchema>>>;
|
|
8
|
+
}
|
|
9
|
+
export declare function useAnchorState(hashId: Ref<string | undefined>, element: ProseElement<AnySchema>): AnchorState;
|
|
10
|
+
export declare const anchorStateSymbol: InjectionKey<AnchorState>;
|
|
11
|
+
export declare function useIsAnchor(element: ProseElement<AnySchema>): import("vue").ComputedRef<boolean | undefined>;
|
|
12
|
+
export declare function useContainsAnchor(element: ProseElement<AnySchema>): import("vue").ComputedRef<boolean>;
|
|
13
|
+
export declare function useArrayContainsAnchor(elements: ProseElement<AnySchema>[]): import("vue").ComputedRef<number | undefined>;
|
|
14
|
+
export declare function useAnchorResolving(): Ref<boolean, boolean>;
|
|
15
|
+
export declare function useJumpToAnchor(): (element: HTMLElement) => void;
|
|
16
|
+
export declare function useResolveAnchor(): () => void;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { computed, inject, onMounted, shallowRef, watch } from "vue";
|
|
2
|
+
export function useAnchorState(hashId, element) {
|
|
3
|
+
const anchorResolving = shallowRef(false);
|
|
4
|
+
const allowJumpToAnchor = shallowRef(false);
|
|
5
|
+
const anchorElement = shallowRef();
|
|
6
|
+
const containsAnchorElements = shallowRef(new Set());
|
|
7
|
+
onMounted(() => {
|
|
8
|
+
watch(hashId, () => {
|
|
9
|
+
anchorResolving.value = true;
|
|
10
|
+
allowJumpToAnchor.value = true;
|
|
11
|
+
anchorElement.value = undefined;
|
|
12
|
+
containsAnchorElements.value = new Set();
|
|
13
|
+
if (!hashId.value) {
|
|
14
|
+
// No hash, no anchor to resolve
|
|
15
|
+
anchorResolving.value = false;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const stack = [];
|
|
19
|
+
const dfs = (_element) => {
|
|
20
|
+
stack.push(_element);
|
|
21
|
+
if (_element.id === hashId.value) {
|
|
22
|
+
anchorElement.value = _element;
|
|
23
|
+
containsAnchorElements.value = new Set(stack.slice(0, -1));
|
|
24
|
+
stack.pop();
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
const children = _element.children || [];
|
|
28
|
+
for (const child of children) {
|
|
29
|
+
if (dfs(child)) {
|
|
30
|
+
stack.pop();
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
stack.pop();
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
dfs(element);
|
|
38
|
+
if (!anchorElement.value) {
|
|
39
|
+
// There is a hash, but it targets somewhere else, not this element tree
|
|
40
|
+
anchorResolving.value = false;
|
|
41
|
+
}
|
|
42
|
+
}, { immediate: true });
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
anchorResolving,
|
|
46
|
+
allowJumpToAnchor,
|
|
47
|
+
anchorElement,
|
|
48
|
+
containsAnchorElements
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export const anchorStateSymbol = Symbol();
|
|
52
|
+
export function useIsAnchor(element) {
|
|
53
|
+
const { anchorElement } = inject(anchorStateSymbol);
|
|
54
|
+
return computed(() => {
|
|
55
|
+
return anchorElement.value && anchorElement.value.id === element.id;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export function useContainsAnchor(element) {
|
|
59
|
+
const { containsAnchorElements } = inject(anchorStateSymbol);
|
|
60
|
+
return computed(() => {
|
|
61
|
+
return containsAnchorElements.value.has(element);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function useArrayContainsAnchor(elements) {
|
|
65
|
+
const { containsAnchorElements } = inject(anchorStateSymbol);
|
|
66
|
+
return computed(() => {
|
|
67
|
+
const i = elements.findIndex((el) => containsAnchorElements.value.has(el));
|
|
68
|
+
return i !== -1 ? i : undefined;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function useAnchorResolving() {
|
|
72
|
+
const { anchorResolving } = inject(anchorStateSymbol);
|
|
73
|
+
return anchorResolving;
|
|
74
|
+
}
|
|
75
|
+
export function useJumpToAnchor() {
|
|
76
|
+
const { allowJumpToAnchor } = inject(anchorStateSymbol);
|
|
77
|
+
return (element) => {
|
|
78
|
+
if (allowJumpToAnchor.value) {
|
|
79
|
+
element.scrollIntoView({ block: "center" });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export function useResolveAnchor() {
|
|
84
|
+
const { allowJumpToAnchor, anchorResolving } = inject(anchorStateSymbol);
|
|
85
|
+
return () => {
|
|
86
|
+
allowJumpToAnchor.value = false;
|
|
87
|
+
anchorResolving.value = false;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type AnySchema, type ProseElement } from '@jsprose/core';
|
|
2
|
+
import type { AppElement } from '../appElement.js';
|
|
3
|
+
export declare function useAppElement(schemaName: string): AppElement;
|
|
4
|
+
export declare function useAppElement(element: ProseElement<AnySchema>): AppElement;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ProseError } from "@jsprose/core";
|
|
2
|
+
import { useProseContext } from "./context.js";
|
|
3
|
+
export function useAppElement(elementOrName) {
|
|
4
|
+
let schemaName;
|
|
5
|
+
if (typeof elementOrName === "string") {
|
|
6
|
+
schemaName = elementOrName;
|
|
7
|
+
} else {
|
|
8
|
+
schemaName = elementOrName.schemaName;
|
|
9
|
+
}
|
|
10
|
+
const { appElements } = useProseContext();
|
|
11
|
+
const appElement = appElements[schemaName];
|
|
12
|
+
if (!appElement) {
|
|
13
|
+
throw new ProseError(`No AppElement found for schema "${schemaName}"!`);
|
|
14
|
+
}
|
|
15
|
+
return appElement;
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Component, type InjectionKey, type Ref } from 'vue';
|
|
2
|
+
import type { EruditLanguageCode } from '@erudit-js/core/eruditConfig/language';
|
|
3
|
+
import type { EruditMode } from '@erudit-js/core/mode';
|
|
4
|
+
import type { AppElement } from '../appElement.js';
|
|
5
|
+
export interface ProseContext {
|
|
6
|
+
mode: EruditMode;
|
|
7
|
+
languageCode: EruditLanguageCode;
|
|
8
|
+
appElements: Record<string, AppElement>;
|
|
9
|
+
formatText: (text: string) => string;
|
|
10
|
+
pathUrl: string;
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
hashUrl: Ref<string | undefined>;
|
|
13
|
+
eruditIcons: Record<string, string>;
|
|
14
|
+
EruditTransition: Component;
|
|
15
|
+
EruditIcon: Component;
|
|
16
|
+
EruditLink: Component;
|
|
17
|
+
setPreview: (previewRequest: any) => void;
|
|
18
|
+
closePreview: () => void;
|
|
19
|
+
loadingSvg: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const proseContextSymbol: InjectionKey<ProseContext>;
|
|
22
|
+
export declare function useProseContext(): ProseContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useFormatText(): (text: string) => string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AnySchema, ProseElement } from '@jsprose/core';
|
|
2
|
+
import type { ElementPhrases } from '../language/element.js';
|
|
3
|
+
export declare function useProseLanguage(): Promise<{
|
|
4
|
+
copy_link: string;
|
|
5
|
+
copied: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function useElementPhrase<TPhrases extends ElementPhrases>(schemaName: string): Promise<TPhrases>;
|
|
8
|
+
export declare function useElementPhrase<TPhrases extends ElementPhrases>(element: ProseElement<AnySchema>): Promise<TPhrases>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { proseLanguages } from "../language/prose.js";
|
|
2
|
+
import { useProseContext } from "./context.js";
|
|
3
|
+
import { useAppElement } from "./appElement.js";
|
|
4
|
+
export async function useProseLanguage() {
|
|
5
|
+
const { languageCode } = useProseContext();
|
|
6
|
+
return (await proseLanguages[languageCode]()).default;
|
|
7
|
+
}
|
|
8
|
+
export async function useElementPhrase(elementOrName) {
|
|
9
|
+
const { languageCode } = useProseContext();
|
|
10
|
+
const appElement = useAppElement(typeof elementOrName === "string" ? elementOrName : elementOrName.schemaName);
|
|
11
|
+
const languages = appElement.languages;
|
|
12
|
+
return await languages[languageCode]();
|
|
13
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type InjectionKey } from 'vue';
|
|
2
|
+
import { type AnySchema, type GenericStorage, type ProseElement } from '@jsprose/core';
|
|
3
|
+
export declare const proseStorageSymbol: InjectionKey<GenericStorage>;
|
|
4
|
+
export declare function useProseStorage(): GenericStorage;
|
|
5
|
+
export declare function useElementStorage<TSchema extends AnySchema>(element: ProseElement<TSchema>): Promise<TSchema['Storage']>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { inject } from "vue";
|
|
2
|
+
import { ProseError } from "@jsprose/core";
|
|
3
|
+
import { useAppElement } from "./appElement.js";
|
|
4
|
+
export const proseStorageSymbol = Symbol();
|
|
5
|
+
export function useProseStorage() {
|
|
6
|
+
return inject(proseStorageSymbol);
|
|
7
|
+
}
|
|
8
|
+
export async function useElementStorage(element) {
|
|
9
|
+
const storage = useProseStorage();
|
|
10
|
+
const appElement = useAppElement(element);
|
|
11
|
+
if (!element.storageKey) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
if (appElement.createStorage) {
|
|
15
|
+
storage[element.storageKey] = await appElement.createStorage(element);
|
|
16
|
+
}
|
|
17
|
+
if (element.storageKey in storage) {
|
|
18
|
+
return storage[element.storageKey];
|
|
19
|
+
}
|
|
20
|
+
// throw new ProseError(
|
|
21
|
+
// `Element ${element.schemaName} with storage key "${element.storageKey}" has no storage value!`,
|
|
22
|
+
// );
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { inlinersSchema, ProseElement } from '@jsprose/core';
|
|
3
|
+
|
|
4
|
+
import Render from '../shared/Render.vue';
|
|
5
|
+
|
|
6
|
+
defineProps<{ element: ProseElement<typeof inlinersSchema> }>();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<Render v-for="child of element.children" :element="child" />
|
|
11
|
+
</template>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { type mixSchema, type ProseElement } from '@jsprose/core';
|
|
3
|
+
|
|
4
|
+
import Render from '../shared/Render.vue';
|
|
5
|
+
|
|
6
|
+
const { element } = defineProps<{ element: ProseElement<typeof mixSchema> }>();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<Render v-for="child of element.children" :element="child" />
|
|
11
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { Text, h } from 'vue';
|
|
3
|
+
import type { ProseElement, textSchema } from '@jsprose/core';
|
|
4
|
+
|
|
5
|
+
import { useFormatText } from '../composables/formatText.js';
|
|
6
|
+
|
|
7
|
+
const { element } = defineProps<{ element: ProseElement<typeof textSchema> }>();
|
|
8
|
+
const formatText = useFormatText();
|
|
9
|
+
|
|
10
|
+
const originalText = element.data;
|
|
11
|
+
const leadingSpace = originalText.match(/^(\s*)/)?.[1] ? ' ' : '';
|
|
12
|
+
const trailingSpace = originalText.match(/(\s*)$/)?.[1] ? ' ' : '';
|
|
13
|
+
const formattedText = formatText(originalText);
|
|
14
|
+
const textWithSpaces = leadingSpace + formattedText + trailingSpace;
|
|
15
|
+
|
|
16
|
+
const TextComponent = h(Text, textWithSpaces);
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<component :is="TextComponent" />
|
|
21
|
+
</template>
|
package/dist/app/icon.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function resolveElementIcon(isBlock, rawIcon) {
|
|
2
|
+
const iconLoader = rawIcon ?? (isBlock ? () => import("./shared/assets/block.svg?raw") : () => import("./shared/assets/inliner.svg?raw"));
|
|
3
|
+
return async () => {
|
|
4
|
+
const iconModule = await iconLoader();
|
|
5
|
+
return iconModule.default;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './appElement.js';
|
|
2
|
+
export * from './component.js';
|
|
3
|
+
export * from './icon.js';
|
|
4
|
+
export * from './language/element.js';
|
|
5
|
+
export * from './language/prose.js';
|
|
6
|
+
export * from './composables/context.js';
|
|
7
|
+
export * from './composables/anchor.js';
|
|
8
|
+
export * from './composables/appElement.js';
|
|
9
|
+
export * from './composables/elementIcon.js';
|
|
10
|
+
export * from './composables/formatText.js';
|
|
11
|
+
export * from './composables/language.js';
|
|
12
|
+
export * from './composables/storage.js';
|
|
13
|
+
export * from './shared/photoswipe/composable.js';
|
|
14
|
+
export * from './shared/invert.js';
|
|
15
|
+
export { default as Prose } from './shared/Prose.vue';
|
|
16
|
+
export { default as Render } from './shared/Render.vue';
|
|
17
|
+
export { default as Block } from './shared/block/Block.vue';
|
|
18
|
+
export { default as Inliner } from './shared/inliner/Inliner.vue';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from "./appElement.js";
|
|
2
|
+
export * from "./component.js";
|
|
3
|
+
export * from "./icon.js";
|
|
4
|
+
export * from "./language/element.js";
|
|
5
|
+
export * from "./language/prose.js";
|
|
6
|
+
export * from "./composables/context.js";
|
|
7
|
+
export * from "./composables/anchor.js";
|
|
8
|
+
export * from "./composables/appElement.js";
|
|
9
|
+
export * from "./composables/elementIcon.js";
|
|
10
|
+
export * from "./composables/formatText.js";
|
|
11
|
+
export * from "./composables/language.js";
|
|
12
|
+
export * from "./composables/storage.js";
|
|
13
|
+
export * from "./shared/photoswipe/composable.js";
|
|
14
|
+
export * from "./shared/invert.js";
|
|
15
|
+
export { default as Prose } from "./shared/Prose.vue";
|
|
16
|
+
export { default as Render } from "./shared/Render.vue";
|
|
17
|
+
export { default as Block } from "./shared/block/Block.vue";
|
|
18
|
+
export { default as Inliner } from "./shared/inliner/Inliner.vue";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ElementDefaultPhrases {
|
|
2
|
+
element_name: string;
|
|
3
|
+
}
|
|
4
|
+
export type ElementPhrases<T extends Record<string, string> = {}> = Omit<T, keyof ElementDefaultPhrases> & ElementDefaultPhrases;
|
|
5
|
+
export declare function defineElementLanguage<T extends ElementPhrases<T> = ElementPhrases>(phrases: T): T;
|
|
6
|
+
export type ElementLanguagesRaw<T extends ElementPhrases> = Record<string, () => Promise<{
|
|
7
|
+
default: T;
|
|
8
|
+
}>>;
|
|
9
|
+
export type ElementLanguages<T extends ElementPhrases> = Record<string, () => Promise<T>>;
|
|
10
|
+
export declare function resolveElementLanguages<T extends ElementPhrases<T>>(schemaName: string, rawLanguages?: ElementLanguagesRaw<T>): ElementLanguages<T>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function defineElementLanguage(phrases) {
|
|
2
|
+
return phrases;
|
|
3
|
+
}
|
|
4
|
+
export function resolveElementLanguages(schemaName, rawLanguages) {
|
|
5
|
+
if (!rawLanguages) {
|
|
6
|
+
return new Proxy({}, { get: () => async () => ({ element_name: schemaName }) });
|
|
7
|
+
}
|
|
8
|
+
return Object.fromEntries(Object.entries(rawLanguages).map(([languageCode, loadPhrases]) => [languageCode, async () => {
|
|
9
|
+
const phrasesModule = await loadPhrases();
|
|
10
|
+
return phrasesModule.default;
|
|
11
|
+
}]));
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type Phrases<TPhrases extends Record<string, string>> = TPhrases;
|
|
2
|
+
export type ProsePhrases = Phrases<{
|
|
3
|
+
copy_link: string;
|
|
4
|
+
copied: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const proseLanguages: Record<string, () => Promise<{
|
|
7
|
+
default: ProsePhrases;
|
|
8
|
+
}>>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { provide } from 'vue';
|
|
3
|
+
import type { AnySchema, GenericStorage, ProseElement } from '@jsprose/core';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
proseContextSymbol,
|
|
7
|
+
type ProseContext,
|
|
8
|
+
} from '../composables/context.js';
|
|
9
|
+
import { proseStorageSymbol } from '../composables/storage.js';
|
|
10
|
+
import Render from './Render.vue';
|
|
11
|
+
import { anchorStateSymbol, useAnchorState } from '../composables/anchor.js';
|
|
12
|
+
|
|
13
|
+
const { element, storage, context } = defineProps<{
|
|
14
|
+
element: ProseElement<AnySchema>;
|
|
15
|
+
storage: GenericStorage;
|
|
16
|
+
context: ProseContext;
|
|
17
|
+
}>();
|
|
18
|
+
|
|
19
|
+
provide(proseContextSymbol, context);
|
|
20
|
+
provide(proseStorageSymbol, storage);
|
|
21
|
+
|
|
22
|
+
const anchorState = useAnchorState(context.hashUrl, element);
|
|
23
|
+
provide(anchorStateSymbol, anchorState);
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<section
|
|
28
|
+
:style="{ '--proseGap': 'none' }"
|
|
29
|
+
:class="[
|
|
30
|
+
/* Variables */
|
|
31
|
+
'micro:[--proseAsideWidth:20px] [--proseAsideWidth:16px]',
|
|
32
|
+
]"
|
|
33
|
+
>
|
|
34
|
+
<Render :element />
|
|
35
|
+
</section>
|
|
36
|
+
</template>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { h, type Component } from 'vue';
|
|
3
|
+
import {
|
|
4
|
+
inlinersSchema,
|
|
5
|
+
mixSchema,
|
|
6
|
+
textSchema,
|
|
7
|
+
type AnySchema,
|
|
8
|
+
type ProseElement,
|
|
9
|
+
} from '@jsprose/core';
|
|
10
|
+
|
|
11
|
+
import { useAppElement } from '../composables/appElement.js';
|
|
12
|
+
import Mix from '../default/Mix.vue';
|
|
13
|
+
import Inliners from '../default/Inliners.vue';
|
|
14
|
+
import Text from '../default/Text.vue';
|
|
15
|
+
|
|
16
|
+
const { element } = defineProps<{ element: ProseElement<AnySchema> }>();
|
|
17
|
+
|
|
18
|
+
const ElementComponent: Component = await (async () => {
|
|
19
|
+
switch (element.schemaName) {
|
|
20
|
+
case mixSchema.name:
|
|
21
|
+
return Mix;
|
|
22
|
+
case inlinersSchema.name:
|
|
23
|
+
return Inliners;
|
|
24
|
+
case textSchema.name:
|
|
25
|
+
return Text;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const appElement = useAppElement(element);
|
|
30
|
+
return await appElement.component();
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.warn(
|
|
33
|
+
`[Prose] [Render] Missing component for element schema: ${element.schemaName}`,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
render() {
|
|
38
|
+
return h(
|
|
39
|
+
'span',
|
|
40
|
+
{ class: 'text-red-500 font-semibold font-mono' },
|
|
41
|
+
`<${element.schemaName}/>`,
|
|
42
|
+
);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
})();
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<template>
|
|
50
|
+
<ElementComponent :element />
|
|
51
|
+
</template>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
2
|
+
<path d="M11,19.43v-6.85l-6-3.48v6.85l6,3.48ZM13,19.43l6-3.48v-6.85l-6,3.48v6.85ZM12,10.85l5.93-3.43-5.93-3.43-5.93,3.43,5.93,3.43ZM4,17.7c-.32-.18-.56-.43-.74-.73s-.26-.63-.26-1v-7.95c0-.37.09-.7.26-1s.42-.54.74-.73l7-4.03c.32-.18.65-.28,1-.28s.68.09,1,.28l7,4.03c.32.18.56.43.74.73s.26.63.26,1v7.95c0,.37-.09.7-.26,1s-.42.54-.74.73l-7,4.03c-.32.18-.65.28-1,.28s-.68-.09-1-.28l-7-4.03Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 960">
|
|
2
|
+
<path d="M353.82,643.31l437.65-437.65c10.33-10.33,22.38-15.49,36.15-15.49s25.82,5.16,36.15,15.49,15.49,22.59,15.49,36.79-5.16,26.47-15.49,36.79l-473.8,475.09c-10.33,10.33-22.38,15.49-36.15,15.49s-25.82-5.16-36.15-15.49l-222.05-222.05c-10.33-10.33-15.28-22.59-14.85-36.79s5.81-26.47,16.14-36.79,22.59-15.49,36.79-15.49,26.47,5.16,36.79,15.49l183.32,184.62Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
2
|
+
<path d="M11.29,4.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71c.19-.19.43-.29.71-.29s.52.1.71.29.29.43.29.71-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM7.29,4.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM3.29,4.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM3.29,8.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM3.29,12.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71c.19-.19.43-.29.71-.29s.52.1.71.29c.19.19.29.43.29.71s-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM3.29,16.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71-.43.29-.71.29-.52-.1-.71-.29ZM11.29,20.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71c.19-.19.43-.29.71-.29s.52.1.71.29.29.43.29.71-.1.52-.29.71c-.19.19-.43.29-.71.29s-.52-.1-.71-.29ZM7.29,20.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71c-.19.19-.43.29-.71.29s-.52-.1-.71-.29ZM3.29,20.71c-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29.52.1.71.29.29.43.29.71-.1.52-.29.71c-.19.19-.43.29-.71.29s-.52-.1-.71-.29ZM16,21c-.28,0-.52-.1-.71-.29-.19-.19-.29-.43-.29-.71s.1-.52.29-.71.43-.29.71-.29h1s0-14,0-14h-1c-.28,0-.52-.1-.71-.29s-.29-.43-.29-.71.1-.52.29-.71.43-.29.71-.29h4c.28,0,.52.1.71.29.19.19.29.43.29.71s-.1.52-.29.71c-.19.19-.43.29-.71.29h-1s0,14,0,14h1c.28,0,.52.1.71.29.19.19.29.43.29.71s-.1.52-.29.71c-.19.19-.43.29-.71.29h-4Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
2
|
+
<path d="M10.76,13.24h-6.18c-.35,0-.64-.12-.88-.36s-.36-.53-.36-.88.12-.64.36-.88.53-.36.88-.36h6.18v-6.18c0-.35.12-.64.36-.88s.53-.36.88-.36.64.12.88.36.36.53.36.88v6.18h6.18c.35,0,.64.12.88.36.23.23.36.53.36.88s-.12.64-.36.88-.53.36-.88.36h-6.18v6.18c0,.35-.12.64-.36.88-.23.23-.53.36-.88.36s-.64-.12-.88-.36-.36-.53-.36-.88v-6.18Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960">
|
|
2
|
+
<path d="M680-80q-50 0-85-35t-35-85q0-6 3-28L282-392q-16 15-37 23.5t-45 8.5q-50 0-85-35t-35-85q0-50 35-85t85-35q24 0 45 8.5t37 23.5l281-164q-2-7-2.5-13.5T560-760q0-50 35-85t85-35q50 0 85 35t35 85q0 50-35 85t-85 35q-24 0-45-8.5T598-672L317-508q2 7 2.5 13.5t.5 14.5q0 8-.5 14.5T317-452l281 164q16-15 37-23.5t45-8.5q50 0 85 35t35 85q0 50-35 85t-85 35Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import type { AnySchema, ProseElement } from '@jsprose/core';
|
|
4
|
+
|
|
5
|
+
import { useElementPhrase } from '../../composables/language.js';
|
|
6
|
+
import AsideMenuSeparator from './AsideMenuSeparator.vue';
|
|
7
|
+
import AsideMenuCopyLink from './AsideMenuCopyLink.vue';
|
|
8
|
+
|
|
9
|
+
const { element } = defineProps<{
|
|
10
|
+
element: ProseElement<AnySchema>;
|
|
11
|
+
}>();
|
|
12
|
+
|
|
13
|
+
const hasLink = computed(() => {
|
|
14
|
+
return Boolean(element.id);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const hasButtons = computed(() => {
|
|
18
|
+
return hasLink.value;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const phrase = await useElementPhrase(element);
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div
|
|
26
|
+
:style="{
|
|
27
|
+
'--asideMenuGap': '5px',
|
|
28
|
+
'--asideMenuGapBig': 'calc(var(--asideMenuGap) * 2)',
|
|
29
|
+
}"
|
|
30
|
+
class="bg-bg-main border-border flex w-40 flex-col rounded-sm border
|
|
31
|
+
py-(--asideMenuGap) font-sans
|
|
32
|
+
shadow-[0_0_12px_5px_light-dark(rgba(0,0,0,0.12),rgba(255,255,255,0.08))]
|
|
33
|
+
backface-hidden"
|
|
34
|
+
>
|
|
35
|
+
<div
|
|
36
|
+
class="flex items-center gap-(--asideMenuGapBig)
|
|
37
|
+
px-(--asideMenuGapBig) py-(--asideMenuGap) text-xs font-medium"
|
|
38
|
+
>
|
|
39
|
+
<div>{{ phrase.element_name }}</div>
|
|
40
|
+
</div>
|
|
41
|
+
<AsideMenuSeparator v-if="hasButtons" />
|
|
42
|
+
<AsideMenuCopyLink v-if="hasLink" :elementId="element.id!" />
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|