@topconsultnpm/sdkui-react 6.22.0-dev4.4 → 6.22.0-dev4.6

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 (123) 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/TMCounterBar.d.ts +2 -2
  5. package/lib/components/base/TMCounterContainer.d.ts +5 -2
  6. package/lib/components/base/TMCounterContainer.js +16 -1
  7. package/lib/components/base/TMCustomButton.d.ts +1 -1
  8. package/lib/components/base/TMDataGrid.js +243 -223
  9. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  10. package/lib/components/base/TMFileManager.d.ts +2 -1
  11. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  12. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  13. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  14. package/lib/components/base/TMFileManagerUtils.d.ts +4 -6
  15. package/lib/components/base/TMLayout.d.ts +4 -4
  16. package/lib/components/base/TMList.d.ts +2 -1
  17. package/lib/components/base/TMListView.d.ts +1 -1
  18. package/lib/components/base/TMSpinner.d.ts +3 -2
  19. package/lib/components/base/TMTab.d.ts +4 -3
  20. package/lib/components/base/TMTabControl.js +208 -208
  21. package/lib/components/base/TMTooltip.d.ts +1 -1
  22. package/lib/components/base/TMTreeView.d.ts +14 -8
  23. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  24. package/lib/components/base/TMVilViewer.d.ts +2 -1
  25. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  26. package/lib/components/base/waitPanel/TMWaitPanelManager.d.ts +16 -6
  27. package/lib/components/base/waitPanel/TMWaitPanelManager.js +55 -2
  28. package/lib/components/base/waitPanel/TMWaitPanelView.d.ts +7 -1
  29. package/lib/components/base/waitPanel/TMWaitPanelView.js +257 -185
  30. package/lib/components/choosers/TMDistinctValues.js +3 -3
  31. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  32. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  33. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  34. package/lib/components/choosers/TMQuickSearchInfo.d.ts +2 -1
  35. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  36. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  37. package/lib/components/editors/TMEditorStyled.d.ts +20 -42
  38. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  39. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  40. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  41. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  42. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  43. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  44. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  45. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  46. package/lib/components/features/documents/TMDcmtPreview.d.ts +8 -6
  47. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  48. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  49. package/lib/components/features/documents/TMFileUploader.js +21 -21
  50. package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
  51. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
  52. package/lib/components/features/documents/TMMergeToPdfForm.js +5 -4
  53. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
  54. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  55. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  56. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  57. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  58. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  59. package/lib/components/features/search/TMSearch.d.ts +2 -1
  60. package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
  61. package/lib/components/features/search/TMSearchResult.js +7 -8
  62. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  63. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  64. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  65. package/lib/components/features/search/TMViewHistoryDcmt.js +1 -1
  66. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  67. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  68. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  69. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  70. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  71. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  72. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  73. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  74. package/lib/components/features/tasks/TMTasksView.js +15 -9
  75. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  76. package/lib/components/features/wg/TMWGsCopyMoveForm.js +17 -13
  77. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  78. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  79. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  80. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  81. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  82. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  83. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  84. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  85. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  86. package/lib/components/grids/TMBlogsPost.js +1 -1
  87. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  88. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  89. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  90. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +12 -12
  91. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  92. package/lib/components/layout/panelManager/TMPanelManagerLoader.d.ts +2 -1
  93. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +5 -6
  94. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  95. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  96. package/lib/components/pages/TMPage.d.ts +1 -1
  97. package/lib/components/pages/TMPage.js +7 -4
  98. package/lib/components/query/TMQueryEditor.d.ts +14 -10
  99. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  100. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  101. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  102. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  103. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  104. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  105. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  106. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  107. package/lib/helper/SDKUI_Globals.d.ts +3 -4
  108. package/lib/helper/SDKUI_Globals.js +3 -4
  109. package/lib/helper/SDKUI_Localizator.d.ts +8 -4
  110. package/lib/helper/SDKUI_Localizator.js +77 -37
  111. package/lib/helper/TMAppUpdatedModal.d.ts +2 -1
  112. package/lib/helper/TMAppUpdatedModal.js +93 -93
  113. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  114. package/lib/helper/TMIcons.d.ts +280 -280
  115. package/lib/helper/TMPdfViewer.d.ts +2 -1
  116. package/lib/helper/TMToppyMessage.d.ts +2 -2
  117. package/lib/helper/TMUtils.d.ts +10 -4
  118. package/lib/helper/helpers.d.ts +1 -1
  119. package/lib/hooks/useDcmtOperations.js +23 -14
  120. package/lib/hooks/useInputDialog.d.ts +2 -1
  121. package/lib/hooks/useMultiMasterDetailDcmts.js +10 -6
  122. package/lib/services/platform_services.d.ts +3 -2
  123. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { ValidationItem } from '@topconsultnpm/sdk-ts';
