@blogmcp/mdx-render-vue 0.3.0 → 0.5.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Lukas Zubal
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -9,3 +9,4 @@ export { useGallery, gridColsClasses, isMediaObject, isVideoUrl } from './useGal
9
9
  export { useYouTube, YOUTUBE_EMBED_BASE, YOUTUBE_IFRAME_ALLOW, } from './useYouTube';
10
10
  export { useAudioPlayer } from './useAudioPlayer';
11
11
  export { useOptimizedImg, IMG_COMPONENT_KEY } from './useMedia';
12
+ export { useTripMap, parseHandNodes, tripMapFormatTime, MDX_ARTICLE_CONTEXT_KEY, type MdxArticleContext, type TripMapGeoNode, type TripMapGeoResponse, } from './useTripMap';
@@ -4,8 +4,11 @@ import { gridColsClasses, isMediaObject, isVideoUrl, useGallery } from "./useGal
4
4
  import { YOUTUBE_EMBED_BASE, YOUTUBE_IFRAME_ALLOW, useYouTube } from "./useYouTube.js";
5
5
  import { useAudioPlayer } from "./useAudioPlayer.js";
6
6
  import { IMG_COMPONENT_KEY, useOptimizedImg } from "./useMedia.js";
7
+ import { MDX_ARTICLE_CONTEXT_KEY, useTripMap } from "./useTripMap.js";
8
+ import { parseTripMapHandNodes, tripMapFormatTime } from "@blogmcp/mdx-schema/tripmap";
7
9
  export {
8
10
  IMG_COMPONENT_KEY,
11
+ MDX_ARTICLE_CONTEXT_KEY,
9
12
  YOUTUBE_EMBED_BASE,
10
13
  YOUTUBE_IFRAME_ALLOW,
11
14
  calloutConfigs,
@@ -15,10 +18,13 @@ export {
15
18
  isMediaObject,
16
19
  isVideoUrl,
17
20
  languageLabels,
21
+ parseTripMapHandNodes as parseHandNodes,
22
+ tripMapFormatTime,
18
23
  useAudioPlayer,
19
24
  useCallout,
20
25
  useCodeBlock,
21
26
  useGallery,
22
27
  useOptimizedImg,
28
+ useTripMap,
23
29
  useYouTube
24
30
  };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * TripMap composable — Vue binding over the shared framework-free helpers
3
+ * in @blogmcp/mdx-schema/tripmap (prop parsing, geo-URL contract, texts).
4
+ *
5
+ * HARD CONSTRAINT: this module (and every module statically reachable from
6
+ * the TripMap SFCs) must NOT statically import '@blogmcp/tripmap-core' —
7
+ * not even its pure '/nodes' subpath. The article-review MCP-App bundles
8
+ * this package from source into ONE file with that package externalized;
9
+ * a top-level bare import would break the whole bundle at load time. The
10
+ * core is reached exclusively via `import('@blogmcp/tripmap-core')` inside
11
+ * the SFC's intersection handler (rejects harmlessly in the iframe).
12
+ */
13
+ import { type ComputedRef, type InjectionKey } from 'vue';
14
+ import type { TripMapHandNode, TripMapProps } from '@blogmcp/mdx-schema';
15
+ import { parseTripMapHandNodes, tripMapFormatTime, type TripMapFacadeMedia, type TripMapFacadeStop, type TripMapFacadeThumb, type TripMapUiLabels, type TripMapGeoNode, type TripMapGeoResponse, type TripMapUiTexts } from '@blogmcp/mdx-schema/tripmap';
16
+ export { tripMapFormatTime };
17
+ export { parseTripMapHandNodes as parseHandNodes };
18
+ export type { TripMapGeoNode, TripMapGeoResponse };
19
+ /**
20
+ * Article identity for AUTO mode (map every geotagged media of the article).
21
+ * The host app provides it around its MDX render tree (the Nuxt blog does it
22
+ * in `components/article/MdxContent.vue` for article + preview pages; a bare
23
+ * consumer that doesn't provide it simply has no auto mode — TripMap then
24
+ * needs explicit `slugs` or `nodes`).
25
+ */
26
+ export interface MdxArticleContext {
27
+ filename: string;
28
+ language?: string;
29
+ /**
30
+ * The article's geotagged media (the GraphQL `contentImagesGeo` rows),
31
+ * when the host already has them. Lets the SERVER-RENDERED facade carry
32
+ * real thumbnails with alt text and named stops in AUTO mode — the part of
33
+ * a TripMap that crawlers and answer engines read. Optional: without it
34
+ * the live map still fetches everything, only the no-JS view is poorer.
35
+ */
36
+ media?: readonly TripMapFacadeMedia[] | null;
37
+ }
38
+ export declare const MDX_ARTICLE_CONTEXT_KEY: InjectionKey<MdxArticleContext | null>;
39
+ export interface UseTripMapResult {
40
+ slugList: ComputedRef<string[]>;
41
+ excludeList: ComputedRef<string[]>;
42
+ handNodes: ComputedRef<TripMapHandNode[]>;
43
+ /**
44
+ * Deterministic SSR thumbs: author order for explicit `slugs`, capture
45
+ * order for AUTO mode when the host provided `context.media`. Alt text
46
+ * comes from that media (empty when unknown).
47
+ */
48
+ facadeThumbs: ComputedRef<TripMapFacadeThumb[]>;
49
+ /** Named stops for the SSR facade: place-labelled photos + hand-made nodes, chronological. */
50
+ facadeStops: ComputedRef<TripMapFacadeStop[]>;
51
+ heightStyle: ComputedRef<{
52
+ height: string;
53
+ }>;
54
+ articleContext: MdxArticleContext | null;
55
+ isAutoMode: ComputedRef<boolean>;
56
+ /**
57
+ * Nothing selects media (no slugs, no article context): the geo call only
58
+ * fetches the tenant basemap config, so its failure must not sink a map
59
+ * of hand-made nodes — the wrapper falls back to the core default style.
60
+ */
61
+ isConfigOnly: ComputedRef<boolean>;
62
+ /** Always set: slugs / article selection, or the config-only URL. */
63
+ geoUrl: ComputedRef<string>;
64
+ labels: ComputedRef<TripMapUiLabels | undefined>;
65
+ texts: ComputedRef<TripMapUiTexts>;
66
+ }
67
+ export declare function useTripMap(props: TripMapProps): UseTripMapResult;
@@ -0,0 +1,39 @@
1
+ import { inject, computed } from "vue";
2
+ import { splitTripMapList, parseTripMapHandNodes, tripMapFacade, TRIPMAP_DEFAULT_HEIGHT, buildTripMapGeoUrl, tripMapPlaybackLabels, tripMapUiTexts } from "@blogmcp/mdx-schema/tripmap";
3
+ import { parseTripMapHandNodes as parseTripMapHandNodes2, tripMapFormatTime } from "@blogmcp/mdx-schema/tripmap";
4
+ const MDX_ARTICLE_CONTEXT_KEY = /* @__PURE__ */ Symbol.for("blogmcp:mdx-article-context");
5
+ function useTripMap(props) {
6
+ const articleContext = inject(MDX_ARTICLE_CONTEXT_KEY, null);
7
+ const slugList = computed(() => splitTripMapList(props.slugs));
8
+ const excludeList = computed(() => splitTripMapList(props.exclude));
9
+ const handNodes = computed(() => parseTripMapHandNodes(props.nodes));
10
+ const isAutoMode = computed(() => slugList.value.length === 0);
11
+ const isConfigOnly = computed(() => slugList.value.length === 0 && !articleContext?.filename);
12
+ const facade = computed(() => tripMapFacade(props, articleContext));
13
+ const facadeThumbs = computed(() => facade.value.thumbs);
14
+ const facadeStops = computed(() => facade.value.stops);
15
+ const heightStyle = computed(() => ({ height: props.height || TRIPMAP_DEFAULT_HEIGHT }));
16
+ const geoUrl = computed(() => buildTripMapGeoUrl(props, articleContext));
17
+ const labels = computed(() => tripMapPlaybackLabels(articleContext?.language));
18
+ const texts = computed(() => tripMapUiTexts(articleContext?.language));
19
+ return {
20
+ slugList,
21
+ excludeList,
22
+ handNodes,
23
+ facadeThumbs,
24
+ facadeStops,
25
+ heightStyle,
26
+ articleContext,
27
+ isAutoMode,
28
+ isConfigOnly,
29
+ geoUrl,
30
+ labels,
31
+ texts
32
+ };
33
+ }
34
+ export {
35
+ MDX_ARTICLE_CONTEXT_KEY,
36
+ parseTripMapHandNodes2 as parseHandNodes,
37
+ tripMapFormatTime,
38
+ useTripMap
39
+ };
@@ -0,0 +1,3 @@
1
+ import type { TripMapProps } from '@blogmcp/mdx-schema';
2
+ declare const _default: import("vue").DefineComponent<TripMapProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TripMapProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
3
+ export default _default;
@@ -0,0 +1,51 @@
1
+ import { defineComponent, computed, createElementBlock, openBlock, createElementVNode, toDisplayString, createCommentVNode, Fragment, createTextVNode } from "vue";
2
+ import { parseTripMapHandNodes } from "@blogmcp/mdx-schema/tripmap";
3
+ const _hoisted_1 = {
4
+ class: "flex items-center gap-3 rounded-lg border border-blue-500/40 bg-blue-500/5 px-3 py-2",
5
+ "data-mdx-component": "TripMap"
6
+ };
7
+ const _hoisted_2 = { class: "font-medium" };
8
+ const _hoisted_3 = { class: "text-sm opacity-70" };
9
+ const _sfc_main = /* @__PURE__ */ defineComponent({
10
+ __name: "TripMapEdit",
11
+ props: {
12
+ slugs: {},
13
+ exclude: {},
14
+ nodes: {},
15
+ height: {},
16
+ line: { type: Boolean },
17
+ filmstrip: { type: Boolean },
18
+ playback: { type: Boolean },
19
+ cluster: { type: Boolean },
20
+ theme: {},
21
+ detail: {},
22
+ styleUrl: {},
23
+ center: {},
24
+ zoom: {},
25
+ title: {}
26
+ },
27
+ setup(__props) {
28
+ const props = __props;
29
+ const slugCount = computed(() => (props.slugs ?? "").split(",").filter((s) => s.trim()).length);
30
+ const nodeCount = computed(() => parseTripMapHandNodes(props.nodes).length);
31
+ return (_ctx, _cache) => {
32
+ return openBlock(), createElementBlock("div", _hoisted_1, [
33
+ _cache[0] || (_cache[0] = createElementVNode("span", { "aria-hidden": "true" }, "🗺", -1)),
34
+ createElementVNode("span", _hoisted_2, toDisplayString(__props.title || "TripMap"), 1),
35
+ createElementVNode("span", _hoisted_3, [
36
+ slugCount.value > 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
37
+ createTextVNode(toDisplayString(slugCount.value) + " photos", 1)
38
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
39
+ createTextVNode("auto (article media)")
40
+ ], 64)),
41
+ nodeCount.value > 0 ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
42
+ createTextVNode(" · " + toDisplayString(nodeCount.value) + " waypoints", 1)
43
+ ], 64)) : createCommentVNode("", true)
44
+ ])
45
+ ]);
46
+ };
47
+ }
48
+ });
49
+ export {
50
+ _sfc_main as default
51
+ };
@@ -0,0 +1,4 @@
1
+ import _sfc_main from "./TripMapEdit.vue.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -16,6 +16,7 @@ export { default as AlertEdit } from './AlertEdit.vue';
16
16
  export { default as BadgeEdit } from './BadgeEdit.vue';
