// ═══════════════════════════════════════════════════════════════════════════ // TypeScript declarations for the custom element // ═══════════════════════════════════════════════════════════════════════════ export interface WptOptions { locale?: string localeBaseUrl?: string layout?: { fitMode?: 'fill' | 'compact' [key: string]: unknown } [key: string]: unknown } export interface WptSize { width: number height: number } /** Event types dispatched by the web component */ export type WptEventType = | 'DRILL_THROUGH' | 'OPEN_WPT' | 'NEW_WPT' | 'SAVE_WPT' | 'CONNECT_SOURCE' | 'PIVOT_CHANGED' | 'DATA_LOADED' /** Row of source data */ export type WptDataRow = Record /** * The imperative API exposed by the custom element. * Includes built-in methods + dynamically-bound methods from `@wpt/pivot-core/methods`. */ export interface WebPivotTableElement extends HTMLElement { // ── Data ────────────────────────────────────────────────────────────── data: WptDataRow[] getData(): WptDataRow[] setData(rows: WptDataRow[]): void // ── Options ─────────────────────────────────────────────────────────── getOptions(): WptOptions setOptions(opts: Partial): WptOptions | undefined // ── Locale ──────────────────────────────────────────────────────────── getLocale(): string setLocale(lng: string): Promise // ── Lifecycle ───────────────────────────────────────────────────────── reset(): void resize(): void showLoading(): void hideLoading(): void setSize(w: number | string | null, h: number | string | null): void getSize(): WptSize // ── Version ─────────────────────────────────────────────────────────── readonly version: string // ── EventBus ────────────────────────────────────────────────────────── readonly eventBus: { on(event: string, cb: (payload?: unknown) => void): () => void off(event: string, cb: (payload?: unknown) => void): void emit(event: string, payload?: unknown): void } // ── Source methods (from @wpt/pivot-core/methods/source) ────────────── setWptFromDataArray(data: WptDataRow[], opts?: WptOptions): void getSourceFromDataArray(data: WptDataRow[], opts?: unknown): unknown setWptFromCsvUrl(url: string, opts?: WptOptions): void getSourceFromCsvUrl(url: string, opts?: unknown): unknown setWptFromExcelUrl(url: string, opts?: WptOptions): void getSourceFromExcelUrl(url: string, opts?: unknown): unknown setWptFromWebService(url: string, opts?: unknown): void getSourceFromWebService(url: string, opts?: unknown): unknown setWptFromGoogleSpreadSheet(key: string, opts?: unknown): void getSourceFromGoogleSpreadSheet(key: string, opts?: unknown): unknown setWptFromOlapCube(config: unknown): void getSourceFromOlapCube(config: unknown): unknown setWptFromWptUrl(url: string): void setWptFromLocalFile(file: File, type?: string): unknown setWpt(wptData: unknown): void generateWptString(ignoreData?: boolean): string generateWptJSON(ignoreData?: boolean): unknown getSourceObject(): unknown setSourceObject(src: unknown): void getFieldCatalog(): unknown // ── System methods (from @wpt/pivot-core/methods/system) ────────────── showControlPanel(): void hideControlPanel(): void toggleControlPanel(): void openDialog(type: string, payload?: unknown): void closeDialog(): void refresh(): void loadingMessage(msg: string): void clearMessage(): void errorMessage(msg: string): void // ── Sheet methods (from @wpt/pivot-core/methods/sheet) ──────────────── swapAxis(): void clearAllPivot(): void clearAllFilters(): void getPivotState(): unknown configurePivot(config: unknown): void getPivotSummary(): unknown // ── AI methods (from @wpt/pivot-core/methods/ai) ────────────────────── aiSendMessage(msg: string): Promise aiGetMessages(): unknown[] aiClearHistory(): void aiIsProcessing(): boolean aiGenerateInsights(): Promise aiGetInsights(): unknown aiExplainCell(cell: unknown): Promise aiDetectAnomalies(): Promise } // Augment JSX.IntrinsicElements so TSX recognises declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { interface IntrinsicElements { 'web-pivot-table': React.DetailedHTMLProps< React.HTMLAttributes & { options?: string }, WebPivotTableElement > } } // Add to HTMLElementTagNameMap so querySelector works properly interface HTMLElementTagNameMap { 'web-pivot-table': WebPivotTableElement } } // Default export for easier importing export default WebPivotTableElement