Skip to content

Commit a52d32a

Browse files
Improve watermark link (tldraw#7098)
Spoke with @tldrawdaniel and we want to distinguish between watermark clicks on dotcom and from sdk / our other properties. This: * Changes the `utm_source` to sdk for watermark links. * We then override it to `dotcom` for dotcom. * I decided to partially revert the (unreleased) changes from tldraw#7041 (the `click-watermark` event) since the approach in this PR felt better for the current requirements. ### Change type - [x] `other` ### Release notes - Remove the `click-watermark` event from the sdk. ### API Changes - Remove the `click-watermark` event from the sdk. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Switch watermark URLs to use utm_source=sdk (overridden to dotcom on dotcom) and remove the click-watermark event across SDK/UI; add dotcom-side tracking via runtime override. > > - **Editor/SDK**: > - Change watermark URLs to use `utm_source=sdk` in `packages/editor/src/lib/license/Watermark.tsx`. > - Remove `editor.emit('click-watermark')` calls and the `'click-watermark'` event from `TLEventMap` and API reports. > - **UI**: > - Remove `'click-watermark'` from `TLUiEventMap` and related forwarding in `packages/tldraw/src/lib/Tldraw.tsx` and `ui/context/events.tsx`. > - **Dotcom App**: > - Add `WatermarkOverride` in `TlaRootProviders.tsx` to rewrite watermark links (`utm_source=sdk` → `utm_source=dotcom`) and call `trackEvent('click-watermark', { url })`. > - Drop `'click-watermark'` from app UI events and import `trackEvent`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4ebf717. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent 0a76129 commit a52d32a

8 files changed

Lines changed: 23 additions & 24 deletions

File tree

apps/dotcom/client/src/tla/providers/TlaRootProviders.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ import {
1414
TldrawUiA11yProvider,
1515
TldrawUiContextProvider,
1616
fetch,
17+
runtime,
18+
setRuntimeOverrides,
1719
useDialogs,
1820
useToasts,
1921
useValue,
2022
} from 'tldraw'
2123
import translationsEnJson from '../../../public/tla/locales-compiled/en.json'
2224
import { ErrorPage } from '../../components/ErrorPage/ErrorPage'
23-
import { SignedInAnalytics, SignedOutAnalytics } from '../../utils/analytics'
25+
import { SignedInAnalytics, SignedOutAnalytics, trackEvent } from '../../utils/analytics'
2426
import { globalEditor } from '../../utils/globalEditor'
2527
import { MaybeForceUserRefresh } from '../components/MaybeForceUserRefresh/MaybeForceUserRefresh'
2628
import { components } from '../components/TlaEditor/TlaEditor'
@@ -39,6 +41,23 @@ import { FileSidebarFocusContextProvider } from './FileInputFocusProvider'
3941

4042
const assetUrls = getAssetUrlsByImport()
4143

44+
// Override watermark URLs globally for all dotcom editors
45+
function WatermarkOverride() {
46+
useEffect(() => {
47+
const originalOpenWindow = runtime.openWindow
48+
setRuntimeOverrides({
49+
openWindow(url: string, target: string, allowReferrer?: boolean) {
50+
if (url.includes('utm_campaign=watermark')) {
51+
url = url.replace('utm_source=sdk', 'utm_source=dotcom')
52+
trackEvent('click-watermark', { url })
53+
}
54+
originalOpenWindow(url, target, allowReferrer)
55+
},
56+
})
57+
}, [])
58+
return null
59+
}
60+
4261
export const appMessages = defineMessages({
4362
oldBrowser: {
4463
defaultMessage: 'Old browser detected. Please update your browser to use this app.',
@@ -90,6 +109,7 @@ export function Component() {
90109
</SignedInProvider>
91110
</MaybeForceUserRefresh>
92111
</IntlWrapper>
112+
<WatermarkOverride />
93113
</div>
94114
)
95115
}

apps/dotcom/client/src/tla/utils/app-ui-events.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export interface TLAppUiEventMap {
3232
'drop-tldr-file': null
3333
'import-tldr-file': null
3434
'change-user-name': null
35-
'click-watermark': null
3635
'open-share-menu': null
3736
'change-share-menu-tab': { tab: TldrawAppSessionState['shareMenuActiveTab'] }
3837
'copy-share-link': null

packages/editor/api-report.api.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3541,10 +3541,6 @@ export interface TLEventMap {
35413541
// (undocumented)
35423542
'before-event': [TLEventInfo];
35433543
// (undocumented)
3544-
'click-watermark': [{
3545-
url: string;
3546-
}];
3547-
// (undocumented)
35483544
'created-shapes': [TLRecord[]];
35493545
// (undocumented)
35503546
'deleted-shapes': [TLShapeId[]];

packages/editor/src/lib/editor/types/emit-types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export interface TLEventMap {
2222
'edited-shapes': [TLRecord[]]
2323
'deleted-shapes': [TLShapeId[]]
2424
edit: []
25-
'click-watermark': [{ url: string }]
2625
}
2726

2827
/** @public */

packages/editor/src/lib/license/Watermark.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ const UnlicensedWatermark = memo(function UnlicensedWatermark({
4848
const ref = useRef<HTMLDivElement>(null)
4949
usePassThroughWheelEvents(ref)
5050

51-
const url =
52-
'https://tldraw.dev/pricing?utm_source=dotcom&utm_medium=organic&utm_campaign=watermark'
51+
const url = 'https://tldraw.dev/pricing?utm_source=sdk&utm_medium=organic&utm_campaign=watermark'
5352

5453
return (
5554
<div
@@ -71,7 +70,6 @@ const UnlicensedWatermark = memo(function UnlicensedWatermark({
7170
}}
7271
title="The tldraw SDK requires a license key to work in production. You can get a free 100-day trial license at tldraw.dev/pricing."
7372
onClick={() => {
74-
editor.emit('click-watermark', { url })
7573
runtime.openWindow(url, '_blank', true)
7674
}} // allow referrer
7775
>
@@ -99,7 +97,7 @@ const WatermarkInner = memo(function WatermarkInner({
9997
usePassThroughWheelEvents(ref)
10098

10199
const maskCss = `url('${src}') center 100% / 100% no-repeat`
102-
const url = 'https://tldraw.dev/?utm_source=dotcom&utm_medium=organic&utm_campaign=watermark'
100+
const url = 'https://tldraw.dev/?utm_source=sdk&utm_medium=organic&utm_campaign=watermark'
103101

104102
if (isUnlicensed) {
105103
return <UnlicensedWatermark isDebugMode={isDebugMode} isMobile={isMobile} />
@@ -124,7 +122,6 @@ const WatermarkInner = memo(function WatermarkInner({
124122
}}
125123
title="Build infinite canvas applications with the tldraw SDK. Learn more at https://tldraw.dev."
126124
onClick={() => {
127-
editor.emit('click-watermark', { url })
128125
runtime.openWindow(url, '_blank')
129126
}}
130127
style={{ mask: maskCss, WebkitMask: maskCss }}

packages/tldraw/api-report.api.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3958,10 +3958,6 @@ export interface TLUiEventMap {
39583958
// (undocumented)
39593959
'change-user-name': null;
39603960
// (undocumented)
3961-
'click-watermark': {
3962-
url: string;
3963-
};
3964-
// (undocumented)
39653961
'close-menu': {
39663962
id: string;
39673963
};

packages/tldraw/src/lib/Tldraw.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,6 @@ function InsideOfEditorAndUiContext({
257257

258258
editor.once('edit', () => trackEvent('edit', { source: 'unknown' }))
259259

260-
// Forward watermark click events from editor to UI event system
261-
const handleWatermarkClick = (info: { url: string }) => {
262-
trackEvent('click-watermark', { source: 'unknown', url: info.url })
263-
}
264-
editor.on('click-watermark', handleWatermarkClick)
265-
unsubs.push(() => editor.off('click-watermark', handleWatermarkClick))
266-
267260
// for content handling, first we register the default handlers...
268261
registerDefaultExternalContentHandlers(editor, {
269262
maxImageDimension,

packages/tldraw/src/lib/ui/context/events.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ export interface TLUiEventMap {
145145
| 'bulletList'
146146
}
147147
edit: null
148-
'click-watermark': { url: string }
149148
}
150149

151150
/** @public */

0 commit comments

Comments
 (0)