2
3
  export interface ITMTabProps {
3
4
  title: string;
@@ -7,14 +8,14 @@ export declare const TMTab: ({ label, propsToBeValidated, children }: {
7
8
  label?: string;
8
9
  propsToBeValidated?: string[] | undefined;
9
10
  children?: any;
10
- }) => import("react/jsx-runtime").JSX.Element;
11
+ }) => React.JSX.Element;
11
12
  export declare const TMTabItemBadge: ({ vil }: {
12
13
  vil: ValidationItem[];
13
- }) => import("react/jsx-runtime").JSX.Element;
14
+ }) => React.JSX.Element;
14
15
  declare const TMTabGroup: ({ children, fontSize, validationItems, onTabIndexChanged }: {
15
16
  onTabIndexChanged?: (e: number) => void;
16
17
  children: any;
17
18
  fontSize?: string;
18
19
  validationItems?: ValidationItem[];
19
- }) => import("react/jsx-runtime").JSX.Element;
20
+ }) => React.JSX.Element;
20
21
  export default TMTabGroup;
@@ -92,106 +92,106 @@ const VARIANTS = {
92
92
  })
93
93
  };
94
94
  /** Contenitore della barra: frecce ai lati, striscia dei tab in mezzo ed eventuale toolbar in coda. */
95
- const TabsHeader = styled.div `
96
- display: flex;
97
- align-items: flex-end;
98
- width: 100%;
99
- flex-shrink: 0;
100
- padding: 4px 4px 0 4px;
101
- background: ${({ $v }) => $v.stripBg};
95
+ const TabsHeader = styled.div `
96
+ display: flex;
97
+ align-items: flex-end;
98
+ width: 100%;
99
+ flex-shrink: 0;
100
+ padding: 4px 4px 0 4px;
101
+ background: ${({ $v }) => $v.stripBg};
102
102
  `;
103
103
  /** Striscia scorrevole dei tab: la scrollbar resta nascosta, si scorre con le frecce. */
104
- const TabsStrip = styled.div `
105
- display: flex;
106
- align-items: flex-end;
107
- flex: 1;
108
- min-width: 0;
109
- gap: ${({ $v }) => $v.tabGap};
110
- padding: ${({ $v }) => $v.stripPadding};
111
- overflow-x: auto;
112
- scroll-behavior: smooth;
113
- scrollbar-width: none;
114
- -ms-overflow-style: none;
115
- &::-webkit-scrollbar { display: none; }
104
+ const TabsStrip = styled.div `
105
+ display: flex;
106
+ align-items: flex-end;
107
+ flex: 1;
108
+ min-width: 0;
109
+ gap: ${({ $v }) => $v.tabGap};
110
+ padding: ${({ $v }) => $v.stripPadding};
111
+ overflow-x: auto;
112
+ scroll-behavior: smooth;
113
+ scrollbar-width: none;
114
+ -ms-overflow-style: none;
115
+ &::-webkit-scrollbar { display: none; }
116
116
  `;
117
117
  /** Freccia di scorrimento: compare solo se i tab non entrano nella barra. */
