@topconsultnpm/sdkui-react 6.22.0-dev3.23 → 6.22.0-dev3.25

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 (151) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +45 -43
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +67 -60
  3. package/lib/components/base/Styled.d.ts +93 -77
  4. package/lib/components/base/TMAlert.js +6 -8
  5. package/lib/components/base/TMAreaManager.js +53 -55
  6. package/lib/components/base/TMCounterBar.d.ts +2 -2
  7. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  8. package/lib/components/base/TMCustomButton.d.ts +1 -1
  9. package/lib/components/base/TMCustomButton.js +39 -48
  10. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  11. package/lib/components/base/TMFileManager.d.ts +2 -1
  12. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  13. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  14. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  15. package/lib/components/base/TMFileManagerUtils.d.ts +4 -6
  16. package/lib/components/base/TMLayout.d.ts +4 -4
  17. package/lib/components/base/TMList.d.ts +2 -1
  18. package/lib/components/base/TMListView.d.ts +1 -1
  19. package/lib/components/base/TMPanel.js +167 -167
  20. package/lib/components/base/TMSpinner.d.ts +2 -1
  21. package/lib/components/base/TMTab.d.ts +4 -3
  22. package/lib/components/base/TMTabControl.js +208 -208
  23. package/lib/components/base/TMTooltip.d.ts +1 -1
  24. package/lib/components/base/TMTreeView.d.ts +14 -8
  25. package/lib/components/base/TMTreeView.js +14 -0
  26. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  27. package/lib/components/base/TMVilViewer.d.ts +2 -1
  28. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  29. package/lib/components/base/waitPanel/TMWaitPanelConfirm.d.ts +12 -0
  30. package/lib/components/base/waitPanel/TMWaitPanelConfirm.js +185 -0
  31. package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +169 -0
  32. package/lib/components/base/waitPanel/TMWaitPanelManager.js +320 -0
  33. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +53 -0
  34. package/lib/components/base/waitPanel/TMWaitPanelView.js +274 -0
  35. package/lib/components/base/waitPanel/index.d.ts +1 -0
  36. package/lib/components/base/waitPanel/index.js +1 -0
  37. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  38. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  39. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  40. package/lib/components/choosers/TMPathChooser.js +17 -34
  41. package/lib/components/choosers/TMQuickSearchInfo.d.ts +2 -1
  42. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  43. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  44. package/lib/components/editors/TMEditorStyled.d.ts +20 -42
  45. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  46. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  47. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  48. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  49. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  50. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.js +2 -2
  51. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  52. package/lib/components/features/documents/TMBatchUpdateForm.js +3 -4
  53. package/lib/components/features/documents/TMCopyToFolderForm.js +32 -35
  54. package/lib/components/features/documents/TMDcmtForm.js +48 -60
  55. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  56. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -3
  57. package/lib/components/features/documents/TMDcmtIcon.js +3 -5
  58. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -6
  59. package/lib/components/features/documents/TMDcmtPreview.js +5 -3
  60. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  61. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  62. package/lib/components/features/documents/TMFileUploader.js +21 -21
  63. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
  64. package/lib/components/features/documents/TMMasterDetailDcmts.js +45 -147
  65. package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
  66. package/lib/components/features/documents/TMMasterInfoFields.js +3 -2
  67. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
  68. package/lib/components/features/documents/TMMergeToPdfForm.js +48 -47
  69. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
  70. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +14 -15
  71. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +5 -5
  72. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.js +3 -3
  73. package/lib/components/features/documents/TMRelationViewer.d.ts +3 -14
  74. package/lib/components/features/documents/TMRelationViewer.js +115 -79
  75. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  76. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  77. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  78. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  79. package/lib/components/features/search/TMSearch.d.ts +2 -1
  80. package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
  81. package/lib/components/features/search/TMSearchResult.js +6 -8
  82. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  83. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  84. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  85. package/lib/components/features/search/TMViewHistoryDcmt.js +14 -25
  86. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  87. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  88. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  89. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  90. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  91. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  92. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  93. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  94. package/lib/components/features/tasks/TMTasksView.js +91 -90
  95. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  96. package/lib/components/features/wg/TMWGsCopyMoveForm.js +91 -91
  97. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  98. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  99. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  100. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  101. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  102. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  103. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  104. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  105. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  106. package/lib/components/grids/TMBlogsPost.js +92 -96
  107. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  108. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  109. package/lib/components/index.d.ts +2 -0
  110. package/lib/components/index.js +2 -0
  111. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  112. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  113. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +5 -6
  114. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  115. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  116. package/lib/components/pages/TMPage.d.ts +1 -1
  117. package/lib/components/pages/TMPage.js +29 -31
  118. package/lib/components/query/TMQueryEditor.d.ts +14 -10
  119. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  120. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  121. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  122. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  123. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  124. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  125. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  126. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  127. package/lib/helper/SDKUI_Localizator.d.ts +7 -0
  128. package/lib/helper/SDKUI_Localizator.js +70 -0
  129. package/lib/helper/TMAppUpdatedModal.d.ts +2 -1
  130. package/lib/helper/TMAppUpdatedModal.js +93 -93
  131. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  132. package/lib/helper/TMIcons.d.ts +280 -280
  133. package/lib/helper/TMPdfViewer.d.ts +2 -1
  134. package/lib/helper/TMToppyMessage.d.ts +2 -2
  135. package/lib/helper/TMUtils.d.ts +10 -4
  136. package/lib/helper/ZipManager.d.ts +1 -1
  137. package/lib/helper/ZipManager.js +2 -1
  138. package/lib/helper/dcmtsHelper.d.ts +2 -0
  139. package/lib/helper/dcmtsHelper.js +3 -1
  140. package/lib/helper/helpers.d.ts +1 -1
  141. package/lib/hooks/useCheckInOutOperations.d.ts +0 -6
  142. package/lib/hooks/useCheckInOutOperations.js +14 -34
  143. package/lib/hooks/useDcmtOperations.d.ts +3 -12
  144. package/lib/hooks/useDcmtOperations.js +130 -160
  145. package/lib/hooks/useDocumentOperations.js +12 -23
  146. package/lib/hooks/useInputDialog.d.ts +2 -1
  147. package/lib/hooks/useMultiMasterDetailDcmts.d.ts +0 -15
  148. package/lib/hooks/useMultiMasterDetailDcmts.js +65 -67
  149. package/lib/hooks/useWorkflowApprove.js +33 -17
  150. package/lib/services/platform_services.d.ts +3 -2
  151. package/package.json +1 -1
@@ -14,12 +14,13 @@ import { TMPanelManagerProvider, useTMPanelManagerContext } from '../../layout/p
14
14
  import TMSearchResult from '../search/TMSearchResult';
15
15
  import TMDcmtForm from './TMDcmtForm';
16
16
  import { TMNothingToShow } from './TMDcmtPreview';
17
- import { TMButton, TMLayoutWaitingContainer } from '../..';
17
+ import { TMButton } from '../..';
18
+ import TMLayoutContainer from '../../base/TMLayout';
18
19
  import { useDocumentOperations } from '../../../hooks/useDocumentOperations';
19
20
  import TMToppyMessage from '../../../helper/TMToppyMessage';
20
21
  import TMPanel from '../../base/TMPanel';
