diff --git a/src/lib/components/AIGlyphPopup.svelte b/src/lib/components/AIGlyphPopup.svelte
new file mode 100644
index 00000000..53950b59
--- /dev/null
+++ b/src/lib/components/AIGlyphPopup.svelte
@@ -0,0 +1,148 @@
+
+
+{#if show}
+
+
+
+
+
+
+
+ Signup to Mermaid.ai to try AI
+
+
+
+{/if}
+
+
diff --git a/src/lib/components/DesktopEditor.svelte b/src/lib/components/DesktopEditor.svelte
index cb54ac5b..4e66d2d2 100644
--- a/src/lib/components/DesktopEditor.svelte
+++ b/src/lib/components/DesktopEditor.svelte
@@ -1,7 +1,8 @@
-
+
+
+
{
+ showPopup = false;
+ suggestion = '';
+ renderQuickEditHint();
+ }}
+ ontryFree={() => {
+ window.open($urlsStore.mermaidChart({ medium: 'vibe_diagramming' }).save, '_blank');
+ showPopup = false;
+ suggestion = '';
+ renderQuickEditHint();
+ }} />
+
+
+
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index 2e71e336..9a83ddba 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -10,5 +10,6 @@ export const TID = {
} as const;
export const C = {
+ aiLiveEditor: 'ai_live_editor',
utmSource: 'mermaid_live_editor'
} as const;
diff --git a/src/lib/util/state.ts b/src/lib/util/state.ts
index 06ffb259..c4dc0e05 100644
--- a/src/lib/util/state.ts
+++ b/src/lib/util/state.ts
@@ -1,4 +1,3 @@
-import { C } from '$/constants';
import type { ErrorHash, MarkerData, State, ValidatedState } from '$/types';
import { debounce } from 'lodash-es';
import type { MermaidConfig } from 'mermaid';
@@ -12,7 +11,7 @@ import {
import { parse } from './mermaid';
import { localStorage, persist } from './persist';
import { deserializeState, pakoSerde, serializeState } from './serde';
-import { errorDebug, formatJSON, MCBaseURL } from './util';
+import { errorDebug, formatJSON, getSource, MCBaseURL } from './util';
export const defaultState: State = {
code: `flowchart TD
@@ -140,10 +139,11 @@ export const urlsStore = derived([stateStore], ([{ code, serialized }]) => {
mermaidChart: ({
medium
}: {
- medium: 'ai_repair' | 'main_menu' | 'save_diagram' | 'share';
+ medium: 'ai_repair' | 'main_menu' | 'save_diagram' | 'share' | 'vibe_diagramming';
}) => {
+ const utmSource = getSource();
const params = new URLSearchParams({
- utm_source: C.utmSource,
+ utm_source: utmSource,
utm_medium: medium
}).toString();
return {
diff --git a/src/lib/util/util.ts b/src/lib/util/util.ts
index 08552c55..790d2802 100644
--- a/src/lib/util/util.ts
+++ b/src/lib/util/util.ts
@@ -1,3 +1,4 @@
+import { C } from '../constants';
import { env } from './env';
import { loadDataFromUrl } from './fileLoaders/loader';
import { initLoading } from './loading';
@@ -11,6 +12,13 @@ export const getDomain = (url?: string): string => {
return domain;
};
+export const getSource = (): string => {
+ if (typeof window !== 'undefined' && window.location.host.includes('mermaid.ai')) {
+ return C.aiLiveEditor;
+ }
+ return C.utmSource;
+};
+
export const loadStateFromURL = (): void => {
loadState(window.location.hash.slice(1));
};
diff --git a/static/icons/use-chat.svg b/static/icons/use-chat.svg
new file mode 100644
index 00000000..86ced9d4
--- /dev/null
+++ b/static/icons/use-chat.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file