@pallasoft/ps-file-components 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/components/index.d.ts +12 -0
  2. package/dist/components/index.js +28 -0
  3. package/dist/components/ps-file-delete-confirm.js +1 -1
  4. package/dist/components/ps-file-icon-button.d.ts +12 -0
  5. package/dist/components/ps-file-icon-button.js +13 -0
  6. package/dist/components/ps-file-list.js +2 -2
  7. package/dist/components/ps-file-viewer-button.d.ts +2 -1
  8. package/dist/components/ps-progress-bar.d.ts +2 -1
  9. package/dist/components/ps-progress-bar.js +2 -6
  10. package/dist/components/ps-upload-modal.js +2 -5
  11. package/dist/components/ps-upload-row.js +6 -10
  12. package/dist/components/viewers/index.d.ts +8 -0
  13. package/dist/components/viewers/index.js +24 -0
  14. package/dist/components/viewers/ps-pdf-viewer.js +0 -4
  15. package/dist/constants/index.d.ts +15 -0
  16. package/dist/constants/index.js +31 -0
  17. package/dist/constants/ps-file-icon-button-classes.d.ts +2 -0
  18. package/dist/constants/ps-file-icon-button-classes.js +7 -0
  19. package/dist/constants/ps-file-viewer-labels.d.ts +2 -2
  20. package/dist/constants/ps-file-viewer-labels.js +2 -2
  21. package/dist/constants/ps-progress-tone-classes.d.ts +2 -0
  22. package/dist/constants/ps-progress-tone-classes.js +8 -0
  23. package/dist/constants/ps-upload-labels.d.ts +7 -5
  24. package/dist/constants/ps-upload-labels.js +7 -5
  25. package/dist/constants/ps-upload-status-tones.d.ts +2 -1
  26. package/dist/esm/components/index.js +12 -0
  27. package/dist/esm/components/ps-file-delete-confirm.js +1 -1
  28. package/dist/esm/components/ps-file-icon-button.js +9 -0
  29. package/dist/esm/components/ps-file-list.js +3 -3
  30. package/dist/esm/components/ps-progress-bar.js +2 -6
  31. package/dist/esm/components/ps-upload-modal.js +2 -5
  32. package/dist/esm/components/ps-upload-row.js +6 -10
  33. package/dist/esm/components/viewers/index.js +8 -0
  34. package/dist/esm/components/viewers/ps-pdf-viewer.js +0 -4
  35. package/dist/esm/constants/index.js +15 -0
  36. package/dist/esm/constants/ps-file-icon-button-classes.js +4 -0
  37. package/dist/esm/constants/ps-file-viewer-labels.js +2 -2
  38. package/dist/esm/constants/ps-progress-tone-classes.js +5 -0
  39. package/dist/esm/constants/ps-upload-labels.js +7 -5
  40. package/dist/esm/hooks/index.js +4 -0
  41. package/dist/esm/index.js +5 -62
  42. package/dist/esm/models/index.js +22 -0
  43. package/dist/esm/models/ps-file-icon-button-tone.js +1 -0
  44. package/dist/esm/models/ps-file-viewer-button-tone.js +1 -0
  45. package/dist/esm/models/ps-progress-tone.js +1 -0
  46. package/dist/esm/services/index.js +8 -0
  47. package/dist/esm/services/ps-pdf-service.js +5 -2
  48. package/dist/hooks/index.d.ts +4 -0
  49. package/dist/hooks/index.js +20 -0
  50. package/dist/index.d.ts +5 -62
  51. package/dist/index.js +5 -62
  52. package/dist/models/index.d.ts +22 -0
  53. package/dist/models/index.js +38 -0
  54. package/dist/models/ps-file-icon-button-tone.d.ts +1 -0
  55. package/dist/models/ps-file-icon-button-tone.js +2 -0
  56. package/dist/models/ps-file-viewer-button-tone.d.ts +1 -0
  57. package/dist/models/ps-file-viewer-button-tone.js +2 -0
  58. package/dist/models/ps-progress-tone.d.ts +1 -0
  59. package/dist/models/ps-progress-tone.js +2 -0
  60. package/dist/services/index.d.ts +8 -0
  61. package/dist/services/index.js +24 -0
  62. package/dist/services/ps-pdf-service.d.ts +2 -2
  63. package/dist/services/ps-pdf-service.js +5 -2
  64. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ export * from './viewers';
2
+ export * from './ps-file-delete-confirm';
3
+ export * from './ps-file-icon-button';
4
+ export * from './ps-file-kind-icon';
5
+ export * from './ps-file-list';
6
+ export * from './ps-file-picker';
7
+ export * from './ps-file-viewer';
8
+ export * from './ps-file-viewer-button';
9
+ export * from './ps-file-viewer-content';
10
+ export * from './ps-progress-bar';
11
+ export * from './ps-upload-modal';
12
+ export * from './ps-upload-row';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./viewers"), exports);
18
+ __exportStar(require("./ps-file-delete-confirm"), exports);
19
+ __exportStar(require("./ps-file-icon-button"), exports);
20
+ __exportStar(require("./ps-file-kind-icon"), exports);
21
+ __exportStar(require("./ps-file-list"), exports);
22
+ __exportStar(require("./ps-file-picker"), exports);
23
+ __exportStar(require("./ps-file-viewer"), exports);
24
+ __exportStar(require("./ps-file-viewer-button"), exports);
25
+ __exportStar(require("./ps-file-viewer-content"), exports);
26
+ __exportStar(require("./ps-progress-bar"), exports);
27
+ __exportStar(require("./ps-upload-modal"), exports);
28
+ __exportStar(require("./ps-upload-row"), exports);
@@ -4,5 +4,5 @@ exports.PsFileDeleteConfirm = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const ps_core_components_1 = require("@pallasoft/ps-core-components");
6
6
  const ps_popovers_1 = require("@pallasoft/ps-popovers");
