@topconsultnpm/sdkui-react 6.22.0-dev4.2 → 6.22.0-dev4.21

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 (150) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +43 -45
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +60 -67
  3. package/lib/components/base/Styled.d.ts +77 -93
  4. package/lib/components/base/TMAlert.d.ts +2 -1
  5. package/lib/components/base/TMAlert.js +7 -6
  6. package/lib/components/base/TMCounterBar.d.ts +2 -2
  7. package/lib/components/base/TMCounterContainer.d.ts +4 -3
  8. package/lib/components/base/TMCounterContainer.js +16 -1
  9. package/lib/components/base/TMCustomButton.d.ts +1 -1
  10. package/lib/components/base/TMDataGrid.js +24 -4
  11. package/lib/components/base/TMDataGridExportForm.d.ts +1 -2
  12. package/lib/components/base/TMFileManager.d.ts +1 -2
  13. package/lib/components/base/TMFileManagerDataGridView.d.ts +1 -2
  14. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  15. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  16. package/lib/components/base/TMFileManagerUtils.d.ts +6 -4
  17. package/lib/components/base/TMLayout.d.ts +4 -4
  18. package/lib/components/base/TMList.d.ts +1 -2
  19. package/lib/components/base/TMListView.d.ts +1 -1
  20. package/lib/components/base/TMSpinner.d.ts +2 -3
  21. package/lib/components/base/TMTab.d.ts +3 -4
  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 +8 -14
  25. package/lib/components/base/TMUserAvatar.d.ts +1 -2
  26. package/lib/components/base/TMVilViewer.d.ts +1 -2
  27. package/lib/components/base/TMWaitPanel.d.ts +2 -3
  28. package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +16 -6
  29. package/lib/components/base/waitPanel/TMWaitPanelManager.js +55 -2
  30. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +6 -2
  31. package/lib/components/base/waitPanel/TMWaitPanelView.js +75 -3
  32. package/lib/components/choosers/TMDistinctValues.js +3 -3
  33. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  34. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +1 -2
  35. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +1 -2
  36. package/lib/components/choosers/TMQuickSearchInfo.d.ts +1 -2
  37. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  38. package/lib/components/choosers/TMUserChooser.d.ts +3 -2
  39. package/lib/components/choosers/TMUserChooser.js +3 -3
  40. package/lib/components/editors/TMEditorStyled.d.ts +42 -20
  41. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  42. package/lib/components/editors/TMHtmlContentDisplay.d.ts +1 -2
  43. package/lib/components/editors/TMHtmlEditor.d.ts +1 -2
  44. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  45. package/lib/components/features/assistant/TMHelpOnLineChat.d.ts +0 -1
  46. package/lib/components/features/assistant/TMHelpOnLineChat.js +8 -161
  47. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  48. package/lib/components/features/blog/TMBlogCommentForm.d.ts +1 -2
  49. package/lib/components/features/documents/TMDcmtForm.d.ts +6 -1
  50. package/lib/components/features/documents/TMDcmtForm.js +42 -7
  51. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  52. package/lib/components/features/documents/TMDcmtFormActionButtons.js +5 -2
  53. package/lib/components/features/documents/TMDcmtIcon.d.ts +1 -2
  54. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -8
  55. package/lib/components/features/documents/TMDcmtPreview.js +16 -7
  56. package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -2
  57. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  58. package/lib/components/features/documents/TMFileUploader.js +21 -21
  59. package/lib/components/features/documents/TMMasterDetailDcmts.d.ts +2 -0
  60. package/lib/components/features/documents/TMMasterDetailDcmts.js +13 -5
  61. package/lib/components/features/documents/TMMasterInfoFields.d.ts +1 -2
  62. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +1 -2
  63. package/lib/components/features/documents/TMMergeToPdfForm.js +5 -4
  64. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +1 -2
  65. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  66. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +1 -2
  67. package/lib/components/features/search/TMMetadataOutputForm.d.ts +1 -2
  68. package/lib/components/features/search/TMMetadataSorterForm.d.ts +1 -2
  69. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  70. package/lib/components/features/search/TMSearch.d.ts +1 -2
  71. package/lib/components/features/search/TMSearchQueryPanel.d.ts +3 -9
  72. package/lib/components/features/search/TMSearchResult.js +121 -91
  73. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  74. package/lib/components/features/search/TMSignatureInfoContent.d.ts +1 -2
  75. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +1 -2
  76. package/lib/components/features/search/TMViewHistoryDcmt.js +1 -1
  77. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  78. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  79. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  80. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  81. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  82. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  83. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  84. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  85. package/lib/components/features/tasks/TMTasksView.js +15 -9
  86. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +2 -3
  87. package/lib/components/features/wg/TMWGsCopyMoveForm.js +8 -4
  88. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +7 -8
  89. package/lib/components/features/workflow/TMWorkflowPopup.js +1 -1
  90. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +1 -3
  91. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +1 -3
  92. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  93. package/lib/components/forms/TMChooserForm.d.ts +1 -2
  94. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  95. package/lib/components/grids/TMBlogAttachments.d.ts +1 -2
  96. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  97. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  98. package/lib/components/grids/TMBlogsPost.js +1 -1
  99. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  100. package/lib/components/grids/TMValidationItemsList.d.ts +1 -2
  101. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -2
  102. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +12 -12
  103. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  104. package/lib/components/layout/panelManager/TMPanelManagerLoader.d.ts +1 -2
  105. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +6 -5
  106. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  107. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  108. package/lib/components/pages/TMPage.d.ts +1 -1
  109. package/lib/components/pages/TMPage.js +13 -5
  110. package/lib/components/query/TMQueryEditor.d.ts +10 -14
  111. package/lib/components/settings/SettingsAppearance.d.ts +1 -2
  112. package/lib/components/sidebar/TMAboutApp.d.ts +1 -2
  113. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  114. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  115. package/lib/components/viewers/TMDataListItemViewer.d.ts +2 -3
  116. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +2 -3
  117. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  118. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  119. package/lib/helper/SDKUI_Globals.d.ts +7 -4
  120. package/lib/helper/SDKUI_Globals.js +7 -4
  121. package/lib/helper/SDKUI_Localizator.d.ts +13 -6
  122. package/lib/helper/SDKUI_Localizator.js +121 -51
  123. package/lib/helper/TMAppUpdatedModal.d.ts +1 -2
  124. package/lib/helper/TMAppUpdatedModal.js +93 -93
  125. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  126. package/lib/helper/TMIcons.d.ts +282 -281
  127. package/lib/helper/TMIcons.js +4 -1
  128. package/lib/helper/TMPdfViewer.d.ts +1 -2
  129. package/lib/helper/TMToppyMessage.d.ts +2 -2
  130. package/lib/helper/TMUtils.d.ts +4 -10
  131. package/lib/helper/checkinCheckoutManager.js +2 -3
  132. package/lib/helper/helpers.d.ts +1 -1
  133. package/lib/helper/queryHelper.d.ts +15 -2
  134. package/lib/helper/queryHelper.js +52 -1
  135. package/lib/hooks/useCaseFlowApprove.js +31 -6
  136. package/lib/hooks/useCheckInOutOperations.js +2 -3
  137. package/lib/hooks/useDcmtOperations.js +24 -16
  138. package/lib/hooks/useDocumentOperations.d.ts +2 -0
  139. package/lib/hooks/useDocumentOperations.js +7 -7
  140. package/lib/hooks/useInputDialog.d.ts +1 -2
  141. package/lib/hooks/useMultiMasterDetailDcmts.js +10 -6
  142. package/lib/services/caseflow/CaseFlowService.d.ts +33 -3
  143. package/lib/services/caseflow/CaseFlowService.js +71 -44
  144. package/lib/services/caseflow/caseFlowNameCache.d.ts +5 -0
  145. package/lib/services/caseflow/caseFlowNameCache.js +19 -0
  146. package/lib/services/platform_services.d.ts +2 -3
  147. package/package.json +69 -69
  148. package/lib/components/features/assistant/dataset/Designer-Suggested-Questions.json +0 -102
  149. package/lib/components/features/assistant/dataset/Login-Suggested-Questions.json +0 -32
  150. package/lib/components/features/assistant/dataset/Surfer-Suggested-Questions.json +0 -102