118
- const NavButton = styled.button `
119
- display: flex;
120
- align-items: center;
121
- justify-content: center;
122
- width: 26px;
123
- height: 28px;
124
- margin-bottom: 3px;
125
- flex-shrink: 0;
126
- padding: 0;
127
- border: none;
128
- border-radius: 50%;
129
- background: transparent;
130
- color: ${({ $v }) => $v.idleTextColor};
131
- cursor: pointer;
132
- transition: background 0.18s ease-out, color 0.18s ease-out;
133
- &:hover { background: ${({ $v }) => $v.buttonHover}; color: ${TEXT_ACTIVE}; }
134
- &:focus, &:focus-visible { outline: none; }
118
+ const NavButton = styled.button `
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ width: 26px;
123
+ height: 28px;
124
+ margin-bottom: 3px;
125
+ flex-shrink: 0;
126
+ padding: 0;
127
+ border: none;
128
+ border-radius: 50%;
129
+ background: transparent;
130
+ color: ${({ $v }) => $v.idleTextColor};
131
+ cursor: pointer;
132
+ transition: background 0.18s ease-out, color 0.18s ease-out;
133
+ &:hover { background: ${({ $v }) => $v.buttonHover}; color: ${TEXT_ACTIVE}; }
134
+ &:focus, &:focus-visible { outline: none; }
135
135
  `;
136
136
  /** Pulsante '+' subito dopo l'ultimo tab, come il nuovo tab del browser. */
137
- const AddButton = styled.button `
138
- display: flex;
139
- align-items: center;
140
- justify-content: center;
141
- width: 28px;
142
- height: 28px;
143
- margin: 0 0 3px 4px;
144
- flex-shrink: 0;
145
- padding: 0;
146
- border: none;
147
- border-radius: 50%;
148
- background: transparent;
149
- color: ${({ $v }) => $v.idleTextColor};
150
- cursor: pointer;
151
- transition: background 0.18s ease-out, color 0.18s ease-out;
152
- &:hover { background: ${({ $v }) => $v.buttonHover}; color: ${TEXT_ACTIVE}; }
153
- &:active { background: ${({ $v }) => $v.buttonActive}; }
154
- &:focus, &:focus-visible { outline: none; }
137
+ const AddButton = styled.button `
138
+ display: flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ width: 28px;
142
+ height: 28px;
143
+ margin: 0 0 3px 4px;
144
+ flex-shrink: 0;
145
+ padding: 0;
146
+ border: none;
147
+ border-radius: 50%;
148
+ background: transparent;
149
+ color: ${({ $v }) => $v.idleTextColor};
150
+ cursor: pointer;
151
+ transition: background 0.18s ease-out, color 0.18s ease-out;
152
+ &:hover { background: ${({ $v }) => $v.buttonHover}; color: ${TEXT_ACTIVE}; }
153
+ &:active { background: ${({ $v }) => $v.buttonActive}; }
154
+ &:focus, &:focus-visible { outline: none; }
155
155
  `;
156
156
  /** Contenuto libero del chiamante in coda alla barra: azioni di pagina allineate a destra dei tab.
157
157
  E' position: relative cosi un menu a tendina del chiamante puo posizionarsi rispetto a quest'area. */
158
- const TabsToolbar = styled.div `
159
- display: flex;
160
- align-items: center;
161
- flex-shrink: 0;
162
- margin-bottom: 3px;
163
- padding-left: 8px;
164
- position: relative;
158
+ const TabsToolbar = styled.div `
159
+ display: flex;
160
+ align-items: center;
161
+ flex-shrink: 0;
162
+ margin-bottom: 3px;
163
+ padding-left: 8px;
164
+ position: relative;
165
165
  `;
166
166
  /** Area del contenuto: fa da riferimento ai pannelli nascosti, che restano montati ma non impaginati. */
167
- const ContentArea = styled.div `
168
- position: relative;
169
- display: flex;
170
- flex-direction: column;
171
- flex: 1;
172
- min-height: 0;
167
+ const ContentArea = styled.div `
168
+ position: relative;
169
+ display: flex;
170
+ flex-direction: column;
171
+ flex: 1;
172
+ min-height: 0;
173
173
  `;
174
- const ANIM_FADE = keyframes `
175
- from { opacity: 0; transform: translate3d(0, 10px, 0); }
176
- 50% { opacity: 1; }
177
- to { opacity: 1; transform: translate3d(0, 0, 0); }
174
+ const ANIM_FADE = keyframes `
175
+ from { opacity: 0; transform: translate3d(0, 10px, 0); }
176
+ 50% { opacity: 1; }
177
+ to { opacity: 1; transform: translate3d(0, 0, 0); }
178
178
  `;
179
179
  // Entra appena piu piccolo e leggermente piu in basso: sembra posarsi al suo posto invece di comparire
180
- const ANIM_ZOOM = keyframes `
181
- from { opacity: 0; transform: translate3d(0, 6px, 0) scale3d(0.985, 0.985, 1); }
182
- 50% { opacity: 1; }
183
- to { opacity: 1; transform: translate3d(0, 0, 0) scale3d(1, 1, 1); }
180
+ const ANIM_ZOOM = keyframes `
181
+ from { opacity: 0; transform: translate3d(0, 6px, 0) scale3d(0.985, 0.985, 1); }
182
+ 50% { opacity: 1; }
183
+ to { opacity: 1; transform: translate3d(0, 0, 0) scale3d(1, 1, 1); }
184
184
  `;
185
185
  // Lo scorrimento segue il verso dello spostamento: da destra andando avanti, da sinistra tornando indietro
