diff --git a/packages/components/package.json b/packages/components/package.json index 05fc19a1..f84d13c0 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -47,6 +47,9 @@ "vega": "5.25.0", "vega-lite": "5.1.0", "vitest": "^0.31.4", + "@react-pdf-viewer/core": "3.6.0", + "@react-pdf-viewer/default-layout": "3.6.0", + "pdfjs-dist": "2.15.349", "xlsx": "^0.18.5" }, "devDependencies": { diff --git a/packages/components/src/components/PdfViewer.tsx b/packages/components/src/components/PdfViewer.tsx new file mode 100644 index 00000000..a4b745b4 --- /dev/null +++ b/packages/components/src/components/PdfViewer.tsx @@ -0,0 +1,32 @@ +// Core viewer +import { Viewer, Worker, SpecialZoomLevel } from '@react-pdf-viewer/core'; +import { defaultLayoutPlugin } from '@react-pdf-viewer/default-layout'; + +// Import styles +import '@react-pdf-viewer/core/lib/styles/index.css'; +import '@react-pdf-viewer/default-layout/lib/styles/index.css'; + +export interface PdfViewerProps { + url: string; + layout: boolean; + parentClassName?: string; +} + +export function PdfViewer({ + url, + layout = false, + parentClassName, +}: PdfViewerProps) { + const defaultLayoutPluginInstance = defaultLayoutPlugin(); + return ( + +
+ +
+
+ ); +} diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 922776a5..60ac6345 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -1,9 +1,10 @@ -export * from "./components/Table"; -export * from "./components/Catalog"; -export * from "./components/LineChart"; -export * from "./components/Vega"; -export * from "./components/VegaLite"; -export * from "./components/FlatUiTable"; +export * from './components/Table'; +export * from './components/Catalog'; +export * from './components/LineChart'; +export * from './components/Vega'; +export * from './components/VegaLite'; +export * from './components/FlatUiTable'; export * from './components/OpenLayers/OpenLayers'; -export * from "./components/Map"; +export * from './components/Map'; +export * from './components/PdfViewer'; export * from "./components/Excel"; diff --git a/packages/components/stories/PdfViewer.stories.ts b/packages/components/stories/PdfViewer.stories.ts new file mode 100644 index 00000000..352109f1 --- /dev/null +++ b/packages/components/stories/PdfViewer.stories.ts @@ -0,0 +1,50 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { PdfViewer, PdfViewerProps } from '../src/components/PdfViewer'; + +const meta: Meta = { + title: 'Components/PdfViewer', + component: PdfViewer, + tags: ['autodocs'], + argTypes: { + url: { + description: 'URL to PDF file', + }, + parentClassName: { + description: 'Classname for the parent div of the pdf viewer', + }, + layour: { + description: + 'Set to true if you want to have a layout with zoom level, page count, printing button etc', + defaultValue: false, + }, + }, +}; + +export default meta; + +type Story = StoryObj; + +export const PdfViewerStory: Story = { + name: 'PdfViewer', + args: { + url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK', + }, +}; + +export const PdfViewerStoryWithLayout: Story = { + name: 'PdfViewer with the default layout', + args: { + url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK', + layout: true, + }, +}; + +export const PdfViewerStoryWithHeight: Story = { + name: 'PdfViewer with a custom height', + args: { + url: 'https://cdn.filestackcontent.com/wcrjf9qPTCKXV3hMXDwK', + parentClassName: 'h-96', + layout: true, + }, +}; diff --git a/packages/components/tailwind.config.js b/packages/components/tailwind.config.js index 98fd9860..b4f4d715 100644 --- a/packages/components/tailwind.config.js +++ b/packages/components/tailwind.config.js @@ -1,6 +1,10 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + content: [ + './index.html', + './src/**/*.{js,ts,jsx,tsx}', + './stories/*.{js,ts,jsx,tsx}', + ], theme: {}, plugins: [], }; diff --git a/packages/components/vite.config.ts b/packages/components/vite.config.ts index 5c7f0705..a675fde4 100644 --- a/packages/components/vite.config.ts +++ b/packages/components/vite.config.ts @@ -4,7 +4,6 @@ import { defineConfig } from 'vitest/config'; import dts from 'vite-plugin-dts'; import tailwindcss from 'tailwindcss'; import { UserConfigExport } from 'vite'; -import replace from 'rollup-plugin-re'; const app = async (): Promise => { return defineConfig({ @@ -37,7 +36,7 @@ const app = async (): Promise => { 'vega', 'react-vega', 'ol', - 'leaflet' + 'leaflet', ], output: { manualChunks: undefined, @@ -48,7 +47,7 @@ const app = async (): Promise => { 'react-vega': 'react-vega', 'react-dom': 'ReactDOM', tailwindcss: 'tailwindcss', - leaflet: 'leaflet' + leaflet: 'leaflet', }, }, },