From d4f03580ea132fc19d113b8e9fb637b18f1a7ed8 Mon Sep 17 00:00:00 2001 From: George Phillips Date: Fri, 22 Aug 2025 16:40:13 +1200 Subject: [PATCH] Enhance event listener interfaces to directly match the native implementation --- src/index.d.ts | 71 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index 042a5b3..2d984be 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -19,6 +19,10 @@ export interface OpenCustomDataPanelOptions extends CloseCustomDataPanelOptions allowFullDataCascade?: boolean; } +type EventListenerParameters = Parameters; +type EventListenerOrEventListenerObject = EventListenerParameters[1]; +type EventListenerOptions = EventListenerParameters[2]; + /** * Interface defining the public JavaScript API for interacting with CloudCannon's Visual Editor. * This API provides methods for managing content, handling file operations, and controlling the editor's state. @@ -294,8 +298,16 @@ export interface CloudCannonJavaScriptV1APIFileContent { */ set(options: any): Promise; - addEventListener(event: 'change', callback: (event: any) => void): void; - removeEventListener(event: 'change', callback: (event: any) => void): void; + addEventListener( + event: 'change', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; + removeEventListener( + event: 'change', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; } export interface CloudCannonJavaScriptV1APIFileData { @@ -395,8 +407,16 @@ export interface CloudCannonJavaScriptV1APIFileData { */ moveArrayItem(options: MoveArrayItemOptions): Promise; - addEventListener(event: 'change', callback: (event: any) => void): void; - removeEventListener(event: 'change', callback: (event: any) => void): void; + addEventListener( + event: 'change', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; + removeEventListener( + event: 'change', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; } export interface CloudCannonJavaScriptV1APIFile { @@ -474,8 +494,16 @@ export interface CloudCannonJavaScriptV1APIFile { */ releaseLock(): Promise<{ readOnly: boolean }>; - addEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; - removeEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; + addEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; + removeEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; } export interface CloudCannonJavaScriptV1APICollection { @@ -499,8 +527,16 @@ export interface CloudCannonJavaScriptV1APICollection { // */ // add(options: any): Promise; - addEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; - removeEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; + addEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; + removeEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; } export interface CloudCannonJavaScriptV1API { @@ -548,8 +584,16 @@ export interface CloudCannonJavaScriptV1API { files(): Promise; collections(): Promise; - addEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; - removeEventListener(event: 'change' | 'delete' | 'create', callback: (event: any) => void): void; + addEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; + removeEventListener( + event: 'change' | 'delete' | 'create', + listener: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean + ): void; } export type CloudCannonJavaScriptAPIVersions = 'v0' | 'v1'; @@ -558,11 +602,10 @@ export interface CloudCannonApiEventDetails { CloudCannonAPI?: CloudCannonJavascriptApiRouter; CloudCannon?: CloudCannonJavaScriptV0API | CloudCannonJavaScriptV1API; } + export interface CloudCannonEditorWindow extends Window, CloudCannonApiEventDetails {} export interface CloudCannonJavascriptApiRouter { - useVersion( - key: CloudCannonJavaScriptAPIVersions, - preventGlobalInstall?: boolean - ): CloudCannonJavaScriptV0API | CloudCannonJavaScriptV1API; + useVersion(key: 'v0', preventGlobalInstall?: boolean): CloudCannonJavaScriptV0API; + useVersion(key: 'v1', preventGlobalInstall?: boolean): CloudCannonJavaScriptV1API; }