UNPKG

@oslokommune/punkt-react

Version:

React komponentbibliotek til Punkt, et designsystem laget av Oslo Origo

89 lines (88 loc) 3.63 kB
import { ReactElement, ReactNode } from 'react'; import { IFileItem, IFileTransfer, IFileValidateDetail, TFileUploadStrategy, TTransferProgress } from '../../shared-types'; /** Unique identifier assigned to each selected file. */ export type TFileId = string; /** * A selected file plus metadata used by the FileUpload UI. * * Notes: * - A `fileId` is generated automatically if omitted. * - `attributes.targetFilename` is the filename shown in the queue and may be updated by extensions (e.g. rename). * * Implements the shared `IFileItem` type from `shared-types`. */ export declare class FileItem implements IFileItem { fileId: TFileId; file: File; attributes: { targetFilename: string; } & Record<string, unknown>; constructor(file: File, fileId?: TFileId); } /** Internal context used by queue item operations and hidden inputs. */ export type TPktFileUploadContext = { name?: string; multiple: boolean; id?: string; }; export declare const PktFileUploadContext: import('react').Context<TPktFileUploadContext>; /** The value type for `PktFileUpload` (`value` / `defaultValue`). */ export type TFileItemList = Array<FileItem>; /** Transfer status for a file when using `uploadStrategy="custom"` — aliased from `shared-types`. */ export type TFileTransfer = IFileTransfer; /** Upload mode: `form` posts the files on submit, `custom` posts file IDs and uploads separately. */ export type TUploadStrategy = TFileUploadStrategy; /** Detail payload passed to the React `onFileValidate` escape hatch. */ export type TFileValidateDetail = IFileValidateDetail; /** Re-export for parity with Lit types. */ export type { TTransferProgress }; export type TFileAttribute<T> = { get: (fileId: TFileId) => T | undefined; set: (fileId: TFileId, attributeValue: T | undefined) => void; }; export type TFileAttributes = <T>(attributeName: string) => TFileAttribute<T>; /** * Context passed to queue-item operations. Mirrors the Lit * `TQueueOperationContext` so operations authored for one runtime are * trivial to port to the other. */ export type TQueueOperationContext = { file: FileItem; inputName: string; disabled: boolean; isActive: boolean; activate: () => void; close: () => void; getAttribute: <T>(name: string) => T | undefined; setAttribute: (name: string, value: unknown) => void; }; export type TQueueOperationLabel = string | ((fileItem: FileItem) => string); /** * An operation that can be attached to a queue item (rename, comment, remove, etc). * * Must carry a stable `id: string` — symbols are no longer supported. */ export type TQueueItemOperation = { id: string; title: TQueueOperationLabel; ariaLabel?: TQueueOperationLabel; onClick?: (context: TQueueOperationContext) => void; renderInlineUI?: (context: TQueueOperationContext) => ReactNode; renderExtendedUI?: (context: TQueueOperationContext) => ReactNode; renderContent?: (context: TQueueOperationContext) => ReactNode; renderHidden?: (context: TQueueOperationContext) => ReactNode; }; export type TFileAndTransfer = FileItem & Pick<TFileTransfer, 'progress' | 'errorMessage' | 'showProgress' | 'lastProgress'>; export type TTransferItemInProgress = TFileAndTransfer & { progress: number; }; /** * Custom renderer for how a queue item is displayed (e.g. filename vs thumbnail grid). * * Must return a renderable React element (or `null`). */ export type TItemRenderer = (props: { transferItem: TFileAndTransfer; queueItemOperations: Array<TQueueItemOperation>; onPreviewClick?: () => void; }) => ReactElement | null;