@barzhsieh/nuxt-content-mermaid 2.2.3 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +47 -502
  2. package/README.zh-TW.md +46 -509
  3. package/dist/module.d.mts +39 -53
  4. package/dist/module.json +3 -3
  5. package/dist/module.mjs +600 -155
  6. package/dist/runtime/built-in-renderer/BuiltInRenderer.d.vue.ts +0 -0
  7. package/dist/runtime/built-in-renderer/BuiltInRenderer.vue +597 -0
  8. package/dist/runtime/built-in-renderer/BuiltInRenderer.vue.d.ts +0 -0
  9. package/dist/runtime/component-configuration-error.d.ts +3 -0
  10. package/dist/runtime/component-configuration-error.js +7 -0
  11. package/dist/runtime/component-configuration.d.ts +23 -0
  12. package/dist/runtime/component-configuration.js +78 -0
  13. package/dist/runtime/components/ContentMermaidTransport.d.vue.ts +10 -0
  14. package/dist/runtime/components/ContentMermaidTransport.vue +21 -0
  15. package/dist/runtime/components/ContentMermaidTransport.vue.d.ts +10 -0
  16. package/dist/runtime/components/Mermaid.d.vue.ts +0 -31
  17. package/dist/runtime/components/Mermaid.vue +136 -743
  18. package/dist/runtime/components/Mermaid.vue.d.ts +0 -31
  19. package/dist/runtime/components/MermaidExpandOverlay.d.vue.ts +13 -16
  20. package/dist/runtime/components/MermaidExpandOverlay.vue +61 -53
  21. package/dist/runtime/components/MermaidExpandOverlay.vue.d.ts +13 -16
  22. package/dist/runtime/components/MermaidFullscreenPresentation.d.vue.ts +18 -0
  23. package/dist/runtime/components/MermaidFullscreenPresentation.vue +56 -0
  24. package/dist/runtime/components/MermaidFullscreenPresentation.vue.d.ts +18 -0
  25. package/dist/runtime/composables/useMermaidExpand.d.ts +16 -32
  26. package/dist/runtime/composables/useMermaidExpand.js +232 -75
  27. package/dist/runtime/composables/useMermaidFullscreen.d.ts +18 -0
  28. package/dist/runtime/composables/useMermaidFullscreen.js +242 -0
  29. package/dist/runtime/composables/useMermaidZoom.d.ts +5 -1
  30. package/dist/runtime/composables/useMermaidZoom.js +54 -28
  31. package/dist/runtime/configuration/core.d.ts +27 -0
  32. package/dist/runtime/configuration/core.js +340 -0
  33. package/dist/runtime/configuration/module.d.ts +17 -0
  34. package/dist/runtime/configuration/module.js +233 -0
  35. package/dist/runtime/configuration/runtime-options.d.ts +4 -0
  36. package/dist/runtime/configuration/runtime-options.js +57 -0
  37. package/dist/runtime/constants.d.ts +24 -0
  38. package/dist/runtime/constants.js +60 -2
  39. package/dist/runtime/direct-mermaid-config.d.ts +5 -0
  40. package/dist/runtime/direct-mermaid-config.js +216 -0
  41. package/dist/runtime/mermaid-config.d.ts +9 -5
  42. package/dist/runtime/mermaid-config.js +30 -19
  43. package/dist/runtime/mermaid-rendering.d.ts +28 -0
  44. package/dist/runtime/mermaid-rendering.js +140 -0
  45. package/dist/runtime/plugins/content-mermaid-transport.d.ts +2 -0
  46. package/dist/runtime/plugins/content-mermaid-transport.js +5 -0
  47. package/dist/runtime/plugins/mermaid.client.d.ts +0 -3
  48. package/dist/runtime/plugins/mermaid.client.js +14 -32
  49. package/dist/runtime/plugins/runtime-config.d.ts +2 -0
  50. package/dist/runtime/plugins/runtime-config.js +9 -0
  51. package/dist/runtime/rendererSelection.d.ts +43 -0
  52. package/dist/runtime/rendererSelection.js +36 -0
  53. package/dist/runtime/rendererSelectionOrchestration.d.ts +12 -0
  54. package/dist/runtime/rendererSelectionOrchestration.js +13 -0
  55. package/dist/runtime/runtime-snapshot.d.ts +3 -0
  56. package/dist/runtime/runtime-snapshot.js +26 -0
  57. package/dist/runtime/utils/index.d.ts +0 -4
  58. package/dist/runtime/utils/index.js +0 -37
  59. package/dist/types.d.mts +2 -2
  60. package/package.json +38 -32
  61. package/dist/runtime/utils/mermaid-transform.d.ts +0 -18
  62. package/dist/runtime/utils/mermaid-transform.js +0 -345