21
- import sixLogo from '../../../assets/six.png';
22
- const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, deviceType, inputDcmts, isForMaster, showCurrentDcmtIndicator = true, allowNavigation, canNext, canPrev, onNext, onPrev, onBack, appendMasterDcmts, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, datagridUtility, dcmtUtility, fetchRemoteCertificates }) => {
22
+ import TMSpinner from '../../base/TMSpinner';
23
+ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, deviceType, inputDcmts, isForMaster, showCurrentDcmtIndicator = true, allowNavigation, canNext, canPrev, onNext, onPrev, onBack, onFirstLoadCompleted, appendMasterDcmts, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, datagridUtility, dcmtUtility, fetchRemoteCertificates }) => {
23
24
  const floatingBarContainerRef = useRef(null);
24
25
  const [focusedItem, setFocusedItem] = useState();
25
26
  const [selectedItems, setSelectedItems] = useState([]);
@@ -71,6 +72,24 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
71
72
  setIsCheckingFirstLoad(false);
72
73
  }
73
74
  }, [isRelationViewerLoading, isCheckingFirstLoad]);
75
+ useEffect(() => {
76
+ if (!isCheckingFirstLoad)
77
+ onFirstLoadCompleted?.();
78
+ }, [isCheckingFirstLoad, onFirstLoadCompleted]);
79
+ // Dal montaggio fino all'apertura del wait panel del viewer (il tempo di caricare i
80
+ // tipi documento) la pagina resta nascosta: senza spinner non si vedrebbe nulla.
81
+ const [waitingFirstLoad, setWaitingFirstLoad] = useState(true);
82
+ useEffect(() => {
83
+ if (!waitingFirstLoad)
84
+ return;
85
+ // Da qui in avanti e' il wait panel a dare riscontro
86
+ if (isRelationViewerLoading) {
87
+ setWaitingFirstLoad(false);
88
+ return;
89
+ }
90
+ TMSpinner.show({ description: SDKUI_Localizator.Loading });
91
+ return () => TMSpinner.hide();
92
+ }, [waitingFirstLoad, isRelationViewerLoading]);
74
93
  // Increments trigger counter to force operationItems to re-calculate
75
94
  const onRefreshOperationsDatagrid = useCallback(async () => {
76
95
  setRefreshOperationsTrigger(prev => prev + 1);
@@ -79,12 +98,6 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
79
98
  const handleStopCalculationReady = useCallback((stopCalculation) => {
80
99
  stopRelationsCalculationRef.current = stopCalculation;
81
100
  }, []);
82
- // Interrompe il calcolo delle correlazioni: mostra subito quelle già calcolate
83
- // senza attendere le restanti chiamate GetMetadata
84
- const handleStopRelationsCalculation = useCallback(() => {
85
- stopRelationsCalculationRef.current?.();
86
- setIsCheckingFirstLoad(false); // Nasconde l'overlay e mostra l'albero (parziale)
87
- }, []);
88
101
  // Esce dalla maschera interrompendo anche le chiamate GetMetadata ancora in coda:
89
102
  // l'interruzione è invocata in modo sincrono perché onBack può smontare il componente
90
103
  // (un effect non farebbe in tempo a propagare l'interruzione)
@@ -93,25 +106,30 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
93
106
  stopRelationsCalculationRef.current?.();
94
107
  onBack?.();
95
108
  }, [onBack]);
96
- const handleCancelFirstLoad = useCallback(() => {
97
- setIsCheckingFirstLoad(false);
98
- handleBack();
99
- }, [handleBack]);
100
- // Avanzamento del calcolo correlazioni, mostrato nell'overlay di primo caricamento
101
- const [relationsProgress, setRelationsProgress] = useState({ value: 0, max: 0 });
102
- const handleRelationsProgress = useCallback((value, max) => {
103
- setRelationsProgress({ value, max });
104
- }, []);
105
- // Notifica all'utente che i dati mostrati sono parziali (non quando si sta uscendo)
109
+ // Letta da handleRelationsCalculationStopped, che deve restare stabile: arriva fino
110
+ // alle dipendenze di loadData nel viewer, dove un cambio farebbe ripartire il calcolo
111
+ const handleBackRef = useRef(handleBack);
112
+ handleBackRef.current = handleBack;
113
+ // Notifica all'utente che i dati mostrati sono parziali
106
114
  const handleRelationsCalculationStopped = useCallback((loadedCount, totalCount) => {
107
115
  if (isLeavingRef.current)
108
116
  return;
109
- // Con piu' documenti in input, indica quanti sono stati completati (es. "3/10")
110
- const progress = totalCount > 1 ? ` (${loadedCount}/${totalCount})` : '';
117
+ // Interrotto prima di calcolare qualcosa: non c'è nulla da mostrare, si torna indietro
118
+ if (loadedCount === 0) {
119
+ ShowAlert({
120
+ message: SDKUI_Localizator.RelationsCalculationStoppedEmpty,
121
+ title: SDKUI_Localizator.Attention,
122
+ duration: 6000,
123
+ mode: 'warning',
124
+ });
125
+ handleBackRef.current();
126
+ return;
127
+ }
128
+ // Testo breve: il box di ShowAlert ha altezza fissa e taglia oltre le due righe
111
129
  ShowAlert({
112
- message: `${SDKUI_Localizator.RelationsCalculationStopped}${progress}`,
130
+ message: SDKUI_Localizator.RelationsCalculationStoppedProgress.replaceParams(loadedCount.toString(), totalCount.toString()),
113
131
  title: SDKUI_Localizator.Attention,
114
- duration: 4000,
132
+ duration: 6000,
115
133
  mode: 'info',
116
134
  });
117
135
  }, []);
@@ -289,7 +307,6 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
289
307
  onRefreshAfterAddDcmtToFavs,
290
308
  },
291
309
  });
292
- const { dcmtOperations: { abortController, showWaitPanel, showPrimary, waitPanelTitle, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, }, } = features;
293
310
  // Nuovi documenti in input: il componente non sta più uscendo dalla maschera
294
311
  // (chiave stabile: l'array inputDcmts può essere ricreato a ogni render)
295
312
  const inputDcmtsKey = useMemo(() => (inputDcmts ?? []).map(d => `${d.TID}-${d.DID}`).join('|'), [inputDcmts]);
@@ -393,7 +410,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
393
410
  setContextMenuVisible(true);
