@topconsultnpm/sdkui-react 6.22.0-dev1.3 → 6.22.0-dev1.30

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 (113) hide show
  1. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +4 -4
  2. package/lib/components/base/Styled.d.ts +1 -1
  3. package/lib/components/base/TMCounterBar.d.ts +2 -2
  4. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  5. package/lib/components/base/TMCustomButton.d.ts +1 -1
  6. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  7. package/lib/components/base/TMFileManager.d.ts +2 -1
  8. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  9. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  10. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  11. package/lib/components/base/TMLayout.d.ts +4 -4
  12. package/lib/components/base/TMList.d.ts +2 -1
  13. package/lib/components/base/TMListView.d.ts +1 -1
  14. package/lib/components/base/TMModal.js +1 -1
  15. package/lib/components/base/TMSpinner.d.ts +2 -1
  16. package/lib/components/base/TMTab.d.ts +4 -3
  17. package/lib/components/base/TMTooltip.d.ts +1 -1
  18. package/lib/components/base/TMTreeView.d.ts +1 -1
  19. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  20. package/lib/components/base/TMVilViewer.d.ts +2 -1
  21. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  22. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +3 -1
  23. package/lib/components/choosers/TMDynDataListItemChooser.js +4 -6
  24. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  25. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  26. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  27. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  28. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  29. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  30. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  31. package/lib/components/editors/TMTextBox.js +10 -5
  32. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  33. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  34. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  35. package/lib/components/features/documents/TMDcmtForm.d.ts +2 -1
  36. package/lib/components/features/documents/TMDcmtForm.js +52 -5
  37. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  38. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  39. package/lib/components/features/documents/TMDcmtPreview.d.ts +1 -1
  40. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  41. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  42. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
  43. package/lib/components/features/documents/TMMergeToPdfForm.js +1 -1
  44. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  45. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  46. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  47. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  48. package/lib/components/features/search/TMSearch.d.ts +2 -1
  49. package/lib/components/features/search/TMSearch.js +2 -2
  50. package/lib/components/features/search/TMSearchResult.d.ts +2 -1
  51. package/lib/components/features/search/TMSearchResult.js +3 -2
  52. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  53. package/lib/components/features/search/TMSignatureInfoContent.d.ts +5 -2
  54. package/lib/components/features/search/TMSignatureInfoContent.js +373 -79
  55. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  56. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  57. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  58. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  59. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  60. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  61. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  62. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  63. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  64. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  65. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  66. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  67. package/lib/components/forms/Login/TMLoginForm.d.ts +2 -0
  68. package/lib/components/forms/Login/TMLoginForm.js +17 -3
  69. package/lib/components/forms/Login/TextBox.d.ts +3 -0
  70. package/lib/components/forms/Login/TextBox.js +2 -2
  71. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  72. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  73. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  74. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  75. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  76. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  77. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  78. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  79. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  80. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +1 -1
  81. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  82. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  83. package/lib/components/pages/TMPage.d.ts +1 -1
  84. package/lib/components/pages/TMPage.js +3 -1
  85. package/lib/components/query/TMQueryEditor.js +1 -1
  86. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  87. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  88. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  89. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  90. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  91. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  92. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  93. package/lib/helper/SDKUI_Globals.js +22 -2
  94. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  95. package/lib/helper/TMIcons.d.ts +279 -279
  96. package/lib/helper/TMPdfViewer.d.ts +2 -1
  97. package/lib/helper/TMToppyMessage.d.ts +2 -2
  98. package/lib/helper/TMUtils.d.ts +1 -1
  99. package/lib/helper/grafometricSignaturesCache.d.ts +45 -0
  100. package/lib/helper/grafometricSignaturesCache.js +56 -0
  101. package/lib/helper/helpers.d.ts +1 -1
  102. package/lib/helper/index.d.ts +1 -0
  103. package/lib/helper/index.js +1 -0
  104. package/lib/hooks/useDocumentOperations.d.ts +2 -1
  105. package/lib/hooks/useDocumentOperations.js +15 -15
  106. package/lib/hooks/useInputDialog.d.ts +2 -1
  107. package/lib/hooks/usePreventFileDrop.js +14 -3
  108. package/lib/services/platform_services.d.ts +3 -2
  109. package/lib/ts/graphometricTypes.d.ts +62 -0
  110. package/lib/ts/graphometricTypes.js +1 -0
  111. package/lib/ts/index.d.ts +1 -0
  112. package/lib/ts/index.js +1 -0
  113. package/package.json +66 -61
@@ -1,8 +1,9 @@
1
+ import React from "react";
1
2
  interface TMPdfViewerProps {
2
3
  pdfBlob: Blob;
3
4
  title?: string;
4
5
  isResizingActive?: boolean;
5
6
  enableFitToWidth?: boolean;
6
7
  }
7
- declare const TMPdfViewer: (props: TMPdfViewerProps) => import("react/jsx-runtime").JSX.Element;
8
+ declare const TMPdfViewer: (props: TMPdfViewerProps) => React.JSX.Element;
8
9
  export default TMPdfViewer;
