|
9 | 9 | // ┃ * [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). * ┃ |
10 | 10 | // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ |
11 | 11 |
|
12 | | -import { METADATA_MAP } from "./constants"; |
13 | 12 | import { RegularViewEventModel } from "./events"; |
14 | 13 | import { RegularTableViewModel } from "./table"; |
15 | | -import { DataListener, SetDataListenerOptions } from "./types"; |
| 14 | +import { CellMetadata, DataListener, FPSRecord, SetDataListenerOptions } from "./types"; |
16 | 15 | import { get_draw_fps } from "./utils"; |
| 16 | +import { METADATA_MAP } from "./view_model"; |
17 | 17 |
|
18 | 18 | type VirtualMode = "both" | "horizontal" | "vertical" | "none"; |
19 | 19 |
|
@@ -55,26 +55,6 @@ export class RegularTableElement extends RegularViewEventModel { |
55 | 55 | } |
56 | 56 | } |
57 | 57 |
|
58 | | - /** |
59 | | - * Reset the viewport of this regular table. |
60 | | - */ |
61 | | - private _reset_viewport(): void { |
62 | | - this._start_row = undefined; |
63 | | - this._end_row = undefined; |
64 | | - this._start_col = undefined; |
65 | | - this._end_col = undefined; |
66 | | - } |
67 | | - |
68 | | - /** |
69 | | - * Reset the scroll position of this regular table back to the origin. |
70 | | - */ |
71 | | - private _reset_scroll(): void { |
72 | | - this._column_sizes.indices = []; |
73 | | - this.scrollTop = 0; |
74 | | - this.scrollLeft = 0; |
75 | | - this._reset_viewport(); |
76 | | - } |
77 | | - |
78 | 58 | /** |
79 | 59 | * Reset column autosizing, such that column sizes will be recalculated |
80 | 60 | * on the next draw() call. |
@@ -202,30 +182,30 @@ export class RegularTableElement extends RegularViewEventModel { |
202 | 182 | * coordinates-like object to refer to metadata by logical position. |
203 | 183 | * @returns {MetaData} The metadata associated with the element. |
204 | 184 | */ |
205 | | - getMeta(element: HTMLElement | any): any { |
206 | | - if (typeof element === "undefined") { |
| 185 | + getMeta(element?: HTMLElement | CellMetadata): CellMetadata | undefined { |
| 186 | + if ( element === undefined) { |
207 | 187 | return; |
208 | 188 | } else if (element instanceof HTMLElement) { |
209 | 189 | return METADATA_MAP.get(element); |
210 | | - } else if (element.row_header_x >= 0) { |
211 | | - if (element.row_header_x < this._view_cache.row_headers_length) { |
| 190 | + } else if ("row_header_x" in element && element.row_header_x && element.row_header_x >= 0) { |
| 191 | + if (element.row_header_x! < this._view_cache.row_headers_length) { |
212 | 192 | const td = this.table_model.body._fetch_cell( |
213 | | - element.y, |
214 | | - element.row_header_x, |
| 193 | + element.y!, |
| 194 | + element.row_header_x!, |
215 | 195 | ); |
216 | 196 | return this.getMeta(td); |
217 | 197 | } |
218 | | - } else if (element.column_header_y >= 0) { |
| 198 | + } else if ("column_header_y" in element && element.column_header_y! >= 0) { |
219 | 199 | if ( |
220 | | - element.column_header_y < this._view_cache.column_headers_length |
| 200 | + element.column_header_y! < this._view_cache.column_headers_length |
221 | 201 | ) { |
222 | | - const td = this.table_model.body._fetch_cell( |
223 | | - element.column_header_y, |
224 | | - element.y, |
| 202 | + const td = this.table_model.header._fetch_cell( |
| 203 | + element.column_header_y!, |
| 204 | + element.x!, |
225 | 205 | ); |
226 | 206 | return this.getMeta(td); |
227 | 207 | } |
228 | | - } else { |
| 208 | + } else if ("dx" in element) { |
229 | 209 | return this.getMeta( |
230 | 210 | this.table_model.body._fetch_cell( |
231 | 211 | element.dy, |
@@ -253,13 +233,7 @@ export class RegularTableElement extends RegularViewEventModel { |
253 | 233 | * @returns {Performance} Performance data aggregated since the last |
254 | 234 | * call to `getDrawFPS()`. |
255 | 235 | */ |
256 | | - getDrawFPS(): { |
257 | | - avg: number; |
258 | | - real_fps: number; |
259 | | - virtual_fps: number; |
260 | | - num_frames: number; |
261 | | - elapsed: number; |
262 | | - } { |
| 236 | + getDrawFPS(): FPSRecord { |
263 | 237 | return get_draw_fps(); |
264 | 238 | } |
265 | 239 |
|
@@ -362,3 +336,32 @@ export class RegularTableElement extends RegularViewEventModel { |
362 | 336 | if (document.createElement("regular-table").constructor === HTMLElement) { |
363 | 337 | window.customElements.define("regular-table", RegularTableElement); |
364 | 338 | } |
| 339 | + |
| 340 | +// Custom Elements extensions |
| 341 | +declare global { |
| 342 | + namespace JSX { |
| 343 | + interface IntrinsicElements { |
| 344 | + "regular-table": RegularTableElement; |
| 345 | + } |
| 346 | + } |
| 347 | +} |
| 348 | + |
| 349 | +declare global { |
| 350 | + interface Document { |
| 351 | + createElement( |
| 352 | + tagName: "regular-table", |
| 353 | + options?: ElementCreationOptions, |
| 354 | + ): RegularTableElement; |
| 355 | + querySelector<E extends Element = Element>(selectors: string): E | null; |
| 356 | + querySelector( |
| 357 | + selectors: "regular-table", |
| 358 | + ): RegularTableElement | null; |
| 359 | + } |
| 360 | + |
| 361 | + interface CustomElementRegistry { |
| 362 | + get( |
| 363 | + tagName: "regular-table", |
| 364 | + ): typeof RegularTableElement; |
| 365 | + } |
| 366 | +} |
| 367 | + |
0 commit comments