394
411
  }, children: [_jsx(TMRelationViewerWrapper, { refreshKey: refreshKey, inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, showZeroDcmts: showZeroDcmts,
395
412
  // customItemRender={customItemRender}
396
- allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: handleSelectedItemsChanged, onNoRelationsFound: handleNoRelationsFound, onItemContextMenu: isRelationViewerLoading ? undefined : onItemContextMenu, focusedItemFormData: focusedItemFormData, onLoadingStateChanged: setIsRelationViewerLoading, onLoadingProgress: handleRelationsProgress, onStopCalculationReady: handleStopCalculationReady, onCalculationStopped: handleRelationsCalculationStopped, initialTreeState: treeStateRef.current, onTreeStateChange: handleTreeStateChange }), _jsx(TMContextMenu, { items: operationItems, externalControl: {
413
+ allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: handleSelectedItemsChanged, onNoRelationsFound: handleNoRelationsFound, onItemContextMenu: isRelationViewerLoading ? undefined : onItemContextMenu, onLoadingStateChanged: setIsRelationViewerLoading, onStopCalculationReady: handleStopCalculationReady, onCalculationStopped: handleRelationsCalculationStopped, initialTreeState: treeStateRef.current, onTreeStateChange: handleTreeStateChange }), _jsx(TMContextMenu, { items: operationItems, externalControl: {
397
414
  visible: contextMenuVisible,
398
415
  position: contextMenuPosition,
399
416
  onClose: () => setContextMenuVisible(false)
@@ -477,12 +494,7 @@ const TMMasterDetailDcmts = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallba
477
494
  toolbarOptions: { icon: _jsx(IconSearchCheck, { fontSize: 24 }), visible: false, orderNumber: 2, isActive: allInitialPanelVisibility['tmFormOrResult'] }
478
495
  }
479
496
  ], [tmTreeView, tmFormOrResult, focusedItem?.isDcmt, dtdMaster]);
480
- return (_jsxs("div", { style: { width: '100%', height: '100%', position: 'relative' }, children: [isCheckingFirstLoad && (_jsx(TMLoadingOverlay, { onCancel: handleCancelFirstLoad, onStop: handleStopRelationsCalculation, description: relationsProgress.max > 1
481
- ? `${isForMaster ? SDKUI_Localizator.LoadingMasterDocuments : SDKUI_Localizator.LoadingDetailDocuments} (${relationsProgress.value}/${relationsProgress.max})`
482
- : undefined, progressValue: relationsProgress.value, progressMax: relationsProgress.max,
483
- // Con un solo documento in input la chiamata è unica: non ci sono
484
- // risultati parziali da mostrare, quindi il pulsante resta disabilitato
485
- stopDisabled: (inputDcmts?.length ?? 0) <= 1 })), _jsxs("div", { style: isCheckingFirstLoad ? { position: 'absolute', width: 0, height: 0, overflow: 'hidden', opacity: 0, pointerEvents: 'none' } : { width: '100%', height: '100%' }, children: [_jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel, showWaitPanelPrimary: showPrimary, showWaitPanelSecondary: showSecondary, waitPanelTitle: waitPanelTitle, waitPanelTextPrimary: waitPanelTextPrimary, waitPanelValuePrimary: waitPanelValuePrimary, waitPanelMaxValuePrimary: waitPanelMaxValuePrimary, waitPanelTextSecondary: waitPanelTextSecondary, waitPanelValueSecondary: waitPanelValueSecondary, waitPanelMaxValueSecondary: waitPanelMaxValueSecondary, isCancelable: true, abortController: abortController, children: _jsx(TMPanelManagerProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'tmTreeView', children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", showToolbar: true }) }) }), renderDcmtOperations, renderFloatingBar] })] }));
497
+ return (_jsx("div", { style: { width: '100%', height: '100%', position: 'relative' }, children: _jsxs("div", { style: isCheckingFirstLoad ? { position: 'absolute', width: 0, height: 0, overflow: 'hidden', opacity: 0, pointerEvents: 'none' } : { width: '100%', height: '100%' }, children: [_jsx(TMLayoutContainer, { direction: 'vertical', children: _jsx(TMPanelManagerProvider, { panels: initialPanels, initialVisibility: allInitialPanelVisibility, defaultDimensions: initialPanelDimensions, initialDimensions: initialPanelDimensions, initialMobilePanelId: 'tmTreeView', children: _jsx(TMPanelManagerContainer, { panels: initialPanels, direction: "horizontal", showToolbar: true }) }) }), renderDcmtOperations, renderFloatingBar] }) }));
486
498
  };
487
499
  export default TMMasterDetailDcmts;
488
500
  /**
@@ -491,7 +503,7 @@ export default TMMasterDetailDcmts;
491
503
  * - Panel visibility toggling
492
504
  * - Focus delay handling
493
505
  */
494
- const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, customItemRender, allowMultipleSelection, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onNoRelationsFound, onItemContextMenu, focusedItemFormData, onLoadingStateChanged, onLoadingProgress, onStopCalculationReady, onCalculationStopped, initialTreeState, onTreeStateChange }) => {
506
+ const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurrentDcmtIndicator, showZeroDcmts, customItemRender, allowMultipleSelection, focusedItem, selectedItems, onFocusedItemChanged, onSelectedItemsChanged, onNoRelationsFound, onItemContextMenu, onLoadingStateChanged, onStopCalculationReady, onCalculationStopped, initialTreeState, onTreeStateChange }) => {
495
507
  const { setPanelVisibilityById, setToolbarButtonVisibility } = useTMPanelManagerContext();
496
508
  // Monitor device type changes to restore panel visibility when switching from mobile to desktop
497
509
  const deviceType = useDeviceType();
@@ -551,7 +563,7 @@ const TMRelationViewerWrapper = ({ refreshKey, inputDcmts, isForMaster, showCurr
551
563
  onItemContextMenu?.(item, e);
552
564
  }, 100);
553
565
  }, [onItemContextMenu, handleFocusedItemChanged]);
554
- return (_jsx(TMRelationViewer, { inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, initialShowZeroDcmts: showZeroDcmts, customItemRender: customItemRender, allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: onSelectedItemsChanged, maxDepthLevel: 1, invertMasterNavigation: false, showExpandAllButton: true, onNoRelationsFound: onNoRelationsFound, onItemContextMenu: onContextMenu, focusedItemFormData: focusedItemFormData, onLoadingStateChanged: onLoadingStateChanged, onLoadingProgress: onLoadingProgress, onStopCalculationReady: onStopCalculationReady, onCalculationStopped: onCalculationStopped, initialTreeState: initialTreeState, onTreeStateChange: onTreeStateChange }, refreshKey));
566
+ return (_jsx(TMRelationViewer, { inputDcmts: inputDcmts, isForMaster: isForMaster, showCurrentDcmtIndicator: showCurrentDcmtIndicator, initialShowZeroDcmts: showZeroDcmts, customItemRender: customItemRender, allowMultipleSelection: allowMultipleSelection, focusedItem: focusedItem, selectedItems: selectedItems, onFocusedItemChanged: handleFocusedItemChanged, onSelectedItemsChanged: onSelectedItemsChanged, maxDepthLevel: 1, invertMasterNavigation: false, showExpandAllButton: true, onNoRelationsFound: onNoRelationsFound, onItemContextMenu: onContextMenu, onLoadingStateChanged: onLoadingStateChanged, onStopCalculationReady: onStopCalculationReady, onCalculationStopped: onCalculationStopped, initialTreeState: initialTreeState, onTreeStateChange: onTreeStateChange }, refreshKey));
555
567
  };
556
568
  const TMFormOrResultWrapper = ({ refreshKey, deviceType, focusedItem, onTaskCreateRequest, allTasks = [], getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, onRefreshAfterAddDcmtToFavs, editPdfForm, openS4TViewer, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onRefreshSearchAsyncDatagrid, onRefreshSearchResults, handleNavigateToReference, fetchRemoteCertificates }) => {
557
569
  const { setPanelVisibilityById } = useTMPanelManagerContext();
@@ -561,117 +573,3 @@ const TMFormOrResultWrapper = ({ refreshKey, deviceType, focusedItem, onTaskCrea
561
573
  }, fetchRemoteCertificates: fetchRemoteCertificates }, refreshKey) :
562
574
  focusedItem?.searchResult === undefined ? (_jsx(TMPanel, { title: SDKUI_Localizator.SearchResult, children: _jsx(TMToppyMessage, { message: SDKUI_Localizator.SelectDocumentToViewSearchResults }) })) : (_jsx(TMSearchResult, { groupId: 'tmFormOrResult', isClosable: deviceType !== DeviceType.MOBILE, context: SearchResultContext.METADATA_SEARCH, allowFloatingBar: false, allowRelations: false, openDcmtFormAsModal: true, searchResults: focusedItem?.searchResult ?? [], showSearchResultSidebar: false, showDcmtFormSidebar: false, autoFocusFirstRow: false, onTaskCreateRequest: onTaskCreateRequest, onClose: () => { setPanelVisibilityById('tmTreeView', true); }, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, editPdfForm: editPdfForm, onOpenPdfEditorRequest: onOpenPdfEditorRequest, openS4TViewer: openS4TViewer, onOpenS4TViewerRequest: onOpenS4TViewerRequest, enablePinIcons: false, onRefreshAfterAddDcmtToFavs: onRefreshAfterAddDcmtToFavs, showBackButton: false, onRefreshSearchAsyncDatagrid: onRefreshSearchResults, onReferenceClick: handleNavigateToReference, fetchRemoteCertificates: fetchRemoteCertificates }, refreshKey)) }));
563
575
  };
