Merge branch 'main' into feature/settingsFlagToHideSettings
|
Before Width: | Height: | Size: 628 KiB After Width: | Height: | Size: 717 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 229 KiB |
|
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 406 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { Accordion, Stack, Text } from '@mantine/core';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import type { PdfOtherInfo } from '@app/types/getPdfInfo';
|
||||
import type { PdfOtherInfo, PdfAttachmentInfo, PdfEmbeddedFileInfo } from '@app/types/getPdfInfo';
|
||||
import SectionBlock from '@app/components/tools/getPdfInfo/shared/SectionBlock';
|
||||
import ScrollableCodeBlock from '@app/components/tools/getPdfInfo/shared/ScrollableCodeBlock';
|
||||
import { pdfInfoAccordionStyles } from '@app/components/tools/getPdfInfo/shared/accordionStyles';
|
||||
@@ -11,6 +11,42 @@ interface OtherSectionProps {
|
||||
other?: PdfOtherInfo | null;
|
||||
}
|
||||
|
||||
const renderAttachmentsList = (attachments: PdfAttachmentInfo[] | undefined, emptyText: string) => {
|
||||
if (!attachments || attachments.length === 0) return <Text size="sm" c="dimmed">{emptyText}</Text>;
|
||||
return (
|
||||
<Stack gap={4}>
|
||||
{attachments.map((attachment, idx) => (
|
||||
<div key={idx} style={{ wordBreak: 'break-word', overflowWrap: 'break-word' }}>
|
||||
<Text size="sm" c="dimmed">
|
||||
<strong>{attachment.Name || 'Unnamed attachment'}</strong>
|
||||
{attachment.Description && ` - ${attachment.Description}`}
|
||||
{attachment.FileSize != null && ` (${attachment.FileSize} bytes)`}
|
||||
</Text>
|
||||
</div>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const renderEmbeddedFilesList = (embeddedFiles: PdfEmbeddedFileInfo[] | undefined, emptyText: string) => {
|
||||
if (!embeddedFiles || embeddedFiles.length === 0) return <Text size="sm" c="dimmed">{emptyText}</Text>;
|
||||
return (
|
||||
<Stack gap={4}>
|
||||
{embeddedFiles.map((file, idx) => (
|
||||
<div key={idx} style={{ wordBreak: 'break-word', overflowWrap: 'break-word' }}>
|
||||
<Text size="sm" c="dimmed">
|
||||
<strong>{file.Name || 'Unnamed file'}</strong>
|
||||
{file.FileSize != null && ` (${file.FileSize} bytes)`}
|
||||
{file.MimeType && ` - ${file.MimeType}`}
|
||||
{file.CreationDate && ` - Created: ${file.CreationDate}`}
|
||||
{file.ModificationDate && ` - Modified: ${file.ModificationDate}`}
|
||||
</Text>
|
||||
</div>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const renderList = (arr: unknown[] | undefined, emptyText: string) => {
|
||||
if (!arr || arr.length === 0) return <Text size="sm" c="dimmed">{emptyText}</Text>;
|
||||
return (
|
||||
@@ -37,11 +73,11 @@ const OtherSection: React.FC<OtherSectionProps> = ({ anchorId, other }) => {
|
||||
<Stack gap="sm">
|
||||
<Stack gap={6}>
|
||||
<Text fw={600} size="sm">{t('getPdfInfo.other.attachments', 'Attachments')}</Text>
|
||||
{renderList(other?.Attachments, noneDetected)}
|
||||
{renderAttachmentsList(other?.Attachments, noneDetected)}
|
||||
</Stack>
|
||||
<Stack gap={6}>
|
||||
<Text fw={600} size="sm">{t('getPdfInfo.other.embeddedFiles', 'Embedded Files')}</Text>
|
||||
{renderList(other?.EmbeddedFiles, noneDetected)}
|
||||
{renderEmbeddedFilesList(other?.EmbeddedFiles, noneDetected)}
|
||||
</Stack>
|
||||
<Stack gap={6}>
|
||||
<Text fw={600} size="sm">{t('getPdfInfo.other.javaScript', 'JavaScript')}</Text>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { Accordion, Stack, Text } from '@mantine/core';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import type { PdfPerPageInfo, PdfPageInfo, PdfFontInfo } from '@app/types/getPdfInfo';
|
||||
import type { PdfPerPageInfo, PdfPageInfo, PdfFontInfo, PdfImageInfo } from '@app/types/getPdfInfo';
|
||||
import SectionBlock from '@app/components/tools/getPdfInfo/shared/SectionBlock';
|
||||
import KeyValueList from '@app/components/tools/getPdfInfo/shared/KeyValueList';
|
||||
import { pdfInfoAccordionStyles } from '@app/components/tools/getPdfInfo/shared/accordionStyles';
|
||||
@@ -11,6 +11,23 @@ interface PerPageSectionProps {
|
||||
perPage?: PdfPerPageInfo | null;
|
||||
}
|
||||
|
||||
const renderImagesList = (images: PdfImageInfo[] | undefined, emptyText: string) => {
|
||||
if (!images || images.length === 0) return <Text size="sm" c="dimmed">{emptyText}</Text>;
|
||||
return (
|
||||
<Stack gap={4}>
|
||||
{images.map((image, idx) => (
|
||||
<div key={idx} style={{ wordBreak: 'break-word', overflowWrap: 'break-word' }}>
|
||||
<Text size="sm" c="dimmed">
|
||||
{image.Name ? `${image.Name} ` : 'Image '}
|
||||
({image.Width}×{image.Height}px
|
||||
{image.ColorSpace ? `, ${image.ColorSpace}` : ''})
|
||||
</Text>
|
||||
</div>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const renderList = (arr: unknown[] | undefined, emptyText: string) => {
|
||||
if (!arr || arr.length === 0) return <Text size="sm" c="dimmed">{emptyText}</Text>;
|
||||
return (
|
||||
@@ -84,7 +101,7 @@ const PerPageSection: React.FC<PerPageSectionProps> = ({ anchorId, perPage }) =>
|
||||
)}
|
||||
<Stack gap={4}>
|
||||
<Text fw={600} size="sm">{t('getPdfInfo.perPage.images', 'Images')}</Text>
|
||||
{renderList(pageInfo?.Images, noneDetected)}
|
||||
{renderImagesList(pageInfo?.Images, noneDetected)}
|
||||
</Stack>
|
||||
<Stack gap={4}>
|
||||
<Text fw={600} size="sm">{t('getPdfInfo.perPage.links', 'Links')}</Text>
|
||||
|
||||
@@ -160,12 +160,16 @@ export interface PdfPerPageInfo {
|
||||
export interface PdfEmbeddedFileInfo {
|
||||
Name?: string;
|
||||
FileSize?: number;
|
||||
MimeType?: string;
|
||||
CreationDate?: string;
|
||||
ModificationDate?: string;
|
||||
}
|
||||
|
||||
/** Attachment info */
|
||||
export interface PdfAttachmentInfo {
|
||||
Name?: string;
|
||||
Description?: string;
|
||||
FileSize?: number;
|
||||
}
|
||||
|
||||
/** JavaScript info */
|
||||
|
||||