@@ -4,6 +4,12 @@ import { SDKUI_Localizator } from '../../../helper';
4
4
  import TMWaitPanelView from './TMWaitPanelView';
5
5
  const Z_INDEX_BASE = 2147483601;
6
6
  const RESOLVED = Promise.resolve();
7
+ /** Accumula un messaggio in testa, tenendo solo quelli visibili nel popover. */
8
+ const pushMessage = (list, message, max) => {
9
+ list.unshift(message);
10
+ if (list.length > max)
11
+ list.length = max;
12
+ };
7
13
  const pad2 = (n) => (n < 10 ? '0' + n : String(n));
8
14
  /** Formatta una durata in millisecondi come "42s", "3m 07s", "1h 12m". */
9
15
  const formatDuration = (ms) => {
@@ -37,6 +43,11 @@ class TMWaitPanelInstance {
37
43
  this._error = 0;
38
44
  this._secondaryValue = 0;
39
45
  this._secondaryMax = 0;
46
+ this._warningMessages = [];
47
+ this._errorMessages = [];
48
+ this.warningMessageTotal = 0;
49
+ this.errorMessageTotal = 0;
50
+ this.messagesDirty = false;
40
51
  // Ultimi valori scritti sul DOM: servono a non riscrivere testo identico.
41
52
  this.lastPercentText = '';
42
53
  this.lastSubtitleText = '';
@@ -55,8 +66,24 @@ class TMWaitPanelInstance {
55
66
  this.setTitle = (title) => { this._title = title; this.schedule(); };
56
67
  this.setSubtitle = (subtitle) => { this._subtitleOverride = subtitle; this.schedule(); };
57
68
  this.ok = (delta = 1) => { this._ok += delta; this.schedule(); };
58
- this.warning = (delta = 1) => { this._warning += delta; this.schedule(); };
59
- this.error = (delta = 1) => { this._error += delta; this.schedule(); };
69
+ this.warning = (delta = 1, message) => {
70
+ this._warning += delta;
71
+ if (message) {
72
+ pushMessage(this._warningMessages, message, this.maxVisibleMessages);
73
+ this.warningMessageTotal++;
74
+ this.messagesDirty = true;
75
+ }
76
+ this.schedule();
77
+ };
78
+ this.error = (delta = 1, message) => {
79
+ this._error += delta;
80
+ if (message) {
81
+ pushMessage(this._errorMessages, message, this.maxVisibleMessages);
82
+ this.errorMessageTotal++;
83
+ this.messagesDirty = true;
84
+ }
85
+ this.schedule();
86
+ };
60
87
  this.setSecondary = (patch) => {
61
88
  if (patch.value !== undefined)
62
89
  this._secondaryValue = patch.value;
@@ -210,12 +237,18 @@ class TMWaitPanelInstance {
210
237
  this.lastError = this._error;
211
238
  nodes.errorValue.textContent = String(this._error);
212
239
  }
240
+ if (this.messagesDirty) {
241
+ this.messagesDirty = false;
242
+ this.flushMessages(nodes.warningPopover, nodes.warningList, this._warningMessages, this.warningMessageTotal);
243
+ this.flushMessages(nodes.errorPopover, nodes.errorList, this._errorMessages, this.errorMessageTotal);
244
+ }
213
245
  if (nodes.secondaryFill)
214
246
  this.flushSecondary(nodes);
215
247
  if (this.options.showEta ?? true)
216
248
  this.flushEta(nodes, ratio);
217
249
  };
218
250
  this.options = options;
251
+ this.maxVisibleMessages = Math.max(1, options.maxVisibleMessages ?? 5);
219
252
  this._max = options.max ?? 0;
220
253
  this._title = options.title ?? '';
221
254
  this._secondaryText = options.secondaryText ?? '';
@@ -256,6 +289,26 @@ class TMWaitPanelInstance {
256
289
  return template.replace('{{0}}', String(this._value)).replace('{{1}}', String(this._max));
257
290
  return this.options.subtitle ?? '';
258
291
  }
292
+ /** Riscrive la lista di un popover con gli ultimi messaggi e la riga "... e altri N". Il popover si apre solo se non e' vuoto. */
293
+ flushMessages(popover, list, messages, total) {
294
+ if (total === 0)
295
+ return;
296
+ const visible = messages.length;
297
+ const items = [];
298
+ for (let i = 0; i < visible; i++) {
299
+ const item = document.createElement('li');
300
+ item.textContent = messages[i];
301
+ items.push(item);
302
+ }
303
+ if (total > visible) {
304
+ const more = document.createElement('li');
305
+ more.className = 'tm-wait-panel-more';
306
+ more.textContent = SDKUI_Localizator.AndOthersCount.replace('{{0}}', String(total - visible));
307
+ items.push(more);
308
+ }
309
+ list.replaceChildren(...items);
310
+ popover.dataset.empty = 'false';
311
+ }
259
312
  /** Riversa sul DOM la seconda barra. Invocata solo quando la view l'ha renderizzata. */
260
313
  flushSecondary(nodes) {
261
314
  const ratio = this._secondaryMax > 0 ? Math.min(1, Math.max(0, this._secondaryValue / this._secondaryMax)) : 0;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  /** Guscio statico del wait panel: montato una sola volta e mai ri-renderizzato, il manager lo aggiorna via DOM. Le props sono valori iniziali. */
3
2
  /** Nodi DOM mutabili di cui il manager ha bisogno per aggiornare il pannello senza React. */
4
3
  export interface ITMWaitPanelNodes {
@@ -13,6 +12,11 @@ export interface ITMWaitPanelNodes {
13
12
  okValue: HTMLElement;
14
13
  warningValue: HTMLElement;
15
14
  errorValue: HTMLElement;
15
+ /** Popover delle pill: il manager riempie la lista e toglie `data-empty` al primo messaggio. */
16
+ warningPopover: HTMLElement;
17
+ warningList: HTMLElement;
18
+ errorPopover: HTMLElement;
19
+ errorList: HTMLElement;
16
20
  abortButton: HTMLButtonElement | null;
17
21
  /** Presenti solo con `showSecondary`: riga di avanzamento dell'operazione di dettaglio. */
18
22
  secondaryText: HTMLElement | null;
@@ -49,5 +53,5 @@ export interface ITMWaitPanelViewProps {
49
53
  /** Invocato dopo il commit con i nodi DOM da aggiornare imperativamente. */
50
54
  onMount?: (nodes: ITMWaitPanelNodes) => void;
51
55
  }
52
- declare const TMWaitPanelView: ({ title, subtitle, cancelable, showEta, showCounters, showSecondary, secondaryText, primaryLabel, secondaryLabel, zIndex, onAbort, onConfirmYes, onConfirmNo, onMount }: ITMWaitPanelViewProps) => React.JSX.Element;
56
+ declare const TMWaitPanelView: ({ title, subtitle, cancelable, showEta, showCounters, showSecondary, secondaryText, primaryLabel, secondaryLabel, zIndex, onAbort, onConfirmYes, onConfirmNo, onMount }: ITMWaitPanelViewProps) => import("react/jsx-runtime").JSX.Element;
53
57
  export default TMWaitPanelView;
@@ -138,6 +138,36 @@ const StyledPill = styled.span `
138
138
 
139
139
  svg { flex: 0 0 auto; }
140
140
  `;
141
+ // Fratello della card, non figlio: l'overflow della card lo taglierebbe. Coordinate dell'overlay, calcolate all'apertura.
142
+ const StyledPopover = styled.div `
143
+ display: none;
144
+ position: absolute;
145
+ width: 320px;
146
+ max-width: calc(100% - 24px);
147
+ overflow-y: auto;
148
+ box-sizing: border-box;
149
+ padding: 10px 12px;
150
+ background: #ffffff;
151
+ border-left: 3px solid ${props => props.$accent};
152
+ border-radius: 10px;
153
+ box-shadow: 0 10px 30px rgba(16, 24, 40, 0.22);
154
+ font-size: 12px;
155
+ color: #374151;
156
+
157
+ ul { margin: 6px 0 0 0; padding: 0; list-style: none; }
158
+ li { padding: 4px 0; border-top: 1px solid #eef1f6; overflow-wrap: anywhere; line-height: 1.35; }
159
+ li:first-child { border-top: none; }
160
+ li.tm-wait-panel-more { color: #8a94a6; font-style: italic; }
161
+ `;
162
+ const StyledPopoverTitle = styled.div `
163
+ font-size: 11px;
164
+ font-weight: 700;
165
+ letter-spacing: 0.04em;
166
+ text-transform: uppercase;
167
+ color: ${props => props.$color};
168
+ `;
169
+ /** Tempo per spostare il mouse dalla pill al popover. */
170
+ const POPOVER_HIDE_DELAY_MS = 250;
141
171
  const StyledTrack = styled.div `
142
172
  margin-top: 12px;
143
173
  width: 100%;
@@ -238,6 +268,14 @@ const TMWaitPanelView = ({ title = '', subtitle = '', cancelable = false, showEt
238
268
  const okValueRef = useRef(null);
239
269
  const warningValueRef = useRef(null);
240
270
  const errorValueRef = useRef(null);
271
+ const overlayRef = useRef(null);
272
+ const warningPillRef = useRef(null);
273
+ const errorPillRef = useRef(null);
274
+ const warningPopoverRef = useRef(null);
275
+ const warningListRef = useRef(null);
276
+ const errorPopoverRef = useRef(null);
277
+ const errorListRef = useRef(null);
278
+ const hideTimerRef = useRef();
241
279
  const abortRef = useRef(null);
242
280
  const secondaryTextRef = useRef(null);
243
281
  const secondaryPercentRef = useRef(null);
@@ -249,6 +287,8 @@ const TMWaitPanelView = ({ title = '', subtitle = '', cancelable = false, showEt
249
287
  return;
250
288
  if (!okValueRef.current || !warningValueRef.current || !errorValueRef.current)
251
289
  return;
290
+ if (!warningPopoverRef.current || !warningListRef.current || !errorPopoverRef.current || !errorListRef.current)
291
+ return;
252
292
  onMount?.({
253
293
  confirm: confirmRef.current,
254
294
  title: titleRef.current,
@@ -260,15 +300,47 @@ const TMWaitPanelView = ({ title = '', subtitle = '', cancelable = false, showEt
260
300
  okValue: okValueRef.current,
261
301
  warningValue: warningValueRef.current,
262
302
  errorValue: errorValueRef.current,
303
+ warningPopover: warningPopoverRef.current,
304
+ warningList: warningListRef.current,
305
+ errorPopover: errorPopoverRef.current,
306
+ errorList: errorListRef.current,
263
307
  abortButton: abortRef.current,
264
308
  secondaryText: secondaryTextRef.current,
265
309
  secondaryPercent: secondaryPercentRef.current,
266
310
  secondaryFill: secondaryFillRef.current,
267
311
  });
268
312
  // Montaggio una tantum: da qui in avanti il manager aggiorna il pannello via DOM, non via render.
313
+ return () => clearTimeout(hideTimerRef.current);
269
314
  }, []);
270
- return (_jsxs(_Fragment, { children: [_jsx(StyledOverlay, { $zIndex: zIndex, children: _jsxs(StyledCard, { role: 'dialog', "aria-live": 'polite', children: [_jsxs(StyledHeader, { children: [_jsx(StyledToppyClip, { children: _jsx(StyledToppy, { src: toppy, alt: '', draggable: false }) }), _jsxs(StyledHeaderText, { children: [_jsx(StyledTitle, { ref: titleRef, children: title }), _jsx(StyledSubtitle, { ref: subtitleRef, children: subtitle })] })] }), primaryLabel && _jsx(StyledBarLabel, { children: primaryLabel }), _jsxs(StyledPercentRow, { $hasLabel: !!primaryLabel, children: [_jsx(StyledPercent, { ref: percentRef, children: "0.00%" }), _jsxs(StyledCounters, { style: { display: showCounters ? 'flex' : 'none' }, children: [_jsxs(StyledPill, { $color: '#3E7B1C', $background: '#E8F5E0', children: [_jsx(IconOk, {}), _jsx("span", { ref: okValueRef, children: "0" })] }), _jsxs(StyledPill, { $color: '#8A6D00', $background: '#FBF3CF', children: [_jsx(IconWarning, {}), _jsx("span", { ref: warningValueRef, children: "0" })] }), _jsxs(StyledPill, { $color: '#B00F2B', $background: '#FBE1E6', children: [_jsx(IconError, {}), _jsx("span", { ref: errorValueRef, children: "0" })] })] })] }), _jsx(StyledTrack, { children: _jsx(StyledFill, { ref: fillRef, $color: getProgressColor() }) }), _jsxs(StyledTimeRow, { style: { visibility: showEta ? 'visible' : 'hidden' }, children: [_jsx("span", { ref: elapsedRef }), _jsx("span", { ref: remainingRef })] }), showSecondary && secondaryLabel && _jsx(StyledBarLabel, { children: secondaryLabel }), showSecondary &&
271
- _jsxs(StyledSecondary, { $hasLabel: !!secondaryLabel, children: [_jsxs(StyledSecondaryRow, { children: [_jsx(StyledSecondaryText, { ref: secondaryTextRef, children: secondaryText }), _jsx("span", { ref: secondaryPercentRef, children: "0.00%" })] }), _jsx(StyledSecondaryTrack, { children: _jsx(StyledSecondaryFill, { ref: secondaryFillRef, $color: getProgressColor() }) })] }), cancelable &&
272
- _jsx(StyledFooter, { children: _jsx(StyledAbortButton, { ref: abortRef, type: 'button', onClick: onAbort, children: SDKUI_Localizator.Abort }) })] }) }), _jsx(TMWaitPanelConfirm, { ref: confirmRef, zIndex: zIndex + 1, onYes: onConfirmYes, onNo: onConfirmNo })] }));
315
+ // Popover gestiti via DOM come il resto del pannello: nessuno stato React, nessun render durante il progresso.
316
+ const hidePopovers = () => {
317
+ clearTimeout(hideTimerRef.current);
318
+ if (warningPopoverRef.current)
319
+ warningPopoverRef.current.style.display = 'none';
320
+ if (errorPopoverRef.current)
321
+ errorPopoverRef.current.style.display = 'none';
322
+ };
323
+ const scheduleHide = () => {
324
+ clearTimeout(hideTimerRef.current);
325
+ hideTimerRef.current = setTimeout(hidePopovers, POPOVER_HIDE_DELAY_MS);
326
+ };
327
+ const cancelHide = () => clearTimeout(hideTimerRef.current);
328
+ /** Apre il popover sotto la pill, allineato a destra. Finche' non arriva un messaggio resta chiuso. */
329
+ const openPopover = (pill, popover) => {
330
+ const overlay = overlayRef.current;
331
+ if (!pill || !popover || !overlay || popover.dataset.empty !== 'false')
332
+ return;
333
+ hidePopovers();
334
+ const overlayRect = overlay.getBoundingClientRect();
335
+ const pillRect = pill.getBoundingClientRect();
336
+ const top = pillRect.bottom - overlayRect.top + 6;
337
+ popover.style.top = `${top}px`;
338
+ popover.style.right = `${Math.max(12, overlayRect.right - pillRect.right)}px`;
339
+ popover.style.maxHeight = `${Math.max(80, overlayRect.height - top - 12)}px`;
340
+ popover.style.display = 'block';
341
+ };
342
+ return (_jsxs(_Fragment, { children: [_jsxs(StyledOverlay, { ref: overlayRef, $zIndex: zIndex, children: [_jsxs(StyledCard, { role: 'dialog', "aria-live": 'polite', children: [_jsxs(StyledHeader, { children: [_jsx(StyledToppyClip, { children: _jsx(StyledToppy, { src: toppy, alt: '', draggable: false }) }), _jsxs(StyledHeaderText, { children: [_jsx(StyledTitle, { ref: titleRef, children: title }), _jsx(StyledSubtitle, { ref: subtitleRef, children: subtitle })] })] }), primaryLabel && _jsx(StyledBarLabel, { children: primaryLabel }), _jsxs(StyledPercentRow, { $hasLabel: !!primaryLabel, children: [_jsx(StyledPercent, { ref: percentRef, children: "0.00%" }), _jsxs(StyledCounters, { style: { display: showCounters ? 'flex' : 'none' }, children: [_jsxs(StyledPill, { $color: '#3E7B1C', $background: '#E8F5E0', children: [_jsx(IconOk, {}), _jsx("span", { ref: okValueRef, children: "0" })] }), _jsxs(StyledPill, { ref: warningPillRef, $color: '#8A6D00', $background: '#FBF3CF', onMouseEnter: () => openPopover(warningPillRef.current, warningPopoverRef.current), onMouseLeave: scheduleHide, onClick: () => openPopover(warningPillRef.current, warningPopoverRef.current), children: [_jsx(IconWarning, {}), _jsx("span", { ref: warningValueRef, children: "0" })] }), _jsxs(StyledPill, { ref: errorPillRef, $color: '#B00F2B', $background: '#FBE1E6', onMouseEnter: () => openPopover(errorPillRef.current, errorPopoverRef.current), onMouseLeave: scheduleHide, onClick: () => openPopover(errorPillRef.current, errorPopoverRef.current), children: [_jsx(IconError, {}), _jsx("span", { ref: errorValueRef, children: "0" })] })] })] }), _jsx(StyledTrack, { children: _jsx(StyledFill, { ref: fillRef, $color: getProgressColor() }) }), _jsxs(StyledTimeRow, { style: { visibility: showEta ? 'visible' : 'hidden' }, children: [_jsx("span", { ref: elapsedRef }), _jsx("span", { ref: remainingRef })] }), showSecondary && secondaryLabel && _jsx(StyledBarLabel, { children: secondaryLabel }), showSecondary &&
343
+ _jsxs(StyledSecondary, { $hasLabel: !!secondaryLabel, children: [_jsxs(StyledSecondaryRow, { children: [_jsx(StyledSecondaryText, { ref: secondaryTextRef, children: secondaryText }), _jsx("span", { ref: secondaryPercentRef, children: "0.00%" })] }), _jsx(StyledSecondaryTrack, { children: _jsx(StyledSecondaryFill, { ref: secondaryFillRef, $color: getProgressColor() }) })] }), cancelable &&
344
+ _jsx(StyledFooter, { children: _jsx(StyledAbortButton, { ref: abortRef, type: 'button', onClick: onAbort, children: SDKUI_Localizator.Abort }) })] }), _jsxs(StyledPopover, { ref: warningPopoverRef, $accent: '#E0B400', "data-empty": 'true', onMouseEnter: cancelHide, onMouseLeave: scheduleHide, children: [_jsx(StyledPopoverTitle, { $color: '#8A6D00', children: SDKUI_Localizator.LatestWarnings }), _jsx("ul", { ref: warningListRef })] }), _jsxs(StyledPopover, { ref: errorPopoverRef, $accent: '#B00F2B', "data-empty": 'true', onMouseEnter: cancelHide, onMouseLeave: scheduleHide, children: [_jsx(StyledPopoverTitle, { $color: '#B00F2B', children: SDKUI_Localizator.LatestErrors }), _jsx("ul", { ref: errorListRef })] })] }), _jsx(TMWaitPanelConfirm, { ref: confirmRef, zIndex: zIndex + 1, onYes: onConfirmYes, onNo: onConfirmNo })] }));
273
345
  };
274
346
  export default TMWaitPanelView;
@@ -5,7 +5,7 @@ import styled from 'styled-components';
5
5
  import { calcResponsiveSizes, IconAll, IconDelete, IconPencil, IconRefresh, IconSelected, SDKUI_Localizator } from '../../helper';
6
6
  import TMButton from '../base/TMButton';
7
7
  import TMDataGrid from '../base/TMDataGrid';
8
- import { CounterItemKey } from '../base/TMCounterContainer';
8
+ import { CounterItemKey, formatCount } from '../base/TMCounterContainer';
9
9
  import { useDeviceType } from '../base/TMDeviceProvider';
10
10
  import TMCheckBox from '../editors/TMCheckBox';
11
11
  import TMDropDown from '../editors/TMDropDown';
@@ -126,8 +126,8 @@ const TMDistinctValues = ({ tid, mid, layoutMode = LayoutModes.None, allowAppend
126
126
  items.set(CounterItemKey.allItems, {
127
127
  key: CounterItemKey.allItems,
128
128
  show: true,
129
- caption: `${counts.returned} restituiti su ${counts.found} trovati`,
130
- value: `${counts.returned}/${counts.found}`,
129
+ caption: `${formatCount(counts.returned)} restituiti su ${formatCount(counts.found)} trovati`,
130
+ value: `${formatCount(counts.returned)}/${formatCount(counts.found)}`,
131
131
  icon: _jsx(IconAll, {}),
132
132
  order: -1
133
133
  });
@@ -41,4 +41,4 @@ interface ITMDynDataListItemChooserFormProps extends ITMChooserFormProps<DataLis
41
41
  /** Se presente, sono i parametri da passare alla query per recuperare il dataSource */
42
42
  queryParamsDynDataList?: string[];
43
43
  }
44
- export declare const TMDynDataListItemChooserForm: (props: ITMDynDataListItemChooserFormProps) => React.JSX.Element;
44
+ export declare const TMDynDataListItemChooserForm: (props: ITMDynDataListItemChooserFormProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
1
  import { InvoiceRetrieveFormats } from '@topconsultnpm/sdk-ts';
3
2
  import { ITMEnumDataBinding } from '../../ts';
4
- declare const TMInvoiceRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label, width }: ITMEnumDataBinding<InvoiceRetrieveFormats>) => React.JSX.Element;
3
+ declare const TMInvoiceRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label, width }: ITMEnumDataBinding<InvoiceRetrieveFormats>) => import("react/jsx-runtime").JSX.Element;
5
4
  export default TMInvoiceRetrieveFormats;
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
1
  import { OrderRetrieveFormats } from '@topconsultnpm/sdk-ts';
3
2
  import { ITMEnumDataBinding } from '../../ts';
4
- declare const TMOrderRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label, width }: ITMEnumDataBinding<OrderRetrieveFormats>) => React.JSX.Element;
3
+ declare const TMOrderRetrieveFormats: ({ value, valueOrig, onValueChanged, valuesToExclude, label, width }: ITMEnumDataBinding<OrderRetrieveFormats>) => import("react/jsx-runtime").JSX.Element;
5
4
  export default TMOrderRetrieveFormats;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { TMEditorButtonData } from '../base/TMEditorBase';
3
2
  interface ITMQuickSearchInfo {
4
3
  /** Tipo documento della ricerca rapida: serve a ricostruire la ricerca di sistema con tutti i documenti */
@@ -8,6 +7,6 @@ interface ITMQuickSearchInfo {
8
7
  }
9
8
  export declare const useTMQuickSearchInfo: ({ tid, sqdId }: ITMQuickSearchInfo) => {
10
9
  infoButton: TMEditorButtonData | undefined;
11
- detailForm: React.JSX.Element | null;
10
+ detailForm: import("react/jsx-runtime").JSX.Element | null;
12
11
  };
13
12
  export {};
@@ -19,13 +19,13 @@ export declare const TMRelationIdViewer: ({ relationType, relationId, showIcon,
19
19
  relationId?: number;
20
20
  showIcon?: boolean;
21
21
  noneSelectionText?: string;
22
- }) => React.JSX.Element;
22
+ }) => import("react/jsx-runtime").JSX.Element;
23
23
  export declare const TMRelationIcon: ({ rd, relationType }: {
24
24
  rd: RelationDescriptor | undefined;
25
25
  relationType?: RelationTypes;
26
- }) => React.JSX.Element;
26
+ }) => import("react/jsx-runtime").JSX.Element;
27
27
  export declare const TMRelationTooltip: ({ rd, relationType, children }: {
28
28
  rd?: RelationDescriptor;
29
29
  relationType: RelationTypes | undefined;
30
30
  children: React.ReactNode;
31
- }) => React.JSX.Element;
31
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -38,8 +38,9 @@ interface ITMUserChooserFormProps extends ITMChooserFormProps<UserDescriptor> {
38
38
  export declare const TMUserChooserForm: React.FunctionComponent<ITMUserChooserFormProps>;
39
39
  export declare const TMUserIcon: ({ ud }: {
40
40
  ud?: UserDescriptor;
41
- }) => React.JSX.Element | null;
41
+ }) => import("react/jsx-runtime").JSX.Element | null;
42
42
  export declare const TMUserTooltip: ({ ud, children }: {
43
43
  ud?: UserDescriptor;
44
44
  children: React.ReactNode;
45
- }) => React.JSX.Element;
45
+ }) => import("react/jsx-runtime").JSX.Element;
46
+ export declare const User_IsExpired: (d: any) => boolean | undefined;
@@ -113,13 +113,13 @@ const getCompleteUserName = (domain, name) => {
113
113
  return name;
114
114
  return domain + "\\" + name;
115
115
  };
116
- function User_IsExpired(d) {
116
+ export const User_IsExpired = (d) => {
117
117
  if (d == undefined)
118
118
  return false;
119
- let ud = d;
119
+ const ud = d;
120
120
  const today = new Date();
121
121
  return (ud.validFrom && today < ud.validFrom) || (ud.validTo && today > ud.validTo) || ud.disabled;
122
- }
122
+ };
123
123
  const getUserIcon = (userLevel, level, isExpired) => {
124
124
  let ownershipColor = "";
125
125
  if (isExpired)
@@ -2,14 +2,22 @@ import { ValidationItem } from '@topconsultnpm/sdk-ts';
2
2
  export declare const TMEditorsDefaultBorderRadius = "5px";
3
3
  export declare const TMEditorsDefaultLabelFontSize = "0.9rem";
4
4
  export declare const editorColorManager: (validationItems: ValidationItem[]) => string;
5
- export declare const StyledEditorContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
6
- style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
7
- }, {
5
+ export declare const StyledEditorContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$width"> & {
8
6
  $width: string;
9
- }>> & string;
10
- export declare const StyledEditor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "style"> & {
11
- style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
12
- }, {
7
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$width"> & {
8
+ $width: string;
9
+ }, never>>> & string;
10
+ export declare const StyledEditor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$borderRadius" | "$disabled" | "$fontSize" | "$isMobile" | "$isModified" | "$maxValue" | "$type" | "$vil" | "$width"> & {
11
+ $vil: ValidationItem[];
12
+ $width: string;
13
+ $type: string;
14
+ $isModified: boolean;
15
+ $maxValue: number;
16
+ $fontSize: string;
17
+ $disabled: boolean;
18
+ $isMobile?: boolean;
19
+ $borderRadius?: string;
20
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "$borderRadius" | "$disabled" | "$fontSize" | "$isMobile" | "$isModified" | "$maxValue" | "$type" | "$vil" | "$width"> & {
13
21
  $vil: ValidationItem[];
14
22
  $width: string;
15
23
  $type: string;
@@ -19,26 +27,40 @@ export declare const StyledEditor: import("styled-components/dist/types").IStyle
19
27
  $disabled: boolean;
20
28
  $isMobile?: boolean;
21
29
  $borderRadius?: string;
22
- }>> & string;
23
- export declare const StyledEditorIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
24
- style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
25
- }, {
30
+ }, never>>> & string;
31
+ export declare const StyledEditorIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$disabled" | "$isModified" | "$vil"> & {
26
32
  $vil: ValidationItem[];
27
33
  $disabled: boolean;
28
34
  $isModified: boolean;
29
- }>> & string;
30
- export declare const StyledEditorLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
31
- style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
32
- }, {
35
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$disabled" | "$isModified" | "$vil"> & {
36
+ $vil: ValidationItem[];
37
+ $disabled: boolean;
38
+ $isModified: boolean;
39
+ }, never>>> & string;
40
+ export declare const StyledEditorLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$color" | "$disabled" | "$fontSize" | "$isFocused" | "$labelPosition"> & {
33
41
  $isFocused: boolean;
34
42
  $labelPosition: 'right' | 'left' | 'top';
35
43
  $disabled: boolean;
36
44
  $fontSize?: string;
37
45
  $color?: string;
38
- }>> & string;
39
- export declare const StyledTextareaEditor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<import("react").DetailedHTMLProps<import("react").TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "style"> & {
40
- style?: import("react").CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
41
- }, {
46
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$color" | "$disabled" | "$fontSize" | "$isFocused" | "$labelPosition"> & {
47
+ $isFocused: boolean;
48
+ $labelPosition: 'right' | 'left' | 'top';
49
+ $disabled: boolean;
50
+ $fontSize?: string;
51
+ $color?: string;
52
+ }, never>>> & string;
53
+ export declare const StyledTextareaEditor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "$borderRadius" | "$disabled" | "$fontSize" | "$isMobile" | "$isModified" | "$maxHeight" | "$resize" | "$vil" | "$width"> & {
54
+ $vil: ValidationItem[];
55
+ $width: string;
56
+ $isModified: boolean;
57
+ $fontSize: string;
58
+ $disabled: boolean;
59
+ $isMobile?: boolean;
60
+ $maxHeight?: string;
61
+ $borderRadius?: string;
62
+ $resize?: boolean;
63
+ }, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "$borderRadius" | "$disabled" | "$fontSize" | "$isMobile" | "$isModified" | "$maxHeight" | "$resize" | "$vil" | "$width"> & {
42
64
  $vil: ValidationItem[];
43
65
  $width: string;
44
66
  $isModified: boolean;
@@ -48,4 +70,4 @@ export declare const StyledTextareaEditor: import("styled-components/dist/types"
48
70
  $maxHeight?: string;
49
71
  $borderRadius?: string;
50
72
  $resize?: boolean;
51
- }>> & string;
73
+ }, never>>> & string;
@@ -30,7 +30,7 @@ export declare class FormulaDescriptor {
30
30
  description?: string;
31
31
  syntax?: string;
32
32
  }
33
- export declare const renderFormulaIcon: (iconType: FormulaIconTypes, tid?: number, md?: MetadataDescriptor) => React.JSX.Element;
33
+ export declare const renderFormulaIcon: (iconType: FormulaIconTypes, tid?: number, md?: MetadataDescriptor) => import("react/jsx-runtime").JSX.Element;
34
34
  declare const TMFormulaEditor: React.FunctionComponent<ITMApplyFormProps<FormulaDescriptor>>;
35
35
  export default TMFormulaEditor;
36
36
  export declare class FormulaHelper {
@@ -1,8 +1,7 @@
1
- import React from 'react';
2
1
  interface IHtmlContentDisplay {
3
2
  markup: string;
4
3
  isSelected: boolean;
5
4
  searchText?: string;
6
5
  }
7
- declare const TMHtmlContentDisplay: (props: IHtmlContentDisplay) => React.JSX.Element;
6
+ declare const TMHtmlContentDisplay: (props: IHtmlContentDisplay) => import("react/jsx-runtime").JSX.Element;
8
7
  export default TMHtmlContentDisplay;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { ValidationItem } from '@topconsultnpm/sdk-ts';
3
2
  export declare const sanitizeAndFormatComment: (raw?: string) => string;
4
3
  export interface ITMHtmlEditor {
@@ -35,5 +34,5 @@ export interface ITMHtmlEditor {
35
34
  /** If true, displays a character count below the editor */
36
35
  showCount?: boolean;
37
36
  }
38
- declare const TMHtmlEditor: (props: ITMHtmlEditor) => React.JSX.Element;
37
+ declare const TMHtmlEditor: (props: ITMHtmlEditor) => import("react/jsx-runtime").JSX.Element;
39
38
  export default TMHtmlEditor;
@@ -14,5 +14,5 @@ interface TMTreeDropDownProps {
14
14
  isValidKey?: (key: number) => boolean;
15
15
  elementStyle?: React.CSSProperties;
16
16
  }
17
- declare const TMTreeDropDown: (props: TMTreeDropDownProps) => React.JSX.Element;
17
+ declare const TMTreeDropDown: (props: TMTreeDropDownProps) => import("react/jsx-runtime").JSX.Element;
18
18
  export default TMTreeDropDown;
@@ -18,7 +18,6 @@ export interface ITMHelpOnLineChatProps {
18
18
  onAddMessage: (message: HolChatMessage) => void;
19
19
  onSetThinking: (isThinking: boolean) => void;
20
20
  onSetConversationId: (id: string) => void;
21
- suggestedQuestions?: string[];
22
21
  }
23
22
  export interface ITMToppyHeaderButtonProps {
24
23
  showChatButton: boolean;