564
- const TMLoadingOverlay = ({ onCancel, onStop, description, cancelText, stopText, progressValue, progressMax, stopDisabled }) => {
565
- // Stesso calcolo di TMWaitPanel: 0 quando il massimo non è ancora noto
566
- const progressPercent = (progressMax ?? 0) > 0
567
- ? Math.min(100, ((progressValue ?? 0) / (progressMax ?? 1)) * 100)
568
- : 0;
569
- return (_jsx("div", { style: {
570
- position: 'absolute',
571
- top: 0,
572
- left: 0,
573
- width: '100%',
574
- height: '100%',
575
- backgroundColor: 'rgba(248, 250, 252, 0.92)',
576
- zIndex: 1000,
577
- display: 'flex',
578
- justifyContent: 'center',
579
- alignItems: 'center',
580
- }, children: _jsxs("div", { style: {
581
- display: 'flex',
582
- flexDirection: 'column',
583
- alignItems: 'center',
584
- gap: '16px',
585
- padding: '24px 32px',
586
- background: '#fcfcfc',
587
- borderRadius: '8px',
588
- boxShadow: '0 4px 16px rgba(0, 0, 0, 0.1)',
589
- }, children: [_jsxs("div", { style: { position: 'relative', width: '80px', height: '80px' }, children: [_jsx("img", { style: {
590
- position: 'absolute',
591
- top: '50%',
592
- left: '50%',
593
- transform: 'translate(-54%, -54%)'
594
- }, src: sixLogo, width: 35, alt: "" }), _jsx("style", { children: `
595
- @keyframes tmSpinnerRotate {
596
- 0% { transform: rotate(0deg); }
597
- 100% { transform: rotate(360deg); }
598
- }
599
- .tm-spinner-animation {
600
- display: inline-block;
601
- width: 80px;
602
- height: 80px;
603
- position: absolute;
604
- top: 50%;
605
- left: 50%;
606
- transform: translate(-50%, -50%);
607
- }
608
- .tm-spinner-animation div {
609
- animation: tmSpinnerRotate 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
610
- transform-origin: 40px 40px;
611
- }
612
- .tm-spinner-animation div:after {
613
- content: " ";
614
- display: block;
615
- position: absolute;
616
- width: 7px;
617
- height: 7px;
618
- border-radius: 50%;
619
- background: #0c448e;
620
- margin: -4px 0 0 -4px;
621
- }
622
- .tm-spinner-animation div:nth-child(1) { animation-delay: -0.036s; }
623
- .tm-spinner-animation div:nth-child(1):after { top: 63px; left: 63px; background: #f7a51f; }
624
- .tm-spinner-animation div:nth-child(2) { animation-delay: -0.072s; }
625
- .tm-spinner-animation div:nth-child(2):after { top: 68px; left: 56px; background: #f7a51f; }
626
- .tm-spinner-animation div:nth-child(3) { animation-delay: -0.108s; }
627
- .tm-spinner-animation div:nth-child(3):after { top: 71px; left: 48px; background: #d3237b; }
628
- .tm-spinner-animation div:nth-child(4) { animation-delay: -0.144s; }
629
- .tm-spinner-animation div:nth-child(4):after { top: 72px; left: 40px; background: #d3237b; }
630
- .tm-spinner-animation div:nth-child(5) { animation-delay: -0.18s; }
631
- .tm-spinner-animation div:nth-child(5):after { top: 71px; left: 32px; background: #d12a1c; }
632
- .tm-spinner-animation div:nth-child(6) { animation-delay: -0.216s; }
633
- .tm-spinner-animation div:nth-child(6):after { top: 68px; left: 24px; background: #d12a1c; }
634
- .tm-spinner-animation div:nth-child(7) { animation-delay: -0.252s; }
635
- .tm-spinner-animation div:nth-child(7):after { top: 63px; left: 17px; background: #782b7d; }
636
- .tm-spinner-animation div:nth-child(8) { animation-delay: -0.288s; }
637
- .tm-spinner-animation div:nth-child(8):after { top: 56px; left: 12px; background: #782b7d; }
638
- ` }), _jsxs("div", { className: "tm-spinner-animation", children: [_jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {}), _jsx("div", {})] })] }), _jsx("span", { style: { fontSize: '14px', color: '#334155', textAlign: 'center' }, children: description ?? SDKUI_Localizator.Loading }), (progressMax ?? 0) > 1 && (_jsxs("div", { style: { width: '260px' }, children: [_jsx("div", { style: { width: '100%', height: '20px', background: '#e0e0e0', borderRadius: '10px', overflow: 'hidden' }, children: _jsx("div", { style: { width: `${progressPercent.toFixed(2)}%`, height: '100%', background: '#4caf50', transition: 'width 0.3s ease' } }) }), _jsxs("p", { style: { fontWeight: 'bold', color: '#333', margin: '8px 0 0', textAlign: 'center' }, children: [progressPercent.toFixed(2), "%"] })] })), (onStop || onCancel) && (_jsxs("div", { style: { marginTop: '4px', display: 'flex', alignItems: 'center', justifyContent: 'center', flexWrap: 'wrap', gap: '10px' }, children: [onStop && (_jsx("button", { onClick: onStop, disabled: stopDisabled, title: SDKUI_Localizator.StopRelationsCalculation, style: {
639
- padding: '8px 24px',
640
- fontSize: '13px',
641
- fontWeight: 500,
642
- color: stopDisabled ? '#94a3b8' : 'white',
643
- background: stopDisabled ? '#e2e8f0' : '#0c448e',
644
- border: `1.5px solid ${stopDisabled ? '#e2e8f0' : '#0c448e'}`,
645
- borderRadius: '6px',
646
- cursor: stopDisabled ? 'not-allowed' : 'pointer',
647
- transition: 'all 0.2s ease',
648
- }, onMouseEnter: (e) => {
649
- if (stopDisabled)
650
- return;
651
- e.currentTarget.style.background = '#0a3872';
652
- e.currentTarget.style.borderColor = '#0a3872';
653
- }, onMouseLeave: (e) => {
654
- if (stopDisabled)
655
- return;
656
- e.currentTarget.style.background = '#0c448e';
657
- e.currentTarget.style.borderColor = '#0c448e';
658
- }, children: stopText ?? SDKUI_Localizator.ShowPartialResults })), onCancel && (_jsx("button", { onClick: onCancel, style: {
659
- padding: '8px 24px',
660
- fontSize: '13px',
661
- fontWeight: 500,
662
- color: '#64748b',
663
- background: 'transparent',
664
- border: '1.5px solid #cbd5e1',
665
- borderRadius: '6px',
666
- cursor: 'pointer',
667
- transition: 'all 0.2s ease',
668
- }, onMouseEnter: (e) => {
669
- e.currentTarget.style.background = '#f1f5f9';
670
- e.currentTarget.style.borderColor = '#94a3b8';
671
- e.currentTarget.style.color = '#475569';
672
- }, onMouseLeave: (e) => {
673
- e.currentTarget.style.background = 'transparent';
674
- e.currentTarget.style.borderColor = '#cbd5e1';
675
- e.currentTarget.style.color = '#64748b';
676
- }, children: cancelText ?? SDKUI_Localizator.Back }))] }))] }) }));
677
- };
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { DcmtTypeDescriptor } from '@topconsultnpm/sdk-ts';
2
3
  import { DcmtInfo } from '../../../ts';
