@marimo-team/frontend 0.21.2-dev77 → 0.21.2-dev79
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.
- package/dist/assets/{CellStatus-4D4t9Se5.js → CellStatus-BWh3L8zx.js} +1 -1
- package/dist/assets/JsonOutput-CQSoWTC4.js +49 -0
- package/dist/assets/{LazyAnyLanguageCodeMirror-CUh_vzRs.js → LazyAnyLanguageCodeMirror-BTEcIffn.js} +2 -2
- package/dist/assets/{MarimoErrorOutput-J_vzYyfF.js → MarimoErrorOutput-3snr3JrQ.js} +1 -1
- package/dist/assets/{RenderHTML-DVx_CJaM.js → RenderHTML-C9ZqxJ8H.js} +1 -1
- package/dist/assets/{add-cell-with-ai-DW05jmla.js → add-cell-with-ai-u_AX7UAd.js} +1 -1
- package/dist/assets/{add-connection-dialog-DAPvoleG.js → add-connection-dialog-COHTxTf9.js} +1 -1
- package/dist/assets/{agent-panel-B5ZFhjWl.js → agent-panel-CcEQv7FH.js} +1 -1
- package/dist/assets/{ai-model-dropdown-DXkdDtQw.js → ai-model-dropdown-Dybmv5gR.js} +1 -1
- package/dist/assets/{any-language-editor-Dd68WerD.js → any-language-editor-DVOJvjS_.js} +1 -1
- package/dist/assets/{app-config-button-CDhEUKd2.js → app-config-button-BldM7HZH.js} +1 -1
- package/dist/assets/{cell-editor-KjmNYBNd.js → cell-editor-BExD1h53.js} +1 -1
- package/dist/assets/{cell-link-CUJsH4Qt.js → cell-link-DV3G9zVQ.js} +1 -1
- package/dist/assets/{cells-D3d90crn.js → cells-B8rT_yJt.js} +3 -3
- package/dist/assets/{chat-display-Cydxvy57.js → chat-display-DSlMdLnv.js} +1 -1
- package/dist/assets/{chat-panel-CnuHNef3.js → chat-panel-BhurwxDK.js} +1 -1
- package/dist/assets/{chat-ui-DhcktjN6.js → chat-ui-BL1vsaOH.js} +1 -1
- package/dist/assets/{column-preview-CPBNo3h2.js → column-preview-BEoyw-go.js} +1 -1
- package/dist/assets/{command-CKa4yQEB.js → command-DvKBTmQJ.js} +1 -1
- package/dist/assets/{command-palette-CRiPRNeS.js → command-palette-pDgtiL0o.js} +1 -1
- package/dist/assets/{common-oy4UCqe2.js → common-MJu6yCEK.js} +1 -1
- package/dist/assets/{components-ZL3KSgMv.js → components-CWfQv9p5.js} +1 -1
- package/dist/assets/{components-DWwg8zgi.js → components-fIfcCZSp.js} +1 -1
- package/dist/assets/{context-aware-panel-B6Ooz9Lw.js → context-aware-panel-DJFzC2uh.js} +1 -1
- package/dist/assets/{datasource-BKNy10yM.js → datasource-xomiPYKd.js} +1 -1
- package/dist/assets/{dependency-graph-panel--USfW8LF.js → dependency-graph-panel-B24Gr6L4.js} +1 -1
- package/dist/assets/{dist-CtwZk3-9.js → dist-030LgPdB.js} +1 -1
- package/dist/assets/{dist-D0u6iH16.js → dist-1ZGGzJka.js} +1 -1
- package/dist/assets/{dist-CD2iFgV9.js → dist-4rKUx1vk.js} +1 -1
- package/dist/assets/dist-BBGASQNR.js +1 -0
- package/dist/assets/{dist-BXJ3fDZF.js → dist-BKkfH6MG.js} +1 -1
- package/dist/assets/dist-BPKAv9Tp.js +1 -0
- package/dist/assets/dist-BRCCPMsT.js +1 -0
- package/dist/assets/{dist-CyIcJpsa.js → dist-BXtR56No.js} +1 -1
- package/dist/assets/{dist-Cr4DBs1J.js → dist-BZJrw9vI.js} +1 -1
- package/dist/assets/{dist-B8C_eg-r.js → dist-B_cxg-E4.js} +11 -11
- package/dist/assets/{dist-1xshPfUL.js → dist-Bh-vrbeU.js} +1 -1
- package/dist/assets/{dist-DWPT6HNN.js → dist-BrZ_53nc.js} +1 -1
- package/dist/assets/{dist-D8gpRGBx.js → dist-C9G2F7Z1.js} +1 -1
- package/dist/assets/{dist-CTbQ-BIR.js → dist-CEeVCRd_.js} +1 -1
- package/dist/assets/dist-CFY2_7zu.js +1 -0
- package/dist/assets/dist-CJ8RtgvK.js +1 -0
- package/dist/assets/dist-CKgHI4pK.js +1 -0
- package/dist/assets/dist-COABhHhr.js +1 -0
- package/dist/assets/{dist-C7LdPk_u.js → dist-CRmIdrta.js} +1 -1
- package/dist/assets/{dist-GpTdRCER.js → dist-CTTKEfeu.js} +1 -1
- package/dist/assets/dist-Cp7t_Bws.js +1 -0
- package/dist/assets/dist-CtXb4bUU.js +2 -0
- package/dist/assets/dist-CueE_NHP.js +1 -0
- package/dist/assets/{dist-hU6zxLMp.js → dist-CwHZ5Z_A.js} +1 -1
- package/dist/assets/{dist-bjNxb2zu.js → dist-CwjzLMbM.js} +1 -1
- package/dist/assets/{dist-avBkgR1-.js → dist-D0Vj4Kqc.js} +1 -1
- package/dist/assets/{dist-Ekqk7Je0.js → dist-D699xT6P.js} +1 -1
- package/dist/assets/{dist-DiGcGOAW.js → dist-DA4gn7fy.js} +1 -1
- package/dist/assets/{dist-B0eVr-Dy.js → dist-DBBqNJ3C.js} +1 -1
- package/dist/assets/{dist-BZciZZkq.js → dist-DKnn_Tta.js} +1 -1
- package/dist/assets/dist-DROvTz9O.js +1 -0
- package/dist/assets/dist-DWBTB8aa.js +1 -0
- package/dist/assets/{dist-CDZ4_qwn.js → dist-DbWhwe76.js} +1 -1
- package/dist/assets/dist-DeX768Hg.js +1 -0
- package/dist/assets/{dist-C7M_d4Do.js → dist-DmMcU97h.js} +1 -1
- package/dist/assets/dist-DrDZNjDr.js +1 -0
- package/dist/assets/{dist-CJiSj3UX.js → dist-DvbdggRI.js} +1 -1
- package/dist/assets/{dist-DlOT-x3-.js → dist-JipYR0-e.js} +1 -1
- package/dist/assets/dist-LxLdJkvD.js +1 -0
- package/dist/assets/{dist-DLGHskqp.js → dist-SDxzhwJU.js} +1 -1
- package/dist/assets/dist-VjWmUZA0.js +1 -0
- package/dist/assets/dist-X-byYzEZ.js +1 -0
- package/dist/assets/dist-Xnna0a3m.js +1 -0
- package/dist/assets/{dist-BdL_qHYN.js → dist-epQooxQL.js} +1 -1
- package/dist/assets/dist-y02bFELW.js +1 -0
- package/dist/assets/{documentation-panel-5DuYRVpR.js → documentation-panel-DHLN-LCs.js} +1 -1
- package/dist/assets/{download-B2JL3FPf.js → download-CNJtCoWG.js} +1 -1
- package/dist/assets/{edit-page-DfGN5LkL.js → edit-page-D0G0qKOk.js} +3 -3
- package/dist/assets/{error-panel-CIYHoFDO.js → error-panel-BprMlRWd.js} +1 -1
- package/dist/assets/{esm-CoDEg_kt.js → esm-BMWduMhT.js} +1 -1
- package/dist/assets/{esm-zS5lBxz4.js → esm-BjKAkBIt.js} +1 -1
- package/dist/assets/{file-explorer-panel-C5juz5FN.js → file-explorer-panel-DschbL1I.js} +1 -1
- package/dist/assets/{file-icons-czkv18pY.js → file-icons-I3TgHXBH.js} +1 -1
- package/dist/assets/{floating-outline-Bx41Ogvx.js → floating-outline-BUsBWnrz.js} +1 -1
- package/dist/assets/{focus-KRgSpKIE.js → focus-DWfOBGUg.js} +1 -1
- package/dist/assets/{form-BpdTXD_T.js → form-DNvI4VkE.js} +1 -1
- package/dist/assets/{globals-CZsfDi9Q.js → globals-B7uZUVXG.js} +1 -1
- package/dist/assets/{home-page-XfqMC-k1.js → home-page-B1ioyqaQ.js} +1 -1
- package/dist/assets/{hooks-Yfiwwbz5.js → hooks-dmmemJB9.js} +1 -1
- package/dist/assets/{html-to-image-BKYNhmqD.js → html-to-image-BtnUxAf2.js} +1 -1
- package/dist/assets/{index-DV3al739.js → index-aCOJQiAd.js} +4 -4
- package/dist/assets/{kiosk-mode-C16509ZW.js → kiosk-mode-DvjY7Q8k.js} +1 -1
- package/dist/assets/{layout-C_2FnBzQ.js → layout-BJa4d_WQ.js} +1 -1
- package/dist/assets/{logs-panel-ZXqTa5b8.js → logs-panel-Iivn5vVF.js} +1 -1
- package/dist/assets/{markdown-renderer-BqnSkpMX.js → markdown-renderer-f7AvSa1a.js} +1 -1
- package/dist/assets/{name-cell-input-BGh_NBkP.js → name-cell-input-CzVNuMqK.js} +1 -1
- package/dist/assets/{outline-panel-9Y7Q0KI9.js → outline-panel-QyE6tr_2.js} +1 -1
- package/dist/assets/{packages-panel-BJGVP3jn.js → packages-panel-D9pbtgFY.js} +1 -1
- package/dist/assets/{panels-DsPJWTv2.js → panels-CqWMsuFv.js} +1 -1
- package/dist/assets/{process-output-BRgFATKG.js → process-output-5fC8hAfT.js} +1 -1
- package/dist/assets/{readonly-python-code-CjFy5OHl.js → readonly-python-code-CvuT43MO.js} +1 -1
- package/dist/assets/{run-page-BrRRKiC4.js → run-page-BtXltq0k.js} +1 -1
- package/dist/assets/{scratchpad-panel-B8WYJRWc.js → scratchpad-panel-i-qE-Pfc.js} +1 -1
- package/dist/assets/{session-panel-CHHY9VOz.js → session-panel-CL3OYqfu.js} +1 -1
- package/dist/assets/{snippets-panel-X_jZzShK.js → snippets-panel-Cn-0B9yk.js} +1 -1
- package/dist/assets/{state-4QyTnTMc.js → state-DLmIk5GZ.js} +1 -1
- package/dist/assets/{switch-BPjRwF9v.js → switch-CdyDieX7.js} +1 -1
- package/dist/assets/{textarea-C5wPsFgU.js → textarea-y9GCP54I.js} +1 -1
- package/dist/assets/{tracing-DBH1SUb1.js → tracing-CggYKKpk.js} +1 -1
- package/dist/assets/{tracing-panel-D1han9g0.js → tracing-panel-BYfwYVLg.js} +2 -2
- package/dist/assets/{useAddCell-Cd-c9fz3.js → useAddCell-BGHDEB1g.js} +1 -1
- package/dist/assets/{useCellActionButton-B45cjFLa.js → useCellActionButton-BbGQe83V.js} +1 -1
- package/dist/assets/{useDeleteCell-DVXZOIwJ.js → useDeleteCell-DG1VBfwX.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-Bwlgmsum.js → useDependencyPanelTab-luj9RYTO.js} +1 -1
- package/dist/assets/{useNotebookActions-BZ6aaIhX.js → useNotebookActions-DN_VG9PO.js} +1 -1
- package/dist/assets/{useRunCells-D5eTD8tT.js → useRunCells--USKPEQy.js} +1 -1
- package/dist/assets/{useSplitCell-Bi4Ew2Lt.js → useSplitCell-DGXfa81A.js} +1 -1
- package/dist/index.html +36 -36
- package/package.json +2 -1
- package/src/__tests__/setup.ts +15 -0
- package/src/components/data-table/TableActions.tsx +8 -2
- package/src/components/data-table/__tests__/data-table.test.tsx +63 -0
- package/src/components/data-table/data-table.tsx +10 -31
- package/src/components/data-table/hooks/use-scroll-container-height.ts +97 -0
- package/src/components/data-table/renderers.tsx +103 -46
- package/src/components/data-table/types.ts +14 -0
- package/src/core/islands/main.ts +0 -1
- package/src/core/websocket/useMarimoKernelConnection.tsx +1 -10
- package/dist/assets/JsonOutput-BVgaYt_7.js +0 -46
- package/dist/assets/dist-B7NwbXlb.js +0 -1
- package/dist/assets/dist-BDiiLamW.js +0 -2
- package/dist/assets/dist-BRF5jPsH.js +0 -1
- package/dist/assets/dist-BVFwO-BJ.js +0 -1
- package/dist/assets/dist-Bq3Z0YJc.js +0 -1
- package/dist/assets/dist-C2UCjrCj.js +0 -1
- package/dist/assets/dist-C5G9yFjI.js +0 -1
- package/dist/assets/dist-CDNIv_aA.js +0 -1
- package/dist/assets/dist-CRRNYOP4.js +0 -1
- package/dist/assets/dist-CVcK0lpx.js +0 -1
- package/dist/assets/dist-D5IpadHf.js +0 -1
- package/dist/assets/dist-D6UcS85E.js +0 -1
- package/dist/assets/dist-D7D_TkHI.js +0 -1
- package/dist/assets/dist-DBiFepQi.js +0 -1
- package/dist/assets/dist-DDcAAms9.js +0 -1
- package/dist/assets/dist-DboypqFS.js +0 -1
- package/dist/assets/dist-DucJ1hOW.js +0 -1
- package/dist/assets/dist-H-uU4H82.js +0 -1
- package/dist/assets/dist-JLLCRw8G.js +0 -1
|
@@ -11,7 +11,8 @@ import {
|
|
|
11
11
|
type Table,
|
|
12
12
|
type Table as TanStackTable,
|
|
13
13
|
} from "@tanstack/react-table";
|
|
14
|
-
import {
|
|
14
|
+
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
15
|
+
import { type JSX, useLayoutEffect, useRef, useState } from "react";
|
|
15
16
|
import useEvent from "react-use-event-hook";
|
|
16
17
|
import {
|
|
17
18
|
TableBody,
|
|
@@ -27,6 +28,7 @@ import { DataTableContextMenu } from "./context-menu";
|
|
|
27
28
|
import { CellRangeSelectionIndicator } from "./range-focus/cell-selection-indicator";
|
|
28
29
|
import { useCellRangeSelection } from "./range-focus/use-cell-range-selection";
|
|
29
30
|
import { useScrollIntoViewOnFocus } from "./range-focus/use-scroll-into-view";
|
|
31
|
+
import { TABLE_ROW_HEIGHT_PX } from "./types";
|
|
30
32
|
import { stringifyUnknownValue } from "./utils";
|
|
31
33
|
|
|
32
34
|
export function renderTableHeader<TData>(
|
|
@@ -79,6 +81,7 @@ interface DataTableBodyProps<TData> {
|
|
|
79
81
|
rowViewerPanelOpen: boolean;
|
|
80
82
|
getRowIndex?: (row: TData, idx: number) => number;
|
|
81
83
|
viewedRowIdx?: number;
|
|
84
|
+
virtualize?: boolean;
|
|
82
85
|
}
|
|
83
86
|
|
|
84
87
|
export const DataTableBody = <TData,>({
|
|
@@ -87,9 +90,30 @@ export const DataTableBody = <TData,>({
|
|
|
87
90
|
rowViewerPanelOpen,
|
|
88
91
|
getRowIndex,
|
|
89
92
|
viewedRowIdx,
|
|
93
|
+
virtualize = false,
|
|
90
94
|
}: DataTableBodyProps<TData>) => {
|
|
91
|
-
|
|
95
|
+
const rows = table.getRowModel().rows;
|
|
96
|
+
|
|
97
|
+
// Find the scroll container (tbody -> table -> overflow-auto wrapper div).
|
|
98
|
+
// Using useState so that when the element becomes available after mount,
|
|
99
|
+
// useVirtualizer re-observes the correct element.
|
|
100
|
+
const [scrollElement, setScrollElement] = useState<HTMLElement | null>(null);
|
|
92
101
|
const tableRef = useRef<HTMLTableSectionElement>(null);
|
|
102
|
+
useLayoutEffect(() => {
|
|
103
|
+
// tbody.parentElement = table, table.parentElement = overflow wrapper
|
|
104
|
+
setScrollElement(tableRef.current?.parentElement?.parentElement ?? null);
|
|
105
|
+
}, []);
|
|
106
|
+
|
|
107
|
+
// Always call useVirtualizer (rules of hooks); count=0 when not virtualizing
|
|
108
|
+
const virtualizer = useVirtualizer({
|
|
109
|
+
count: virtualize ? rows.length : 0,
|
|
110
|
+
getScrollElement: () => scrollElement,
|
|
111
|
+
estimateSize: () => TABLE_ROW_HEIGHT_PX,
|
|
112
|
+
overscan: 10,
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Automatically scroll focused cells into view.
|
|
116
|
+
// In virtual mode, off-screen cells won't be in the DOM so this silently no-ops for them.
|
|
93
117
|
useScrollIntoViewOnFocus(tableRef);
|
|
94
118
|
|
|
95
119
|
const {
|
|
@@ -172,57 +196,90 @@ export const DataTableBody = <TData,>({
|
|
|
172
196
|
|
|
173
197
|
const hoverTemplate = table.getState().cellHoverTemplate || null;
|
|
174
198
|
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
199
|
+
const renderRow = (row: Row<TData>) => {
|
|
200
|
+
// Only find the row index if the row viewer panel is open
|
|
201
|
+
const rowIndex = rowViewerPanelOpen
|
|
202
|
+
? (getRowIndex?.(row.original, row.index) ?? row.index)
|
|
203
|
+
: undefined;
|
|
204
|
+
const isRowViewedInPanel = rowViewerPanelOpen && viewedRowIdx === rowIndex;
|
|
205
|
+
|
|
206
|
+
// Compute hover title once per row using all visible cells
|
|
207
|
+
let rowTitle: string | undefined;
|
|
208
|
+
if (hoverTemplate) {
|
|
209
|
+
const visibleCells = row.getVisibleCells?.() ?? [
|
|
210
|
+
...row.getLeftVisibleCells(),
|
|
211
|
+
...row.getCenterVisibleCells(),
|
|
212
|
+
...row.getRightVisibleCells(),
|
|
213
|
+
];
|
|
214
|
+
rowTitle = applyHoverTemplate(hoverTemplate, visibleCells);
|
|
215
|
+
}
|
|
185
216
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
217
|
+
return (
|
|
218
|
+
<TableRow
|
|
219
|
+
key={row.id}
|
|
220
|
+
data-state={row.getIsSelected() && "selected"}
|
|
221
|
+
title={rowTitle}
|
|
222
|
+
// These classes ensure that empty rows (nulls) still render
|
|
223
|
+
className={cn(
|
|
224
|
+
"border-t h-6",
|
|
225
|
+
rowViewerPanelOpen && "cursor-pointer",
|
|
226
|
+
isRowViewedInPanel &&
|
|
227
|
+
"bg-(--blue-3) hover:bg-(--blue-3) data-[state=selected]:bg-(--blue-4)",
|
|
228
|
+
)}
|
|
229
|
+
onClick={() => handleRowClick(row)}
|
|
230
|
+
>
|
|
231
|
+
{renderCells(row.getLeftVisibleCells())}
|
|
232
|
+
{renderCells(row.getCenterVisibleCells())}
|
|
233
|
+
{renderCells(row.getRightVisibleCells())}
|
|
234
|
+
</TableRow>
|
|
235
|
+
);
|
|
236
|
+
};
|
|
198
237
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
data-state={row.getIsSelected() && "selected"}
|
|
203
|
-
title={rowTitle}
|
|
204
|
-
// These classes ensure that empty rows (nulls) still render
|
|
205
|
-
className={cn(
|
|
206
|
-
"border-t h-6",
|
|
207
|
-
rowViewerPanelOpen && "cursor-pointer",
|
|
208
|
-
isRowViewedInPanel &&
|
|
209
|
-
"bg-(--blue-3) hover:bg-(--blue-3) data-[state=selected]:bg-(--blue-4)",
|
|
210
|
-
)}
|
|
211
|
-
onClick={() => handleRowClick(row)}
|
|
212
|
-
>
|
|
213
|
-
{renderCells(row.getLeftVisibleCells())}
|
|
214
|
-
{renderCells(row.getCenterVisibleCells())}
|
|
215
|
-
{renderCells(row.getRightVisibleCells())}
|
|
216
|
-
</TableRow>
|
|
217
|
-
);
|
|
218
|
-
})
|
|
219
|
-
) : (
|
|
238
|
+
const renderRows = () => {
|
|
239
|
+
if (rows.length === 0) {
|
|
240
|
+
return (
|
|
220
241
|
<TableRow>
|
|
221
242
|
<TableCell colSpan={columns.length} className="h-24 text-center">
|
|
222
243
|
No results.
|
|
223
244
|
</TableCell>
|
|
224
245
|
</TableRow>
|
|
225
|
-
)
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (virtualize) {
|
|
250
|
+
const virtualItems = virtualizer.getVirtualItems();
|
|
251
|
+
const totalSize = virtualizer.getTotalSize();
|
|
252
|
+
return (
|
|
253
|
+
<>
|
|
254
|
+
{virtualItems[0]?.start > 0 && (
|
|
255
|
+
<tr
|
|
256
|
+
data-virtual-spacer=""
|
|
257
|
+
style={{ height: virtualItems[0].start }}
|
|
258
|
+
>
|
|
259
|
+
<td colSpan={columns.length} />
|
|
260
|
+
</tr>
|
|
261
|
+
)}
|
|
262
|
+
{virtualItems.map((vItem) => renderRow(rows[vItem.index]))}
|
|
263
|
+
{virtualItems.length > 0 && (
|
|
264
|
+
<tr
|
|
265
|
+
data-virtual-spacer=""
|
|
266
|
+
style={{
|
|
267
|
+
height: totalSize - (virtualItems.at(-1)?.end ?? totalSize),
|
|
268
|
+
}}
|
|
269
|
+
>
|
|
270
|
+
<td colSpan={columns.length} />
|
|
271
|
+
</tr>
|
|
272
|
+
)}
|
|
273
|
+
</>
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return rows.map((row) => renderRow(row));
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const tableBody = (
|
|
281
|
+
<TableBody onKeyDown={handleCellsKeyDown} ref={tableRef}>
|
|
282
|
+
{renderRows()}
|
|
226
283
|
</TableBody>
|
|
227
284
|
);
|
|
228
285
|
|
|
@@ -10,6 +10,20 @@ declare module "@tanstack/react-table" {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
// Pixel heights derived from Tailwind classes applied to table elements.
|
|
14
|
+
// row: h-6 = 24px (TableRow in renderers.tsx)
|
|
15
|
+
// header: min-h-10 = 40px (TableHead in renderers.tsx)
|
|
16
|
+
export const TABLE_ROW_HEIGHT_PX = 24;
|
|
17
|
+
export const TABLE_HEADER_HEIGHT_PX = 40;
|
|
18
|
+
|
|
19
|
+
// Default number of visible rows when virtualizing without an explicit maxHeight.
|
|
20
|
+
export const DEFAULT_VIRTUAL_ROWS = 15;
|
|
21
|
+
|
|
22
|
+
// Minimum row count before virtualization kicks in. Below this threshold the
|
|
23
|
+
// DOM overhead is negligible and the virtualizer's measurement cost isn't
|
|
24
|
+
// worth it. Must be greater than DEFAULT_VIRTUAL_ROWS.
|
|
25
|
+
export const MIN_ROWS_TO_VIRTUALIZE = 100;
|
|
26
|
+
|
|
13
27
|
export type ColumnName = string;
|
|
14
28
|
|
|
15
29
|
export const ColumnHeaderStatsKeys = [
|
package/src/core/islands/main.ts
CHANGED
|
@@ -97,7 +97,7 @@ export function useMarimoKernelConnection(opts: {
|
|
|
97
97
|
const { autoInstantiate, sessionId, setCells } = opts;
|
|
98
98
|
const { showBoundary } = useErrorBoundary();
|
|
99
99
|
|
|
100
|
-
const { handleCellMessage,
|
|
100
|
+
const { handleCellMessage, setCellIds } = useCellActions();
|
|
101
101
|
const actionsWithoutMiddleware = useCellActions({ skipMiddleware: true });
|
|
102
102
|
|
|
103
103
|
const handleDocumentTransaction = (
|
|
@@ -328,15 +328,6 @@ export function useMarimoKernelConnection(opts: {
|
|
|
328
328
|
case "focus-cell":
|
|
329
329
|
focusAndScrollCellOutputIntoView(msg.data.cell_id);
|
|
330
330
|
return;
|
|
331
|
-
case "update-cell-codes":
|
|
332
|
-
setCellCodes({
|
|
333
|
-
codes: msg.data.codes,
|
|
334
|
-
ids: msg.data.cell_ids,
|
|
335
|
-
codeIsStale: msg.data.code_is_stale,
|
|
336
|
-
names: msg.data.names,
|
|
337
|
-
configs: msg.data.configs,
|
|
338
|
-
});
|
|
339
|
-
return;
|
|
340
331
|
case "update-cell-ids":
|
|
341
332
|
setCellIds({ cellIds: msg.data.cell_ids });
|
|
342
333
|
return;
|