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} + +{/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