3
4
  interface TMMasterInfoFieldsProps {
@@ -15,5 +16,5 @@ interface TMMasterInfoFieldsProps {
15
16
  */
16
17
  isExpandedView?: boolean;
17
18
  }
18
- declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) => import("react/jsx-runtime").JSX.Element;
19
+ declare const TMMasterInfoFields: ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExpandedView }: TMMasterInfoFieldsProps) => React.JSX.Element;
19
20
  export default TMMasterInfoFields;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useState } from 'react';
3
3
  import { DataListViewModes, MetadataDataDomains, SDK_Globals } from '@topconsultnpm/sdk-ts';
4
4
  import { hoverStyle, IconChevronDown, IconClearButton, IconCopy, IconSearch, IconSuccess, SDKUI_Localizator } from '../../../helper';
5
- import { formatScalarValue, getUserMetadataSorted } from '../../../helper/dcmtsHelper';
5
+ import { canViewMetadata, formatScalarValue, getUserMetadataSorted } from '../../../helper/dcmtsHelper';
6
6
  import { useDataListItem } from '../../../hooks/useDataListItem';
7
7
  import { TMColors } from '../../../utils/theme';
8
8
  import ShowAlert from '../../base/TMAlert';
@@ -84,7 +84,8 @@ const TMMasterInfoFields = ({ dtd, dcmt, getValuesByMidAsync, reloadToken, isExp
84
84
  setRows([]);
85
85
  return;
86
86
  }
87
- const metadata = getUserMetadataSorted(dtd);
87
+ // I metadati che l'utente non può vedere non si mostrano, come nel risultato di ricerca
88
+ const metadata = getUserMetadataSorted(dtd).filter(canViewMetadata);
88
89
  // Precarica le liste dati referenziate dai metadati, così le card mostrano subito il valore leggibile
89
90
  const dataListIDs = new Set();
90
91
  metadata.forEach(md => { if (md.dataDomain === MetadataDataDomains.DataList && md.dataListID)
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { DcmtInfo } from '../../../ts';
2
3
  import { HomeBlogPost, TaskDescriptor } from '@topconsultnpm/sdk-ts';
3
4
  import { TMCopyToFolderMode } from '../../../hooks/useDocumentOperations';
@@ -19,5 +20,5 @@ interface ITMMergeToPdfFormProps {
19
20
  * Form per l'unione di più documenti PDF in un singolo file.
20
21
  * Condivide TMDownloadRelationViewerSection e gli helper in copyAndMergeDcmtsShared con TMCopyToFolderForm.
21
22
  */
22
- declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) => import("react/jsx-runtime").JSX.Element;
23
+ declare const TMMergeToPdfForm: (props: ITMMergeToPdfFormProps) => React.JSX.Element;
23
24
  export default TMMergeToPdfForm;
@@ -8,8 +8,8 @@ import { useDeviceType } from '../../base/TMDeviceProvider';
8
8
  import TMTextBox from '../../editors/TMTextBox';
9
9
  import { ButtonNames, TMMessageBoxManager } from '../../base/TMPopUp';
10
10
  import { useDcmtOperations } from '../../../hooks/useDcmtOperations';
11
- import { TMLayoutWaitingContainer } from '../../base/TMWaitPanel';
12
11
  import { TMSplitterLayout } from '../../base/TMLayout';
12
+ import TMWaitPanelManager from '../../base/waitPanel/TMWaitPanelManager';
13
13
  import { TMColors } from '../../../utils/theme';
14
14
  import TMDownloadRelationViewerSection from './TMDownloadRelationViewerSection';
15
15
  import { getDcmtInfosToDownload, getFloatingLabelStyle, isDirectoryPickerSupported, MIN_PDF_FOR_MERGE, } from './copyAndMergeDcmtsShared';
@@ -50,16 +50,12 @@ const toPdfOrderRetrieveFormat = (format) => {
50
50
  */
51
51
  const TMMergeToPdfForm = (props) => {
52
52
  const { mode, selectedDcmtInfos, selectedItemsFull, onClose, showTMRelationViewer, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers } = props;
53
- const { abortController, showWaitPanel, waitPanelTitle, showPrimary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, showSecondary, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, downloadDcmtsAsync, } = useDcmtOperations();
53
+ // Il wait panel del download lo apre e lo aggiorna l'hook: qui serve solo la funzione.
54
+ const { downloadDcmtsAsync } = useDcmtOperations();
54
55
  const deviceType = useDeviceType();
55
56
  const [pdfFileName, setPdfFileName] = useState(`${SDKUI_Localizator.Result.toLowerCase()}.pdf`);
56
57
  const [destinationFolder, setDestinationFolder] = useState('Download');
57
58
  const [selectedItemsRelationViewer, setSelectedItemsRelationViewer] = useState([]);
58
- // ---- Stato per il merge PDF (progress bar) ----
59
- const [isMergingPdf, setIsMergingPdf] = useState(false);
60
- const [mergeProgressText, setMergeProgressText] = useState('');
61
- const [mergeProgressValue, setMergeProgressValue] = useState(0);
62
- const [mergeProgressMax, setMergeProgressMax] = useState(0);
63
59
  // ---- Ref per la selezione cartella (File System Access API) ----
64
60
  const folderHandleRef = useRef(null);
65
61
  const skipSelectFolderRef = useRef(false);
@@ -156,32 +152,36 @@ const TMMergeToPdfForm = (props) => {
156
152
  // Raccoglie gli errori come downloadDcmtsAsync
157
153
  const metadataConversionResults = [];
158
154
  if (metadataOnlyDcmts.length > 0) {
159
- setIsMergingPdf(true);
160
- setMergeProgressMax(metadataOnlyDcmts.length);
161
- setMergeProgressValue(0);
162
- setMergeProgressText('Creazione PDF metadati...');
155
+ const metadataPanel = TMWaitPanelManager.show({
156
+ title: SDKUI_Localizator.MergeToPdf,
157
+ subtitle: 'Creazione PDF metadati...',
158
+ max: metadataOnlyDcmts.length,
159
+ });
163
160
  for (let i = 0; i < metadataOnlyDcmts.length; i++) {
164
161
  const dcmt = metadataOnlyDcmts[i];
165
162
  try {
166
- setMergeProgressValue(i);
167
- setMergeProgressText(`Creazione PDF metadati... (${i + 1}/${metadataOnlyDcmts.length})`);
163
+ metadataPanel.setSubtitle(`Creazione PDF metadati... (${i + 1}/${metadataOnlyDcmts.length})`);
168
164
  const conversionResult = await createMetadataPdfFromDocument(dcmt);
169
165
  if (conversionResult) {
170
166
  pdfFilesMap.set(`${dcmt.TID}_${dcmt.DID}`, conversionResult.file);
171
167
  metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.SUCCESS });
168
+ metadataPanel.ok();
172
169
  }
173
170
  else {
174
171
  // createMetadataPdfFromDocument ha restituito null (errore interno loggato)
175
172
  metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: 'Creazione PDF metadati fallita' });
173
+ metadataPanel.error();
176
174
  }
177
175
  }
178
176
  catch (error) {
179
177
  console.error(`Errore creazione PDF metadati per TID=${dcmt.TID}, DID=${dcmt.DID}`, error);
180
178
  metadataConversionResults.push({ rowIndex: i, id1: dcmt.TID, id2: dcmt.DID, resultType: ResultTypes.ERROR, description: getExceptionMessage(error) });
179
+ metadataPanel.error();
181
180
  }
181
+ // Avanza a conversione conclusa: con un solo documento la barra non parte dal 100%
182
+ await metadataPanel.step();
182
183
  }
183
- setMergeProgressValue(metadataOnlyDcmts.length);
184
- setIsMergingPdf(false);
184
+ metadataPanel.close();
185
185
  // Mostra riepilogo errori se presenti (come downloadDcmtsAsync)
186
186
  const hasErrors = metadataConversionResults.some(r => r.resultType === ResultTypes.ERROR);
187
187
  if (hasErrors) {
@@ -227,16 +227,17 @@ const TMMergeToPdfForm = (props) => {
227
227
  if (!pdfFiles)
228
228
  return;
229
229
  const finalName = pdfFileName.trim().toLowerCase().endsWith('.pdf') ? pdfFileName.trim() : pdfFileName.trim() + '.pdf';
230
- // Inizializza progress bar per il merge
231
- setIsMergingPdf(true);
232
- setMergeProgressMax(pdfFiles.length);
233
- setMergeProgressValue(0);
234
- setMergeProgressText(SDKUI_Localizator.MergeToPdf);
230
+ // Il merge non e' interrompibile: pannello senza Interrompi.
231
+ const mergePanel = TMWaitPanelManager.show({
232
+ title: SDKUI_Localizator.MergeToPdf,
233
+ subtitle: SDKUI_Localizator.MergeToPdf,
234
+ max: pdfFiles.length,
235
+ showCounters: false,
236
+ });
235
237
  try {
236
238
  const mergeOptions = {
237
239
  onProgress: (current, total, file) => {
238
- setMergeProgressValue(current);
239
- setMergeProgressText(`${SDKUI_Localizator.MergeToPdf}: ${file.name}`);
240
+ mergePanel.update({ value: current, subtitle: `${SDKUI_Localizator.MergeToPdf}: ${file.name}` });
240
241
  }
241
242
  };
242
243
  // Se c'è una cartella selezionata (non Download di default), salva direttamente nella cartella
@@ -260,7 +261,7 @@ const TMMergeToPdfForm = (props) => {
260
261
  return;
261
262
  }
262
263
  finally {
263
- setIsMergingPdf(false);
264
+ mergePanel.close();
264
265
  }
265
266
  onClose();
266
267
  };
@@ -361,29 +362,29 @@ const TMMergeToPdfForm = (props) => {
361
362
  ? SDKUI_Localizator.FileNotPdfWillBeExcluded.replaceParams(extLabel)
362
363
  : SDKUI_Localizator.FilesNotPdfWillBeExcluded.replaceParams(nonPdfSelectedItems.length.toString(), extLabel);
363
364
  })() }))] })] }))] })] }));