@@ -1,8 +1,8 @@
1
- import { ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  interface TMToppyMessageProps {
3
3
  message: ReactNode;
4
4
  titleTooltip?: string;
5
5
  maxWidth?: string;
6
6
  }
7
- declare const TMToppyMessage: (props: TMToppyMessageProps) => import("react/jsx-runtime").JSX.Element;
7
+ declare const TMToppyMessage: (props: TMToppyMessageProps) => React.JSX.Element;
8
8
  export default TMToppyMessage;
@@ -24,7 +24,7 @@ export declare const getFullFileExtension: (fileName: string, depth?: number) =>
24
24
  * Es: pdf.p7m.tsd → pdf, pdf.p7m → pdf, pdf → pdf
25
25
  */
26
26
  export declare const getBaseExtension: (ext: string) => string;
27
- export declare const getFileIcon: (fileExtension: string | undefined, fileCount: number | undefined, tooltipContent?: JSX.Element | string) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const getFileIcon: (fileExtension: string | undefined, fileCount: number | undefined, tooltipContent?: JSX.Element | string) => React.JSX.Element;
28
28
  export declare function formatBytes(bytes: number | undefined, decimalPlaces?: number): string;
29
29
  export interface RowData {
30
30
  [key: string]: string | number | null;
@@ -0,0 +1,45 @@
1
+ import { IWacomBiometricData } from "../ts";
2
+ /** Informazioni su una firma grafometrica estratta dal PDF con dati biometrici */
3
+ export interface ExtractedGrafometricSignature {
4
+ biometricData: IWacomBiometricData;
5
+ /** Dati biometrici originali in Base64 (file FSS) */
6
+ originalDataBase64?: string;
7
+ /** Nome file originale dell'attachment */
8
+ originalFileName?: string;
9
+ }
10
+ /**
11
+ * Recupera le firme grafometriche dalla cache
12
+ * @param tid - TID del documento
13
+ * @param did - DID del documento
14
+ * @returns Le firme grafometriche se presenti in cache, undefined altrimenti
15
+ */
16
+ export declare const getGrafometricSignatures: (tid: number, did: number) => ExtractedGrafometricSignature[] | undefined;
17
+ /**
18
+ * Salva le firme grafometriche nella cache
19
+ * @param tid - TID del documento
20
+ * @param did - DID del documento
21
+ * @param signatures - Array delle firme grafometriche da salvare
22
+ */
23
+ export declare const putGrafometricSignatures: (tid: number, did: number, signatures: ExtractedGrafometricSignature[]) => void;
24
+ /**
25
+ * Rimuove le firme grafometriche di un documento specifico dalla cache
26
+ * @param tid - TID del documento
27
+ * @param did - DID del documento
28
+ * @returns true se l'elemento è stato rimosso, false se non esisteva
29
+ */
30
+ export declare const removeGrafometricSignatures: (tid: number, did: number) => boolean;
31
+ /**
32
+ * Verifica se le firme grafometriche di un documento sono in cache
33
+ * @param tid - TID del documento
34
+ * @param did - DID del documento
35
+ * @returns true se presenti in cache, false altrimenti
36
+ */
37
+ export declare const hasGrafometricSignatures: (tid: number, did: number) => boolean;
38
+ /**
39
+ * Svuota completamente la cache delle firme grafometriche
40
+ */
41
+ export declare const clearGrafometricSignaturesCache: () => void;
42
+ /**
43
+ * Restituisce il numero di documenti in cache
44
+ */
45
+ export declare const getGrafometricSignaturesCacheSize: () => number;
@@ -0,0 +1,56 @@
1
+ /** Genera una chiave stringa dalla coppia TID/DID */
2
+ const generateKey = (tid, did) => `${tid}_${did}`;
3
+ /** Cache locale per le firme grafometriche */
4
+ const grafometricSignaturesCache = new Map();
5
+ /**
6
+ * Recupera le firme grafometriche dalla cache
7
+ * @param tid - TID del documento
8
+ * @param did - DID del documento
9
+ * @returns Le firme grafometriche se presenti in cache, undefined altrimenti
10
+ */
11
+ export const getGrafometricSignatures = (tid, did) => {
12
+ const key = generateKey(tid, did);
13
+ return grafometricSignaturesCache.get(key);
14
+ };
15
+ /**
16
+ * Salva le firme grafometriche nella cache
17
+ * @param tid - TID del documento
18
+ * @param did - DID del documento
19
+ * @param signatures - Array delle firme grafometriche da salvare
20
+ */
21
+ export const putGrafometricSignatures = (tid, did, signatures) => {
22
+ const key = generateKey(tid, did);
23
+ grafometricSignaturesCache.set(key, signatures);
24
+ };
25
+ /**
26
+ * Rimuove le firme grafometriche di un documento specifico dalla cache
27
+ * @param tid - TID del documento
28
+ * @param did - DID del documento
29
+ * @returns true se l'elemento è stato rimosso, false se non esisteva
30
+ */
31
+ export const removeGrafometricSignatures = (tid, did) => {
32
+ const key = generateKey(tid, did);
33
+ return grafometricSignaturesCache.delete(key);
34
+ };
35
+ /**
36
+ * Verifica se le firme grafometriche di un documento sono in cache
37
+ * @param tid - TID del documento
38
+ * @param did - DID del documento
39
+ * @returns true se presenti in cache, false altrimenti
40
+ */
41
+ export const hasGrafometricSignatures = (tid, did) => {
42
+ const key = generateKey(tid, did);
43
+ return grafometricSignaturesCache.has(key);
44
+ };
45
+ /**
46
+ * Svuota completamente la cache delle firme grafometriche
47
+ */
48
+ export const clearGrafometricSignaturesCache = () => {
49
+ grafometricSignaturesCache.clear();
50
+ };
51
+ /**
52
+ * Restituisce il numero di documenti in cache
53
+ */
54
+ export const getGrafometricSignaturesCacheSize = () => {
55
+ return grafometricSignaturesCache.size;
56
+ };
@@ -55,7 +55,7 @@ export { openApps, calcResponsiveDirection, calcResponsiveSizes, taskModalSizes,
55
55
  export declare function moduleVersion(module: moduleTypes): string;
56
56
  export declare function buildtype(module: moduleTypes): string;
57
57
  export declare const highlightText: (text: string, searchValue: string) => JSX.Element;
58
- export declare const renderHighlightedText: (text: string, searchText: string, isSelected: boolean) => string | (string | import("react/jsx-runtime").JSX.Element)[];
58
+ export declare const renderHighlightedText: (text: string, searchText: string, isSelected: boolean) => string | (string | import("react").JSX.Element)[];
59
59
  export declare function versionAndBuildtypeInfo(module: moduleTypes): string;
60
60
  export declare const getListMaxItems: (deviceType: DeviceType | undefined) => number;
61
61
  export declare const svgToString: (icon: React.ReactElement) => string;
@@ -17,3 +17,4 @@ export * from './workItemsHelper';
17
17
  export * from './devextremeCustomMessages';
18
18
  export * from './ZipManager';
19
19
  export * from './certificateImportHelper';
20
+ export * from './grafometricSignaturesCache';
@@ -17,3 +17,4 @@ export * from './workItemsHelper';
17
17
  export * from './devextremeCustomMessages';
18
18
  export * from './ZipManager';
19
19
  export * from './certificateImportHelper';
20
+ export * from './grafometricSignaturesCache';
@@ -2,7 +2,7 @@ import React, { RefObject } from "react";
2
2
  import { DcmtTypeDescriptor, FileFormats, HomeBlogPost, LayoutDescriptor, LayoutModes, ObjectRef, SearchResultDescriptor, TaskDescriptor, UserDescriptor, WorkingGroupDescriptor } from "@topconsultnpm/sdk-ts";
3
3
  import { IColumnProps } from "devextreme-react/cjs/data-grid";
4
4
  import { TMContextMenuItemProps } from '../components/NewComponents/ContextMenu/types';
5
- import { DcmtInfo, MetadataValueDescriptorEx, SearchResultContext, TaskContext } from "../ts";
5
+ import { DcmtInfo, MetadataValueDescriptorEx, SearchResultContext, TaskContext, IGraphometricManagerProp } from "../ts";
6
6
  import { UseCheckInOutOperationsReturn } from "./useCheckInOutOperations";
7
7
  import { UseDcmtOperationsReturn } from "./useDcmtOperations";
8
8
  import { UseRelatedDocumentsReturn } from "./useRelatedDocuments";
@@ -62,6 +62,7 @@ export interface UIConfigProps {
62
62
  showToppyDraggableHelpCenter?: boolean;
63
63
  toppyHelpCenterUsePortal?: boolean;
64
64
  inputDcmtFormLayoutMode?: LayoutModes;
65
+ graphometricManager?: IGraphometricManagerProp;
65
66
  }
66
67
  export interface TasksProps {
67
68
  allTasks?: Array<TaskDescriptor>;
@@ -85,7 +85,7 @@ export const useDocumentOperations = (props) => {
85
85
  const { dataColumns, dataSource, selectedRowKeys, } = exportData ?? {};
86
86
  const { visibleItems = [], onRefreshSearchAsyncDatagrid, onRefreshDataRowsAsync, refreshFocusedDataRowAsync, onRefreshBlogDatagrid, onRefreshPreviewDatagrid, refreshOperationsTrigger = 0, onRefreshOperationsDatagrid, } = datagridUtility ?? {};
87
87
  const { approvalVID, dcmtDataRowForCicoStatus, selectedDcmtSearchResultRelations, dcmtTIDHasDetailRelations = false, dcmtTIDHasMasterRelations = false, updateCurrentDcmt, onCloseDcmtForm, onRefreshBlogForm, onRefreshPreviewForm, taskFormDialogComponent, s4TViewerDialogComponent } = dcmtUtility ?? {};
88
- const { floatingBarContainerRef, customButtonsLayout, workingGroupContext, openS4TViewer = false, openDcmtFormAsModal = false, showDcmtFormSidebar = true, allowFloatingBar = true, enablePinIcons = true, allowRelations = true, showTodoDcmtForm = false, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, editPdfForm = false, inputDcmtFormLayoutMode = LayoutModes.Update, } = uiConfig;
88
+ const { floatingBarContainerRef, customButtonsLayout, workingGroupContext, openS4TViewer = false, openDcmtFormAsModal = false, showDcmtFormSidebar = true, allowFloatingBar = true, enablePinIcons = true, allowRelations = true, showTodoDcmtForm = false, showToppyDraggableHelpCenter = true, toppyHelpCenterUsePortal = false, editPdfForm = false, inputDcmtFormLayoutMode = LayoutModes.Update, graphometricManager, } = uiConfig;
89
89
  const { allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback } = tasks;
90
90
  const {
91
91
  // Refresh operations (data consistency)
@@ -175,6 +175,9 @@ export const useDocumentOperations = (props) => {
175
175
  const openMasterDcmtsModalHandler = (value) => { setIsOpenMasterModal(value); };
176
176
  // State to control whether the export form (for exporting to Excel/CSV/txt and others) should be shown
177
177
  const [showExportForm, setShowExportForm] = useState(false);
178
+ // State to control signature info modal
179
+ const [showSignatureInfoModal, setShowSignatureInfoModal] = useState(false);
180
+ const [signatureInfoDcmt, setSignatureInfoDcmt] = useState(undefined);
178
181
  const updateShowApprovePopup = (value) => {
179
182
  setShowApprovePopup(value);
180
183
  };
@@ -243,14 +246,8 @@ export const useDocumentOperations = (props) => {
243
246
  });
244
247
  return;
245
248
  }
246
- TMMessageBoxManager.show({
247
- title: SDKUI_Localizator.SignatureInformation,
248
- buttons: [ButtonNames.OK],
249
- showToppy: false,
250
- resizable: true,
251
- initialWidth: !isMobile ? '700px' : undefined,
252
- message: _jsx(TMSignatureInfoContent, { inputDcmt: inputDcmts[0] })
253
- });
249
+ setSignatureInfoDcmt(inputDcmts[0]);
250
+ setShowSignatureInfoModal(true);
254
251
  }
255
252
  catch (error) {
256
253
  console.error(error);
@@ -552,8 +549,8 @@ export const useDocumentOperations = (props) => {
552
549
  if (!currentDcmt)
553
550
  return;
554
551
  const cacheKey = `${currentDcmt.TID}-${currentDcmt.DID}`;
555
- if (dcmtsFileCachePreview.has(cacheKey))
556
- removeDcmtsFileCache(cacheKey);
552
+ // Invalida sempre la cache (file preview/download e firme grafometriche)
553
+ removeDcmtsFileCache(cacheKey);
557
554
  await onRefreshPreviewCallback();
558
555
  await onRefreshDataRowsAsync?.();
559
556
  };
@@ -912,7 +909,7 @@ export const useDocumentOperations = (props) => {
912
909
  name: SDKUI_Localizator.ArchiveDetailDocument,
913
910
  operationType: 'multiRow',
914
911
  disabled: canArchiveDetailRelation !== true,
915
- onClick: async () => await archiveDetailDocuments?.(selectedDcmtInfos?.[0]?.TID)
912
+ onClick: async () => await archiveDetailDocuments(selectedDcmtInfos?.[0]?.TID)
916
913
  },
917
914
  {
918
915
  id: 'rel-mst',
@@ -1383,7 +1380,7 @@ export const useDocumentOperations = (props) => {
1383
1380
  refreshFocusedDataRowAsync,
1384
1381
  onRefreshBlogDatagrid,
1385
1382
  onRefreshPreviewDatagrid
1386
- }, fetchRemoteCertificates: fetchRemoteCertificates })) }), (showHistory && dtd && selectedDcmtInfos.length > 0) && _jsx(TMViewHistoryDcmt, { fromDTD: dtd, deviceType: deviceType, inputDcmt: selectedDcmtInfos[0], onClose: hideHistoryCallback, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (commentFormState.show && selectedDcmtInfos.length > 0) && _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: selectedDcmtInfos[0].TID, did: selectedDcmtInfos[0].DID } }, onClose: hideCommentFormCallback, refreshCallback: onRefreshBlog, participants: [], showAttachmentsSection: true, allArchivedDocumentsFileItems: convertSearchResultDescriptorToFileItems(currentSearchResults ?? []), isCommentRequired: commentFormState.isRequired, removeAndEditAttachment: commentFormState.removeAndEditAttachment, selectedAttachmentDid: [Number(selectedDcmtInfos[0].DID)] }), (showCheckoutInformationForm && dtd && selectedDcmtInfos.length > 0) &&
1383
+ }, fetchRemoteCertificates: fetchRemoteCertificates, graphometricManager: graphometricManager })) }), (showHistory && dtd && selectedDcmtInfos.length > 0) && _jsx(TMViewHistoryDcmt, { fromDTD: dtd, deviceType: deviceType, inputDcmt: selectedDcmtInfos[0], onClose: hideHistoryCallback, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), (commentFormState.show && selectedDcmtInfos.length > 0) && _jsx(TMBlogCommentForm, { context: { engine: 'SearchEngine', object: { tid: selectedDcmtInfos[0].TID, did: selectedDcmtInfos[0].DID } }, onClose: hideCommentFormCallback, refreshCallback: onRefreshBlog, participants: [], showAttachmentsSection: true, allArchivedDocumentsFileItems: convertSearchResultDescriptorToFileItems(currentSearchResults ?? []), isCommentRequired: commentFormState.isRequired, removeAndEditAttachment: commentFormState.removeAndEditAttachment, selectedAttachmentDid: [Number(selectedDcmtInfos[0].DID)] }), (showCheckoutInformationForm && dtd && selectedDcmtInfos.length > 0) &&
1387
1384
  _jsx(TMDcmtCheckoutInfoForm, { dtdName: dtd.name ?? SDKUI_Localizator.SearchResult, selectedDcmtOrFocused: selectedDcmtInfos[0], onClose: hideCheckoutInformationFormCallback }), isOpenDetailsModal && _jsx(TMModal, { width: "95%", height: "95%", onClose: () => setIsOpenDetailsModal(false), title: SDKUI_Localizator.Relations, children: _jsx(TMMasterDetailDcmts, { ...masterDetailDetailsCommonProps, onBack: () => setIsOpenDetailsModal(false) }) }), _jsx(StyledMultiViewPanel, { "$isVisible": isOpenDetails, children: isOpenDetails && _jsx(TMMasterDetailDcmts, { ...masterDetailDetailsCommonProps, onBack: () => setIsOpenDetails(false) }) }), isOpenMasterModal && _jsx(TMModal, { width: "95%", height: "95%", onClose: () => setIsOpenMasterModal(false), title: SDKUI_Localizator.Relations, children: _jsx(TMMasterDetailDcmts, { ...masterDetailMasterCommonProps, onBack: () => setIsOpenMasterModal(false) }) }), _jsxs(StyledMultiViewPanel, { "$isVisible": isOpenMaster, children: [isOpenMaster && _jsx(TMMasterDetailDcmts, { ...masterDetailMasterCommonProps, onBack: () => setIsOpenMaster(false) }), secondaryMasterDcmts.length > 0 && secondaryMasterDcmts.map((dcmt, index) => {
1388
1385
  return (_jsx(StyledModalContainer, { style: { backgroundColor: 'white' }, children: _jsx(TMMasterDetailDcmts, { ...masterDetailMasterCommonProps, inputDcmts: [dcmt], allowNavigation: false, onBack: () => handleRemoveItem(dcmt.TID, dcmt.DID) }) }, `${index}-${dcmt.DID}`));
1389
1386
  })] }), isOpenArchiveRelationForm && _jsx(TMDcmtForm, { isModal: true, titleModal: SDKUI_Localizator.Archive + ' - ' + (archiveType === 'detail' ? SDKUI_Localizator.DcmtsDetail : SDKUI_Localizator.DcmtsMaster), TID: archiveRelatedDcmtFormTID, layoutMode: LayoutModes.Ark, inputMids: archiveRelatedDcmtFormMids, showBackButton: false, allowButtonsRefs: false, onClose: () => {
@@ -1397,7 +1394,7 @@ export const useDocumentOperations = (props) => {
1397
1394
  setArchiveRelatedDcmtFormTID(undefined);
1398
1395
  setArchiveRelatedDcmtFormMids([]);
1399
1396
  await onRefreshSearchAsyncDatagrid?.();
1400
- }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar, openFileUploaderPdfEditor: openFileUploaderPdfEditor, showTodoDcmtForm: showTodoDcmtForm }), showRelatedDcmtsChooser &&
1397
+ }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar, openFileUploaderPdfEditor: openFileUploaderPdfEditor, showTodoDcmtForm: showTodoDcmtForm, graphometricManager: graphometricManager }), showRelatedDcmtsChooser &&
1401
1398
  _jsx(TMChooserForm, { dataSource: relatedDcmtsChooserDataSource, onChoose: async (selectedRelation) => {
1402
1399
  try {
1403
1400
  setShowRelatedDcmtsChooser(false);
@@ -1443,7 +1440,10 @@ export const useDocumentOperations = (props) => {
1443
1440
  updateBatchUpdateForm(false);
1444
1441
  setIsModifiedBatchUpdate(false);
1445
1442
  await onRefreshDataRowsAsync?.();
1446
- }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 0, onClose: () => updateShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 1, onClose: () => updateShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, onClose: () => updateShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { fromDTD: dtd, TID: contextConfig.approvalTID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: handleWFOperationCompleted, onClose: () => updateShowMoreInfoPopup(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, triggerBlogRefresh: onRefreshBlogDatagrid }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'mergeToPdf' && _jsx(TMMergeToPdfForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, selectedItemsFull: selectedItemsFull, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'copyToFolder' && _jsx(TMCopyToFolderForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {}), _jsx(FileSourceDialog, {}), taskFormDialogComponent, s4TViewerDialogComponent, currentCustomButton && _jsx(TMCustomButton, { button: currentCustomButton, formData: currentMetadataValues, selectedItems: selectedItemsFull, onClose: () => setCurrentCustomButton(undefined) })] }));
1443
+ }, onStatusChanged: (isModified) => { setIsModifiedBatchUpdate(isModified); } }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 0, onClose: () => updateShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, isReject: 1, onClose: () => updateShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: handleWFOperationCompleted, selectedItems: approvalVID ? selectedDcmtInfos.map(item => ({ ...item, TID: approvalVID })) : selectedDcmtInfos, onClose: () => updateShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { fromDTD: dtd, TID: contextConfig.approvalTID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: handleWFOperationCompleted, onClose: () => updateShowMoreInfoPopup(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, triggerBlogRefresh: onRefreshBlogDatagrid }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'mergeToPdf' && _jsx(TMMergeToPdfForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, selectedItemsFull: selectedItemsFull, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), openCopyToFolderForm.open && openCopyToFolderForm.operationType === 'copyToFolder' && _jsx(TMCopyToFolderForm, { mode: openCopyToFolderForm.mode, selectedDcmtInfos: selectedDcmtInfos, onClose: () => setOpenCopyToFolderForm({ open: false, operationType: 'copyToFolder', mode: 'onlySelected' }), showTMRelationViewer: showTMRelationViewerInCopyToFolderForm, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), _jsx(ConfirmFormatDialog, {}), _jsx(ConfirmAttachmentsDialog, {}), _jsx(FileSourceDialog, {}), taskFormDialogComponent, s4TViewerDialogComponent, currentCustomButton && _jsx(TMCustomButton, { button: currentCustomButton, formData: currentMetadataValues, selectedItems: selectedItemsFull, onClose: () => setCurrentCustomButton(undefined) }), showSignatureInfoModal && signatureInfoDcmt && (_jsx(TMSignatureInfoContent, { inputDcmt: signatureInfoDcmt, graphometricManager: graphometricManager, onClose: () => {
1444
+ setShowSignatureInfoModal(false);
1445
+ setSignatureInfoDcmt(undefined);
1446
+ } }))] }));
1447
1447
  return {
1448
1448
  operationItems: operationItems(),
1449
1449
  renderFloatingBar,
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { FileDescriptor, FileFormats } from '@topconsultnpm/sdk-ts';
2
3
  export declare const useInputCvtFormatDialog: () => [() => Promise<FileFormats>, () => JSX.Element];
3
4
  export declare const useFileDialog: () => {
@@ -5,7 +6,7 @@ export declare const useFileDialog: () => {
5
6
  };
6
7
  export declare const useInputAttachmentsDialog: () => {
7
8
  openConfirmAttachmentsDialog: (list: FileDescriptor[]) => Promise<string[] | undefined>;
8
- ConfirmAttachmentsDialog: () => import("react/jsx-runtime").JSX.Element | null;
9
+ ConfirmAttachmentsDialog: () => React.JSX.Element | null;
9
10
  };
10
11
  export type FileSourceType = 'filesystem' | 'scanner-new' | 'scanner-edit' | undefined;
11
12
  export declare const useFileSourceDialog: () => [(hasExistingFile?: boolean) => Promise<FileSourceType>, () => JSX.Element];
@@ -3,13 +3,24 @@ const usePreventFileDrop = (allowedDropZones) => {
3
3
  useEffect(() => {
4
4
  const isOverAllowedZone = (event) => allowedDropZones.some((ref) => ref.current?.contains(event.target));
5
5
  const handleDragOver = (event) => {
6
- if (!isOverAllowedZone(event)) {
6
+ if (isOverAllowedZone(event)) {
7
+ // Riafferma "copy" ad ogni dragover: altrimenti un "none"
8
+ // impostato mentre si era fuori zona resta e mostra "not-allowed"
9
+ if (event.dataTransfer)
10
+ event.dataTransfer.dropEffect = "copy";
11
+ document.body.style.cursor = "default";
12
+ }
13
+ else {
7
14
  event.preventDefault();
8
- event.dataTransfer.dropEffect = "none";
15
+ if (event.dataTransfer)
16
+ event.dataTransfer.dropEffect = "none";
9
17
  }
10
18
  };
11
19
  const handleDragEnter = (event) => {
12
- if (!isOverAllowedZone(event)) {
20
+ if (isOverAllowedZone(event)) {
21
+ document.body.style.cursor = "default";
22
+ }
23
+ else {
13
24
  document.body.style.cursor = "not-allowed";
14
25
  }
15
26
  };
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { JobTypes, ObjectClasses, ProcessDescriptor, DcmtTypeDescriptor } from "@topconsultnpm/sdk-ts";
2
3
  export declare class PlatformObjectService {
3
4
  static readonly retrieveAllAsync: (objClass: ObjectClasses, refreshCache?: boolean) => Promise<import("@topconsultnpm/sdk-ts").RelationDescriptor[] | import("@topconsultnpm/sdk-ts").AreaDescriptor[] | import("@topconsultnpm/sdk-ts").NotificationDescriptor[] | import("@topconsultnpm/sdk-ts").TaskDescriptor[] | import("@topconsultnpm/sdk-ts").WorkingGroupDescriptor[] | undefined>;
@@ -13,6 +14,6 @@ export declare class PlatformObjectService {
13
14
  static readonly createAsync: (objClass: ObjectClasses, jobType: JobTypes, d: any) => Promise<number | undefined>;
14
15
  static readonly deleteAsync: (objClass: ObjectClasses, id: number) => Promise<number | undefined>;
15
16
  static readonly getName: (objClass: ObjectClasses, jobType?: JobTypes, isPlural?: boolean) => string;
16
- static readonly getIcon: (objClass: ObjectClasses, d: any) => import("react/jsx-runtime").JSX.Element;
17
- static readonly getTooltip: (objClass: ObjectClasses, d: any) => import("react/jsx-runtime").JSX.Element | null;
17
+ static readonly getIcon: (objClass: ObjectClasses, d: any) => React.JSX.Element;
18
+ static readonly getTooltip: (objClass: ObjectClasses, d: any) => React.JSX.Element | null;
18
19
  }
@@ -0,0 +1,62 @@
1
+ export interface IWacomBiometricData {
2
+ /** Nome del firmatario */
3
+ signatureName: string;
4
+ /** Motivo della firma */
5
+ reasonForSigning: string;
6
+ /** Data e ora della firma (timestamp) */
7
+ dateTime: number;
8
+ /** Data e ora formattata */
9
+ dateTimeFormatted: string;
10
+ /** Tipo di digitalizzatore (es. "Wacom STU-540") */
11
+ digitizerType: string;
12
+ /** Driver del digitalizzatore */
13
+ digitizerDriver: string;
14
+ /** Sistema operativo */
15
+ operatingSystem: string;
16
+ /** Scheda di rete (Network Interface Card) */
17
+ networkInterfaceCard: string;
18
+ /** Immagine della firma in formato Base64 (PNG) */
19
+ signatureImage: string;
20
+ /** Stato integrità firma (OK, FAIL, MISSING, WRONG_TYPE, INSUFFICIENT_DATA, UNCERTAIN, NOT_SUPPORTED) */
21
+ integrityStatus: string;
22
+ /** Messaggio di warning sull'integrità (se presente) */
23
+ integrityWarning?: string;
24
+ /** Stato della firma (GOOD, NO_HASH, BAD_TYPE, BAD_HASH, ERROR, UNCERTAIN, SIG_MOVED) */
25
+ dataStatus: string;
26
+ /** Messaggio di warning sui dati (se presente) */
27
+ dataWarning?: string;
28
+ /** Dati aggiuntivi specifici del contesto */
29
+ extraData?: Record<string, string>;
30
+ }
31
+ export type IWacomBiometricResult = {
32
+ success: true;
33
+ data: IWacomBiometricData;
34
+ } | {
35
+ success: false;
36
+ error: string;
37
+ };
38
+ export interface ISignatureRenderConfig {
39
+ width?: number;
40
+ height?: number;
41
+ format?: "image/png" | "image/jpeg";
42
+ inkWidth?: number;
43
+ inkColor?: string;
44
+ backgroundColor?: string;
45
+ }
46
+ export type ExtractBiometricDataFn = (signatures: string[]) => Promise<IWacomBiometricResult[]>;
47
+ export interface IGraphometricManagerProp {
48
+ extractGraphometricAttachments(pdfFile: File): Promise<{
49
+ fileName?: string | undefined;
50
+ description?: string | undefined;
51
+ mimeType?: string | undefined;
52
+ creationDate?: Date | undefined;
53
+ modificationDate?: Date | undefined;
54
+ size?: number;
55
+ dataBase64?: string | undefined;
56
+ }[]>;
57
+ extractBiometricData: ExtractBiometricDataFn;
58
+ downloadDecryptedPngWithBiometricData: (attachment: {
59
+ dataBase64: string;
60
+ fileName?: string | undefined;
61
+ }) => Promise<void>;
62
+ }
@@ -0,0 +1 @@
1
+ export {};
package/lib/ts/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './types';
2
+ export * from './graphometricTypes';
package/lib/ts/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export * from './types';
2
+ export * from './graphometricTypes';
package/package.json CHANGED
@@ -1,63 +1,68 @@
1
1
  {
2
- "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.22.0-dev1.3",
4
- "description": "",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" \u0026\u0026 exit 1",
7
- "clean": "node -e \"const fs=require(\u0027fs\u0027);fs.rmSync(\u0027lib\u0027,{recursive:true,force:true});fs.mkdirSync(\u0027lib\u0027)\"",
8
- "copy-files": "cpx \"src/{assets/*.*,assets/ImageLibrary/*.*,assets/thumbnails/*.*,assets/IconsS4t/*.*,assets/Metadata/*.*,css/tm-sdkui.css}\" lib",
9
- "tm-build": "npm run clean \u0026\u0026 tsc \u0026\u0026 npm run copy-files",
10
- "tm-watch": "tsc -w",
11
- "tm-publish": "npm publish --tag latest",
12
- "tm-publish_wl": "npm publish",
13
- "storybook": "storybook dev -p 6006",
14
- "build-storybook": "storybook build"
15
- },
16
- "author": "TopConsult",
17
- "license": "ISC",
18
- "devDependencies": {
19
- "@chromatic-com/storybook": "^5.1.2",
20
- "@storybook/addon-docs": "^10.3.5",
21
- "@storybook/addon-onboarding": "^10.3.5",
22
- "@storybook/react-vite": "^10.3.5",
23
- "@types/node": "^24.12.2",
24
- "@types/react": "^18.3.3",
25
- "@types/react-dom": "^18.3.3",
26
- "cpx2": "^9.0.0",
27
- "esbuild": "^0.25.0",
28
- "react": "^18.3.1",
29
- "react-dom": "^18.3.1",
30
- "storybook": "^10.3.5",
31
- "typescript": "^5.9.3",
32
- "vite": "^6.1.1"
33
- },
34
- "main": "dist/cjs/index.js",
35
- "types": "./index.d.ts",
36
- "module": "lib/esm/index.js",
37
- "files": [
38
- "dist",
39
- "lib"
40
- ],
41
- "dependencies": {
42
- "react-pdf": "^10.4.1",
43
- "@zip.js/zip.js": "2.8.26",
44
- "pdf-lib": "^1.17.1",
45
- "devextreme-exceljs-fork": "^4.4.10",
46
- "buffer": "^6.0.3",
47
- "@topconsultnpm/sdk-ts": "6.21.0",
48
- "react-window": "^2.2.7",
49
- "devextreme": "^25.2.6",
50
- "htmlparser2": "^10.0.0",
51
- "styled-components": "^6.1.1",
52
- "devextreme-react": "^25.2.6"
53
- },
54
- "overrides": {
55
- "esbuild": "^0.25.0",
56
- "devextreme-exceljs-fork": {
57
- "archiver": "^8.0.0"
58
- },
59
- "quill-delta": {
60
- "lodash.isequal": "npm:fast-deep-equal@^3.1.3"
61
- }
62
- }
2
+ "name": "@topconsultnpm/sdkui-react",
3
+ "version": "6.22.0-dev1.30",
4
+ "description": "",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1",
7
+ "clean": "node -e \"const fs=require('fs');fs.rmSync('lib',{recursive:true,force:true});fs.mkdirSync('lib')\"",
8
+ "copy-files": "cpx \"src/{assets/*.*,assets/ImageLibrary/*.*,assets/thumbnails/*.*,assets/IconsS4t/*.*,assets/Metadata/*.*,css/tm-sdkui.css}\" lib",
9
+ "tm-build": "npm run clean && tsc && npm run copy-files",
10
+ "tm-watch": "tsc -w",
11
+ "tm-publish": "npm publish --tag latest",
12
+ "tm-publish_wl": "npm publish",
13
+ "storybook": "storybook dev -p 6006",
14
+ "build-storybook": "storybook build"
15
+ },
16
+ "author": "TopConsult",
17
+ "license": "ISC",
18
+ "devDependencies": {
19
+ "@chromatic-com/storybook": "^5.1.2",
20
+ "@storybook/addon-docs": "^10.3.5",
21
+ "@storybook/addon-onboarding": "^10.3.5",
22
+ "@storybook/react-vite": "^10.3.5",
23
+ "@types/node": "^24.12.2",
24
+ "@types/react": "^18.3.3",
25
+ "@types/react-dom": "^18.3.3",
26
+ "cpx2": "^9.0.0",
27
+ "esbuild": "^0.25.0",
28
+ "react": "^18.3.1",
29
+ "react-dom": "^18.3.1",
30
+ "storybook": "^10.3.5",
31
+ "typescript": "^5.9.3",
32
+ "vite": "^6.1.1"
33
+ },
34
+ "main": "dist/cjs/index.js",
35
+ "types": "./index.d.ts",
36
+ "module": "lib/esm/index.js",
37
+ "files": [
38
+ "dist",
39
+ "lib"
40
+ ],
41
+ "dependencies": {
42
+ "@topconsultnpm/sdk-ts": "6.22.0-dev1.13",
43
+ "@zip.js/zip.js": "2.8.26",
44
+ "buffer": "^6.0.3",
45
+ "devextreme": "^25.2.6",
46
+ "devextreme-exceljs-fork": "^4.4.10",
47
+ "devextreme-react": "^25.2.6",
48
+ "htmlparser2": "^10.0.0",
49
+ "pdf-lib": "^1.17.1",
50
+ "react-pdf": "^10.4.1",
51
+ "react-window": "^2.2.7",
52
+ "styled-components": "^6.1.1"
53
+ },
54
+ "overrides": {
55
+ "esbuild": "^0.25.0",
56
+ "devextreme-exceljs-fork": {
57
+ "archiver": "^8.0.0"
58
+ },
59
+ "quill-delta": {
60
+ "lodash.isequal": "npm:fast-deep-equal@^3.1.3"
61
+ }
62
+ },
63
+ "allowScripts": {
64
+ "core-js@3.49.0": true,
65
+ "esbuild@0.25.12": true,
66
+ "inferno@8.2.3": true
67
+ }
63
68
  }