@iyulab/flex-table 0.48.6 → 0.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import type { CellPosition, CellRange } from './core/selection.js';
5
5
  import type { SortCriteria } from './core/sorting.js';
6
6
  import type { FilterPredicate } from './core/filtering.js';
7
7
  import type { ColumnDefinition, DataRow, SelectionMode, DataMode } from './models/types.js';
8
+ import type { FlexTableEventMap } from './events.js';
8
9
  import type { TemplateResult } from 'lit';
9
10
  export declare class FlexTable extends LitElement {
10
11
  static styles: import("lit").CSSResult;
@@ -210,6 +211,11 @@ export declare class FlexTable extends LitElement {
210
211
  redo(): void;
211
212
  /** Clear all undo/redo history. */
212
213
  clearUndoHistory(): void;
214
+ /**
215
+ * Dispatches one of {@link FlexTableEventMap}'s events — bubbling and composed. Every event goes
216
+ * through here, so a detail that drifts from the map fails to compile.
217
+ */
218
+ private _emit;
213
219
  private _dispatchUndoStateEvent;
214
220
  private _dispatchFilterEvent;
215
221
  /**
@@ -478,6 +484,18 @@ export declare class FlexTable extends LitElement {
478
484
  /** Keep a fixed-position menu inside the viewport — a menu opened near the right or bottom edge would spill off-screen. */
479
485
  private _keepMenuInView;
480
486
  private _adjustFilterDropdown;
487
+ /**
488
+ * Close the filter dialog. From the keyboard (Escape) focus goes back to the column's menu button — the
489
+ * dialog leaves the DOM, and focus inside it would otherwise drop to the page (APG dialog). A click
490
+ * outside closes it without moving focus: the click already put focus where the user meant.
491
+ */
492
+ private _closeFilterDropdown;
493
+ /**
494
+ * Tab stays inside the filter dialog (it floats over the table, fixed to the header — a focus that left
495
+ * it would leave it open and unreachable behind the next control). Capture phase: the controls stop
496
+ * their own keydowns from reaching the grid.
497
+ */
498
+ private _onFilterDialogKeydown;
481
499
  private _renderFilterDropdown;
482
500
  private _buildTextPredicate;
483
501
  private _applyTextFilter;
@@ -561,6 +579,19 @@ export declare class FlexTable extends LitElement {
561
579
  private _renderCell;
562
580
  private _renderEditor;
563
581
  }
582
+ /**
583
+ * Typed listeners for {@link FlexTableEventMap} — the DOM's own pattern (`HTMLMediaElement` with
584
+ * `HTMLMediaElementEventMap`). Element-scoped on purpose: several names are generic and would
585
+ * collide on the global event map.
586
+ */
587
+ export interface FlexTable {
588
+ addEventListener<K extends keyof FlexTableEventMap>(type: K, listener: (this: FlexTable, ev: FlexTableEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
589
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: FlexTable, ev: HTMLElementEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
590
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
591
+ removeEventListener<K extends keyof FlexTableEventMap>(type: K, listener: (this: FlexTable, ev: FlexTableEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
592
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: FlexTable, ev: HTMLElementEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
593
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
594
+ }
564
595
  declare global {
565
596
  interface HTMLElementTagNameMap {
566
597
  'flex-table': FlexTable;
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./flex-table-CoqeYojZ.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./flex-table-CpAhHipx.js";
2
2
  export { o as FlexTable, e as RowSelectionState, t as UndoStack, n as effectiveAlign, i as exportData, r as flexTableLocale, a as renderCell };
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { FlexTable } from './flex-table.js';
2
2
  export type { ColumnDefinition, ColumnType, ColumnAlign, DataRow, CellRenderer, CellEditor, CellValidator, SelectionMode, DataMode, CellStyle, ConditionalRule } from './models/types.js';
3
3
  export { effectiveAlign } from './models/types.js';
4
4
  export type { CellPosition, CellRange } from './core/selection.js';
5
+ export type { FlexTableEventMap, CellChange } from './events.js';
5
6
  export type { SortCriteria, SortDirection } from './core/sorting.js';
6
7
  export type { ColumnFilter, FilterPredicate, FilterErrorCallback } from './core/filtering.js';
7
8
  export { RowSelectionState } from './core/row-selection.js';
package/dist/react.d.ts CHANGED
@@ -2,38 +2,39 @@ import React from 'react';
2
2
  import { type EventName } from '@lit/react';
3
3
  import { FlexTable } from './flex-table.js';
4
4
  import type { ColumnDefinition, DataRow } from './models/types.js';
5
+ import type { FlexTableEventMap } from './events.js';
5
6
  declare const FlexTableReactBase: import("@lit/react").ReactWebComponent<FlexTable, {
6
- onCellSelect: EventName<CustomEvent>;
7
- onCellEditCommit: EventName<CustomEvent>;
8
- onCellEditCancel: EventName<CustomEvent>;
9
- onCellEditStart: EventName<CustomEvent>;
10
- onSortChange: EventName<CustomEvent>;
11
- onFilterChange: EventName<CustomEvent>;
12
- onRowAdd: EventName<CustomEvent>;
13
- onRowDelete: EventName<CustomEvent>;
14
- onRowActivate: EventName<CustomEvent>;
15
- onColumnResize: EventName<CustomEvent>;
16
- onColumnSelect: EventName<CustomEvent>;
17
- onColumnAdd: EventName<CustomEvent>;
18
- onColumnDelete: EventName<CustomEvent>;
19
- onColumnReorder: EventName<CustomEvent>;
20
- onSelectionChange: EventName<CustomEvent>;
21
- onClipboardCopy: EventName<CustomEvent>;
22
- onClipboardCut: EventName<CustomEvent>;
23
- onClipboardPaste: EventName<CustomEvent>;
24
- onClipboardError: EventName<CustomEvent>;
25
- onUndoStateChange: EventName<CustomEvent>;
26
- onValidationError: EventName<CustomEvent>;
27
- onBatchUpdate: EventName<CustomEvent>;
28
- onContextMenu: EventName<CustomEvent>;
29
- onFilterError: EventName<CustomEvent>;
30
- onRowReorder: EventName<CustomEvent>;
31
- onColumnVisibilityChange: EventName<CustomEvent>;
32
- onCommentChange: EventName<CustomEvent>;
33
- onDataImport: EventName<CustomEvent>;
34
- onFillHandleApply: EventName<CustomEvent>;
35
- onFindReplace: EventName<CustomEvent>;
36
- onHeaderContextMenu: EventName<CustomEvent>;
7
+ onCellSelect: EventName<FlexTableEventMap["cell-select"]>;
8
+ onCellEditCommit: EventName<FlexTableEventMap["cell-edit-commit"]>;
9
+ onCellEditCancel: EventName<FlexTableEventMap["cell-edit-cancel"]>;
10
+ onCellEditStart: EventName<FlexTableEventMap["cell-edit-start"]>;
11
+ onSortChange: EventName<FlexTableEventMap["sort-change"]>;
12
+ onFilterChange: EventName<FlexTableEventMap["filter-change"]>;
13
+ onRowAdd: EventName<FlexTableEventMap["row-add"]>;
14
+ onRowDelete: EventName<FlexTableEventMap["row-delete"]>;
15
+ onRowActivate: EventName<FlexTableEventMap["row-activate"]>;
16
+ onColumnResize: EventName<FlexTableEventMap["column-resize"]>;
17
+ onColumnSelect: EventName<FlexTableEventMap["column-select"]>;
18
+ onColumnAdd: EventName<FlexTableEventMap["column-add"]>;
19
+ onColumnDelete: EventName<FlexTableEventMap["column-delete"]>;
20
+ onColumnReorder: EventName<FlexTableEventMap["column-reorder"]>;
21
+ onSelectionChange: EventName<FlexTableEventMap["selection-change"]>;
22
+ onClipboardCopy: EventName<FlexTableEventMap["clipboard-copy"]>;
23
+ onClipboardCut: EventName<FlexTableEventMap["clipboard-cut"]>;
24
+ onClipboardPaste: EventName<FlexTableEventMap["clipboard-paste"]>;
25
+ onClipboardError: EventName<FlexTableEventMap["clipboard-error"]>;
26
+ onUndoStateChange: EventName<FlexTableEventMap["undo-state-change"]>;
27
+ onValidationError: EventName<FlexTableEventMap["validation-error"]>;
28
+ onBatchUpdate: EventName<FlexTableEventMap["batch-update"]>;
29
+ onContextMenu: EventName<FlexTableEventMap["context-menu"]>;
30
+ onFilterError: EventName<FlexTableEventMap["filter-error"]>;
31
+ onRowReorder: EventName<FlexTableEventMap["row-reorder"]>;
32
+ onColumnVisibilityChange: EventName<FlexTableEventMap["column-visibility-change"]>;
33
+ onCommentChange: EventName<FlexTableEventMap["comment-change"]>;
34
+ onDataImport: EventName<FlexTableEventMap["data-import"]>;
35
+ onFillHandleApply: EventName<FlexTableEventMap["fill-handle-apply"]>;
36
+ onFindReplace: EventName<FlexTableEventMap["find-replace"]>;
37
+ onHeaderContextMenu: EventName<FlexTableEventMap["header-context-menu"]>;
37
38
  }>;
38
39
  type BaseProps = React.ComponentProps<typeof FlexTableReactBase>;
39
40
  /**
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./flex-table-CoqeYojZ.js";
1
+ import { t as e } from "./flex-table-CpAhHipx.js";
2
2
  import { i as t, t as n } from "./query-Dw4iO0ir.js";
3
3
  import { t as r } from "./view-DiLr-TdY.js";
4
4
  import i, { useCallback as a, useEffect as o, useMemo as s, useRef as c, useState as l } from "react";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iyulab/flex-table",
3
- "version": "0.48.6",
3
+ "version": "0.49.1",
4
4
  "description": "A minimalist, input-centric data grid web component",
5
5
  "type": "module",
6
6
  "main": "./dist/flex-table.js",
@@ -33,6 +33,7 @@
33
33
  },
34
34
  "files": [
35
35
  "dist",
36
+ "!dist/**/*.test.d.ts",
36
37
  "skills",
37
38
  "package.json",
38
39
  "README.md",
@@ -134,6 +134,8 @@ Enter/Escape and blur-to-commit behavior.
134
134
  ## Events
135
135
 
136
136
  All are `CustomEvent`s with `bubbles: true, composed: true`. `row`/`index` are data indices.
137
+ Typed by `FlexTableEventMap` (exported): `table.addEventListener('sort-change', (e) => e.detail.criteria)` needs no
138
+ cast, and the React `on*` props carry the same types.
137
139
 
138
140
  | Event | `detail` |
139
141
  |---|---|
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- import './flex-table.js';
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- import '../flex-table';
@@ -1 +0,0 @@
1
- export {};