364
- return (_jsx(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showWaitPanel || isMergingPdf, showWaitPanelPrimary: isMergingPdf ? true : showPrimary, showWaitPanelSecondary: isMergingPdf ? false : showSecondary, waitPanelTitle: isMergingPdf ? SDKUI_Localizator.MergeToPdf : waitPanelTitle, waitPanelTextPrimary: isMergingPdf ? mergeProgressText : waitPanelTextPrimary, waitPanelValuePrimary: isMergingPdf ? mergeProgressValue : waitPanelValuePrimary, waitPanelMaxValuePrimary: isMergingPdf ? mergeProgressMax : waitPanelMaxValuePrimary, waitPanelTextSecondary: isMergingPdf ? '' : waitPanelTextSecondary, waitPanelValueSecondary: isMergingPdf ? 0 : waitPanelValueSecondary, waitPanelMaxValueSecondary: isMergingPdf ? 0 : waitPanelMaxValueSecondary, isCancelable: !isMergingPdf, abortController: abortController, usePortal: true, children: _jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '90%' : '500px', '95%'), height: showTMRelationViewer ? '95%' : 'auto', title: getTitle(), onClose: onClose, showCloseButton: true, children: _jsxs("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: ["50", "50"], start: ["70%", "30%"], children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMMergeToPdf-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsxs("button", { disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge, onClick: run, style: {
365
- display: 'flex',
366
- alignItems: 'center',
367
- justifyContent: 'center',
368
- gap: '6px',
369
- padding: '8px 20px',
370
- fontSize: '0.95rem',
371
- fontWeight: 600,
372
- color: '#fff',
373
- background: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
374
- ? '#b0b0b0'
375
- : 'linear-gradient(135deg, #28a745 0%, #218838 100%)',
376
- border: 'none',
377
- borderRadius: '6px',
378
- cursor: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge) ? 'not-allowed' : 'pointer',
379
- boxShadow: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
380
- ? 'none'
381
- : '0 2px 8px rgba(40, 167, 69, 0.35)',
382
- transition: 'all 0.2s ease',
383
- }, children: [_jsx(IconPlay, {}), _jsx("span", { children: mergeableSelectedCount === 0
384
- ? SDKUI_Localizator.MergeToPdf
385
- : mergeableSelectedCount > 999
386
- ? _jsx(TMTooltip, { content: mergeableSelectedCount.toString(), children: SDKUI_Localizator.MergeFilesToPdf.replaceParams('999+') })
387
- : SDKUI_Localizator.MergeFilesToPdf.replaceParams(mergeableSelectedCount.toString()) })] }) })] }) }) }));
365
+ return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, showTMRelationViewer ? '90%' : '500px', showTMRelationViewer ? '90%' : '500px', '95%'), height: showTMRelationViewer ? '95%' : 'auto', title: getTitle(), onClose: onClose, showCloseButton: true, children: _jsxs("div", { onContextMenu: (e) => e.preventDefault(), style: { display: 'flex', flexDirection: 'column', gap: '16px', padding: '16px', width: '100%', height: '100%', boxSizing: 'border-box', overflow: 'hidden' }, children: [showTMRelationViewer ? (_jsx("div", { style: { flex: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }, children: _jsxs(TMSplitterLayout, { direction: 'vertical', showSeparator: true, separatorSize: 8, separatorColor: 'transparent', separatorActiveColor: 'transparent', overflow: 'hidden', min: ["50", "50"], start: ["70%", "30%"], children: [_jsx(TMDownloadRelationViewerSection, { selectedDcmtInfos: selectedDcmtInfos, onSelectionChanged: setSelectedItemsRelationViewer, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers }), configSection] }, "TMMergeToPdf-relation-config") })) : (configSection), _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: 0, marginTop: '12px' }, children: _jsxs("button", { disabled: !isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge, onClick: run, style: {
366
+ display: 'flex',
367
+ alignItems: 'center',
368
+ justifyContent: 'center',
369
+ gap: '6px',
370
+ padding: '8px 20px',
371
+ fontSize: '0.95rem',
372
+ fontWeight: 600,
373
+ color: '#fff',
374
+ background: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
375
+ ? '#b0b0b0'
376
+ : 'linear-gradient(135deg, #28a745 0%, #218838 100%)',
377
+ border: 'none',
378
+ borderRadius: '6px',
379
+ cursor: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge) ? 'not-allowed' : 'pointer',
380
+ boxShadow: (!isFormValid() || (showTMRelationViewer && selectedItemsRelationViewer.filter(i => i.isDcmt).length === 0) || !hasEnoughPdfForMerge)
381
+ ? 'none'
382
+ : '0 2px 8px rgba(40, 167, 69, 0.35)',
383
+ transition: 'all 0.2s ease',
384
+ }, children: [_jsx(IconPlay, {}), _jsx("span", { children: mergeableSelectedCount === 0
385
+ ? SDKUI_Localizator.MergeToPdf
386
+ : mergeableSelectedCount > 999
387
+ ? _jsx(TMTooltip, { content: mergeableSelectedCount.toString(), children: SDKUI_Localizator.MergeFilesToPdf.replaceParams('999+') })
388
+ : SDKUI_Localizator.MergeFilesToPdf.replaceParams(mergeableSelectedCount.toString()) })] }) })] }) }));
388
389
  };
389
390
  export default TMMergeToPdfForm;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { DcmtTypeDescriptor, HomeBlogPost, ObjectRef, TaskDescriptor } from "@topconsultnpm/sdk-ts";