7
- const PsFileDeleteConfirm = ({ fileName, isDeleting, isOpen, labels, onCancel, onConfirm, }) => ((0, jsx_runtime_1.jsx)(ps_popovers_1.PsModal, { eyebrow: fileName, isOpen: isOpen, onClose: onCancel, size: 'sm', title: labels.deleteConfirm, children: (0, jsx_runtime_1.jsxs)("div", { className: 'flex flex-col gap-5', children: [(0, jsx_runtime_1.jsx)("p", { className: 'text-sm text-ink/70', children: labels.deleteConfirmBody }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex justify-end gap-2', children: [(0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { disabled: isDeleting, onClick: onCancel, type: 'button', variant: 'ghost', children: labels.deleteCancel }), (0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { isLoading: isDeleting, onClick: onConfirm, type: 'button', variant: 'danger', children: labels.delete })] })] }) }));
7
+ const PsFileDeleteConfirm = ({ fileName, isDeleting, isOpen, labels, onCancel, onConfirm, }) => ((0, jsx_runtime_1.jsx)(ps_popovers_1.PsModal, { eyebrow: fileName, isOpen: isOpen, onClose: onCancel, size: 'sm', title: labels.deleteConfirm, children: (0, jsx_runtime_1.jsxs)("div", { className: 'flex flex-col gap-5', children: [(0, jsx_runtime_1.jsxs)("p", { className: 'text-sm text-ink/70', children: [(0, jsx_runtime_1.jsx)("span", { className: 'font-medium text-ink', children: fileName }), " ", labels.deleteConfirmBody] }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex justify-end gap-2 border-t border-line pt-4', children: [(0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { disabled: isDeleting, onClick: onCancel, type: 'button', variant: 'ghost', children: labels.deleteCancel }), (0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { isLoading: isDeleting, onClick: onConfirm, type: 'button', variant: 'danger', children: labels.delete })] })] }) }));
8
8
  exports.PsFileDeleteConfirm = PsFileDeleteConfirm;
@@ -0,0 +1,12 @@
1
+ import { type PsIconKey } from '@pallasoft/ps-icons';
2
+ import type { PsFileIconButtonTone } from '../models/ps-file-icon-button-tone';
3
+ export interface PsFileIconButtonProps {
4
+ disabled?: boolean;
5
+ href?: string;
6
+ download?: string;
7
+ iconKey: PsIconKey;
8
+ label: string;
9
+ onClick?: () => void;
10
+ tone?: PsFileIconButtonTone;
11
+ }
12
+ export declare const PsFileIconButton: ({ disabled, download, href, iconKey, label, onClick, tone, }: PsFileIconButtonProps) => import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsFileIconButton = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ps_design_system_1 = require("@pallasoft/ps-design-system");
6
+ const ps_icons_1 = require("@pallasoft/ps-icons");
7
+ const ps_file_icon_button_classes_1 = require("../constants/ps-file-icon-button-classes");
8
+ const PsFileIconButton = ({ disabled = false, download, href, iconKey, label, onClick, tone = 'neutral', }) => {
9
+ const className = ps_design_system_1.PallasoftClassNameService.merge('ps-focus-ring inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-ink/55 transition disabled:pointer-events-none disabled:opacity-40', ps_file_icon_button_classes_1.PsFileIconButtonClasses[tone]);
10
+ const icon = (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: iconKey });
11
+ return href === undefined ? ((0, jsx_runtime_1.jsx)("button", { "aria-label": label, className: className, disabled: disabled, onClick: onClick, title: label, type: 'button', children: icon })) : ((0, jsx_runtime_1.jsx)("a", { "aria-label": label, className: className, download: download, href: href, title: label, children: icon }));
12
+ };
13
+ exports.PsFileIconButton = PsFileIconButton;
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PsFileList = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const ps_core_components_1 = require("@pallasoft/ps-core-components");
6
5
  const ps_icons_1 = require("@pallasoft/ps-icons");
7
6
  const ps_file_kind_1 = require("../constants/ps-file-kind");
8
7
  const ps_file_list_labels_1 = require("../constants/ps-file-list-labels");
9
8
  const ps_file_size_service_1 = require("../services/ps-file-size-service");
10
9
  const ps_file_type_service_1 = require("../services/ps-file-type-service");
10
+ const ps_file_icon_button_1 = require("./ps-file-icon-button");
11
11
  const ps_file_kind_icon_1 = require("./ps-file-kind-icon");
12
12
  const PsFileList = ({ busyIds = [], files, formatDate, labels, onDelete, onOpen, }) => {
13
13
  const text = { ...ps_file_list_labels_1.PsFileListLabels, ...labels };
@@ -21,7 +21,7 @@ const PsFileList = ({ busyIds = [], files, formatDate, labels, onDelete, onOpen,
21
21
  ? null
22
22
  : formatDate(file.createdAt),
23
23
  ].filter((value) => value !== null);
24
- return ((0, jsx_runtime_1.jsxs)("li", { className: 'group flex min-w-0 items-center gap-3 rounded-ps-control border border-line bg-surface p-2 transition hover:border-primary/40', children: [(0, jsx_runtime_1.jsxs)("button", { "aria-label": `${text.open} ${file.name}`, className: 'ps-focus-ring flex min-w-0 flex-1 items-center gap-3 rounded-ps-control text-left', onClick: () => onOpen(index), type: 'button', children: [isImage ? ((0, jsx_runtime_1.jsx)("img", { alt: '', className: 'h-12 w-12 shrink-0 rounded-ps-control border border-line object-cover', loading: 'lazy', src: file.url })) : ((0, jsx_runtime_1.jsx)(ps_file_kind_icon_1.PsFileKindIcon, { className: 'h-12 w-12', contentType: file.contentType, name: file.name })), (0, jsx_runtime_1.jsxs)("span", { className: 'flex min-w-0 flex-col', children: [(0, jsx_runtime_1.jsx)("span", { className: 'truncate text-sm font-medium text-ink group-hover:text-primary', children: file.name }), meta.length > 0 ? ((0, jsx_runtime_1.jsx)("span", { className: 'truncate text-xs text-ink/55', children: meta.join(' · ') })) : null] })] }), (0, jsx_runtime_1.jsx)("a", { "aria-label": `${text.download} ${file.name}`, className: 'ps-focus-ring inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-ink/55 transition hover:bg-primary-soft/60 hover:text-primary', download: file.name, href: file.downloadUrl === undefined ? file.url : file.downloadUrl, children: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: ps_icons_1.PsIconKey.Download }) }), onDelete ? ((0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { "aria-label": `${text.delete} ${file.name}`, className: 'h-9 w-9 shrink-0 rounded-full p-0', disabled: busyIds.includes(file.id), onClick: () => onDelete(file), size: 'compact', type: 'button', variant: 'ghost', children: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: ps_icons_1.PsIconKey.Trash }) })) : null] }, file.id));
24
+ return ((0, jsx_runtime_1.jsxs)("li", { className: 'group flex min-w-0 items-center gap-3 rounded-ps-control border border-line bg-surface p-2 transition hover:border-primary/40', children: [(0, jsx_runtime_1.jsxs)("button", { "aria-label": `${text.open} ${file.name}`, className: 'ps-focus-ring flex min-w-0 flex-1 items-center gap-3 rounded-ps-control text-left', onClick: () => onOpen(index), type: 'button', children: [isImage ? ((0, jsx_runtime_1.jsx)("img", { alt: '', className: 'h-12 w-12 shrink-0 rounded-ps-control border border-line object-cover', loading: 'lazy', src: file.url })) : ((0, jsx_runtime_1.jsx)(ps_file_kind_icon_1.PsFileKindIcon, { className: 'h-12 w-12', contentType: file.contentType, name: file.name })), (0, jsx_runtime_1.jsxs)("span", { className: 'flex min-w-0 flex-col', children: [(0, jsx_runtime_1.jsx)("span", { className: 'truncate text-sm font-medium text-ink group-hover:text-primary', children: file.name }), meta.length > 0 ? ((0, jsx_runtime_1.jsx)("span", { className: 'truncate text-xs text-ink/55', children: meta.join(' · ') })) : null] })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex shrink-0 items-center gap-0.5', children: [(0, jsx_runtime_1.jsx)(ps_file_icon_button_1.PsFileIconButton, { download: file.name, href: file.downloadUrl === undefined ? file.url : file.downloadUrl, iconKey: ps_icons_1.PsIconKey.Download, label: `${text.download} ${file.name}` }), onDelete ? ((0, jsx_runtime_1.jsx)(ps_file_icon_button_1.PsFileIconButton, { disabled: busyIds.includes(file.id), iconKey: ps_icons_1.PsIconKey.Trash, label: `${text.delete} ${file.name}`, onClick: () => onDelete(file), tone: 'danger' })) : null] })] }, file.id));
25
25
  }) }));
26
26
  };
27
27
  exports.PsFileList = PsFileList;
@@ -1,10 +1,11 @@
1
1
  import type { ReactNode } from 'react';
2
+ import type { PsFileViewerButtonTone } from '../models/ps-file-viewer-button-tone';
2
3
  export interface PsFileViewerButtonProps {
3
4
  children: ReactNode;
4
5
  className?: string;
5
6
  disabled?: boolean;
6
7
  label: string;
7
8
  onClick: () => void;
8
- tone?: 'danger' | 'default';
9
+ tone?: PsFileViewerButtonTone;
9
10
  }
10
11
  export declare const PsFileViewerButton: ({ children, className, disabled, label, onClick, tone, }: PsFileViewerButtonProps) => import("react").JSX.Element;
@@ -1,7 +1,8 @@
1
+ import type { PsProgressTone } from '../models/ps-progress-tone';
1
2
  export interface PsProgressBarProps {
2
3
  className?: string;
3
4
  label: string;
4
- tone?: 'danger' | 'primary' | 'success';
5
+ tone?: PsProgressTone;
5
6
  value: number;
6
7
  }
7
8
  export declare const PsProgressBar: ({ className, label, tone, value, }: PsProgressBarProps) => import("react").JSX.Element;
@@ -3,13 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PsProgressBar = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const ps_design_system_1 = require("@pallasoft/ps-design-system");
6
- const toneClassNames = {
7
- danger: 'bg-danger',
8
- primary: 'bg-primary',
9
- success: 'bg-success',
10
- };
6
+ const ps_progress_tone_classes_1 = require("../constants/ps-progress-tone-classes");
11
7
  const PsProgressBar = ({ className, label, tone = 'primary', value, }) => {
12
8
  const percent = Math.round(Math.min(1, Math.max(0, value)) * 100);
13
- return ((0, jsx_runtime_1.jsx)("div", { "aria-label": label, "aria-valuemax": 100, "aria-valuemin": 0, "aria-valuenow": percent, className: ps_design_system_1.PallasoftClassNameService.merge('h-1.5 w-full overflow-hidden rounded-full bg-line/70', className), role: 'progressbar', children: (0, jsx_runtime_1.jsx)("div", { className: ps_design_system_1.PallasoftClassNameService.merge('h-full rounded-full transition-[width] duration-200 ease-out', toneClassNames[tone]), style: { width: `${percent}%` } }) }));
9
+ return ((0, jsx_runtime_1.jsx)("div", { "aria-label": label, "aria-valuemax": 100, "aria-valuemin": 0, "aria-valuenow": percent, className: ps_design_system_1.PallasoftClassNameService.merge('h-1.5 w-full overflow-hidden rounded-full bg-line/70', className), role: 'progressbar', children: (0, jsx_runtime_1.jsx)("div", { className: ps_design_system_1.PallasoftClassNameService.merge('h-full rounded-full transition-[width] duration-200 ease-out', ps_progress_tone_classes_1.PsProgressToneClasses[tone]), style: { width: `${percent}%` } }) }));
14
10
  };
15
11
  exports.PsProgressBar = PsProgressBar;
@@ -6,14 +6,11 @@ const ps_core_components_1 = require("@pallasoft/ps-core-components");
6
6
  const ps_popovers_1 = require("@pallasoft/ps-popovers");
7
7
  const ps_upload_labels_1 = require("../constants/ps-upload-labels");
8
8
  const ps_upload_queue_service_1 = require("../services/ps-upload-queue-service");
9
- const ps_progress_bar_1 = require("./ps-progress-bar");
10
9
  const ps_upload_row_1 = require("./ps-upload-row");
11
10
  const PsUploadModal = ({ isOpen, labels, onClose, queue }) => {
12
11
  const text = { ...ps_upload_labels_1.PsUploadLabels, ...labels };
13
12
  const summary = ps_upload_queue_service_1.PsUploadQueueService.summary(queue.items);
14
- const overall = queue.items.length === 0
15
- ? 0
16
- : queue.items.reduce((total, item) => total + item.progress, 0) / queue.items.length;
17
- return ((0, jsx_runtime_1.jsx)(ps_popovers_1.PsModal, { eyebrow: `${summary.done} / ${summary.total}`, isOpen: isOpen, onClose: onClose, size: 'md', title: queue.isBusy ? text.title : text.titleDone, children: (0, jsx_runtime_1.jsxs)("div", { className: 'flex flex-col gap-4', children: [(0, jsx_runtime_1.jsx)(ps_progress_bar_1.PsProgressBar, { label: text.title, tone: summary.failed > 0 ? 'danger' : queue.isBusy ? 'primary' : 'success', value: overall }), (0, jsx_runtime_1.jsx)("ul", { className: 'flex max-h-[50vh] flex-col divide-y divide-line/70 overflow-y-auto', children: queue.items.map((item) => ((0, jsx_runtime_1.jsx)(ps_upload_row_1.PsUploadRow, { item: item, labels: text, onCancel: () => queue.cancel(item.id), onRemove: () => queue.remove(item.id), onRetry: () => queue.retry(item.id) }, item.id))) }), (0, jsx_runtime_1.jsx)("div", { className: 'flex justify-end', children: (0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { onClick: onClose, type: 'button', variant: queue.isBusy ? 'ghost' : 'primary', children: text.close }) })] }) }));
13
+ const title = queue.isBusy ? text.title : summary.failed > 0 ? text.titleFailed : text.titleDone;
14
+ return ((0, jsx_runtime_1.jsx)(ps_popovers_1.PsModal, { isOpen: isOpen, onClose: onClose, size: 'md', title: title, children: (0, jsx_runtime_1.jsxs)("div", { className: 'flex flex-col gap-5', children: [(0, jsx_runtime_1.jsx)("ul", { className: 'flex max-h-[50vh] flex-col gap-2 overflow-y-auto', children: queue.items.map((item) => ((0, jsx_runtime_1.jsx)(ps_upload_row_1.PsUploadRow, { item: item, labels: text, onCancel: () => queue.cancel(item.id), onRemove: () => queue.remove(item.id), onRetry: () => queue.retry(item.id) }, item.id))) }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex flex-wrap items-center justify-end gap-2 border-t border-line pt-4', children: [queue.isBusy ? ((0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { onClick: () => queue.items.forEach((item) => queue.cancel(item.id)), type: 'button', variant: 'ghost', children: text.cancelAll })) : null, (0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { onClick: onClose, type: 'button', variant: 'primary', children: text.finish })] })] }) }));
18
15
  };
19
16
  exports.PsUploadModal = PsUploadModal;
@@ -2,27 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PsUploadRow = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const ps_core_components_1 = require("@pallasoft/ps-core-components");
6
5
  const ps_icons_1 = require("@pallasoft/ps-icons");
7
6
  const ps_upload_status_1 = require("../constants/ps-upload-status");
8
7
  const ps_upload_status_tones_1 = require("../constants/ps-upload-status-tones");
9
8
  const ps_file_size_service_1 = require("../services/ps-file-size-service");
10
9
  const ps_upload_queue_service_1 = require("../services/ps-upload-queue-service");
10
+ const ps_file_icon_button_1 = require("./ps-file-icon-button");
11
11
  const ps_file_kind_icon_1 = require("./ps-file-kind-icon");
12
12
  const ps_progress_bar_1 = require("./ps-progress-bar");
13
13
  const PsUploadRow = ({ item, labels, onCancel, onRemove, onRetry }) => {
14
14
  const isActive = ps_upload_queue_service_1.PsUploadQueueService.isActive(item);
15
- const canRetry = item.status === ps_upload_status_1.PsUploadStatus.failed || item.status === ps_upload_status_1.PsUploadStatus.cancelled;
16
- const percent = Math.round(item.progress * 100);
17
- const statusText = item.status === ps_upload_status_1.PsUploadStatus.uploading
18
- ? `${labels.uploading} ${percent}%`
15
+ const isProblem = item.status === ps_upload_status_1.PsUploadStatus.failed || item.status === ps_upload_status_1.PsUploadStatus.cancelled;
16
+ const size = ps_file_size_service_1.PsFileSizeService.format(item.file.size);
17
+ const status = item.status === ps_upload_status_1.PsUploadStatus.uploading
18
+ ? `${labels.uploading} · ${Math.round(item.progress * 100)}%`
19
19
  : item.status === ps_upload_status_1.PsUploadStatus.failed && item.error
20
20
  ? item.error
21
21
  : labels[item.status];
22
- return ((0, jsx_runtime_1.jsxs)("li", { className: 'flex items-center gap-3 py-3', children: [(0, jsx_runtime_1.jsx)(ps_file_kind_icon_1.PsFileKindIcon, { contentType: item.file.type, name: item.file.name }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex min-w-0 flex-1 flex-col gap-1.5', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'flex items-baseline justify-between gap-3', children: [(0, jsx_runtime_1.jsx)("p", { className: 'truncate text-sm font-medium text-ink', children: item.file.name }), (0, jsx_runtime_1.jsx)("span", { className: 'shrink-0 text-xs text-ink/55', children: ps_file_size_service_1.PsFileSizeService.format(item.file.size) })] }), (0, jsx_runtime_1.jsx)(ps_progress_bar_1.PsProgressBar, { label: item.file.name, tone: ps_upload_status_tones_1.PsUploadStatusTones[item.status], value: item.status === ps_upload_status_1.PsUploadStatus.failed ? 1 : item.progress }), (0, jsx_runtime_1.jsxs)("p", { className: item.status === ps_upload_status_1.PsUploadStatus.failed || item.status === ps_upload_status_1.PsUploadStatus.cancelled
23
- ? 'text-xs text-danger'
24
- : item.status === ps_upload_status_1.PsUploadStatus.done
25
- ? 'flex items-center gap-1 text-xs text-success'
26
- : 'text-xs text-ink/60', role: item.status === ps_upload_status_1.PsUploadStatus.failed ? 'alert' : undefined, children: [item.status === ps_upload_status_1.PsUploadStatus.done ? ((0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'h-3.5 w-3.5', iconKey: ps_icons_1.PsIconKey.Check })) : null, statusText] })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex shrink-0 items-center gap-1', children: [canRetry ? ((0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { leadingIcon: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: ps_icons_1.PsIconKey.Refresh }), onClick: onRetry, size: 'compact', type: 'button', variant: 'ghost', children: labels.retry })) : null, (0, jsx_runtime_1.jsx)(ps_core_components_1.PsButton, { "aria-label": `${isActive ? labels.cancel : labels.remove} ${item.file.name}`, onClick: isActive ? onCancel : onRemove, size: 'compact', type: 'button', variant: 'ghost', children: isActive ? labels.cancel : labels.remove })] })] }));
22
+ return ((0, jsx_runtime_1.jsxs)("li", { className: 'flex items-center gap-3 rounded-ps-control border border-line px-3 py-2.5', children: [(0, jsx_runtime_1.jsx)(ps_file_kind_icon_1.PsFileKindIcon, { contentType: item.file.type, name: item.file.name }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex min-w-0 flex-1 flex-col gap-1.5', children: [(0, jsx_runtime_1.jsx)("p", { className: 'truncate text-sm font-medium text-ink', children: item.file.name }), (0, jsx_runtime_1.jsx)(ps_progress_bar_1.PsProgressBar, { label: item.file.name, tone: ps_upload_status_tones_1.PsUploadStatusTones[item.status], value: isProblem ? 1 : item.progress }), (0, jsx_runtime_1.jsxs)("p", { className: `truncate text-xs ${isProblem ? 'text-danger' : item.status === ps_upload_status_1.PsUploadStatus.done ? 'text-success' : 'text-ink/55'}`, role: item.status === ps_upload_status_1.PsUploadStatus.failed ? 'alert' : undefined, children: [size, " \u00B7 ", status] })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'flex w-16 shrink-0 items-center justify-end gap-0.5', children: [isProblem ? ((0, jsx_runtime_1.jsx)(ps_file_icon_button_1.PsFileIconButton, { iconKey: ps_icons_1.PsIconKey.Refresh, label: `${labels.retry} ${item.file.name}`, onClick: onRetry })) : null, isActive ? ((0, jsx_runtime_1.jsx)(ps_file_icon_button_1.PsFileIconButton, { iconKey: ps_icons_1.PsIconKey.Close, label: `${labels.cancel} ${item.file.name}`, onClick: onCancel, tone: 'danger' })) : item.status === ps_upload_status_1.PsUploadStatus.done ? ((0, jsx_runtime_1.jsx)("span", { className: 'inline-flex h-8 w-8 items-center justify-center text-success', children: (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-label": labels.done, className: 'h-4 w-4', iconKey: ps_icons_1.PsIconKey.Check }) })) : ((0, jsx_runtime_1.jsx)(ps_file_icon_button_1.PsFileIconButton, { iconKey: ps_icons_1.PsIconKey.Close, label: `${labels.remove} ${item.file.name}`, onClick: onRemove }))] })] }));
27
23
  };
28
24
  exports.PsUploadRow = PsUploadRow;
@@ -0,0 +1,8 @@
1
+ export * from './ps-highlighted-text';
2
+ export * from './ps-image-viewer';
3
+ export * from './ps-media-viewer';
4
+ export * from './ps-pdf-page';
5
+ export * from './ps-pdf-thumbnail';
6
+ export * from './ps-pdf-viewer';
7
+ export * from './ps-text-viewer';
8
+ export * from './ps-unsupported-viewer';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ps-highlighted-text"), exports);
18
+ __exportStar(require("./ps-image-viewer"), exports);
19
+ __exportStar(require("./ps-media-viewer"), exports);
20
+ __exportStar(require("./ps-pdf-page"), exports);
21
+ __exportStar(require("./ps-pdf-thumbnail"), exports);
22
+ __exportStar(require("./ps-pdf-viewer"), exports);
23
+ __exportStar(require("./ps-text-viewer"), exports);
24
+ __exportStar(require("./ps-unsupported-viewer"), exports);
@@ -21,10 +21,6 @@ const PsPdfViewer = ({ activeMatch, file, labels, onMatchCount, pdfWorkerSrc, qu
21
21
  let opened = null;
22
22
  setDocument(null);
23
23
  setHasFailed(false);
24
- if (pdfWorkerSrc === undefined) {
25
- setHasFailed(true);
26
- return;
27
- }
28
24
  ps_pdf_service_1.PsPdfService.open(file.url, pdfWorkerSrc)
29
25
  .then(async (loaded) => {
30
26
  opened = loaded;
@@ -0,0 +1,15 @@
1
+ export * from './ps-file-icon-button-classes';
2
+ export * from './ps-file-kind';
3
+ export * from './ps-file-kind-icons';
4
+ export * from './ps-file-list-labels';
5
+ export * from './ps-file-picker-labels';
6
+ export * from './ps-file-type-config';
7
+ export * from './ps-file-viewer-config';
8
+ export * from './ps-file-viewer-kinds';
9
+ export * from './ps-file-viewer-labels';
10
+ export * from './ps-progress-tone-classes';
11
+ export * from './ps-upload-labels';
12
+ export * from './ps-upload-messages';
13
+ export * from './ps-upload-queue-config';
14
+ export * from './ps-upload-status';
15
+ export * from './ps-upload-status-tones';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ps-file-icon-button-classes"), exports);
18
+ __exportStar(require("./ps-file-kind"), exports);
19
+ __exportStar(require("./ps-file-kind-icons"), exports);
20
+ __exportStar(require("./ps-file-list-labels"), exports);
21
+ __exportStar(require("./ps-file-picker-labels"), exports);
22
+ __exportStar(require("./ps-file-type-config"), exports);
23
+ __exportStar(require("./ps-file-viewer-config"), exports);
24
+ __exportStar(require("./ps-file-viewer-kinds"), exports);
25
+ __exportStar(require("./ps-file-viewer-labels"), exports);
26
+ __exportStar(require("./ps-progress-tone-classes"), exports);
27
+ __exportStar(require("./ps-upload-labels"), exports);
28
+ __exportStar(require("./ps-upload-messages"), exports);
29
+ __exportStar(require("./ps-upload-queue-config"), exports);
30
+ __exportStar(require("./ps-upload-status"), exports);
31
+ __exportStar(require("./ps-upload-status-tones"), exports);
@@ -0,0 +1,2 @@
1
+ import type { PsFileIconButtonTone } from '../models/ps-file-icon-button-tone';
2
+ export declare const PsFileIconButtonClasses: Record<PsFileIconButtonTone, string>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsFileIconButtonClasses = void 0;
4
+ exports.PsFileIconButtonClasses = {
5
+ danger: 'hover:bg-danger-soft hover:text-danger',
6
+ neutral: 'hover:bg-primary-soft/60 hover:text-primary',
7
+ };
@@ -2,8 +2,8 @@ export declare const PsFileViewerLabels: {
2
2
  readonly close: "Close";
3
3
  readonly delete: "Delete";
4
4
  readonly deleteConfirm: "Delete file";
5
- readonly deleteConfirmBody: "This file will be removed. This cannot be undone from here.";
6
- readonly deleteCancel: "Keep file";
5
+ readonly deleteConfirmBody: "will be deleted. You cannot undo this.";
6
+ readonly deleteCancel: "Cancel";
7
7
  readonly download: "Download";
8
8
  readonly loadFailed: "This file could not be opened.";
9
9
  readonly next: "Next file";
@@ -5,8 +5,8 @@ exports.PsFileViewerLabels = {
5
5
  close: 'Close',
6
6
  delete: 'Delete',
7
7
  deleteConfirm: 'Delete file',
8
- deleteConfirmBody: 'This file will be removed. This cannot be undone from here.',
9
- deleteCancel: 'Keep file',
8
+ deleteConfirmBody: 'will be deleted. You cannot undo this.',
9
+ deleteCancel: 'Cancel',
10
10
  download: 'Download',
11
11
  loadFailed: 'This file could not be opened.',
12
12
  next: 'Next file',
@@ -0,0 +1,2 @@
1
+ import type { PsProgressTone } from '../models/ps-progress-tone';
2
+ export declare const PsProgressToneClasses: Record<PsProgressTone, string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PsProgressToneClasses = void 0;
4
+ exports.PsProgressToneClasses = {
5
+ danger: 'bg-danger',
6
+ primary: 'bg-primary',
7
+ success: 'bg-success',
8
+ };
@@ -1,14 +1,16 @@
1
1
  export declare const PsUploadLabels: {
2
- readonly cancel: "Cancel";
2
+ readonly cancel: "Cancel upload";
3
+ readonly cancelAll: "Cancel uploads";
3
4
  readonly cancelled: "Cancelled";
4
- readonly close: "Close";
5
5
  readonly done: "Uploaded";
6
6
  readonly failed: "Failed";
7
+ readonly finish: "Done";
7
8
  readonly processing: "Saving";
8
- readonly remove: "Remove";
9
- readonly retry: "Retry";
9
+ readonly remove: "Remove from list";
10
+ readonly retry: "Try again";
10
11
  readonly title: "Uploading files";
11
- readonly titleDone: "Upload finished";
12
+ readonly titleDone: "Files uploaded";
13
+ readonly titleFailed: "Some files did not upload";
12
14
  readonly uploading: "Uploading";
13
15
  readonly waiting: "Waiting";
14
16
  };
@@ -2,16 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PsUploadLabels = void 0;
4
4
  exports.PsUploadLabels = {
5
- cancel: 'Cancel',
5
+ cancel: 'Cancel upload',
6
+ cancelAll: 'Cancel uploads',
6
7
  cancelled: 'Cancelled',
7
- close: 'Close',
8
8
  done: 'Uploaded',
9
9
  failed: 'Failed',
10
+ finish: 'Done',
10
11
  processing: 'Saving',
11
- remove: 'Remove',
12
- retry: 'Retry',
12
+ remove: 'Remove from list',
13
+ retry: 'Try again',
13
14
  title: 'Uploading files',
14
- titleDone: 'Upload finished',
15
+ titleDone: 'Files uploaded',
16
+ titleFailed: 'Some files did not upload',
15
17
  uploading: 'Uploading',
16
18
  waiting: 'Waiting',
17
19
  };
@@ -1,2 +1,3 @@
1
+ import type { PsProgressTone } from '../models/ps-progress-tone';
1
2
  import { PsUploadStatus } from './ps-upload-status';
2
- export declare const PsUploadStatusTones: Record<PsUploadStatus, 'danger' | 'primary' | 'success'>;
3
+ export declare const PsUploadStatusTones: Record<PsUploadStatus, PsProgressTone>;
@@ -0,0 +1,12 @@
1
+ export * from './viewers';
2
+ export * from './ps-file-delete-confirm';
3
+ export * from './ps-file-icon-button';
4
+ export * from './ps-file-kind-icon';
5
+ export * from './ps-file-list';
6
+ export * from './ps-file-picker';
7
+ export * from './ps-file-viewer';
8
+ export * from './ps-file-viewer-button';
9
+ export * from './ps-file-viewer-content';
10
+ export * from './ps-progress-bar';
11
+ export * from './ps-upload-modal';
12
+ export * from './ps-upload-row';
@@ -1,4 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { PsButton } from '@pallasoft/ps-core-components';
3
3
  import { PsModal } from '@pallasoft/ps-popovers';
4
- export const PsFileDeleteConfirm = ({ fileName, isDeleting, isOpen, labels, onCancel, onConfirm, }) => (_jsx(PsModal, { eyebrow: fileName, isOpen: isOpen, onClose: onCancel, size: 'sm', title: labels.deleteConfirm, children: _jsxs("div", { className: 'flex flex-col gap-5', children: [_jsx("p", { className: 'text-sm text-ink/70', children: labels.deleteConfirmBody }), _jsxs("div", { className: 'flex justify-end gap-2', children: [_jsx(PsButton, { disabled: isDeleting, onClick: onCancel, type: 'button', variant: 'ghost', children: labels.deleteCancel }), _jsx(PsButton, { isLoading: isDeleting, onClick: onConfirm, type: 'button', variant: 'danger', children: labels.delete })] })] }) }));
4
+ export const PsFileDeleteConfirm = ({ fileName, isDeleting, isOpen, labels, onCancel, onConfirm, }) => (_jsx(PsModal, { eyebrow: fileName, isOpen: isOpen, onClose: onCancel, size: 'sm', title: labels.deleteConfirm, children: _jsxs("div", { className: 'flex flex-col gap-5', children: [_jsxs("p", { className: 'text-sm text-ink/70', children: [_jsx("span", { className: 'font-medium text-ink', children: fileName }), " ", labels.deleteConfirmBody] }), _jsxs("div", { className: 'flex justify-end gap-2 border-t border-line pt-4', children: [_jsx(PsButton, { disabled: isDeleting, onClick: onCancel, type: 'button', variant: 'ghost', children: labels.deleteCancel }), _jsx(PsButton, { isLoading: isDeleting, onClick: onConfirm, type: 'button', variant: 'danger', children: labels.delete })] })] }) }));
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
3
+ import { PsIcon } from '@pallasoft/ps-icons';
4
+ import { PsFileIconButtonClasses } from '../constants/ps-file-icon-button-classes';
5
+ export const PsFileIconButton = ({ disabled = false, download, href, iconKey, label, onClick, tone = 'neutral', }) => {
6
+ const className = PallasoftClassNameService.merge('ps-focus-ring inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-ink/55 transition disabled:pointer-events-none disabled:opacity-40', PsFileIconButtonClasses[tone]);
7
+ const icon = _jsx(PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: iconKey });
8
+ return href === undefined ? (_jsx("button", { "aria-label": label, className: className, disabled: disabled, onClick: onClick, title: label, type: 'button', children: icon })) : (_jsx("a", { "aria-label": label, className: className, download: download, href: href, title: label, children: icon }));
9
+ };
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { PsButton } from '@pallasoft/ps-core-components';
3
- import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
2
+ import { PsIconKey } from '@pallasoft/ps-icons';
4
3
  import { PsFileKind } from '../constants/ps-file-kind';
5
4
  import { PsFileListLabels } from '../constants/ps-file-list-labels';
6
5
  import { PsFileSizeService } from '../services/ps-file-size-service';
7
6
  import { PsFileTypeService } from '../services/ps-file-type-service';
7
+ import { PsFileIconButton } from './ps-file-icon-button';
8
8
  import { PsFileKindIcon } from './ps-file-kind-icon';
9
9
  export const PsFileList = ({ busyIds = [], files, formatDate, labels, onDelete, onOpen, }) => {
10
10
  const text = { ...PsFileListLabels, ...labels };
@@ -18,6 +18,6 @@ export const PsFileList = ({ busyIds = [], files, formatDate, labels, onDelete,
18
18
  ? null
19
19
  : formatDate(file.createdAt),
20
20
  ].filter((value) => value !== null);
21
- return (_jsxs("li", { className: 'group flex min-w-0 items-center gap-3 rounded-ps-control border border-line bg-surface p-2 transition hover:border-primary/40', children: [_jsxs("button", { "aria-label": `${text.open} ${file.name}`, className: 'ps-focus-ring flex min-w-0 flex-1 items-center gap-3 rounded-ps-control text-left', onClick: () => onOpen(index), type: 'button', children: [isImage ? (_jsx("img", { alt: '', className: 'h-12 w-12 shrink-0 rounded-ps-control border border-line object-cover', loading: 'lazy', src: file.url })) : (_jsx(PsFileKindIcon, { className: 'h-12 w-12', contentType: file.contentType, name: file.name })), _jsxs("span", { className: 'flex min-w-0 flex-col', children: [_jsx("span", { className: 'truncate text-sm font-medium text-ink group-hover:text-primary', children: file.name }), meta.length > 0 ? (_jsx("span", { className: 'truncate text-xs text-ink/55', children: meta.join(' · ') })) : null] })] }), _jsx("a", { "aria-label": `${text.download} ${file.name}`, className: 'ps-focus-ring inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-ink/55 transition hover:bg-primary-soft/60 hover:text-primary', download: file.name, href: file.downloadUrl === undefined ? file.url : file.downloadUrl, children: _jsx(PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: PsIconKey.Download }) }), onDelete ? (_jsx(PsButton, { "aria-label": `${text.delete} ${file.name}`, className: 'h-9 w-9 shrink-0 rounded-full p-0', disabled: busyIds.includes(file.id), onClick: () => onDelete(file), size: 'compact', type: 'button', variant: 'ghost', children: _jsx(PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: PsIconKey.Trash }) })) : null] }, file.id));
21
+ return (_jsxs("li", { className: 'group flex min-w-0 items-center gap-3 rounded-ps-control border border-line bg-surface p-2 transition hover:border-primary/40', children: [_jsxs("button", { "aria-label": `${text.open} ${file.name}`, className: 'ps-focus-ring flex min-w-0 flex-1 items-center gap-3 rounded-ps-control text-left', onClick: () => onOpen(index), type: 'button', children: [isImage ? (_jsx("img", { alt: '', className: 'h-12 w-12 shrink-0 rounded-ps-control border border-line object-cover', loading: 'lazy', src: file.url })) : (_jsx(PsFileKindIcon, { className: 'h-12 w-12', contentType: file.contentType, name: file.name })), _jsxs("span", { className: 'flex min-w-0 flex-col', children: [_jsx("span", { className: 'truncate text-sm font-medium text-ink group-hover:text-primary', children: file.name }), meta.length > 0 ? (_jsx("span", { className: 'truncate text-xs text-ink/55', children: meta.join(' · ') })) : null] })] }), _jsxs("div", { className: 'flex shrink-0 items-center gap-0.5', children: [_jsx(PsFileIconButton, { download: file.name, href: file.downloadUrl === undefined ? file.url : file.downloadUrl, iconKey: PsIconKey.Download, label: `${text.download} ${file.name}` }), onDelete ? (_jsx(PsFileIconButton, { disabled: busyIds.includes(file.id), iconKey: PsIconKey.Trash, label: `${text.delete} ${file.name}`, onClick: () => onDelete(file), tone: 'danger' })) : null] })] }, file.id));
22
22
  }) }));
23
23
  };
@@ -1,11 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { PallasoftClassNameService } from '@pallasoft/ps-design-system';
3
- const toneClassNames = {
4
- danger: 'bg-danger',
5
- primary: 'bg-primary',
6
- success: 'bg-success',
7
- };
3
+ import { PsProgressToneClasses } from '../constants/ps-progress-tone-classes';
8
4
  export const PsProgressBar = ({ className, label, tone = 'primary', value, }) => {
9
5
  const percent = Math.round(Math.min(1, Math.max(0, value)) * 100);
10
- return (_jsx("div", { "aria-label": label, "aria-valuemax": 100, "aria-valuemin": 0, "aria-valuenow": percent, className: PallasoftClassNameService.merge('h-1.5 w-full overflow-hidden rounded-full bg-line/70', className), role: 'progressbar', children: _jsx("div", { className: PallasoftClassNameService.merge('h-full rounded-full transition-[width] duration-200 ease-out', toneClassNames[tone]), style: { width: `${percent}%` } }) }));
6
+ return (_jsx("div", { "aria-label": label, "aria-valuemax": 100, "aria-valuemin": 0, "aria-valuenow": percent, className: PallasoftClassNameService.merge('h-1.5 w-full overflow-hidden rounded-full bg-line/70', className), role: 'progressbar', children: _jsx("div", { className: PallasoftClassNameService.merge('h-full rounded-full transition-[width] duration-200 ease-out', PsProgressToneClasses[tone]), style: { width: `${percent}%` } }) }));
11
7
  };
@@ -3,13 +3,10 @@ import { PsButton } from '@pallasoft/ps-core-components';
3
3
  import { PsModal } from '@pallasoft/ps-popovers';
4
4
  import { PsUploadLabels } from '../constants/ps-upload-labels';
5
5
  import { PsUploadQueueService } from '../services/ps-upload-queue-service';
6
- import { PsProgressBar } from './ps-progress-bar';
7
6
  import { PsUploadRow } from './ps-upload-row';
8
7
  export const PsUploadModal = ({ isOpen, labels, onClose, queue }) => {
9
8
  const text = { ...PsUploadLabels, ...labels };
10
9
  const summary = PsUploadQueueService.summary(queue.items);
11
- const overall = queue.items.length === 0
12
- ? 0
13
- : queue.items.reduce((total, item) => total + item.progress, 0) / queue.items.length;
14
- return (_jsx(PsModal, { eyebrow: `${summary.done} / ${summary.total}`, isOpen: isOpen, onClose: onClose, size: 'md', title: queue.isBusy ? text.title : text.titleDone, children: _jsxs("div", { className: 'flex flex-col gap-4', children: [_jsx(PsProgressBar, { label: text.title, tone: summary.failed > 0 ? 'danger' : queue.isBusy ? 'primary' : 'success', value: overall }), _jsx("ul", { className: 'flex max-h-[50vh] flex-col divide-y divide-line/70 overflow-y-auto', children: queue.items.map((item) => (_jsx(PsUploadRow, { item: item, labels: text, onCancel: () => queue.cancel(item.id), onRemove: () => queue.remove(item.id), onRetry: () => queue.retry(item.id) }, item.id))) }), _jsx("div", { className: 'flex justify-end', children: _jsx(PsButton, { onClick: onClose, type: 'button', variant: queue.isBusy ? 'ghost' : 'primary', children: text.close }) })] }) }));
10
+ const title = queue.isBusy ? text.title : summary.failed > 0 ? text.titleFailed : text.titleDone;
11
+ return (_jsx(PsModal, { isOpen: isOpen, onClose: onClose, size: 'md', title: title, children: _jsxs("div", { className: 'flex flex-col gap-5', children: [_jsx("ul", { className: 'flex max-h-[50vh] flex-col gap-2 overflow-y-auto', children: queue.items.map((item) => (_jsx(PsUploadRow, { item: item, labels: text, onCancel: () => queue.cancel(item.id), onRemove: () => queue.remove(item.id), onRetry: () => queue.retry(item.id) }, item.id))) }), _jsxs("div", { className: 'flex flex-wrap items-center justify-end gap-2 border-t border-line pt-4', children: [queue.isBusy ? (_jsx(PsButton, { onClick: () => queue.items.forEach((item) => queue.cancel(item.id)), type: 'button', variant: 'ghost', children: text.cancelAll })) : null, _jsx(PsButton, { onClick: onClose, type: 'button', variant: 'primary', children: text.finish })] })] }) }));
15
12
  };
@@ -1,24 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { PsButton } from '@pallasoft/ps-core-components';
3
2
  import { PsIcon, PsIconKey } from '@pallasoft/ps-icons';
4
3
  import { PsUploadStatus } from '../constants/ps-upload-status';
5
4
  import { PsUploadStatusTones } from '../constants/ps-upload-status-tones';
6
5
  import { PsFileSizeService } from '../services/ps-file-size-service';
7
6
  import { PsUploadQueueService } from '../services/ps-upload-queue-service';
7
+ import { PsFileIconButton } from './ps-file-icon-button';
8
8
  import { PsFileKindIcon } from './ps-file-kind-icon';
9
9
  import { PsProgressBar } from './ps-progress-bar';
10
10
  export const PsUploadRow = ({ item, labels, onCancel, onRemove, onRetry }) => {
11
11
  const isActive = PsUploadQueueService.isActive(item);
12
- const canRetry = item.status === PsUploadStatus.failed || item.status === PsUploadStatus.cancelled;
13
- const percent = Math.round(item.progress * 100);
14
- const statusText = item.status === PsUploadStatus.uploading
15
- ? `${labels.uploading} ${percent}%`
12
+ const isProblem = item.status === PsUploadStatus.failed || item.status === PsUploadStatus.cancelled;
13
+ const size = PsFileSizeService.format(item.file.size);
14
+ const status = item.status === PsUploadStatus.uploading
15
+ ? `${labels.uploading} · ${Math.round(item.progress * 100)}%`
16
16
  : item.status === PsUploadStatus.failed && item.error
17
17
  ? item.error
18
18
  : labels[item.status];
19
- return (_jsxs("li", { className: 'flex items-center gap-3 py-3', children: [_jsx(PsFileKindIcon, { contentType: item.file.type, name: item.file.name }), _jsxs("div", { className: 'flex min-w-0 flex-1 flex-col gap-1.5', children: [_jsxs("div", { className: 'flex items-baseline justify-between gap-3', children: [_jsx("p", { className: 'truncate text-sm font-medium text-ink', children: item.file.name }), _jsx("span", { className: 'shrink-0 text-xs text-ink/55', children: PsFileSizeService.format(item.file.size) })] }), _jsx(PsProgressBar, { label: item.file.name, tone: PsUploadStatusTones[item.status], value: item.status === PsUploadStatus.failed ? 1 : item.progress }), _jsxs("p", { className: item.status === PsUploadStatus.failed || item.status === PsUploadStatus.cancelled
20
- ? 'text-xs text-danger'
21
- : item.status === PsUploadStatus.done
22
- ? 'flex items-center gap-1 text-xs text-success'
23
- : 'text-xs text-ink/60', role: item.status === PsUploadStatus.failed ? 'alert' : undefined, children: [item.status === PsUploadStatus.done ? (_jsx(PsIcon, { "aria-hidden": 'true', className: 'h-3.5 w-3.5', iconKey: PsIconKey.Check })) : null, statusText] })] }), _jsxs("div", { className: 'flex shrink-0 items-center gap-1', children: [canRetry ? (_jsx(PsButton, { leadingIcon: _jsx(PsIcon, { "aria-hidden": 'true', className: 'h-4 w-4', iconKey: PsIconKey.Refresh }), onClick: onRetry, size: 'compact', type: 'button', variant: 'ghost', children: labels.retry })) : null, _jsx(PsButton, { "aria-label": `${isActive ? labels.cancel : labels.remove} ${item.file.name}`, onClick: isActive ? onCancel : onRemove, size: 'compact', type: 'button', variant: 'ghost', children: isActive ? labels.cancel : labels.remove })] })] }));
19
+ return (_jsxs("li", { className: 'flex items-center gap-3 rounded-ps-control border border-line px-3 py-2.5', children: [_jsx(PsFileKindIcon, { contentType: item.file.type, name: item.file.name }), _jsxs("div", { className: 'flex min-w-0 flex-1 flex-col gap-1.5', children: [_jsx("p", { className: 'truncate text-sm font-medium text-ink', children: item.file.name }), _jsx(PsProgressBar, { label: item.file.name, tone: PsUploadStatusTones[item.status], value: isProblem ? 1 : item.progress }), _jsxs("p", { className: `truncate text-xs ${isProblem ? 'text-danger' : item.status === PsUploadStatus.done ? 'text-success' : 'text-ink/55'}`, role: item.status === PsUploadStatus.failed ? 'alert' : undefined, children: [size, " \u00B7 ", status] })] }), _jsxs("div", { className: 'flex w-16 shrink-0 items-center justify-end gap-0.5', children: [isProblem ? (_jsx(PsFileIconButton, { iconKey: PsIconKey.Refresh, label: `${labels.retry} ${item.file.name}`, onClick: onRetry })) : null, isActive ? (_jsx(PsFileIconButton, { iconKey: PsIconKey.Close, label: `${labels.cancel} ${item.file.name}`, onClick: onCancel, tone: 'danger' })) : item.status === PsUploadStatus.done ? (_jsx("span", { className: 'inline-flex h-8 w-8 items-center justify-center text-success', children: _jsx(PsIcon, { "aria-label": labels.done, className: 'h-4 w-4', iconKey: PsIconKey.Check }) })) : (_jsx(PsFileIconButton, { iconKey: PsIconKey.Close, label: `${labels.remove} ${item.file.name}`, onClick: onRemove }))] })] }));
24
20
  };
@@ -0,0 +1,8 @@
1
+ export * from './ps-highlighted-text';
2
+ export * from './ps-image-viewer';
3
+ export * from './ps-media-viewer';
4
+ export * from './ps-pdf-page';
5
+ export * from './ps-pdf-thumbnail';
6
+ export * from './ps-pdf-viewer';
7
+ export * from './ps-text-viewer';
8
+ export * from './ps-unsupported-viewer';
@@ -18,10 +18,6 @@ export const PsPdfViewer = ({ activeMatch, file, labels, onMatchCount, pdfWorker
18
18
  let opened = null;
19
19
  setDocument(null);
20
20
  setHasFailed(false);
21
- if (pdfWorkerSrc === undefined) {
22
- setHasFailed(true);
23
- return;
24
- }
25
21
  PsPdfService.open(file.url, pdfWorkerSrc)
26
22
  .then(async (loaded) => {
27
23
  opened = loaded;
@@ -0,0 +1,15 @@
1
+ export * from './ps-file-icon-button-classes';
2
+ export * from './ps-file-kind';
3
+ export * from './ps-file-kind-icons';
4
+ export * from './ps-file-list-labels';
5
+ export * from './ps-file-picker-labels';
6
+ export * from './ps-file-type-config';
7
+ export * from './ps-file-viewer-config';
8
+ export * from './ps-file-viewer-kinds';
9
+ export * from './ps-file-viewer-labels';
10
+ export * from './ps-progress-tone-classes';
11
+ export * from './ps-upload-labels';
12
+ export * from './ps-upload-messages';
13
+ export * from './ps-upload-queue-config';
14
+ export * from './ps-upload-status';
15
+ export * from './ps-upload-status-tones';
@@ -0,0 +1,4 @@
1
+ export const PsFileIconButtonClasses = {
2
+ danger: 'hover:bg-danger-soft hover:text-danger',
3
+ neutral: 'hover:bg-primary-soft/60 hover:text-primary',
4
+ };
@@ -2,8 +2,8 @@ export const PsFileViewerLabels = {
2
2
  close: 'Close',
3
3
  delete: 'Delete',
4
4
  deleteConfirm: 'Delete file',
5
- deleteConfirmBody: 'This file will be removed. This cannot be undone from here.',
6
- deleteCancel: 'Keep file',
5
+ deleteConfirmBody: 'will be deleted. You cannot undo this.',
6
+ deleteCancel: 'Cancel',
7
7
  download: 'Download',
8
8
  loadFailed: 'This file could not be opened.',
9
9
  next: 'Next file',
@@ -0,0 +1,5 @@
1
+ export const PsProgressToneClasses = {
2
+ danger: 'bg-danger',
3
+ primary: 'bg-primary',
4
+ success: 'bg-success',
5
+ };
@@ -1,14 +1,16 @@
1
1
  export const PsUploadLabels = {
2
- cancel: 'Cancel',
2
+ cancel: 'Cancel upload',
3
+ cancelAll: 'Cancel uploads',
3
4
  cancelled: 'Cancelled',
4
- close: 'Close',
5
5
  done: 'Uploaded',
6
6
  failed: 'Failed',
7
+ finish: 'Done',
7
8
  processing: 'Saving',
8
- remove: 'Remove',
9
- retry: 'Retry',
9
+ remove: 'Remove from list',
10
+ retry: 'Try again',
10
11
  title: 'Uploading files',
11
- titleDone: 'Upload finished',
12
+ titleDone: 'Files uploaded',
13
+ titleFailed: 'Some files did not upload',
12
14
  uploading: 'Uploading',
13
15
  waiting: 'Waiting',
14
16
  };
@@ -0,0 +1,4 @@
1
+ export * from './use-ps-active-match-scroll';
2
+ export * from './use-ps-file-text';
3
+ export * from './use-ps-in-view';
4
+ export * from './use-ps-upload-queue';
package/dist/esm/index.js CHANGED
@@ -1,62 +1,5 @@
1
- export * from './components/ps-file-delete-confirm';
2
- export * from './components/ps-file-kind-icon';
3
- export * from './components/ps-file-list';
4
- export * from './components/ps-file-picker';
5
- export * from './components/ps-file-viewer-button';
6
- export * from './components/ps-file-viewer-content';
7
- export * from './components/ps-file-viewer';
8
- export * from './components/ps-progress-bar';
9
- export * from './components/ps-upload-modal';
10
- export * from './components/ps-upload-row';
11
- export * from './components/viewers/ps-highlighted-text';
12
- export * from './components/viewers/ps-image-viewer';
13
- export * from './components/viewers/ps-media-viewer';
14
- export * from './components/viewers/ps-pdf-page';
15
- export * from './components/viewers/ps-pdf-thumbnail';
16
- export * from './components/viewers/ps-pdf-viewer';
17
- export * from './components/viewers/ps-text-viewer';
18
- export * from './components/viewers/ps-unsupported-viewer';
19
- export * from './constants/ps-file-kind-icons';
20
- export * from './constants/ps-file-kind';
21
- export * from './constants/ps-file-list-labels';
22
- export * from './constants/ps-file-picker-labels';
23
- export * from './constants/ps-file-type-config';
24
- export * from './constants/ps-file-viewer-config';
25
- export * from './constants/ps-file-viewer-kinds';
26
- export * from './constants/ps-file-viewer-labels';
27
- export * from './constants/ps-upload-labels';
28
- export * from './constants/ps-upload-messages';
29
- export * from './constants/ps-upload-queue-config';
30
- export * from './constants/ps-upload-status-tones';
31
- export * from './constants/ps-upload-status';
32
- export * from './hooks/use-ps-active-match-scroll';
33
- export * from './hooks/use-ps-file-text';
34
- export * from './hooks/use-ps-in-view';
35
- export * from './hooks/use-ps-upload-queue';
36
- export * from './models/ps-file-rejection';
37
- export * from './models/ps-file-selection-rules';
38
- export * from './models/ps-file-selection';
39
- export * from './models/ps-file-text-state';
40
- export * from './models/ps-file-viewer-content-props';
41
- export * from './models/ps-label-set';
42
- export * from './models/ps-page-size';
43
- export * from './models/ps-pdf-match';
44
- export * from './models/ps-point';
45
- export * from './models/ps-text-match';
46
- export * from './models/ps-text-segment';
47
- export * from './models/ps-upload-handler-options';
48
- export * from './models/ps-upload-item';
49
- export * from './models/ps-upload-queue-options';
50
- export * from './models/ps-upload-queue-state';
51
- export * from './models/ps-upload-summary';
52
- export * from './models/ps-viewer-file';
53
- export * from './models/ps-xhr-upload-request';
54
- export * from './models/ps-xhr-upload-response';
55
- export * from './services/ps-csv-service';
56
- export * from './services/ps-file-selection-service';
57
- export * from './services/ps-file-size-service';
58
- export * from './services/ps-file-type-service';
59
- export * from './services/ps-pdf-service';
60
- export * from './services/ps-text-search-service';
61
- export * from './services/ps-upload-queue-service';
62
- export * from './services/ps-xhr-upload-service';
1
+ export * from './components';
2
+ export * from './constants';
3
+ export * from './hooks';
4
+ export * from './models';
5
+ export * from './services';
@@ -0,0 +1,22 @@
1
+ export * from './ps-file-icon-button-tone';
2
+ export * from './ps-file-rejection';
3
+ export * from './ps-file-selection';
4
+ export * from './ps-file-selection-rules';
5
+ export * from './ps-file-text-state';
6
+ export * from './ps-file-viewer-button-tone';
7
+ export * from './ps-file-viewer-content-props';
8
+ export * from './ps-label-set';
9
+ export * from './ps-page-size';
10
+ export * from './ps-pdf-match';
11
+ export * from './ps-point';
12
+ export * from './ps-progress-tone';
13
+ export * from './ps-text-match';
14
+ export * from './ps-text-segment';
15
+ export * from './ps-upload-handler-options';
16
+ export * from './ps-upload-item';
17
+ export * from './ps-upload-queue-options';
18
+ export * from './ps-upload-queue-state';
19
+ export * from './ps-upload-summary';
20
+ export * from './ps-viewer-file';
21
+ export * from './ps-xhr-upload-request';
22
+ export * from './ps-xhr-upload-response';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export * from './ps-csv-service';
2
+ export * from './ps-file-selection-service';
3
+ export * from './ps-file-size-service';
4
+ export * from './ps-file-type-service';
5
+ export * from './ps-pdf-service';
6
+ export * from './ps-text-search-service';
7
+ export * from './ps-upload-queue-service';
8
+ export * from './ps-xhr-upload-service';
@@ -2,8 +2,11 @@ import { PsTextSearchService } from './ps-text-search-service';
2
2
  export class PsPdfService {
3
3
  static load(workerSrc) {
4
4
  if (PsPdfService.library === null)
5
- PsPdfService.library = import('pdfjs-dist').then((library) => {
6
- library.GlobalWorkerOptions.workerSrc = workerSrc;
5
+ PsPdfService.library = (workerSrc === undefined ? import('pdfjs-dist/build/pdf.worker.min.mjs') : Promise.resolve())
6
+ .then(() => import('pdfjs-dist'))
7
+ .then((library) => {
8
+ if (workerSrc !== undefined)
9
+ library.GlobalWorkerOptions.workerSrc = workerSrc;
7
10
  return library;
8
11
  });
9
12
  return PsPdfService.library;
@@ -0,0 +1,4 @@
1
+ export * from './use-ps-active-match-scroll';
2
+ export * from './use-ps-file-text';
3
+ export * from './use-ps-in-view';
4
+ export * from './use-ps-upload-queue';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./use-ps-active-match-scroll"), exports);
18
+ __exportStar(require("./use-ps-file-text"), exports);
19
+ __exportStar(require("./use-ps-in-view"), exports);
20
+ __exportStar(require("./use-ps-upload-queue"), exports);
package/dist/index.d.ts CHANGED
@@ -1,62 +1,5 @@
1
- export * from './components/ps-file-delete-confirm';
2
- export * from './components/ps-file-kind-icon';
3
- export * from './components/ps-file-list';
4
- export * from './components/ps-file-picker';
5
- export * from './components/ps-file-viewer-button';
6
- export * from './components/ps-file-viewer-content';
7
- export * from './components/ps-file-viewer';
8
- export * from './components/ps-progress-bar';
9
- export * from './components/ps-upload-modal';
10
- export * from './components/ps-upload-row';
11
- export * from './components/viewers/ps-highlighted-text';
12
- export * from './components/viewers/ps-image-viewer';
13
- export * from './components/viewers/ps-media-viewer';
14
- export * from './components/viewers/ps-pdf-page';
15
- export * from './components/viewers/ps-pdf-thumbnail';
16
- export * from './components/viewers/ps-pdf-viewer';
17
- export * from './components/viewers/ps-text-viewer';
18
- export * from './components/viewers/ps-unsupported-viewer';
19
- export * from './constants/ps-file-kind-icons';
20
- export * from './constants/ps-file-kind';
21
- export * from './constants/ps-file-list-labels';
22
- export * from './constants/ps-file-picker-labels';
23
- export * from './constants/ps-file-type-config';
24
- export * from './constants/ps-file-viewer-config';
25
- export * from './constants/ps-file-viewer-kinds';
26
- export * from './constants/ps-file-viewer-labels';
27
- export * from './constants/ps-upload-labels';
28
- export * from './constants/ps-upload-messages';
29
- export * from './constants/ps-upload-queue-config';
30
- export * from './constants/ps-upload-status-tones';
31
- export * from './constants/ps-upload-status';
32
- export * from './hooks/use-ps-active-match-scroll';
33
- export * from './hooks/use-ps-file-text';
34
- export * from './hooks/use-ps-in-view';
35
- export * from './hooks/use-ps-upload-queue';
36
- export * from './models/ps-file-rejection';
37
- export * from './models/ps-file-selection-rules';
38
- export * from './models/ps-file-selection';
39
- export * from './models/ps-file-text-state';
40
- export * from './models/ps-file-viewer-content-props';
41
- export * from './models/ps-label-set';
42
- export * from './models/ps-page-size';
43
- export * from './models/ps-pdf-match';
44
- export * from './models/ps-point';
45
- export * from './models/ps-text-match';
46
- export * from './models/ps-text-segment';
47
- export * from './models/ps-upload-handler-options';
48
- export * from './models/ps-upload-item';
49
- export * from './models/ps-upload-queue-options';
50
- export * from './models/ps-upload-queue-state';
51
- export * from './models/ps-upload-summary';
52
- export * from './models/ps-viewer-file';
53
- export * from './models/ps-xhr-upload-request';
54
- export * from './models/ps-xhr-upload-response';
55
- export * from './services/ps-csv-service';
56
- export * from './services/ps-file-selection-service';
57
- export * from './services/ps-file-size-service';
58
- export * from './services/ps-file-type-service';
59
- export * from './services/ps-pdf-service';
60
- export * from './services/ps-text-search-service';
61
- export * from './services/ps-upload-queue-service';
62
- export * from './services/ps-xhr-upload-service';
1
+ export * from './components';
2
+ export * from './constants';
3
+ export * from './hooks';
4
+ export * from './models';
5
+ export * from './services';
package/dist/index.js CHANGED
@@ -14,65 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./components/ps-file-delete-confirm"), exports);
18
- __exportStar(require("./components/ps-file-kind-icon"), exports);
19
- __exportStar(require("./components/ps-file-list"), exports);
20
- __exportStar(require("./components/ps-file-picker"), exports);
21
- __exportStar(require("./components/ps-file-viewer-button"), exports);
22
- __exportStar(require("./components/ps-file-viewer-content"), exports);
23
- __exportStar(require("./components/ps-file-viewer"), exports);
24
- __exportStar(require("./components/ps-progress-bar"), exports);
25
- __exportStar(require("./components/ps-upload-modal"), exports);
26
- __exportStar(require("./components/ps-upload-row"), exports);
27
- __exportStar(require("./components/viewers/ps-highlighted-text"), exports);
28
- __exportStar(require("./components/viewers/ps-image-viewer"), exports);
29
- __exportStar(require("./components/viewers/ps-media-viewer"), exports);
30
- __exportStar(require("./components/viewers/ps-pdf-page"), exports);
31
- __exportStar(require("./components/viewers/ps-pdf-thumbnail"), exports);
32
- __exportStar(require("./components/viewers/ps-pdf-viewer"), exports);
33
- __exportStar(require("./components/viewers/ps-text-viewer"), exports);
34
- __exportStar(require("./components/viewers/ps-unsupported-viewer"), exports);
35
- __exportStar(require("./constants/ps-file-kind-icons"), exports);
36
- __exportStar(require("./constants/ps-file-kind"), exports);
37
- __exportStar(require("./constants/ps-file-list-labels"), exports);
38
- __exportStar(require("./constants/ps-file-picker-labels"), exports);
39
- __exportStar(require("./constants/ps-file-type-config"), exports);
40
- __exportStar(require("./constants/ps-file-viewer-config"), exports);
41
- __exportStar(require("./constants/ps-file-viewer-kinds"), exports);
42
- __exportStar(require("./constants/ps-file-viewer-labels"), exports);
43
- __exportStar(require("./constants/ps-upload-labels"), exports);
44
- __exportStar(require("./constants/ps-upload-messages"), exports);
45
- __exportStar(require("./constants/ps-upload-queue-config"), exports);
46
- __exportStar(require("./constants/ps-upload-status-tones"), exports);
47
- __exportStar(require("./constants/ps-upload-status"), exports);
48
- __exportStar(require("./hooks/use-ps-active-match-scroll"), exports);
49
- __exportStar(require("./hooks/use-ps-file-text"), exports);
50
- __exportStar(require("./hooks/use-ps-in-view"), exports);
51
- __exportStar(require("./hooks/use-ps-upload-queue"), exports);
52
- __exportStar(require("./models/ps-file-rejection"), exports);
53
- __exportStar(require("./models/ps-file-selection-rules"), exports);
54
- __exportStar(require("./models/ps-file-selection"), exports);
55
- __exportStar(require("./models/ps-file-text-state"), exports);
56
- __exportStar(require("./models/ps-file-viewer-content-props"), exports);
57
- __exportStar(require("./models/ps-label-set"), exports);
58
- __exportStar(require("./models/ps-page-size"), exports);
59
- __exportStar(require("./models/ps-pdf-match"), exports);
60
- __exportStar(require("./models/ps-point"), exports);
61
- __exportStar(require("./models/ps-text-match"), exports);
62
- __exportStar(require("./models/ps-text-segment"), exports);
63
- __exportStar(require("./models/ps-upload-handler-options"), exports);
64
- __exportStar(require("./models/ps-upload-item"), exports);
65
- __exportStar(require("./models/ps-upload-queue-options"), exports);
66
- __exportStar(require("./models/ps-upload-queue-state"), exports);
67
- __exportStar(require("./models/ps-upload-summary"), exports);
68
- __exportStar(require("./models/ps-viewer-file"), exports);
69
- __exportStar(require("./models/ps-xhr-upload-request"), exports);
70
- __exportStar(require("./models/ps-xhr-upload-response"), exports);
71
- __exportStar(require("./services/ps-csv-service"), exports);
72
- __exportStar(require("./services/ps-file-selection-service"), exports);
73
- __exportStar(require("./services/ps-file-size-service"), exports);
74
- __exportStar(require("./services/ps-file-type-service"), exports);
75
- __exportStar(require("./services/ps-pdf-service"), exports);
76
- __exportStar(require("./services/ps-text-search-service"), exports);
77
- __exportStar(require("./services/ps-upload-queue-service"), exports);
78
- __exportStar(require("./services/ps-xhr-upload-service"), exports);
17
+ __exportStar(require("./components"), exports);
18
+ __exportStar(require("./constants"), exports);
19
+ __exportStar(require("./hooks"), exports);
20
+ __exportStar(require("./models"), exports);
21
+ __exportStar(require("./services"), exports);
@@ -0,0 +1,22 @@
1
+ export * from './ps-file-icon-button-tone';
2
+ export * from './ps-file-rejection';
3
+ export * from './ps-file-selection';
4
+ export * from './ps-file-selection-rules';
5
+ export * from './ps-file-text-state';
6
+ export * from './ps-file-viewer-button-tone';
7
+ export * from './ps-file-viewer-content-props';
8
+ export * from './ps-label-set';
9
+ export * from './ps-page-size';
10
+ export * from './ps-pdf-match';
11
+ export * from './ps-point';
12
+ export * from './ps-progress-tone';
13
+ export * from './ps-text-match';
14
+ export * from './ps-text-segment';
15
+ export * from './ps-upload-handler-options';
16
+ export * from './ps-upload-item';
17
+ export * from './ps-upload-queue-options';
18
+ export * from './ps-upload-queue-state';
19
+ export * from './ps-upload-summary';
20
+ export * from './ps-viewer-file';
21
+ export * from './ps-xhr-upload-request';
22
+ export * from './ps-xhr-upload-response';
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ps-file-icon-button-tone"), exports);
18
+ __exportStar(require("./ps-file-rejection"), exports);
19
+ __exportStar(require("./ps-file-selection"), exports);
20
+ __exportStar(require("./ps-file-selection-rules"), exports);
21
+ __exportStar(require("./ps-file-text-state"), exports);
22
+ __exportStar(require("./ps-file-viewer-button-tone"), exports);
23
+ __exportStar(require("./ps-file-viewer-content-props"), exports);
24
+ __exportStar(require("./ps-label-set"), exports);
25
+ __exportStar(require("./ps-page-size"), exports);
26
+ __exportStar(require("./ps-pdf-match"), exports);
27
+ __exportStar(require("./ps-point"), exports);
28
+ __exportStar(require("./ps-progress-tone"), exports);
29
+ __exportStar(require("./ps-text-match"), exports);
30
+ __exportStar(require("./ps-text-segment"), exports);
31
+ __exportStar(require("./ps-upload-handler-options"), exports);
32
+ __exportStar(require("./ps-upload-item"), exports);
33
+ __exportStar(require("./ps-upload-queue-options"), exports);
34
+ __exportStar(require("./ps-upload-queue-state"), exports);
35
+ __exportStar(require("./ps-upload-summary"), exports);
36
+ __exportStar(require("./ps-viewer-file"), exports);
37
+ __exportStar(require("./ps-xhr-upload-request"), exports);
38
+ __exportStar(require("./ps-xhr-upload-response"), exports);
@@ -0,0 +1 @@
1
+ export type PsFileIconButtonTone = 'danger' | 'neutral';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export type PsFileViewerButtonTone = 'danger' | 'default';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export type PsProgressTone = 'danger' | 'primary' | 'success';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ export * from './ps-csv-service';
2
+ export * from './ps-file-selection-service';
3
+ export * from './ps-file-size-service';
4
+ export * from './ps-file-type-service';
5
+ export * from './ps-pdf-service';
6
+ export * from './ps-text-search-service';
7
+ export * from './ps-upload-queue-service';
8
+ export * from './ps-xhr-upload-service';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ps-csv-service"), exports);
18
+ __exportStar(require("./ps-file-selection-service"), exports);
19
+ __exportStar(require("./ps-file-size-service"), exports);
20
+ __exportStar(require("./ps-file-type-service"), exports);
21
+ __exportStar(require("./ps-pdf-service"), exports);
22
+ __exportStar(require("./ps-text-search-service"), exports);
23
+ __exportStar(require("./ps-upload-queue-service"), exports);
24
+ __exportStar(require("./ps-xhr-upload-service"), exports);
@@ -3,8 +3,8 @@ import type { PsPdfMatch } from '../models/ps-pdf-match';
3
3
  type PdfLibrary = typeof import('pdfjs-dist');
4
4
  export declare class PsPdfService {
5
5
  private static library;
6
- static load(workerSrc: string): Promise<PdfLibrary>;
7
- static open(url: string, workerSrc: string): Promise<PDFDocumentProxy>;
6
+ static load(workerSrc?: string): Promise<PdfLibrary>;
7
+ static open(url: string, workerSrc?: string): Promise<PDFDocumentProxy>;
8
8
  static render(page: PDFPageProxy, canvas: HTMLCanvasElement, scale: number, rotation: number): RenderTask;
9
9
  static search(document: PDFDocumentProxy, query: string, rotation: number): Promise<PsPdfMatch[]>;
10
10
  }
@@ -38,8 +38,11 @@ const ps_text_search_service_1 = require("./ps-text-search-service");
38
38
  class PsPdfService {
39
39
  static load(workerSrc) {
40
40
  if (PsPdfService.library === null)
41
- PsPdfService.library = Promise.resolve().then(() => __importStar(require('pdfjs-dist'))).then((library) => {
42
- library.GlobalWorkerOptions.workerSrc = workerSrc;
41
+ PsPdfService.library = (workerSrc === undefined ? Promise.resolve().then(() => __importStar(require('pdfjs-dist/build/pdf.worker.min.mjs'))) : Promise.resolve())
42
+ .then(() => Promise.resolve().then(() => __importStar(require('pdfjs-dist'))))
43
+ .then((library) => {
44
+ if (workerSrc !== undefined)
45
+ library.GlobalWorkerOptions.workerSrc = workerSrc;
43
46
  return library;
44
47
  });
45
48
  return PsPdfService.library;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pallasoft/ps-file-components",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/esm/index.js",