186
- const ANIM_SLIDE_FORWARD = keyframes `
187
- from { opacity: 0; transform: translate3d(24px, 0, 0); }
188
- 50% { opacity: 1; }
189
- to { opacity: 1; transform: translate3d(0, 0, 0); }
186
+ const ANIM_SLIDE_FORWARD = keyframes `
187
+ from { opacity: 0; transform: translate3d(24px, 0, 0); }
188
+ 50% { opacity: 1; }
189
+ to { opacity: 1; transform: translate3d(0, 0, 0); }
190
190
  `;
191
- const ANIM_SLIDE_BACK = keyframes `
192
- from { opacity: 0; transform: translate3d(-24px, 0, 0); }
193
- 50% { opacity: 1; }
194
- to { opacity: 1; transform: translate3d(0, 0, 0); }
191
+ const ANIM_SLIDE_BACK = keyframes `
192
+ from { opacity: 0; transform: translate3d(-24px, 0, 0); }
193
+ 50% { opacity: 1; }
194
+ to { opacity: 1; transform: translate3d(0, 0, 0); }
195
195
  `;
196
196
  const pickAnimation = (animation, forward) => {
197
197
  switch (animation) {
@@ -202,141 +202,141 @@ const pickAnimation = (animation, forward) => {
202
202
  }
203
203
  };
204
204
  /** Contenitore di un singolo tab: l'animazione parte da sola perche il pannello inattivo non ne ha nessuna. */
205
- const ContentPane = styled.div `
206
- ${({ $active, $anim, $duration, $phase }) => $active && $anim && $phase !== 'done' && css `
207
- /* Livello grafico dedicato creato subito, mentre il pannello e ancora trasparente: quando il
208
- movimento parte non resta nulla da ridisegnare e l'effetto scorre senza perdere fotogrammi */
209
- will-change: opacity, transform;
210
- backface-visibility: hidden;
211
- transform: translateZ(0);
212
- opacity: 0;
213
-
214
- /* Decelerazione lunga e continua: parte deciso e si posa, senza strappi ne rimbalzi */
215
- ${$phase === 'run' && css `animation: ${$anim} ${$duration}ms cubic-bezier(0.32, 0.72, 0, 1) both;`}
216
-
217
- /* Chi ha chiesto meno animazioni nel sistema vede il cambio tab immediato */
218
- @media (prefers-reduced-motion: reduce) { animation: none; opacity: 1; transform: none; }
219
- `}
205
+ const ContentPane = styled.div `
206
+ ${({ $active, $anim, $duration, $phase }) => $active && $anim && $phase !== 'done' && css `
207
+ /* Livello grafico dedicato creato subito, mentre il pannello e ancora trasparente: quando il
208
+ movimento parte non resta nulla da ridisegnare e l'effetto scorre senza perdere fotogrammi */
209
+ will-change: opacity, transform;
210
+ backface-visibility: hidden;
211
+ transform: translateZ(0);
212
+ opacity: 0;
213
+
214
+ /* Decelerazione lunga e continua: parte deciso e si posa, senza strappi ne rimbalzi */
215
+ ${$phase === 'run' && css `animation: ${$anim} ${$duration}ms cubic-bezier(0.32, 0.72, 0, 1) both;`}
216
+
217
+ /* Chi ha chiesto meno animazioni nel sistema vede il cambio tab immediato */
218
+ @media (prefers-reduced-motion: reduce) { animation: none; opacity: 1; transform: none; }
219
+ `}
220
220
  `;
221
- const TabSeparator = styled.div `
222
- width: 1px;
223
- height: 18px;
224
- margin-bottom: 8px;
225
- flex-shrink: 0;
226
- background: ${({ $v }) => $v.divider};
221
+ const TabSeparator = styled.div `
222
+ width: 1px;
223
+ height: 18px;
224
+ margin-bottom: 8px;
225
+ flex-shrink: 0;
226
+ background: ${({ $v }) => $v.divider};
227
227
  `;
228
- const DropMark = styled.div `
229
- position: absolute;
230
- top: 2px;
231
- bottom: 0;
232
- width: 3px;
233
- border-radius: 2px;
234
- background: ${ACCENT};
235
- left: ${({ $side }) => ($side === 'left' ? '-2px' : 'auto')};
236
- right: ${({ $side }) => ($side === 'right' ? '-2px' : 'auto')};
228
+ const DropMark = styled.div `
229
+ position: absolute;
230
+ top: 2px;
231
+ bottom: 0;
232
+ width: 3px;
233
+ border-radius: 2px;
234
+ background: ${ACCENT};
235
+ left: ${({ $side }) => ($side === 'left' ? '-2px' : 'auto')};
236
+ right: ${({ $side }) => ($side === 'right' ? '-2px' : 'auto')};
237
237
  `;
238
- const TabItem = styled.div `
239
- position: relative;
240
- display: inline-flex;
241
- align-items: center;
242
- gap: 2px;
243
- height: 32px;
244
- padding: 0 6px 0 12px;
245
- max-width: 330px;
246
- user-select: none;
247
- border-radius: ${({ $v }) => $v.tabRadius};
248
- background: ${({ $active, $v }) => ($active ? $v.tabBg : $v.idleTabBg)};
249
- /* Stile card: ombra verso l'alto, sotto il tab poggia sul contenuto */
250
- box-shadow: ${({ $active, $v }) => ($active ? $v.tabShadow : 'none')};
251
- opacity: ${({ $dragging }) => ($dragging ? 0.4 : 1)};
252
- z-index: ${({ $active }) => ($active ? 2 : 1)};
253
- transition: background 0.18s ease-out, box-shadow 0.18s ease-out, opacity 0.18s ease-out;
254
- &:hover { background: ${({ $active, $v }) => ($active ? $v.tabBg : $v.tabHover)}; }
255
- &::before, &::after {
256
- content: '';
257
- position: absolute;
258
- bottom: 0;
259
- width: ${TAB_RADIUS}px;
260
- height: ${TAB_RADIUS}px;
261
- display: ${({ $active, $v }) => ($active && $v.joins ? 'block' : 'none')};
262
- }
263
- &::before {
264
- left: -${TAB_RADIUS}px;
265
- background: ${({ $v }) => $v.joins ? `radial-gradient(circle at 0 0, transparent ${TAB_RADIUS - 0.5}px, ${$v.tabBg} ${TAB_RADIUS}px)` : 'none'};
266
- }
267
- &::after {
268
- right: -${TAB_RADIUS}px;
269
- background: ${({ $v }) => $v.joins ? `radial-gradient(circle at ${TAB_RADIUS}px 0, transparent ${TAB_RADIUS - 0.5}px, ${$v.tabBg} ${TAB_RADIUS}px)` : 'none'};
270
- }
238
+ const TabItem = styled.div `
239
+ position: relative;
240
+ display: inline-flex;
241
+ align-items: center;
242
+ gap: 2px;
243
+ height: 32px;
244
+ padding: 0 6px 0 12px;
245
+ max-width: 330px;
246
+ user-select: none;
247
+ border-radius: ${({ $v }) => $v.tabRadius};
248
+ background: ${({ $active, $v }) => ($active ? $v.tabBg : $v.idleTabBg)};
249
+ /* Stile card: ombra verso l'alto, sotto il tab poggia sul contenuto */
250
+ box-shadow: ${({ $active, $v }) => ($active ? $v.tabShadow : 'none')};
251
+ opacity: ${({ $dragging }) => ($dragging ? 0.4 : 1)};
252
+ z-index: ${({ $active }) => ($active ? 2 : 1)};
253
+ transition: background 0.18s ease-out, box-shadow 0.18s ease-out, opacity 0.18s ease-out;
254
+ &:hover { background: ${({ $active, $v }) => ($active ? $v.tabBg : $v.tabHover)}; }
255
+ &::before, &::after {
256
+ content: '';
257
+ position: absolute;
258
+ bottom: 0;
259
+ width: ${TAB_RADIUS}px;
260
+ height: ${TAB_RADIUS}px;
261
+ display: ${({ $active, $v }) => ($active && $v.joins ? 'block' : 'none')};
262
+ }
263
+ &::before {
264
+ left: -${TAB_RADIUS}px;
265
+ background: ${({ $v }) => $v.joins ? `radial-gradient(circle at 0 0, transparent ${TAB_RADIUS - 0.5}px, ${$v.tabBg} ${TAB_RADIUS}px)` : 'none'};
266
+ }
267
+ &::after {
268
+ right: -${TAB_RADIUS}px;
269
+ background: ${({ $v }) => $v.joins ? `radial-gradient(circle at ${TAB_RADIUS}px 0, transparent ${TAB_RADIUS - 0.5}px, ${$v.tabBg} ${TAB_RADIUS}px)` : 'none'};
270
+ }
271
271
  `;
272
- const TabButton = styled.button `
273
- display: inline-flex;
274
- align-items: center;
275
- gap: 6px;
276
- max-width: 290px;
277
- height: 100%;
278
- padding: 0 8px 0 0;
279
- border: none;
280
- background: none;
281
- font-family: inherit;
282
- font-size: 13px;
283
- font-weight: ${({ $active }) => ($active ? 600 : 500)};
284
- /* !important perche contenitori come l'intestazione del TMPanel impongono il proprio colore
285
- a tutti i discendenti con '*, & { color: ... !important }': senza, il titolo lo eredita da li */
286
- color: ${({ $active, $textColor, $idleColor }) => ($active ? $textColor : $idleColor)} !important;
287
- white-space: nowrap;
288
- overflow: hidden;
289
- text-overflow: ellipsis;
290
- cursor: pointer;
291
- &:disabled { color: #BDBDBD !important; cursor: default; }
292
- &:focus, &:focus-visible { outline: none; }
272
+ const TabButton = styled.button `
273
+ display: inline-flex;
274
+ align-items: center;
275
+ gap: 6px;
276
+ max-width: 290px;
277
+ height: 100%;
278
+ padding: 0 8px 0 0;
279
+ border: none;
280
+ background: none;
281
+ font-family: inherit;
282
+ font-size: 13px;
283
+ font-weight: ${({ $active }) => ($active ? 600 : 500)};
284
+ /* !important perche contenitori come l'intestazione del TMPanel impongono il proprio colore
285
+ a tutti i discendenti con '*, & { color: ... !important }': senza, il titolo lo eredita da li */
286
+ color: ${({ $active, $textColor, $idleColor }) => ($active ? $textColor : $idleColor)} !important;
287
+ white-space: nowrap;
288
+ overflow: hidden;
289
+ text-overflow: ellipsis;
290
+ cursor: pointer;
291
+ &:disabled { color: #BDBDBD !important; cursor: default; }
292
+ &:focus, &:focus-visible { outline: none; }
293
293
  `;
294
294
  /** Pulsante 'x' per chiudere il tab: stesso colore del titolo accanto. */
295
- const CloseButton = styled.button `
296
- display: flex;
297
- align-items: center;
298
- justify-content: center;
299
- width: 18px;
300
- height: 18px;
301
- flex-shrink: 0;
302
- padding: 0;
303
- border: none;
304
- border-radius: 4px;
305
- background: none;
306
- color: ${({ $color }) => $color} !important;
307
- font-size: 14px;
308
- line-height: 1;
309
- font-family: inherit;
310
- cursor: pointer;
311
-
312
- &:hover { background: rgba(0, 0, 0, 0.15); }
313
- &:focus, &:focus-visible { outline: none; }
295
+ const CloseButton = styled.button `
296
+ display: flex;
297
+ align-items: center;
298
+ justify-content: center;
299
+ width: 18px;
300
+ height: 18px;
301
+ flex-shrink: 0;
302
+ padding: 0;
303
+ border: none;
304
+ border-radius: 4px;
305
+ background: none;
306
+ color: ${({ $color }) => $color} !important;
307
+ font-size: 14px;
308
+ line-height: 1;
309
+ font-family: inherit;
310
+ cursor: pointer;
311
+
312
+ &:hover { background: rgba(0, 0, 0, 0.15); }
313
+ &:focus, &:focus-visible { outline: none; }
314
314
  `;
315
315
  /** Casella di testo mostrata al posto del titolo durante la rinomina. */
316
- const RenameInput = styled.input `
317
- margin: 4px 2px 4px 10px;
318
- padding: 2px 4px;
319
- width: 130px;
320
- font-family: inherit;
321
- font-size: 13px;
322
- font-weight: 600;
323
- color: ${TEXT_ACTIVE};
324
- background: ${TAB_BG};
325
- border: 1px solid ${ACCENT};
326
- border-radius: 4px;
327
- outline: none;
316
+ const RenameInput = styled.input `
317
+ margin: 4px 2px 4px 10px;
318
+ padding: 2px 4px;
319
+ width: 130px;
320
+ font-family: inherit;
321
+ font-size: 13px;
322
+ font-weight: 600;
323
+ color: ${TEXT_ACTIVE};
324
+ background: ${TAB_BG};
325
+ border: 1px solid ${ACCENT};
326
+ border-radius: 4px;
327
+ outline: none;
328
328
  `;
329
329
  /** Badge numerico a pillola accanto al titolo (es. conteggio errori). */
330
- const TabBadge = styled.span `
331
- background: ${({ $color }) => $color};
332
- color: #fff !important;
333
- font-size: 11px;
334
- font-weight: 700;
335
- line-height: 16px;
336
- min-width: 16px;
337
- padding: 0 5px;
338
- border-radius: 999em;
339
- text-align: center;
330
+ const TabBadge = styled.span `
331
+ background: ${({ $color }) => $color};
332
+ color: #fff !important;
333
+ font-size: 11px;
334
+ font-weight: 700;
335
+ line-height: 16px;
336
+ min-width: 16px;
337
+ padding: 0 5px;
338
+ border-radius: 999em;
339
+ text-align: center;
340
340
  `;
341
341
  const MAX_LABEL_CHARS = 30;
342
342
  const LABEL_COUNTER = /\s*\(\d+\)$/;
@@ -11,5 +11,5 @@ interface ITMTooltipProps extends ITooltipOptions {
11
11
  childStyle?: React.CSSProperties;
12
12
  allowContentInteraction?: boolean;
13
13
  }
14
- declare const TMTooltip: ({ children, position, content, hideAfterDelay, parentStyle, childStyle, allowContentInteraction }: ITMTooltipProps) => import("react/jsx-runtime").JSX.Element;
14
+ declare const TMTooltip: ({ children, position, content, hideAfterDelay, parentStyle, childStyle, allowContentInteraction }: ITMTooltipProps) => React.JSX.Element;
15
15
  export default TMTooltip;
@@ -29,13 +29,19 @@ interface ITMTreeViewProps {
29
29
  showLoadMoreButton?: boolean;
30
30
  enableVirtualization?: boolean;
31
31
  }
32
- declare const TMTreeView: ({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, onItemContextMenu, autoSelectChildren, itemsPerPage, showLoadMoreButton, enableVirtualization }: ITMTreeViewProps) => import("react/jsx-runtime").JSX.Element;
32
+ declare const TMTreeView: ({ dataSource, focusedItem, selectedItems, allowMultipleSelection, onDataChanged, calculateItemsForNode, itemRender, onNodeUpdate, onFocusedItemChanged, onSelectionChanged, shouldDelayFocusOnEvent, onItemContextMenu, autoSelectChildren, itemsPerPage, showLoadMoreButton, enableVirtualization }: ITMTreeViewProps) => React.JSX.Element;
33
33
  export default TMTreeView;
34
- export declare const StyledTreeContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
35
- export declare const StyledItemContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
36
- export declare const StyledTreeNode: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$isSelected"> & {
34
+ export declare const StyledTreeContainer: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
35
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
36
+ }> & string;
37
+ export declare const StyledItemContent: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
38
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
39
+ }> & string;
40
+ export declare const StyledTreeNode: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
41
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
42
+ }, {
37
43
  $isSelected?: boolean;
38
- }, never> & Partial<Pick<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$isSelected"> & {
39
- $isSelected?: boolean;
40
- }, never>>> & string;
41
- export declare const StyledStickyPaginator: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
44
+ }>> & string;
45
+ export declare const StyledStickyPaginator: import("styled-components/dist/types").IStyledComponentBase<"web", Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
46
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
47
+ }> & string;
@@ -1,8 +1,9 @@
1
+ import React from 'react';
1
2
  interface TMUserAvatarProps {
2
3
  displayName: string;
3
4
  nameForColorCalculation: string;
4
5
  tooltipName?: string;
5
6
  returnType?: 'jsx' | 'svg';
6
7
  }