2
3
  import { DcmtInfo, IGraphometricManagerProp, TaskContext } from "../../../ts";
3
4
  import { IntesiCertificateData } from "../../../helper";
@@ -41,5 +42,5 @@ interface TMMultiMasterDetailDcmtsFormProps {
41
42
  }>, tid?: number) => void;
42
43
  openWGsCopyMoveForm?: (mode: "copyToWgDraft" | "copyToWgArchivedDoc", dcmtTypeDescriptor: DcmtTypeDescriptor, documents: Array<DcmtInfo>) => void;
43
44
  }
44
- declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) => import("react/jsx-runtime").JSX.Element | null;
45
+ declare const TMMultiMasterDetailDcmtsForm: (props: TMMultiMasterDetailDcmtsFormProps) => React.JSX.Element | null;
45
46
  export default TMMultiMasterDetailDcmtsForm;
@@ -6,7 +6,6 @@ import { SearchResultContext } from "../../../ts";
6
6
  import { getFullFileExtension, getMultiDetailModalSize, getMultiDetailPanelStates, hasMultiDetailPanelStates, hoverStyle, IconArchive, IconArrowDown, IconArrowUp, IconDelete, IconDuplicate, IconEdit, IconEraser, IconInfo, IconMenuVertical, IconRefresh, IconSearch, IconSearchCheck, saveMultiDetailModalSize, saveMultiDetailPanelStates, SDKUI_Localizator } from "../../../helper";
7
7
  import { TMColors } from "../../../utils/theme";
8
8
  import { DeviceType, useDeviceType } from "../../base/TMDeviceProvider";
9
- import { TMLayoutWaitingContainer } from "../../base/TMWaitPanel";
10
9
  import TMModal from "../../base/TMModal";
11
10
  import TMDataGrid from "../../base/TMDataGrid";
12
11
  import TMTooltip from "../../base/TMTooltip";