17
17
  export { default as IconEdit } from './IconEdit.vue';
18
18
  export { default as TooltipEdit } from './TooltipEdit.vue';
19
+ export { default as TripMapEdit } from './TripMapEdit.vue';
19
20
  export { default as Callout } from './CalloutEdit.vue';
20
21
  export { default as CodeBlock } from './CodeBlockEdit.vue';
21
22
  export { default as Gallery } from './GalleryEdit.vue';
@@ -27,3 +28,4 @@ export { default as Alert } from './AlertEdit.vue';
27
28
  export { default as Badge } from './BadgeEdit.vue';
28
29
  export { default as Icon } from './IconEdit.vue';
29
30
  export { default as Tooltip } from './TooltipEdit.vue';
31
+ export { default as TripMap } from './TripMapEdit.vue';
@@ -9,6 +9,7 @@ import { default as default16, default as default17 } from "./AlertEdit.vue2.js"
9
9
  import { default as default18, default as default19 } from "./BadgeEdit.vue2.js";
10
10
  import { default as default20, default as default21 } from "./IconEdit.vue2.js";
11
11
  import { default as default22, default as default23 } from "./TooltipEdit.vue2.js";
12
+ import { default as default24, default as default25 } from "./TripMapEdit.vue.js";
12
13
  export {
13
14
  default16 as Alert,
14
15
  default17 as AlertEdit,
@@ -30,6 +31,8 @@ export {
30
31
  default21 as IconEdit,
31
32
  default22 as Tooltip,
32
33
  default23 as TooltipEdit,
34
+ default24 as TripMap,
35
+ default25 as TripMapEdit,
33
36
  default8 as YouTube,
34
37
  default9 as YouTubeEdit
35
38
  };
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * md-editor edit preview (dark theme) and KB blog (light theme, variants).
7
7
  */
8
8
  export * from './composables';
9
- export { CalloutEdit, CodeBlockEdit, GalleryEdit, YouTubeEdit, AudioPlayerEdit, Callout as EditCallout, CodeBlock as EditCodeBlock, Gallery as EditGallery, YouTube as EditYouTube, AudioPlayer as EditAudioPlayer, } from './edit';
10
- export { Callout as RenderCallout, CalloutDefault, CalloutMinimal, CodeBlock as RenderCodeBlock, CodeBlockDefault, Gallery as RenderGallery, GalleryGrid, YouTube as RenderYouTube, YouTubeDefault, AudioPlayer as RenderAudioPlayer, AudioPlayerDefault, getRenderComponent, getComponentVariants, } from './render';
9
+ export { CalloutEdit, CodeBlockEdit, GalleryEdit, YouTubeEdit, AudioPlayerEdit, TripMapEdit, Callout as EditCallout, CodeBlock as EditCodeBlock, Gallery as EditGallery, YouTube as EditYouTube, AudioPlayer as EditAudioPlayer, } from './edit';
10
+ export { Callout as RenderCallout, CalloutDefault, CalloutMinimal, CodeBlock as RenderCodeBlock, CodeBlockDefault, Gallery as RenderGallery, GalleryGrid, YouTube as RenderYouTube, YouTubeDefault, AudioPlayer as RenderAudioPlayer, AudioPlayerDefault, TripMap as RenderTripMap, TripMapDefault, getRenderComponent, getComponentVariants, } from './render';
11
11
  export { Callout, CodeBlock, Gallery, YouTube, AudioPlayer, } from './edit';
12
12
  export { componentRegistry, getComponentVariants as getRegistryVariants, getRenderComponentAsync, getEditComponentAsync, getEditorConfig, type ComponentRegistration, type EditorConfig, } from './registry';
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ import { gridColsClasses, isMediaObject, isVideoUrl, useGallery } from "./compos
4
4
  import { YOUTUBE_EMBED_BASE, YOUTUBE_IFRAME_ALLOW, useYouTube } from "./composables/useYouTube.js";
5
5
  import { useAudioPlayer } from "./composables/useAudioPlayer.js";
6
6
  import { IMG_COMPONENT_KEY, useOptimizedImg } from "./composables/useMedia.js";
7
+ import { MDX_ARTICLE_CONTEXT_KEY, useTripMap } from "./composables/useTripMap.js";
7
8
  import { default as default2, default as default3, default as default4 } from "./edit/CalloutEdit.vue.js";
8
9
  import { default as default5, default as default6, default as default7 } from "./edit/CodeBlockEdit.vue.js";
9
10
  import { default as default8, default as default9, default as default10 } from "./edit/GalleryEdit.vue.js";
@@ -14,24 +15,27 @@ import "@blogmcp/mdx-schema/styles";
14
15
  import "./packages/sanitize/dist/html.js";
15
16
  import "./_virtual/index.js";
16
17
  import "./node_modules/@iconify/vue/dist/iconify.js";
18
+ import { default as default17 } from "./edit/TripMapEdit.vue.js";
17
19
  import { getRenderComponent } from "./render/index.js";
18
20
  import { componentRegistry, getComponentVariants, getEditComponentAsync, getEditorConfig, getComponentVariants as getComponentVariants2, getRenderComponentAsync } from "./registry.js";
19
- import { default as default17, default as default18 } from "./render/callout/CalloutDefault.vue.js";
20
- import { default as default19 } from "./render/callout/CalloutMinimal.vue.js";
21
- import { default as default20, default as default21 } from "./render/gallery/GalleryGrid.vue.js";
22
- import { default as default22, default as default23 } from "./render/youtube/YouTubeDefault.vue.js";
23
- import { default as default24, default as default25 } from "./render/audioplayer/AudioPlayerDefault.vue.js";
24
- import { default as default26, default as default27 } from "./render/codeblock/CodeBlockDefault.vue.js";
21
+ import { default as default18, default as default19 } from "./render/callout/CalloutDefault.vue.js";
22
+ import { default as default20 } from "./render/callout/CalloutMinimal.vue.js";
23
+ import { default as default21, default as default22 } from "./render/gallery/GalleryGrid.vue.js";
24
+ import { default as default23, default as default24 } from "./render/youtube/YouTubeDefault.vue.js";
25
+ import { default as default25, default as default26 } from "./render/audioplayer/AudioPlayerDefault.vue.js";
26
+ import { default as default27, default as default28 } from "./render/tripmap/TripMapDefault.vue.js";
27
+ import { default as default29, default as default30 } from "./render/codeblock/CodeBlockDefault.vue.js";
28
+ import { parseTripMapHandNodes, tripMapFormatTime } from "@blogmcp/mdx-schema/tripmap";
25
29
  export {
26
30
  default14 as AudioPlayer,
27
- default24 as AudioPlayerDefault,
31
+ default25 as AudioPlayerDefault,
28
32
  default15 as AudioPlayerEdit,
29
33
  default2 as Callout,
30
- default17 as CalloutDefault,
34
+ default18 as CalloutDefault,
31
35
  default3 as CalloutEdit,
32
- default19 as CalloutMinimal,
36
+ default20 as CalloutMinimal,
33
37
  default5 as CodeBlock,
34
- default26 as CodeBlockDefault,
38
+ default29 as CodeBlockDefault,
35
39
  default6 as CodeBlockEdit,
36
40
  default16 as EditAudioPlayer,
37
41
  default4 as EditCallout,
@@ -40,17 +44,21 @@ export {
40
44
  default11 as EditYouTube,
41
45
  default9 as Gallery,
42
46
  default10 as GalleryEdit,
43
- default20 as GalleryGrid,
47
+ default21 as GalleryGrid,
44
48
  IMG_COMPONENT_KEY,
45
- default25 as RenderAudioPlayer,
46
- default18 as RenderCallout,
47
- default27 as RenderCodeBlock,
48
- default21 as RenderGallery,
49
- default22 as RenderYouTube,
49
+ MDX_ARTICLE_CONTEXT_KEY,
50
+ default26 as RenderAudioPlayer,
51
+ default19 as RenderCallout,
52
+ default30 as RenderCodeBlock,
53
+ default22 as RenderGallery,
54
+ default27 as RenderTripMap,
55
+ default23 as RenderYouTube,
56
+ default28 as TripMapDefault,
57
+ default17 as TripMapEdit,
50
58
  YOUTUBE_EMBED_BASE,
51
59
  YOUTUBE_IFRAME_ALLOW,
52
60
  default12 as YouTube,
53
- default23 as YouTubeDefault,
61
+ default24 as YouTubeDefault,
54
62
  default13 as YouTubeEdit,
55
63
  calloutConfigs,
56
64
  calloutIconPaths,
@@ -66,10 +74,13 @@ export {
66
74
  isMediaObject,
67
75
  isVideoUrl,
68
76
  languageLabels,
77
+ parseTripMapHandNodes as parseHandNodes,
78
+ tripMapFormatTime,
69
79
  useAudioPlayer,
70
80
  useCallout,
71
81
  useCodeBlock,
72
82
  useGallery,
73
83
  useOptimizedImg,
84
+ useTripMap,
74
85
  useYouTube
75
86
  };
package/dist/registry.js CHANGED
@@ -82,6 +82,13 @@ const vueWiring = {
82
82
  default: () => import("./render/tooltip/Tooltip.vue.js")
83
83
  },
84
84
  edit: () => import("./edit/TooltipEdit.vue.js")
85
+ },
86
+ TripMap: {
87
+ editor: { icon: "map", color: "#3b82f6", borderColor: "#3b82f6", bgColor: "rgba(59, 130, 246, 0.08)" },
88
+ render: {
89
+ default: () => import("./render/tripmap/TripMapDefault.vue2.js")
90
+ },
91
+ edit: () => import("./edit/TripMapEdit.vue2.js")
85
92
  }
86
93
  };
87
94
  const componentRegistry = Object.fromEntries(
@@ -18,12 +18,14 @@ import { Alert as AlertDefault } from './alert';
18
18
  import { Badge as BadgeDefault } from './badge';
19
19
  import { Icon as IconDefault } from './icon';
20
20
  import { Tooltip as TooltipDefault } from './tooltip';
21
+ import { TripMapDefault } from './tripmap';
21
22
  export { CalloutDefault, CalloutMinimal };
22
23
  export { CodeBlockDefault };
23
24
  export { GalleryGrid, GalleryLightbox };
24
25
  export { YouTubeDefault };
25
26
  export { AudioPlayerDefault };
26
27
  export { ButtonDefault, CardDefault, AlertDefault, BadgeDefault, IconDefault, TooltipDefault };
28
+ export { TripMapDefault };
27
29
  export { default as Callout } from './callout';
28
30
  export { default as CodeBlock } from './codeblock';
29
31
  export { default as Gallery } from './gallery';
@@ -35,6 +37,7 @@ export { default as Alert } from './alert';
35
37
  export { default as Badge } from './badge';
36
38
  export { default as Icon } from './icon';
37
39
  export { default as Tooltip } from './tooltip';
40
+ export { default as TripMap } from './tripmap';
38
41
  export { getRenderComponentAsync, getComponentVariants, getEditorConfig, componentRegistry, } from '../registry';
39
42
  /** @deprecated Use getRenderComponentAsync from registry instead */
40
43
  export declare function getRenderComponent(componentName: string, variant?: string): unknown;
@@ -1,29 +1,31 @@
1
- import _sfc_main$a from "./callout/CalloutDefault.vue.js";
2
- import _sfc_main$9 from "./callout/CalloutMinimal.vue.js";
1
+ import _sfc_main$b from "./callout/CalloutDefault.vue.js";
2
+ import _sfc_main$a from "./callout/CalloutMinimal.vue.js";
3
3
  import CodeBlockDefault from "./codeblock/CodeBlockDefault.vue.js";
4
- import _sfc_main$8 from "./gallery/GalleryGrid.vue.js";
4
+ import _sfc_main$9 from "./gallery/GalleryGrid.vue.js";
5
5
  import { default as default2 } from "./gallery/GalleryLightbox.vue.js";
6
- import _sfc_main$7 from "./youtube/YouTubeDefault.vue.js";
7
- import _sfc_main$6 from "./audioplayer/AudioPlayerDefault.vue.js";
8
- import _sfc_main$5 from "./button/Button.vue2.js";
9
- import _sfc_main$4 from "./card/Card.vue2.js";
10
- import _sfc_main$3 from "./alert/Alert.vue2.js";
11
- import _sfc_main$2 from "./badge/Badge.vue2.js";
12
- import _sfc_main$1 from "./icon/Icon.vue2.js";
13
- import _sfc_main from "./tooltip/Tooltip.vue2.js";
6
+ import _sfc_main$8 from "./youtube/YouTubeDefault.vue.js";
7
+ import _sfc_main$7 from "./audioplayer/AudioPlayerDefault.vue.js";
8
+ import _sfc_main$6 from "./button/Button.vue2.js";
9
+ import _sfc_main$5 from "./card/Card.vue2.js";
10
+ import _sfc_main$4 from "./alert/Alert.vue2.js";
11
+ import _sfc_main$3 from "./badge/Badge.vue2.js";
12
+ import _sfc_main$2 from "./icon/Icon.vue2.js";
13
+ import _sfc_main$1 from "./tooltip/Tooltip.vue2.js";
14
+ import _sfc_main from "./tripmap/TripMapDefault.vue.js";
14
15
  import { componentRegistry, getComponentVariants, getEditorConfig, getRenderComponentAsync } from "../registry.js";
15
16
  const syncRegistry = {
16
- Callout: { default: _sfc_main$a, minimal: _sfc_main$9 },
17
+ Callout: { default: _sfc_main$b, minimal: _sfc_main$a },
17
18
  CodeBlock: { default: CodeBlockDefault },
18
- Gallery: { default: _sfc_main$8, grid: _sfc_main$8 },
19
- YouTube: { default: _sfc_main$7 },
20
- AudioPlayer: { default: _sfc_main$6 },
21
- Button: { default: _sfc_main$5 },
22
- Card: { default: _sfc_main$4 },
23
- Alert: { default: _sfc_main$3 },
24
- Badge: { default: _sfc_main$2 },
25
- Icon: { default: _sfc_main$1 },
26
- Tooltip: { default: _sfc_main }
19
+ Gallery: { default: _sfc_main$9, grid: _sfc_main$9 },
20
+ YouTube: { default: _sfc_main$8 },
21
+ AudioPlayer: { default: _sfc_main$7 },
22
+ Button: { default: _sfc_main$6 },
23
+ Card: { default: _sfc_main$5 },
24
+ Alert: { default: _sfc_main$4 },
25
+ Badge: { default: _sfc_main$3 },
26
+ Icon: { default: _sfc_main$2 },
27
+ Tooltip: { default: _sfc_main$1 },
28
+ TripMap: { default: _sfc_main }
27
29
  };
28
30
  function getRenderComponent(componentName, variant = "default") {
29
31
  const componentVariants = syncRegistry[componentName];
@@ -31,30 +33,32 @@ function getRenderComponent(componentName, variant = "default") {
31
33
  return componentVariants[variant] || componentVariants.default;
32
34
  }
33
35
  export {
34
- _sfc_main$3 as Alert,
35
- _sfc_main$3 as AlertDefault,
36
- _sfc_main$6 as AudioPlayer,
37
- _sfc_main$6 as AudioPlayerDefault,
38
- _sfc_main$2 as Badge,
39
- _sfc_main$2 as BadgeDefault,
40
- _sfc_main$5 as Button,
41
- _sfc_main$5 as ButtonDefault,
42
- _sfc_main$a as Callout,
43
- _sfc_main$a as CalloutDefault,
44
- _sfc_main$9 as CalloutMinimal,
45
- _sfc_main$4 as Card,
46
- _sfc_main$4 as CardDefault,
36
+ _sfc_main$4 as Alert,
37
+ _sfc_main$4 as AlertDefault,
38
+ _sfc_main$7 as AudioPlayer,
39
+ _sfc_main$7 as AudioPlayerDefault,
40
+ _sfc_main$3 as Badge,
41
+ _sfc_main$3 as BadgeDefault,
42
+ _sfc_main$6 as Button,
43
+ _sfc_main$6 as ButtonDefault,
44
+ _sfc_main$b as Callout,
45
+ _sfc_main$b as CalloutDefault,
46
+ _sfc_main$a as CalloutMinimal,
47
+ _sfc_main$5 as Card,
48
+ _sfc_main$5 as CardDefault,
47
49
  CodeBlockDefault as CodeBlock,
48
50
  CodeBlockDefault,
49
- _sfc_main$8 as Gallery,
50
- _sfc_main$8 as GalleryGrid,
51
+ _sfc_main$9 as Gallery,
52
+ _sfc_main$9 as GalleryGrid,
51
53
  default2 as GalleryLightbox,
52
- _sfc_main$1 as Icon,
53
- _sfc_main$1 as IconDefault,
54
- _sfc_main as Tooltip,
55
- _sfc_main as TooltipDefault,
56
- _sfc_main$7 as YouTube,
57
- _sfc_main$7 as YouTubeDefault,
54
+ _sfc_main$2 as Icon,
55
+ _sfc_main$2 as IconDefault,
56
+ _sfc_main$1 as Tooltip,
57
+ _sfc_main$1 as TooltipDefault,
58
+ _sfc_main as TripMap,
59
+ _sfc_main as TripMapDefault,
60
+ _sfc_main$8 as YouTube,
61
+ _sfc_main$8 as YouTubeDefault,
58
62
  componentRegistry,
59
63
  getComponentVariants,
60
64
  getEditorConfig,
@@ -0,0 +1,10 @@
1
+ import type { TripMapProps } from '@blogmcp/mdx-schema';
2
+ declare const _default: import("vue").DefineComponent<TripMapProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TripMapProps> & Readonly<{}>, {
3
+ line: boolean;
4
+ filmstrip: boolean;
5
+ playback: boolean;
6
+ cluster: boolean;
7
+ theme: "light" | "dark" | "auto";
8
+ detail: "popup" | "panel";
9
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ export default _default;