@barzhsieh/nuxt-content-mermaid 2.2.2 → 3.0.0
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/README.md +190 -90
- package/README.zh-TW.md +183 -99
- package/dist/module.d.mts +39 -53
- package/dist/module.json +3 -3
- package/dist/module.mjs +600 -155
- package/dist/runtime/built-in-renderer/BuiltInRenderer.d.vue.ts +0 -0
- package/dist/runtime/built-in-renderer/BuiltInRenderer.vue +597 -0
- package/dist/runtime/built-in-renderer/BuiltInRenderer.vue.d.ts +0 -0
- package/dist/runtime/component-configuration-error.d.ts +3 -0
- package/dist/runtime/component-configuration-error.js +7 -0
- package/dist/runtime/component-configuration.d.ts +23 -0
- package/dist/runtime/component-configuration.js +78 -0
- package/dist/runtime/components/ContentMermaidTransport.d.vue.ts +10 -0
- package/dist/runtime/components/ContentMermaidTransport.vue +21 -0
- package/dist/runtime/components/ContentMermaidTransport.vue.d.ts +10 -0
- package/dist/runtime/components/Mermaid.d.vue.ts +0 -31
- package/dist/runtime/components/Mermaid.vue +136 -743
- package/dist/runtime/components/Mermaid.vue.d.ts +0 -31
- package/dist/runtime/components/MermaidExpandOverlay.d.vue.ts +13 -16
- package/dist/runtime/components/MermaidExpandOverlay.vue +61 -53
- package/dist/runtime/components/MermaidExpandOverlay.vue.d.ts +13 -16
- package/dist/runtime/components/MermaidFullscreenPresentation.d.vue.ts +18 -0
- package/dist/runtime/components/MermaidFullscreenPresentation.vue +56 -0
- package/dist/runtime/components/MermaidFullscreenPresentation.vue.d.ts +18 -0
- package/dist/runtime/composables/useMermaidExpand.d.ts +16 -32
- package/dist/runtime/composables/useMermaidExpand.js +232 -75
- package/dist/runtime/composables/useMermaidFullscreen.d.ts +18 -0
- package/dist/runtime/composables/useMermaidFullscreen.js +242 -0
- package/dist/runtime/composables/useMermaidZoom.d.ts +5 -1
- package/dist/runtime/composables/useMermaidZoom.js +54 -28
- package/dist/runtime/configuration/core.d.ts +27 -0
- package/dist/runtime/configuration/core.js +340 -0
- package/dist/runtime/configuration/module.d.ts +17 -0
- package/dist/runtime/configuration/module.js +233 -0
- package/dist/runtime/configuration/runtime-options.d.ts +4 -0
- package/dist/runtime/configuration/runtime-options.js +57 -0
- package/dist/runtime/constants.d.ts +24 -0
- package/dist/runtime/constants.js +60 -2
- package/dist/runtime/direct-mermaid-config.d.ts +5 -0
- package/dist/runtime/direct-mermaid-config.js +216 -0
- package/dist/runtime/mermaid-config.d.ts +9 -5
- package/dist/runtime/mermaid-config.js +30 -19
- package/dist/runtime/mermaid-rendering.d.ts +28 -0
- package/dist/runtime/mermaid-rendering.js +140 -0
- package/dist/runtime/plugins/content-mermaid-transport.d.ts +2 -0
- package/dist/runtime/plugins/content-mermaid-transport.js +5 -0
- package/dist/runtime/plugins/mermaid.client.d.ts +0 -3
- package/dist/runtime/plugins/mermaid.client.js +14 -32
- package/dist/runtime/plugins/runtime-config.d.ts +2 -0
- package/dist/runtime/plugins/runtime-config.js +9 -0
- package/dist/runtime/rendererSelection.d.ts +43 -0
- package/dist/runtime/rendererSelection.js +36 -0
- package/dist/runtime/rendererSelectionOrchestration.d.ts +12 -0
- package/dist/runtime/rendererSelectionOrchestration.js +13 -0
- package/dist/runtime/runtime-snapshot.d.ts +3 -0
- package/dist/runtime/runtime-snapshot.js +26 -0
- package/dist/runtime/utils/index.d.ts +0 -4
- package/dist/runtime/utils/index.js +0 -37
- package/dist/types.d.mts +2 -2
- package/package.json +36 -32
- package/dist/runtime/utils/mermaid-transform.d.ts +0 -18
- package/dist/runtime/utils/mermaid-transform.js +0 -345
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { MermaidConfig } from 'mermaid';
|
|
2
|
-
import type { MermaidToolbarOptions } from '~/src/types/mermaid';
|
|
3
|
-
type __VLS_Props = {
|
|
4
|
-
config?: MermaidConfig | string | unknown;
|
|
5
|
-
toolbar?: MermaidToolbarOptions;
|
|
6
|
-
code?: string;
|
|
7
|
-
};
|
|
8
|
-
declare var __VLS_1: {}, __VLS_9: {}, __VLS_51: {}, __VLS_53: {}, __VLS_60: {
|
|
9
|
-
error: unknown;
|
|
10
|
-
source: string;
|
|
11
|
-
};
|
|
12
|
-
type __VLS_Slots = {} & {
|
|
13
|
-
default?: (props: typeof __VLS_1) => any;
|
|
14
|
-
} & {
|
|
15
|
-
default?: (props: typeof __VLS_9) => any;
|
|
16
|
-
} & {
|
|
17
|
-
default?: (props: typeof __VLS_51) => any;
|
|
18
|
-
} & {
|
|
19
|
-
loading?: (props: typeof __VLS_53) => any;
|
|
20
|
-
} & {
|
|
21
|
-
error?: (props: typeof __VLS_60) => any;
|
|
22
|
-
};
|
|
23
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
-
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
25
|
-
declare const _default: typeof __VLS_export;
|
|
26
|
-
export default _default;
|
|
27
|
-
type __VLS_WithSlots<T, S> = T & {
|
|
28
|
-
new (): {
|
|
29
|
-
$slots: S;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import type { CSSProperties
|
|
2
|
-
import type {
|
|
1
|
+
import type { CSSProperties } from 'vue';
|
|
2
|
+
import type { ExpandOptions } from '../types/expand.js';
|
|
3
3
|
type __VLS_Props = {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
options: ExpandOptions;
|
|
5
|
+
blocked: boolean;
|
|
6
|
+
getExpandTarget: () => SVGElement | null;
|
|
7
|
+
getExpandViewport: () => HTMLElement | null;
|
|
6
8
|
overlayStyle?: CSSProperties;
|
|
7
9
|
contentStyle?: CSSProperties;
|
|
8
|
-
targetStyle?: CSSProperties;
|
|
9
|
-
targetRef: (el: Element | ComponentPublicInstance | null) => void;
|
|
10
|
-
allowOverlayClose: boolean;
|
|
11
|
-
allowCloseButton: boolean;
|
|
12
|
-
targetHasMargin: boolean;
|
|
13
10
|
iconSize?: number;
|
|
14
|
-
zoom?: MermaidZoomReturn;
|
|
15
|
-
showHint?: boolean;
|
|
16
11
|
};
|
|
17
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
13
|
+
toggle: (event?: Event) => void;
|
|
14
|
+
openFromDiagram: (event: MouseEvent) => void;
|
|
15
|
+
endForDiagramReplacement: () => void;
|
|
16
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
17
|
+
"active-change": (active: boolean) => any;
|
|
20
18
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
21
|
-
|
|
22
|
-
onTransitionend?: ((event: TransitionEvent) => any) | undefined;
|
|
19
|
+
"onActive-change"?: ((active: boolean) => any) | undefined;
|
|
23
20
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
21
|
declare const _default: typeof __VLS_export;
|
|
25
22
|
export default _default;
|
|
@@ -1,62 +1,67 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
+
import { computed, watch } from "vue";
|
|
3
|
+
import { useMermaidExpand } from "../composables/useMermaidExpand";
|
|
2
4
|
import MermaidZoomToolbar from "./MermaidZoomToolbar.vue";
|
|
3
5
|
const props = defineProps({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
options: { type: Object, required: true },
|
|
7
|
+
blocked: { type: Boolean, required: true },
|
|
8
|
+
getExpandTarget: { type: Function, required: true },
|
|
9
|
+
getExpandViewport: { type: Function, required: true },
|
|
6
10
|
overlayStyle: { type: Object, required: false },
|
|
7
11
|
contentStyle: { type: Object, required: false },
|
|
8
|
-
|
|
9
|
-
targetRef: { type: Function, required: true },
|
|
10
|
-
allowOverlayClose: { type: Boolean, required: true },
|
|
11
|
-
allowCloseButton: { type: Boolean, required: true },
|
|
12
|
-
targetHasMargin: { type: Boolean, required: true },
|
|
13
|
-
iconSize: { type: Number, required: false },
|
|
14
|
-
zoom: { type: null, required: false },
|
|
15
|
-
showHint: { type: Boolean, required: false }
|
|
12
|
+
iconSize: { type: Number, required: false }
|
|
16
13
|
});
|
|
17
14
|
const isMac = import.meta.client ? /Mac|iPhone|iPad|iPod/.test(navigator.userAgent) : false;
|
|
18
|
-
const emit = defineEmits(["
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
15
|
+
const emit = defineEmits(["active-change"]);
|
|
16
|
+
const blocked = computed(() => props.blocked);
|
|
17
|
+
const allowCloseButton = computed(() => props.options.invokeCloseOn?.closeButtonClick !== false);
|
|
18
|
+
const targetHasMargin = computed(() => typeof props.options.margin === "number" && props.options.margin > 0);
|
|
19
|
+
const {
|
|
20
|
+
setExpandModal,
|
|
21
|
+
setExpandTargetWrap,
|
|
22
|
+
expandClipStyle,
|
|
23
|
+
expandTargetStyle,
|
|
24
|
+
isExpandActive,
|
|
25
|
+
isVisible,
|
|
26
|
+
toggle,
|
|
27
|
+
openFromDiagram,
|
|
28
|
+
endForDiagramReplacement,
|
|
29
|
+
closeFromButton,
|
|
30
|
+
zoomIn,
|
|
31
|
+
zoomOut,
|
|
32
|
+
resetZoom,
|
|
33
|
+
cursor,
|
|
34
|
+
isDragging,
|
|
35
|
+
scale,
|
|
36
|
+
isOverlayClosable,
|
|
37
|
+
showZoomHint
|
|
38
|
+
} = useMermaidExpand({
|
|
39
|
+
getExpandTarget: props.getExpandTarget,
|
|
40
|
+
getExpandViewport: props.getExpandViewport,
|
|
41
|
+
expandOptions: props.options,
|
|
42
|
+
isBlocked: blocked
|
|
43
|
+
});
|
|
44
|
+
watch(isExpandActive, (active) => emit("active-change", active), { flush: "sync", immediate: true });
|
|
45
|
+
defineExpose({ toggle, openFromDiagram, endForDiagramReplacement });
|
|
36
46
|
</script>
|
|
37
47
|
|
|
38
48
|
<template>
|
|
39
49
|
<Teleport to="body">
|
|
40
50
|
<div
|
|
41
|
-
v-if="
|
|
51
|
+
v-if="isExpandActive"
|
|
52
|
+
:ref="setExpandModal"
|
|
42
53
|
class="ncm-expand-modal"
|
|
43
54
|
:style="{
|
|
44
|
-
cursor
|
|
55
|
+
cursor
|
|
45
56
|
}"
|
|
46
|
-
@click="handleModalClick"
|
|
47
|
-
@mousedown="zoom?.handleDragStart($event)"
|
|
48
|
-
@mousemove="zoom?.handleDragMove($event)"
|
|
49
|
-
@touchstart="zoom?.handleDragStart($event)"
|
|
50
|
-
@touchmove="zoom?.handleDragMove($event)"
|
|
51
|
-
@touchend="zoom?.handleDragEnd()"
|
|
52
57
|
>
|
|
53
58
|
<div
|
|
54
59
|
class="ncm-expand-overlay"
|
|
55
60
|
:style="overlayStyle"
|
|
56
61
|
:class="{
|
|
57
|
-
'ncm-expand-overlay-visible':
|
|
58
|
-
'ncm-expand-overlay-closable':
|
|
59
|
-
'ncm-expand-dragging':
|
|
62
|
+
'ncm-expand-overlay-visible': isVisible,
|
|
63
|
+
'ncm-expand-overlay-closable': isOverlayClosable,
|
|
64
|
+
'ncm-expand-dragging': isDragging
|
|
60
65
|
}"
|
|
61
66
|
/>
|
|
62
67
|
<div
|
|
@@ -64,30 +69,33 @@ const handleModalClick = (event) => {
|
|
|
64
69
|
:style="contentStyle"
|
|
65
70
|
>
|
|
66
71
|
<div
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
class="ncm-expand-clip"
|
|
73
|
+
:style="expandClipStyle"
|
|
74
|
+
>
|
|
75
|
+
<div
|
|
76
|
+
:ref="setExpandTargetWrap"
|
|
77
|
+
class="ncm-expand-target"
|
|
78
|
+
:class="{
|
|
70
79
|
'ncm-expand-target-with-margin': targetHasMargin
|
|
71
80
|
}"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
:style="expandTargetStyle"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
75
84
|
|
|
76
85
|
<!-- Zoom Toolbar -->
|
|
77
86
|
<MermaidZoomToolbar
|
|
78
|
-
|
|
79
|
-
:scale="zoom.scale.value"
|
|
87
|
+
:scale="scale"
|
|
80
88
|
:icon-size="iconSize"
|
|
81
89
|
:icon-scale="0.75"
|
|
82
|
-
@zoom-out="
|
|
83
|
-
@zoom-in="
|
|
84
|
-
@reset="
|
|
90
|
+
@zoom-out="zoomOut"
|
|
91
|
+
@zoom-in="zoomIn"
|
|
92
|
+
@reset="resetZoom"
|
|
85
93
|
/>
|
|
86
94
|
|
|
87
95
|
<!-- Zoom Hint Toast -->
|
|
88
96
|
<Transition name="ncm-hint-fade">
|
|
89
97
|
<div
|
|
90
|
-
v-if="
|
|
98
|
+
v-if="showZoomHint"
|
|
91
99
|
class="ncm-zoom-hint"
|
|
92
100
|
>
|
|
93
101
|
{{ isMac ? "\u2318" : "Ctrl" }} + Scroll to zoom
|
|
@@ -99,7 +107,7 @@ const handleModalClick = (event) => {
|
|
|
99
107
|
type="button"
|
|
100
108
|
class="ncm-expand-btn"
|
|
101
109
|
aria-label="Minimize diagram"
|
|
102
|
-
@click="
|
|
110
|
+
@click="closeFromButton"
|
|
103
111
|
@mousedown.stop
|
|
104
112
|
@touchstart.stop
|
|
105
113
|
>
|
|
@@ -136,5 +144,5 @@ const handleModalClick = (event) => {
|
|
|
136
144
|
</template>
|
|
137
145
|
|
|
138
146
|
<style scoped>
|
|
139
|
-
.ncm-expand-modal{inset:0;position:fixed;touch-action:none;z-index:1000}.ncm-expand-overlay{background-color:transparent;inset:0;position:absolute;transition:background-color .3s,opacity .3s,backdrop-filter .3s;z-index:0}.ncm-expand-overlay.ncm-expand-overlay-visible{backdrop-filter:var(--ncm-overlay-backdrop,none);background-color:color-mix(in oklab,var(--ncm-overlay-bg,var(--ncm-code-bg,#fff)) 95%,var(--ncm-text) 5%);opacity:var(--ncm-overlay-opacity,1)}.ncm-expand-overlay-closable{cursor:var(--ncm-cursor-collapse)}.ncm-expand-dragging{cursor:grabbing!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ncm-expand-content{height:100%;pointer-events:none;position:relative;width:100%;z-index:1}.ncm-expand-target{cursor:inherit;pointer-events:auto;position:absolute;transform-origin:top left;transition:transform .3s
|
|
147
|
+
.ncm-expand-modal{inset:0;position:fixed;touch-action:none;z-index:1000}.ncm-expand-overlay{background-color:transparent;inset:0;position:absolute;transition:background-color .3s,opacity .3s,backdrop-filter .3s;z-index:0}.ncm-expand-overlay.ncm-expand-overlay-visible{backdrop-filter:var(--ncm-overlay-backdrop,none);background-color:color-mix(in oklab,var(--ncm-overlay-bg,var(--ncm-code-bg,#fff)) 95%,var(--ncm-text) 5%);opacity:var(--ncm-overlay-opacity,1)}.ncm-expand-overlay-closable{cursor:var(--ncm-cursor-collapse)}.ncm-expand-dragging{cursor:grabbing!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ncm-expand-content{height:100%;pointer-events:none;position:relative;width:100%;z-index:1}.ncm-expand-clip{overflow:hidden;pointer-events:none;position:absolute;transition:clip-path .3s;z-index:2}.ncm-expand-target{cursor:inherit;pointer-events:auto;position:absolute;transform-origin:top left;transition:transform .3s}.ncm-expand-target.ncm-expand-target-with-margin{background-color:var(--ncm-expand-target-bg,color-mix(in oklab,var(--ncm-overlay-bg,var(--ncm-code-bg,#fff)) 90%,var(--ncm-code-bg,#fff) 10%));border-radius:8px}.ncm-expand-target :deep(svg){display:block;height:100%;width:100%}.ncm-expand-btn{align-items:center;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background-color:color-mix(in oklab,var(--ncm-code-bg) 35%,transparent);border:none;border:1px solid color-mix(in oklab,var(--ncm-text) 8%,transparent);border-radius:4px;color:color-mix(in oklab,var(--ncm-text) 60%,transparent);cursor:pointer;display:flex;justify-content:center;padding:6px;pointer-events:auto;position:absolute;right:10px;top:10px;touch-action:manipulation;transition:color .2s,background-color .2s;z-index:3}.ncm-expand-btn:hover{background-color:var(--ncm-code-bg-hover);color:var(--ncm-text)}.ncm-zoom-hint{background-color:var(--ncm-hint-bg,rgba(0,0,0,.75));border-radius:var(--ncm-hint-radius,8px);color:var(--ncm-hint-text,#fff);font-size:14px;font-weight:500;left:50%;padding:12px 24px;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;z-index:10}.ncm-hint-fade-enter-active,.ncm-hint-fade-leave-active{transition:opacity .2s ease}.ncm-hint-fade-enter-from,.ncm-hint-fade-leave-to{opacity:0}@media (prefers-reduced-motion:reduce){.ncm-expand-clip,.ncm-expand-overlay,.ncm-expand-target,.ncm-hint-fade-enter-active,.ncm-hint-fade-leave-active{transition-duration:.01ms!important}}
|
|
140
148
|
</style>
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import type { CSSProperties
|
|
2
|
-
import type {
|
|
1
|
+
import type { CSSProperties } from 'vue';
|
|
2
|
+
import type { ExpandOptions } from '../types/expand.js';
|
|
3
3
|
type __VLS_Props = {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
options: ExpandOptions;
|
|
5
|
+
blocked: boolean;
|
|
6
|
+
getExpandTarget: () => SVGElement | null;
|
|
7
|
+
getExpandViewport: () => HTMLElement | null;
|
|
6
8
|
overlayStyle?: CSSProperties;
|
|
7
9
|
contentStyle?: CSSProperties;
|
|
8
|
-
targetStyle?: CSSProperties;
|
|
9
|
-
targetRef: (el: Element | ComponentPublicInstance | null) => void;
|
|
10
|
-
allowOverlayClose: boolean;
|
|
11
|
-
allowCloseButton: boolean;
|
|
12
|
-
targetHasMargin: boolean;
|
|
13
10
|
iconSize?: number;
|
|
14
|
-
zoom?: MermaidZoomReturn;
|
|
15
|
-
showHint?: boolean;
|
|
16
11
|
};
|
|
17
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
13
|
+
toggle: (event?: Event) => void;
|
|
14
|
+
openFromDiagram: (event: MouseEvent) => void;
|
|
15
|
+
endForDiagramReplacement: () => void;
|
|
16
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
17
|
+
"active-change": (active: boolean) => any;
|
|
20
18
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
21
|
-
|
|
22
|
-
onTransitionend?: ((event: TransitionEvent) => any) | undefined;
|
|
19
|
+
"onActive-change"?: ((active: boolean) => any) | undefined;
|
|
23
20
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
21
|
declare const _default: typeof __VLS_export;
|
|
25
22
|
export default _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
fullscreenTarget: HTMLElement | null;
|
|
3
|
+
viewportTarget: HTMLElement | null;
|
|
4
|
+
renderTarget: HTMLElement | null;
|
|
5
|
+
iconSize?: number;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
8
|
+
toggle: () => Promise<void>;
|
|
9
|
+
endForDiagramReplacement: () => Promise<void>;
|
|
10
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"active-change": (value: boolean) => void;
|
|
12
|
+
"supported-change": (value: boolean) => void;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
"onActive-change"?: ((value: boolean) => any) | undefined;
|
|
15
|
+
"onSupported-change"?: ((value: boolean) => any) | undefined;
|
|
16
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: typeof __VLS_export;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { watch } from "vue";
|
|
3
|
+
import { useMermaidFullscreen } from "../composables/useMermaidFullscreen";
|
|
4
|
+
import MermaidZoomToolbar from "./MermaidZoomToolbar.vue";
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
fullscreenTarget: { type: null, required: true },
|
|
7
|
+
viewportTarget: { type: null, required: true },
|
|
8
|
+
renderTarget: { type: null, required: true },
|
|
9
|
+
iconSize: { type: Number, required: false }
|
|
10
|
+
});
|
|
11
|
+
const emit = defineEmits(["active-change", "supported-change"]);
|
|
12
|
+
const isMac = import.meta.client ? /Mac|iPhone|iPad|iPod/.test(navigator.userAgent) : false;
|
|
13
|
+
const {
|
|
14
|
+
isSupported,
|
|
15
|
+
isActive,
|
|
16
|
+
scale,
|
|
17
|
+
showZoomHint,
|
|
18
|
+
toggle,
|
|
19
|
+
endForDiagramReplacement,
|
|
20
|
+
zoomIn,
|
|
21
|
+
zoomOut,
|
|
22
|
+
resetZoom
|
|
23
|
+
} = useMermaidFullscreen({
|
|
24
|
+
getFullscreenTarget: () => props.fullscreenTarget,
|
|
25
|
+
getViewportTarget: () => props.viewportTarget,
|
|
26
|
+
getRenderTarget: () => props.renderTarget
|
|
27
|
+
});
|
|
28
|
+
watch(isActive, (active) => emit("active-change", active), { flush: "sync", immediate: true });
|
|
29
|
+
watch(isSupported, (supported) => emit("supported-change", supported), { flush: "sync", immediate: true });
|
|
30
|
+
defineExpose({ toggle, endForDiagramReplacement });
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<template>
|
|
34
|
+
<MermaidZoomToolbar
|
|
35
|
+
v-if="isActive"
|
|
36
|
+
variant="fullscreen"
|
|
37
|
+
:scale="scale"
|
|
38
|
+
:icon-size="iconSize"
|
|
39
|
+
@zoom-out="zoomOut"
|
|
40
|
+
@zoom-in="zoomIn"
|
|
41
|
+
@reset="resetZoom"
|
|
42
|
+
/>
|
|
43
|
+
|
|
44
|
+
<Transition name="ncm-hint-fade">
|
|
45
|
+
<div
|
|
46
|
+
v-if="showZoomHint && isActive"
|
|
47
|
+
class="ncm-fullscreen-zoom-hint"
|
|
48
|
+
>
|
|
49
|
+
{{ isMac ? "\u2318" : "Ctrl" }} + Scroll to zoom
|
|
50
|
+
</div>
|
|
51
|
+
</Transition>
|
|
52
|
+
</template>
|
|
53
|
+
|
|
54
|
+
<style scoped>
|
|
55
|
+
.ncm-fullscreen-zoom-hint{display:none}:fullscreen .ncm-fullscreen-zoom-hint{background-color:var(--ncm-hint-bg,rgba(0,0,0,.75));border-radius:var(--ncm-hint-radius,8px);color:var(--ncm-hint-text,#fff);display:block;font-size:20px;font-weight:500;left:50%;padding:12px 24px;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;z-index:20}.ncm-hint-fade-enter-active,.ncm-hint-fade-leave-active{transition:opacity .2s ease}.ncm-hint-fade-enter-from,.ncm-hint-fade-leave-to{opacity:0}@media (prefers-reduced-motion:reduce){.ncm-hint-fade-enter-active,.ncm-hint-fade-leave-active{transition-duration:.01ms!important}}
|
|
56
|
+
</style>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
fullscreenTarget: HTMLElement | null;
|
|
3
|
+
viewportTarget: HTMLElement | null;
|
|
4
|
+
renderTarget: HTMLElement | null;
|
|
5
|
+
iconSize?: number;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
8
|
+
toggle: () => Promise<void>;
|
|
9
|
+
endForDiagramReplacement: () => Promise<void>;
|
|
10
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
|
+
"active-change": (value: boolean) => void;
|
|
12
|
+
"supported-change": (value: boolean) => void;
|
|
13
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
14
|
+
"onActive-change"?: ((value: boolean) => any) | undefined;
|
|
15
|
+
"onSupported-change"?: ((value: boolean) => any) | undefined;
|
|
16
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: typeof __VLS_export;
|
|
18
|
+
export default _default;
|
|
@@ -1,45 +1,29 @@
|
|
|
1
1
|
import type { CSSProperties, ComponentPublicInstance, Ref } from 'vue';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ExpandOptions } from '../types/expand.js';
|
|
3
3
|
interface UseMermaidExpandOptions {
|
|
4
4
|
getExpandTarget: () => SVGElement | null;
|
|
5
|
-
|
|
5
|
+
getExpandViewport: () => HTMLElement | null;
|
|
6
|
+
expandOptions: ExpandOptions;
|
|
6
7
|
isBlocked?: Ref<boolean>;
|
|
7
|
-
invokeOpenOn?: ExpandInvokeOpenOn;
|
|
8
|
-
invokeCloseOn?: ExpandInvokeCloseOn;
|
|
9
8
|
}
|
|
10
9
|
export declare function useMermaidExpand(options: UseMermaidExpandOptions): {
|
|
10
|
+
setExpandModal: (el: Element | ComponentPublicInstance | null) => void;
|
|
11
11
|
setExpandTargetWrap: (el: Element | ComponentPublicInstance | null) => void;
|
|
12
|
+
expandClipStyle: import("vue").ComputedRef<CSSProperties>;
|
|
12
13
|
expandTargetStyle: import("vue").ComputedRef<CSSProperties>;
|
|
13
14
|
isExpandActive: import("vue").ComputedRef<boolean>;
|
|
14
15
|
isVisible: import("vue").ComputedRef<boolean>;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
transform: string;
|
|
27
|
-
}>;
|
|
28
|
-
isDragging: Ref<boolean, boolean>;
|
|
29
|
-
isSpacePressed: Ref<boolean, boolean>;
|
|
30
|
-
wasLastInteractionDrag: Ref<boolean, boolean>;
|
|
31
|
-
cursor: import("vue").ComputedRef<"grabbing" | "grab" | "auto">;
|
|
32
|
-
init: (metrics: import("./useMermaidZoom.js").ZoomMetrics) => void;
|
|
33
|
-
reset: () => void;
|
|
34
|
-
zoomIn: () => void;
|
|
35
|
-
zoomOut: () => void;
|
|
36
|
-
setMetrics: (metrics: import("./useMermaidZoom.js").ZoomMetrics) => void;
|
|
37
|
-
handleWheel: (event: WheelEvent) => boolean;
|
|
38
|
-
handleDragStart: (event: MouseEvent | TouchEvent) => void;
|
|
39
|
-
handleDragMove: (event: MouseEvent | TouchEvent) => void;
|
|
40
|
-
handleDragEnd: () => void;
|
|
41
|
-
isPointerDown: Ref<boolean, boolean>;
|
|
42
|
-
};
|
|
16
|
+
toggle: (event?: Event) => void;
|
|
17
|
+
openFromDiagram: (event: MouseEvent) => void;
|
|
18
|
+
endForDiagramReplacement: () => void;
|
|
19
|
+
closeFromButton: (event?: Event) => void;
|
|
20
|
+
zoomIn: () => void;
|
|
21
|
+
zoomOut: () => void;
|
|
22
|
+
resetZoom: () => void;
|
|
23
|
+
cursor: import("vue").ComputedRef<"grabbing" | "grab" | "auto">;
|
|
24
|
+
isDragging: import("vue").ComputedRef<boolean>;
|
|
25
|
+
scale: import("vue").ComputedRef<number>;
|
|
26
|
+
isOverlayClosable: import("vue").ComputedRef<boolean>;
|
|
43
27
|
showZoomHint: Ref<boolean, boolean>;
|
|
44
28
|
};
|
|
45
29
|
export {};
|