diff --git a/package.json b/package.json index db27ee5e..2a5f2da2 100644 --- a/package.json +++ b/package.json @@ -53,15 +53,15 @@ "watch:url": "NODE_ENV=development nodemon bin/cli.js https://hyperparam.blob.core.windows.net/hyperparam/starcoderdata-js-00000-of-00065.parquet" }, "dependencies": { - "hightable": "0.15.2", - "hyparquet": "1.13.0", + "hightable": "0.15.4", + "hyparquet": "1.13.1", "hyparquet-compressors": "1.1.1", - "icebird": "0.2.0", + "icebird": "0.3.0", "react": "18.3.1", "react-dom": "18.3.1" }, "devDependencies": { - "@eslint/js": "9.25.1", + "@eslint/js": "9.26.0", "@storybook/addon-essentials": "8.6.12", "@storybook/addon-interactions": "8.6.12", "@storybook/blocks": "8.6.12", @@ -69,25 +69,25 @@ "@storybook/react-vite": "8.6.12", "@storybook/test": "8.6.12", "@testing-library/react": "16.3.0", - "@types/node": "22.14.1", - "@types/react": "19.1.2", + "@types/node": "22.15.17", + "@types/react": "19.1.3", "@types/react-dom": "19.1.3", "@vitejs/plugin-react": "4.4.1", - "@vitest/coverage-v8": "3.1.2", - "eslint": "9.25.1", + "@vitest/coverage-v8": "3.1.3", + "eslint": "9.26.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-react-refresh": "0.4.20", "eslint-plugin-storybook": "0.12.0", - "globals": "16.0.0", + "globals": "16.1.0", "jsdom": "26.1.0", "nodemon": "3.1.10", "npm-run-all": "4.1.5", "storybook": "8.6.12", "typescript": "5.8.3", - "typescript-eslint": "8.31.1", - "vite": "6.3.4", - "vitest": "3.1.2" + "typescript-eslint": "8.32.0", + "vite": "6.3.5", + "vitest": "3.1.3" }, "eslintConfig": { "extends": [ diff --git a/src/components/AvroView/AvroView.tsx b/src/components/AvroView/AvroView.tsx index 6f229b66..71ea3d7f 100644 --- a/src/components/AvroView/AvroView.tsx +++ b/src/components/AvroView/AvroView.tsx @@ -1,4 +1,4 @@ -import { avroData, avroMetadata } from 'icebird' +import { avroMetadata, avroRead } from 'icebird' import { useEffect, useState } from 'react' import type { FileSource } from '../../lib/sources/types.js' import { parseFileSize } from '../../lib/utils.js' @@ -38,7 +38,7 @@ export default function AvroView({ source, setError }: ViewerProps) { const fileSize = parseFileSize(res.headers) ?? buffer.byteLength const reader = { view: new DataView(buffer), offset: 0 } const { metadata, syncMarker } = avroMetadata(reader) - const json = avroData({ reader, metadata, syncMarker }) + const json = avroRead({ reader, metadata, syncMarker }) setError(undefined) setContent({ fileSize }) setJson(json) diff --git a/src/components/ParquetView/ParquetView.tsx b/src/components/ParquetView/ParquetView.tsx index 7caddfb1..f7b76579 100644 --- a/src/components/ParquetView/ParquetView.tsx +++ b/src/components/ParquetView/ParquetView.tsx @@ -78,13 +78,23 @@ export default function ParquetView({ source, setProgress, setError }: ViewerPro return appendSearchParams({ col: col.toString(), row: row.toString() }) }, [routes, sourceId]) + const toggleCell = useCallback((col: number, row: number) => { + setCell(cell => { + if (cell?.col === col && cell.row === row) { + return undefined + } + return { row, col } + }) + }, []) const onDoubleClickCell = useCallback((_event: React.MouseEvent, col: number, row: number) => { - if (cell?.col === col && cell.row === row) { - setCell(undefined) - } else { - setCell({ row, col }) + toggleCell(col, row) + }, [toggleCell]) + const onKeyDownCell = useCallback((event: React.KeyboardEvent, col: number, row: number) => { + if (event.key === 'Enter') { + event.preventDefault() + toggleCell(col, row) } - }, [cell]) + }, [toggleCell]) const onMouseDownCell = useCallback((event: React.MouseEvent, col: number, row: number) => { if (event.button === 1) { // Middle click open in new tab @@ -101,6 +111,7 @@ export default function ParquetView({ source, setProgress, setError }: ViewerPro data={content.dataframe} onDoubleClickCell={onDoubleClickCell} onMouseDownCell={onMouseDownCell} + onKeyDownCell={onKeyDownCell} onError={setError} className={cn(styles.hightable, customClass?.highTable)} />}