@@ -48,7 +47,7 @@ const styles = {
48
47
  const MOBILE_SECTION = 'archiveList';
49
48
  const TMMultiMasterDetailDcmtsForm = (props) => {
50
49
  const { dtd, masterDcmt, onClose, canNavigateMaster, onNavigateMaster, allTasks, getAllTasks, deleteTaskByIdsCallback, addTaskCallback, editTaskCallback, handleNavigateToWGs, handleNavigateToDossiers, showDcmtFormSidebar, showTodoDcmtForm, openFileUploaderPdfEditor, graphometricManager, editPdfForm, openS4TViewer, showToppyDraggableHelpCenter, toppyHelpCenterUsePortal, fetchRemoteCertificates, onOpenS4TViewerRequest, onOpenPdfEditorRequest, onReferenceClick, onTaskCreateRequest, onRefreshAfterAddDcmtToFavs, onFileOpened, passToArchiveCallback, openWGsCopyMoveForm } = props;
51
- const { isLoading, isSummaryReady, phase, setPhase, detailRelationItems, selectedRelation, selectedItem, hasMultipleTypes, selectRelation, backToTypeSelection, isBackLocked, closeModal, isMasterNavigationEnabled, canNavigateMasterPrev, canNavigateMasterNext, navigateMaster, sectionsOpen, setSectionOpen, openAllSections, clearLayout, layoutResetToken, hasSavedLayout, setHasSavedLayout, canUpdateMaster, masterFieldsCount, getMasterMetadataAsync, masterInfoReloadToken, isOpenMasterForm, setIsOpenMasterForm, handleMasterSavedAsync, archivedDetailResults, archivedDetailsCount, isLoadingArchivedDetails, refreshArchivedDetailsAsync, detailColumns, detailSupportsFile, archiveRows, currentRows, focusedRowKey, setFocusedRowKey, selectedRowKeys, setSelectedRowKeys, isOpenAddForm, editingRowId, editingRow, formInputMids, openAddForm, openEditForm, closeAddForm, deleteRow, duplicateRow, upsertRow, updateRowValues, copyArchivedDetailToRows, stopOnFirstError, setStopOnFirstError, isArchiving, archiveAllAsync, waitPanel, abortController, } = useMultiMasterDetailDcmts({ dtd, masterDcmt, onClose, canNavigateMaster, onNavigateMaster });
50
+ const { isLoading, isSummaryReady, phase, setPhase, detailRelationItems, selectedRelation, selectedItem, hasMultipleTypes, selectRelation, backToTypeSelection, isBackLocked, closeModal, isMasterNavigationEnabled, canNavigateMasterPrev, canNavigateMasterNext, navigateMaster, sectionsOpen, setSectionOpen, openAllSections, clearLayout, layoutResetToken, hasSavedLayout, setHasSavedLayout, canUpdateMaster, masterFieldsCount, getMasterMetadataAsync, masterInfoReloadToken, isOpenMasterForm, setIsOpenMasterForm, handleMasterSavedAsync, archivedDetailResults, archivedDetailsCount, isLoadingArchivedDetails, refreshArchivedDetailsAsync, detailColumns, detailSupportsFile, archiveRows, currentRows, focusedRowKey, setFocusedRowKey, selectedRowKeys, setSelectedRowKeys, isOpenAddForm, editingRowId, editingRow, formInputMids, openAddForm, openEditForm, closeAddForm, deleteRow, duplicateRow, upsertRow, updateRowValues, copyArchivedDetailToRows, stopOnFirstError, setStopOnFirstError, isArchiving, archiveAllAsync, } = useMultiMasterDetailDcmts({ dtd, masterDcmt, onClose, canNavigateMaster, onNavigateMaster });
52
51
  const deviceType = useDeviceType();
53
52
  // Su mobile il panel manager mostra un pannello alla volta: le sezioni si raggiungono dalla sua barra
54
53
  const isMobile = useMemo(() => deviceType === DeviceType.MOBILE, [deviceType]);
@@ -301,19 +300,19 @@ const TMMultiMasterDetailDcmtsForm = (props) => {
301
300
  // ----- Render principale --------------------------------------------------------------------
302
301
  if (isLoading)
303
302
  return null;
304
- return _jsxs(_Fragment, { children: [_jsx("div", { style: { width: 0, height: 0 }, children: _jsx(TMLayoutWaitingContainer, { direction: 'vertical', ...waitPanel, isCancelable: true, abortController: abortController, usePortal: true, children: _jsx(TMModal, { width: modalSize.width, height: modalSize.height, onClose: closeModal, onResized: persistModalSize, sizeResetToken: layoutResetToken, title: modalTitle, hidePopup: false, askClosingConfirm: archiveRows.length > 0, recenterOnResize: true, titleActions: renderTitleActions(), children: _jsxs("div", { style: styles.content, children: [hasMultipleTypes && _jsx("div", { style: styles.header, children: renderStepper({
305
- steps,
306
- phase,
307
- hasMultipleTypes,
308
- isBackLocked,
309
- showBackArrow: isSummaryPhase,
310
- onBack: backToTypeSelection,
311
- onStepClick: (stepPhase) => (stepPhase === MultiDetailArchivePhase.SelectDcmtType ? backToTypeSelection() : setPhase(stepPhase)),
312
- }) }), !isSummaryPhase
313
- ? renderSelectDcmtType({ detailRelationItems, selectedRelation, onSelectRelation: selectRelation })
314
- : (isSummaryReady
315
- ? renderArchiveSummary()
316
- : _jsx("div", { style: styles.loader, children: _jsx(LoadIndicator, { height: 40, width: 40 }) }))] }) }) }) }), isOpenAddForm && selectedRelation?.detailTID && (_jsx(TMDcmtForm, { isModal: true, titleModal: getDtdDisplayName(selectedItem?.detailDtd), TID: selectedRelation.detailTID, layoutMode: LayoutModes.Ark, showBackButton: false, allowButtonsRefs: false, inputMids: formInputMids, inputFile: editingRow?.__file ?? null, archiveListMode: {
303
+ return _jsxs(_Fragment, { children: [_jsx("div", { style: { width: 0, height: 0 }, children: _jsx(TMModal, { width: modalSize.width, height: modalSize.height, onClose: closeModal, onResized: persistModalSize, sizeResetToken: layoutResetToken, title: modalTitle, hidePopup: false, askClosingConfirm: archiveRows.length > 0, recenterOnResize: true, titleActions: renderTitleActions(), children: _jsxs("div", { style: styles.content, children: [hasMultipleTypes && _jsx("div", { style: styles.header, children: renderStepper({
304
+ steps,
305
+ phase,
306
+ hasMultipleTypes,
307
+ isBackLocked,
308
+ showBackArrow: isSummaryPhase,
309
+ onBack: backToTypeSelection,
310
+ onStepClick: (stepPhase) => (stepPhase === MultiDetailArchivePhase.SelectDcmtType ? backToTypeSelection() : setPhase(stepPhase)),
311
+ }) }), !isSummaryPhase
312
+ ? renderSelectDcmtType({ detailRelationItems, selectedRelation, onSelectRelation: selectRelation })
313
+ : (isSummaryReady
314
+ ? renderArchiveSummary()
315
+ : _jsx("div", { style: styles.loader, children: _jsx(LoadIndicator, { height: 40, width: 40 }) }))] }) }) }), isOpenAddForm && selectedRelation?.detailTID && (_jsx(TMDcmtForm, { isModal: true, titleModal: getDtdDisplayName(selectedItem?.detailDtd), TID: selectedRelation.detailTID, layoutMode: LayoutModes.Ark, showBackButton: false, allowButtonsRefs: false, inputMids: formInputMids, inputFile: editingRow?.__file ?? null, archiveListMode: {
317
316
  isEditingRow: editingRowId !== undefined,
318
317
  onUpsertRow: (values, file) => upsertRow(values, file),
319
318
  }, onClose: closeAddForm, allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar, showTodoDcmtForm: showTodoDcmtForm, openFileUploaderPdfEditor: openFileUploaderPdfEditor, graphometricManager: graphometricManager })), isOpenMasterForm && masterDcmt?.TID !== undefined && masterDcmt?.DID !== undefined && (_jsx(TMDcmtForm, { isModal: true, titleModal: `${SDKUI_Localizator.Update}: ${getDtdDisplayName(dtd)}`, TID: masterDcmt.TID, DID: masterDcmt.DID, layoutMode: LayoutModes.Update, showBackButton: false, allowRelations: false, allowButtonsRefs: false, onSavedAsyncCallback: handleMasterSavedAsync, onClose: () => setIsOpenMasterForm(false), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, onTaskCreateRequest: onTaskCreateRequest, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, showDcmtFormSidebar: showDcmtFormSidebar, showTodoDcmtForm: showTodoDcmtForm, openFileUploaderPdfEditor: openFileUploaderPdfEditor, graphometricManager: graphometricManager, editPdfForm: editPdfForm, openS4TViewer: openS4TViewer, fetchRemoteCertificates: fetchRemoteCertificates, onOpenS4TViewerRequest: onOpenS4TViewerRequest, onOpenPdfEditorRequest: onOpenPdfEditorRequest, onReferenceClick: onReferenceClick }))] });
@@ -87,7 +87,7 @@ export declare const toGridNumber: (value: unknown) => number | undefined;
87
87
  * si rilegge nel form, si mostra in griglia e si archivia come una riga compilata a mano
88
88
  */
89
89
  export declare const toArchiveRowValue: (value: MetadataScalarValue, dataType: MetadataDataTypes | undefined) => string;
90
- /** Colonne della griglia di riepilogo dai metadati (utente) del tipo documento */
90
+ /** Colonne della griglia di riepilogo dai metadati (utente) del tipo documento, esclusi quelli che l'utente non può vedere */
91
91
  export declare const buildColumnsFromDtd: (dtd: DcmtTypeDescriptor | undefined, renderDataListCell: (value: string | Date | number | undefined, dataListID: number, viewMode: DataListViewModes) => React.ReactElement) => Array<IColumnProps>;
92
92
  export declare const getDetailDtdAsync: (detailTID: number | undefined) => Promise<DcmtTypeDescriptor | undefined>;
93
93
  /** Nome visualizzato del tipo documento (localizzato se richiesto) */
@@ -312,7 +312,7 @@ export interface RenderStepperParams {
312
312
  /** Click su uno step completato: riceve la fase di destinazione */
313
313
  onStepClick: (phase: number) => void;
314
314
  }
315
- export declare const renderStepper: ({ steps, phase, hasMultipleTypes, isBackLocked, showBackArrow, onBack, onStepClick }: RenderStepperParams) => import("react/jsx-runtime").JSX.Element;
315
+ export declare const renderStepper: ({ steps, phase, hasMultipleTypes, isBackLocked, showBackArrow, onBack, onStepClick }: RenderStepperParams) => React.JSX.Element;
316
316
  export interface RenderSelectDcmtTypeParams {
317
317
  /** Relazioni di dettaglio fra cui scegliere */
318
318
  detailRelationItems: Array<DetailRelationItem>;
@@ -321,7 +321,7 @@ export interface RenderSelectDcmtTypeParams {
321
321
  /** Selezione di una relazione */
322
322
  onSelectRelation: (item: DetailRelationItem) => void;
323
323
  }
324
- export declare const renderSelectDcmtType: ({ detailRelationItems, selectedRelation, onSelectRelation }: RenderSelectDcmtTypeParams) => import("react/jsx-runtime").JSX.Element;
324
+ export declare const renderSelectDcmtType: ({ detailRelationItems, selectedRelation, onSelectRelation }: RenderSelectDcmtTypeParams) => React.JSX.Element;
325
325
  export interface RenderAccordionHeaderParams {
326
326
  /** Sezione a cui appartiene la testata */
327
327
  section: AccordionSection;
@@ -340,7 +340,7 @@ export interface RenderAccordionHeaderParams {
340
340
  /** Apre/chiude la sezione */
341
341
  onToggleOpen: (section: AccordionSection, isOpen: boolean) => void;
342
342
  }
343
- export declare const renderAccordionHeader: ({ section, isOpen, tooltip, count, title, actions, panel, onToggleOpen }: RenderAccordionHeaderParams) => import("react/jsx-runtime").JSX.Element;
343
+ export declare const renderAccordionHeader: ({ section, isOpen, tooltip, count, title, actions, panel, onToggleOpen }: RenderAccordionHeaderParams) => React.JSX.Element;
344
344
  /**
345
345
  * Contenuto di un pannello: il contesto del panel manager è leggibile solo dentro l'albero del
346
346
  * provider, quindi è qui che si prende lo stato di ingrandimento da passare alla sezione
@@ -349,7 +349,7 @@ export declare const TMSummarySectionSlot: ({ section, render, onBeforeMaximize
349
349
  section: AccordionSection;
350
350
  render: (panel: SectionPanelState) => React.ReactNode;
351
351
  onBeforeMaximize?: (section: AccordionSection) => void;
352
- }) => import("react/jsx-runtime").JSX.Element;
352
+ }) => React.JSX.Element;
353
353
  /**
354
354
  * Segnala che l'utente ha spostato un separatore: è l'unico caso in cui le altezze dei pannelli sono
355
355
  * una sua scelta, quindi la sola da salvare. Le quote calcolate all'apertura del riepilogo o al