@papernote/ui
Version:
A modern React component library with a paper notebook aesthetic - minimal, professional, and expressive
133 lines • 3.94 kB
TypeScript
import React from 'react';
import { CellBase, Matrix } from 'react-spreadsheet';
import './Spreadsheet.css';
export type { CellBase, Matrix } from 'react-spreadsheet';
/**
* Enhanced cell type with formula support
*/
export interface SpreadsheetCell extends CellBase {
value: string | number | boolean;
formula?: string;
readOnly?: boolean;
className?: string;
}
/**
* Spreadsheet component props
*/
export interface SpreadsheetProps {
/** Initial data matrix */
data?: Matrix<SpreadsheetCell>;
/** Callback when data changes */
onChange?: (data: Matrix<SpreadsheetCell>) => void;
/** Number of rows to display */
rows?: number;
/** Number of columns to display */
columns?: number;
/** Column labels (A, B, C... if not provided) */
columnLabels?: string[];
/** Row labels (1, 2, 3... if not provided) */
rowLabels?: string[];
/** Show toolbar with actions */
showToolbar?: boolean;
/**
* Enable Excel import
* @deprecated Excel import has been disabled due to security vulnerabilities in the xlsx library.
* This prop is kept for API compatibility but has no effect.
*/
enableImport?: boolean;
/** Enable Excel export */
enableExport?: boolean;
/** Enable save button */
enableSave?: boolean;
/** Save handler */
onSave?: (data: Matrix<SpreadsheetCell>) => Promise<void> | void;
/** Title to display in toolbar */
title?: string;
/** Additional toolbar actions */
actions?: React.ReactNode;
/** Wrap in Card component */
wrapInCard?: boolean;
/** Custom className for the spreadsheet container */
className?: string;
/** Make entire spreadsheet read-only */
readOnly?: boolean;
/** Default export filename */
exportFileName?: string;
}
/**
* Spreadsheet - Interactive spreadsheet component with formula support
*
* A full-featured spreadsheet component for report designers and data editing.
* Built on react-spreadsheet with Fast Formula Parser (280+ Excel formulas).
*
* **Features:**
* - Excel-like formula support (SUM, AVERAGE, VLOOKUP, IF, etc.)
* - Excel import/export with SheetJS
* - Save/load functionality
* - Keyboard navigation
* - Copy/paste support
* - Customizable styling to match notebook-ui aesthetic
*
* @example
* ```tsx
* // Basic spreadsheet
* <Spreadsheet
* rows={10}
* columns={5}
* showToolbar
* />
*
* // Report designer with formulas
* const [reportData, setReportData] = useState<Matrix<SpreadsheetCell>>([
* [{ value: 'Q1' }, { value: 100 }],
* [{ value: 'Q2' }, { value: 200 }],
* [{ value: 'Total' }, { formula: '=SUM(B1:B2)' }],
* ]);
*
* <Spreadsheet
* data={reportData}
* onChange={setReportData}
* title="Sales Report"
* showToolbar
* enableImport
* enableExport
* enableSave
* onSave={async (data) => {
* await saveReport(data);
* }}
* />
*
* // With custom actions
* <Spreadsheet
* data={data}
* onChange={setData}
* showToolbar
* actions={
* <Button onClick={handleCustomAction}>Custom Action</Button>
* }
* />
* ```
*/
export declare const Spreadsheet: React.FC<SpreadsheetProps>;
/**
* SpreadsheetReport - Pre-configured spreadsheet for report designer
*
* A ready-to-use spreadsheet component specifically designed for building
* and editing reports with formulas, import/export, and save functionality.
*
* @example
* ```tsx
* const [reportData, setReportData] = useState<Matrix<SpreadsheetCell>>();
*
* <SpreadsheetReport
* data={reportData}
* onChange={setReportData}
* title="Monthly Sales Report"
* onSave={async (data) => {
* await api.saveReport(reportId, data);
* }}
* />
* ```
*/
export declare const SpreadsheetReport: React.FC<Omit<SpreadsheetProps, 'showToolbar' | 'enableImport' | 'enableExport' | 'enableSave' | 'wrapInCard'>>;
//# sourceMappingURL=Spreadsheet.d.ts.map