import * as React from 'react'; import {augmentBinaryFile, getMimeTypeDescription} from 'packages/web-kitchensink-reactnext/src/utils/blob'; import {formatFileSize, formatNumeral} from 'packages/web-kitchensink-reactnext/src/utils/numeral'; import {useFileMetadata, useFileUrl} from 'src/index'; import clsx from 'clsx'; import {KeyValueTable} from 'categories/information/react'; import {BinaryDataCanvas} from 'packages/react-binary-data-canvas'; import {useClientSide} from 'packages/react-utils'; import type {CommonPreviewProps} from '../../../../../categories/blob/react/src/components/FileSelectBox'; export type BinaryFilePreviewDerivedElement = HTMLDivElement; export interface BinaryFilePreviewProps = Partial> extends React.HTMLProps, CommonPreviewProps {} export const BinaryFilePreview = React.forwardRef(({ file, className, style, enhanced: enhancedProp = false, ...etcProps }, forwardedRef) => { const { fileWithUrl } = useFileUrl({ file }); const { fileWithMetadata, error } = useFileMetadata({ file: fileWithUrl, augmentFunction: augmentBinaryFile, }); const { clientSide } = useClientSide({ clientSide: enhancedProp }); if (!fileWithMetadata) { return null; } return (
{ fileWithMetadata.metadata && (fileWithMetadata.metadata?.contents instanceof ArrayBuffer) && (
{ if (byte < 0x10) { return 'x00'; } if (byte < 0x20) { return 'x10'; } if (byte < 0x30) { return 'x20'; } if (byte < 0x40) { return 'x30'; } if (byte < 0x50) { return 'x40'; } if (byte < 0x60) { return 'x50'; } if (byte < 0x70) { return 'x60'; } if (byte < 0x80) { return 'x70'; } if (byte < 0x90) { return 'x80'; } if (byte < 0xA0) { return 'x90'; } if (byte < 0xB0) { return 'xa0'; } if (byte < 0xC0) { return 'xb0'; } if (byte < 0xD0) { return 'xc0'; } if (byte < 0xE0) { return 'xd0'; } if (byte < 0xF0) { return 'xe0'; } return 'xf0'; }} />
) }
); }); BinaryFilePreview.displayName = 'BinaryFilePreview';