7
- declare const TMUserAvatar: (props: TMUserAvatarProps) => string | import("react/jsx-runtime").JSX.Element;
8
+ declare const TMUserAvatar: (props: TMUserAvatarProps) => string | React.JSX.Element;
8
9
  export default TMUserAvatar;
@@ -1,5 +1,6 @@
1
+ import React from 'react';
1
2
  import { ValidationItem } from '@topconsultnpm/sdk-ts';
2
3
  declare const TMVilViewer: ({ vil }: {
3
4
  vil?: ValidationItem[];
4
- }) => import("react/jsx-runtime").JSX.Element | null;
5
+ }) => React.JSX.Element | null;
5
6
  export default TMVilViewer;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { ITMLayoutContainerProps } from './TMLayout';
2
3
  interface ITMWaitPanelProps {
3
4
  title?: string;
@@ -14,7 +15,7 @@ interface ITMWaitPanelProps {
14
15
  onAbortClick?: (abortController: AbortController | undefined) => void;
15
16
  useHighZIndex?: boolean;
16
17
  }
17
- export declare const TMWaitPanel: (props: ITMWaitPanelProps) => import("react/jsx-runtime").JSX.Element;
18
+ export declare const TMWaitPanel: (props: ITMWaitPanelProps) => React.JSX.Element;
18
19
  interface ITMLayoutWaitingContainerProps extends ITMLayoutContainerProps {
19
20
  showWaitPanel?: boolean;
20
21
  waitPanelTitle?: string;
@@ -30,5 +31,5 @@ interface ITMLayoutWaitingContainerProps extends ITMLayoutContainerProps {
30
31
  abortController?: AbortController;
31
32
  usePortal?: boolean;
32
33
  }
33
- export declare const TMLayoutWaitingContainer: ({ showWaitPanel, showWaitPanelPrimary, showWaitPanelSecondary, waitPanelTitle, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, isCancelable, abortController, usePortal, gap, onClick, justifyContent, alignItems, children, direction }: ITMLayoutWaitingContainerProps) => import("react/jsx-runtime").JSX.Element;
34
+ export declare const TMLayoutWaitingContainer: ({ showWaitPanel, showWaitPanelPrimary, showWaitPanelSecondary, waitPanelTitle, waitPanelTextSecondary, waitPanelValueSecondary, waitPanelMaxValueSecondary, waitPanelTextPrimary, waitPanelValuePrimary, waitPanelMaxValuePrimary, isCancelable, abortController, usePortal, gap, onClick, justifyContent, alignItems, children, direction }: ITMLayoutWaitingContainerProps) => React.JSX.Element;
34
35
  export {};
@@ -21,6 +21,8 @@ export interface ITMWaitPanelOptions {
21
21
  /** Didascalie fisse sopra le due barre, es. "Documenti" e "File corrente". Omesse: nessuna riga. */
22
22
  primaryLabel?: string;
23
23
  secondaryLabel?: string;
24
+ /** Quanti messaggi di warning / errore mostrare nel popover delle pill. Default: 5. */
25
+ maxVisibleMessages?: number;
24
26
  /** Invocato quando l'utente interrompe */
25
27
  onAbort?: () => void;
26
28
  }
@@ -67,10 +69,10 @@ export interface ITMWaitPanelHandle {
67
69
  setSubtitle(subtitle: string | undefined): void;
68
70
  /** Incrementa il contatore verde (default +1). */
69
71
  ok(delta?: number): void;
70
- /** Incrementa il contatore giallo (default +1). */
71
- warning(delta?: number): void;
72
- /** Incrementa il contatore rosso (default +1). */
73
- error(delta?: number): void;
72
+ /** Incrementa il contatore giallo (default +1). Il messaggio, se presente, finisce nel popover della pill. */
73
+ warning(delta?: number, message?: string): void;
74
+ /** Incrementa il contatore rosso (default +1). Il messaggio, se presente, finisce nel popover della pill. */
75
+ error(delta?: number, message?: string): void;
74
76
  /** Aggiornamento cumulativo: i contatori qui sono valori assoluti, non incrementi. */
75
77
  update(patch: ITMWaitPanelUpdate): void;
76
78
  /** Aggiorna la barra secondaria. Senza `showSecondary` non ha effetto. */
@@ -104,6 +106,12 @@ declare class TMWaitPanelInstance implements ITMWaitPanelHandle {
104
106
  private _secondaryValue;
105
107
  private _secondaryMax;
106
108
  private _secondaryText;
109
+ private readonly maxVisibleMessages;
110
+ private readonly _warningMessages;
111
+ private readonly _errorMessages;
112
+ private warningMessageTotal;
113
+ private errorMessageTotal;
114
+ private messagesDirty;
107
115
  private lastPercentText;
108
116
  private lastSubtitleText;
109
117
  private lastElapsedText;
@@ -129,8 +137,8 @@ declare class TMWaitPanelInstance implements ITMWaitPanelHandle {
129
137
  setTitle: (title: string) => void;
130
138
  setSubtitle: (subtitle: string | undefined) => void;
131
139
  ok: (delta?: number) => void;
132
- warning: (delta?: number) => void;
133
- error: (delta?: number) => void;
140
+ warning: (delta?: number, message?: string) => void;
141
+ error: (delta?: number, message?: string) => void;
134
142
  setSecondary: (patch: ITMWaitPanelSecondaryUpdate) => void;
135
143
  update: (patch: ITMWaitPanelUpdate) => void;
136
144
  close: () => void;
@@ -148,6 +156,8 @@ declare class TMWaitPanelInstance implements ITMWaitPanelHandle {
148
156
  private schedule;
149
157
  /** Riversa sul DOM lo stato corrente (barra, percentuale, testi, contatori), saltando cio' che non e' cambiato. */
150
158
  private flush;
159
+ /** 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. */
160
+ private flushMessages;
151
161
  /** Riversa sul DOM la seconda barra. Invocata solo quando la view l'ha renderizzata. */
152
162
  private flushSecondary;
153
163
  /** Aggiorna la riga dei tempi: trascorso al netto delle pause e stima del rimanente. */