@warkypublic/svelix 0.1.42 → 0.1.43
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.
|
@@ -157,6 +157,29 @@
|
|
|
157
157
|
cancelEdit();
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
function getSelectionRowData(sel: Selection): Record<string, unknown>[] | undefined {
|
|
161
|
+
if (!getRowData) return undefined;
|
|
162
|
+
if (sel.type === "cell") {
|
|
163
|
+
const d = getRowData(sel.item[1]);
|
|
164
|
+
return d ? [d] : undefined;
|
|
165
|
+
}
|
|
166
|
+
if (sel.type === "row") {
|
|
167
|
+
const items = sel.rows.map(getRowData).filter((r): r is Record<string, unknown> => r !== undefined);
|
|
168
|
+
return items.length > 0 ? items : undefined;
|
|
169
|
+
}
|
|
170
|
+
if (sel.type === "range") {
|
|
171
|
+
const minRow = Math.min(sel.start[1], sel.end[1]);
|
|
172
|
+
const maxRow = Math.max(sel.start[1], sel.end[1]);
|
|
173
|
+
const items: Record<string, unknown>[] = [];
|
|
174
|
+
for (let i = minRow; i <= maxRow; i++) {
|
|
175
|
+
const d = getRowData(i);
|
|
176
|
+
if (d) items.push(d);
|
|
177
|
+
}
|
|
178
|
+
return items.length > 0 ? items : undefined;
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
|
|
160
183
|
// ── Row toggle (checkbox / number markers) ────────────────────────────────────
|
|
161
184
|
|
|
162
185
|
function handleRowToggle(row: number) {
|
|
@@ -173,7 +196,7 @@
|
|
|
173
196
|
}
|
|
174
197
|
currentSelection = newSel;
|
|
175
198
|
canvasComponent?.setCurrentSelection(newSel);
|
|
176
|
-
onSelectionChange?.(newSel);
|
|
199
|
+
onSelectionChange?.(newSel, getSelectionRowData(newSel));
|
|
177
200
|
}
|
|
178
201
|
|
|
179
202
|
// ── Clipboard ────────────────────────────────────────────────────────────────
|
|
@@ -295,7 +318,7 @@
|
|
|
295
318
|
};
|
|
296
319
|
currentSelection = newSel;
|
|
297
320
|
canvasComponent?.setCurrentSelection(newSel);
|
|
298
|
-
onSelectionChange?.(newSel);
|
|
321
|
+
onSelectionChange?.(newSel, getSelectionRowData(newSel));
|
|
299
322
|
canvasComponent?.setAnnouncement("All cells selected");
|
|
300
323
|
}
|
|
301
324
|
e.preventDefault();
|
|
@@ -386,7 +409,7 @@
|
|
|
386
409
|
const newSel: Selection = { type: "cell", item: newFocusedCell };
|
|
387
410
|
currentSelection = newSel;
|
|
388
411
|
canvasComponent?.setCurrentSelection(newSel);
|
|
389
|
-
onSelectionChange?.(newSel);
|
|
412
|
+
onSelectionChange?.(newSel, getSelectionRowData(newSel));
|
|
390
413
|
canvasComponent?.setAnnouncement(
|
|
391
414
|
`Row ${newRow + 1}, column ${columns[newCol]?.title ?? newCol + 1}`,
|
|
392
415
|
);
|
|
@@ -445,7 +468,7 @@
|
|
|
445
468
|
onVisibleRangeChange={handleVisibleRangeChange}
|
|
446
469
|
onSelectionChange={(sel) => {
|
|
447
470
|
currentSelection = sel;
|
|
448
|
-
onSelectionChange?.(sel);
|
|
471
|
+
onSelectionChange?.(sel, getSelectionRowData(sel));
|
|
449
472
|
onGridEvent?.("selection_changed");
|
|
450
473
|
}}
|
|
451
474
|
onCellDblClick={(item, cell) => {
|
|
@@ -758,7 +758,7 @@
|
|
|
758
758
|
}
|
|
759
759
|
internalSelectedItems = items;
|
|
760
760
|
if (items.length > 0) onSelectedItemsChange?.(items);
|
|
761
|
-
onSelectionChange?.(sel);
|
|
761
|
+
onSelectionChange?.(sel, items.length > 0 ? items : undefined);
|
|
762
762
|
}
|
|
763
763
|
|
|
764
764
|
// ── Settings change event ─────────────────────────────────────────────────
|
|
@@ -155,8 +155,8 @@ export interface GridlerProps extends GridCommonProps<Record<string, unknown>> {
|
|
|
155
155
|
theme?: Partial<GridlerTheme>;
|
|
156
156
|
/** Controlled selection state. */
|
|
157
157
|
selection?: Selection;
|
|
158
|
-
/** Called when the internal selection changes. */
|
|
159
|
-
onSelectionChange?: (selection: Selection) => void;
|
|
158
|
+
/** Called when the internal selection changes. Row data for all selected rows is provided where available. */
|
|
159
|
+
onSelectionChange?: (selection: Selection, rowData?: Record<string, unknown>[]) => void;
|
|
160
160
|
/** Called when the visible row/column range changes (e.g. on scroll). */
|
|
161
161
|
onVisibleRangeChange?: (range: VisibleRange) => void;
|
|
162
162
|
/** When true, all cells are read-only. Also settable via settings.readonly. */
|
|
@@ -41,6 +41,7 @@ This file now tracks the implemented state of the project rather than the origin
|
|
|
41
41
|
### Data and explorer components
|
|
42
42
|
- `Gridler`
|
|
43
43
|
- `GridlerFull`
|
|
44
|
+
- `onSelectionChange(selection, rowData?)` — second arg carries resolved row data for all selected rows (cell, row, range types)
|
|
44
45
|
- `SvarkGrid`
|
|
45
46
|
- `VTree`
|
|
46
47
|
- shared generic grid types and supporting utilities
|
package/llm/gridler-events.md
CHANGED
|
@@ -39,7 +39,7 @@ onGridEvent?: (
|
|
|
39
39
|
| `sort_changed` | Sort order applied or cleared | — | — | — | `{ sortOrder: GridColumnSortOrder }` |
|
|
40
40
|
| `filter_changed` | Filter applied or cleared | — | — | — | `{ filters: GridColumnFilters }` |
|
|
41
41
|
| `search_changed` | Search input value changed | — | — | — | `{ searchValue: string }` |
|
|
42
|
-
| `selection_changed` | Cell, row, range, or column selection changes | — | — | — | — |
|
|
42
|
+
| `selection_changed` | Cell, row, range, or column selection changes | — | — | — | — | (use `onSelectionChange` for the selection object + row data) |
|
|
43
43
|
| `column_moved` | Column dragged to new position | — | — | — | `{ from: number, to: number }` |
|
|
44
44
|
| `column_resized` | Column edge dragged to new width | — | moved column | — | `{ width: number }` |
|
|
45
45
|
| `data_changed` | Cell edited and committed (local mode only) | updated row | edited column | — | `{ data: Row[] }` full new dataset |
|
|
@@ -47,6 +47,55 @@ onGridEvent?: (
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
+
## `onSelectionChange`
|
|
51
|
+
|
|
52
|
+
Fired on every selection change — mouse clicks, arrow-key navigation, Ctrl+A, row-marker toggles.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
onSelectionChange?: (
|
|
56
|
+
selection: Selection,
|
|
57
|
+
rowData?: Record<string, unknown>[], // resolved row data for all selected rows
|
|
58
|
+
) => void
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### `Selection` type
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
type Selection =
|
|
65
|
+
| { type: "none" }
|
|
66
|
+
| { type: "cell"; item: [col, row] }
|
|
67
|
+
| { type: "range"; start: [col, row]; end: [col, row] }
|
|
68
|
+
| { type: "row"; rows: number[] }
|
|
69
|
+
| { type: "column"; columns: number[] }
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### `rowData` population
|
|
73
|
+
|
|
74
|
+
| Selection type | `rowData` |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `cell` | single-element array with the row's data |
|
|
77
|
+
| `row` | array of data for each selected row |
|
|
78
|
+
| `range` | array of data for every row from `start[1]` to `end[1]` |
|
|
79
|
+
| `column` / `none` | `undefined` |
|
|
80
|
+
|
|
81
|
+
`rowData` is `undefined` when no row data can be resolved (column/none selections, or when `getRowData`/`data` is not provided).
|
|
82
|
+
|
|
83
|
+
### Usage
|
|
84
|
+
|
|
85
|
+
```svelte
|
|
86
|
+
<GridlerFull
|
|
87
|
+
{columns}
|
|
88
|
+
{data}
|
|
89
|
+
onSelectionChange={(sel, rowData) => {
|
|
90
|
+
if (sel.type === 'cell') {
|
|
91
|
+
console.log('Selected row:', rowData?.[0]);
|
|
92
|
+
}
|
|
93
|
+
}}
|
|
94
|
+
/>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
50
99
|
## `onCellEvent`
|
|
51
100
|
|
|
52
101
|
```ts
|