@@ -1,31 +0,0 @@
1
- import type { MermaidConfig } from 'mermaid';
2
- import type { MermaidToolbarOptions } from '../../types/mermaid.js';
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, ComponentPublicInstance } from 'vue';
2
- import type { MermaidZoomReturn } from '../composables/useMermaidZoom.js';
1
+ import type { CSSProperties } from 'vue';
2
+ import type { ExpandOptions } from '../types/expand.js';
3
3
  type __VLS_Props = {
4
- active: boolean;
5
- isVisable: boolean;
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, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
18
- close: (event?: Event | undefined) => any;
19
- transitionend: (event: TransitionEvent) => any;
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
- onClose?: ((event?: Event | undefined) => any) | undefined;
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
- active: { type: Boolean, required: true },
5
- isVisable: { type: Boolean, required: true },
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
- targetStyle: { type: Object, required: false },
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(["close", "transitionend"]);
19
- const handleButtonClick = (event) => {
20
- if (!props.allowCloseButton) return;
21
- emit("close", event);
22
- };
23
- const handleModalClick = (event) => {
24
- if (props.zoom?.isSpacePressed.value) return;
25
- if (props.zoom?.wasLastInteractionDrag.value) {
26
- event.stopPropagation();
27
- return;
28
- }
29
- const target = event.target;
30
- if (target.classList.contains("ncm-expand-overlay") || target.classList.contains("ncm-expand-modal")) {
31
- if (props.allowOverlayClose) {
32
- emit("close", event);
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="active"
51
+ v-if="isExpandActive"
52
+ :ref="setExpandModal"
42
53
  class="ncm-expand-modal"
43
54
  :style="{
44
- cursor: zoom?.cursor.value || 'auto'
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': isVisable,
58
- 'ncm-expand-overlay-closable': allowOverlayClose && !zoom?.isSpacePressed.value,
59
- 'ncm-expand-dragging': zoom?.isDragging.value
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
- :ref="targetRef"
68
- class="ncm-expand-target"
69
- :class="{
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
- :style="targetStyle"
73
- @transitionend="emit('transitionend', $event)"
74
- />
81
+ :style="expandTargetStyle"
82
+ />
83
+ </div>
75
84
 
76
85
  <!-- Zoom Toolbar -->
77
86
  <MermaidZoomToolbar
78
- v-if="zoom"
79
- :scale="zoom.scale.value"
87
+ :scale="scale"
80
88
  :icon-size="iconSize"
81
89
  :icon-scale="0.75"
82
- @zoom-out="zoom.zoomOut()"
83
- @zoom-in="zoom.zoomIn()"
84
- @reset="zoom.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="showHint"
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="handleButtonClick"
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;z-index:2}.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-overlay,.ncm-expand-target,.ncm-hint-fade-enter-active,.ncm-hint-fade-leave-active{transition-duration:.01ms!important}}
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, ComponentPublicInstance } from 'vue';
2
- import type { MermaidZoomReturn } from '../composables/useMermaidZoom.js';
1
+ import type { CSSProperties } from 'vue';
2
+ import type { ExpandOptions } from '../types/expand.js';
3
3
  type __VLS_Props = {
4
- active: boolean;
5
- isVisable: boolean;
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, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
18
- close: (event?: Event | undefined) => any;
19
- transitionend: (event: TransitionEvent) => any;
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
- onClose?: ((event?: Event | undefined) => any) | undefined;
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 { ExpandInvokeCloseOn, ExpandInvokeOpenOn } from '../types/expand.js';
2
+ import type { ExpandOptions } from '../types/expand.js';
3
3
  interface UseMermaidExpandOptions {
4
4
  getExpandTarget: () => SVGElement | null;
5
- expandMargin?: number;
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
- openExpand: (_event?: Event) => void;
16
- closeExpand: (_event?: Event) => void;
17
- toggleExpand: (event?: Event) => void;
18
- handleExpandTransitionEnd: (event: TransitionEvent) => void;
19
- handleMermaidClick: (event: MouseEvent) => void;
20
- resetExpand: () => void;
21
- zoom: {
22
- scale: Ref<number, number>;
23
- translateX: Ref<number, number>;
24
- translateY: Ref<number, number>;
25
- transformStyle: import("vue").ComputedRef<{
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 {};