@topconsultnpm/sdkui-react 6.20.0-dev1.123 → 6.20.0-dev1.125

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.
@@ -239,11 +239,11 @@ export const Submenu = styled.div `
239
239
  position: fixed;
240
240
  left: ${props => {
241
241
  const spaceOnRight = globalThis.innerWidth - props.$parentRect.right;
242
- return spaceOnRight > 240 ? `${props.$parentRect.right - 8}px` : 'auto';
242
+ return spaceOnRight > 240 ? `${props.$parentRect.right - 4}px` : 'auto';
243
243
  }};
244
244
  right: ${props => {
245
245
  const spaceOnRight = globalThis.innerWidth - props.$parentRect.right;
246
- return spaceOnRight > 240 ? 'auto' : `${globalThis.innerWidth - props.$parentRect.left + 8}px`;
246
+ return spaceOnRight > 240 ? 'auto' : `${globalThis.innerWidth - props.$parentRect.left + 4}px`;
247
247
  }};
248
248
  /* Vertical positioning: Each submenu independently decides direction based on its own space */
249
249
  top: ${props => {
@@ -266,25 +266,25 @@ export const Submenu = styled.div `
266
266
  backdrop-filter: blur(10px);
267
267
  border: 1px solid rgba(0, 0, 0, 0.06);
268
268
 
269
- /* Add invisible padding to bridge the gap - works for both sides */
269
+ /* Invisible hover bridge on the LEFT side (for submenus opening left) */
270
270
  &::before {
271
271
  content: '';
272
272
  position: absolute;
273
273
  right: 100%;
274
- top: 0;
275
- bottom: 0;
276
- width: 15px;
274
+ top: -20px;
275
+ bottom: -20px;
276
+ width: 25px;
277
277
  background: transparent;
278
278
  }
279
279
 
280
- /* Bridge on the right side for nested submenus */
280
+ /* Invisible hover bridge on the RIGHT side (for submenus opening right) */
281
281
  &::after {
282
282
  content: '';
283
283
  position: absolute;
284
284
  left: 100%;
285
- top: 0;
286
- bottom: 0;
287
- width: 15px;
285
+ top: -20px;
286
+ bottom: -20px;
287
+ width: 25px;
288
288
  background: transparent;
289
289
  }
290
290
 
@@ -328,30 +328,7 @@ export const Submenu = styled.div `
328
328
  &::-webkit-scrollbar-thumb:hover {
329
329
  background: rgba(0, 0, 0, 0.3);
330
330
  }
331
- ` : `
332
- /* Fallback max-height for submenus that fit */
333
- max-height: calc(100vh - 40px);
334
- overflow-y: auto;
335
- overflow-x: hidden;
336
-
337
- &::-webkit-scrollbar {
338
- width: 8px;
339
- }
340
-
341
- &::-webkit-scrollbar-track {
342
- background: rgba(0, 0, 0, 0.05);
343
- border-radius: 4px;
344
- }
345
-
346
- &::-webkit-scrollbar-thumb {
347
- background: rgba(0, 0, 0, 0.2);
348
- border-radius: 4px;
349
- }
350
-
351
- &::-webkit-scrollbar-thumb:hover {
352
- background: rgba(0, 0, 0, 0.3);
353
- }
354
- `}
331
+ ` : ``}
355
332
 
356
333
  [data-theme='dark'] & {
357
334
  &::-webkit-scrollbar-track {
@@ -7,7 +7,7 @@ import * as S from './styles';
7
7
  import { IconDelete, IconMenuVertical, IconPin, IconRotate, IconSeparator, SDKUI_Globals } from '../../../helper';
8
8
  const Separator = (props) => (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", height: "1em", width: "1em", ...props, children: _jsx("path", { d: "M12 2v20", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round" }) }));
9
9
  const IconDraggableDots = (props) => (_jsx("svg", { fontSize: 18, viewBox: "0 0 24 24", fill: "currentColor", height: "1em", width: "1em", ...props, children: _jsx("path", { d: "M9 3a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm10-18a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0zm0 9a2 2 0 11-4 0 2 2 0 014 0z" }) }));
10
- const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained = false, defaultPosition = { x: 1, y: 90 }, defaultOrientation = 'horizontal', maxItems = 100, contextMenuDefaultPinnedIds = [], defaultItems = [], enableConfigMode = true, bgColor = undefined, hasContextMenu = true, pinnedItemIds: externalPinnedItemIds, onPinChange, }) => {
10
+ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained = false, defaultPosition = { x: 1, y: 90 }, defaultOrientation = 'horizontal', maxItems = 100, defaultPinnedItems = [], fixedItems = [], enableConfigMode = true, bgColor = undefined, hasContextMenu = true, pinnedItemIds: externalPinnedItemIds, onPinChange, }) => {
11
11
  const percentToPixels = (percent, containerSize) => {
12
12
  return (percent / 100) * containerSize;
13
13
  };
@@ -28,7 +28,7 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
28
28
  };
29
29
  const getDefaultConfig = () => ({
30
30
  orientation: defaultOrientation,
31
- savedItemIds: contextMenuDefaultPinnedIds,
31
+ savedItemIds: defaultPinnedItems,
32
32
  position: defaultPosition,
33
33
  });
34
34
  const resetFloatingBarSettings = () => {
@@ -44,14 +44,14 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
44
44
  if (!enableConfigMode) {
45
45
  return {
46
46
  orientation: defaultOrientation,
47
- savedItemIds: contextMenuDefaultPinnedIds,
47
+ savedItemIds: defaultPinnedItems,
48
48
  position: defaultPosition,
49
49
  };
50
50
  }
51
51
  try {
52
52
  const settings = SDKUI_Globals.userSettings.searchSettings.floatingMenuBar;
53
- // If localStorage is empty (first time), use props as defaults
54
- if (!settings || !settings.position || !settings.itemIds) {
53
+ // If localStorage is empty (first time) or itemIds is empty array, use props as defaults
54
+ if (!settings || !settings.position || !settings.itemIds || settings.itemIds.length === 0) {
55
55
  return getDefaultConfig();
56
56
  }
57
57
  // Validate position
@@ -145,6 +145,7 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
145
145
  const isSyncingFromExternal = useRef(false);
146
146
  const isLocalChange = useRef(false);
147
147
  const dragStartPosition = useRef(null);
148
+ const isItemsInitialized = useRef(false);
148
149
  useEffect(() => {
149
150
  floatingBarItemIds.current = new Set(state.items.map(i => i.id));
150
151
  floatingBarItemNames.current = new Set(state.items.map(i => i.name));
@@ -204,49 +205,56 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
204
205
  });
205
206
  return result;
206
207
  }, [state.items]);
207
- // Restore items on mount from savedItemIds
208
+ // Restore items on mount (and when contextMenuItems become available) from savedItemIds
208
209
  useEffect(() => {
209
- if (contextMenuItems.length > 0 || initialConfig.savedItemIds.length > 0 || defaultItems.length > 0) {
210
- const flatItems = flattenMenuItems(contextMenuItems);
211
- let itemsToSet = [];
212
- // If enableConfigMode is false and defaultItems provided, use only defaultItems
213
- if (!enableConfigMode && defaultItems.length > 0) {
214
- itemsToSet = defaultItems;
215
- }
216
- else if (enableConfigMode && initialConfig.savedItemIds.length > 0) {
217
- // Restore items in the saved order from localStorage (only if config mode is enabled)
218
- const restoredItems = initialConfig.savedItemIds
219
- .map((id) => {
220
- if (id.startsWith('separator-')) {
221
- return {
222
- id,
223
- name: 'Separator',
224
- icon: _jsx(Separator, {}),
225
- onClick: () => { },
226
- isSeparator: true,
227
- };
228
- }
229
- return flatItems.find(item => item.id === id);
230
- })
231
- .filter((item) => item !== undefined);
232
- itemsToSet = restoredItems;
233
- }
234
- else if (contextMenuDefaultPinnedIds.length > 0) {
235
- // First time: Use contextMenuDefaultPinnedIds from props to find items by ID
236
- const defaultPinnedItems = contextMenuDefaultPinnedIds
237
- .map((id) => flatItems.find(item => item.id === id))
238
- .filter((item) => item !== undefined);
239
- itemsToSet = defaultPinnedItems;
240
- }
241
- else if (defaultItems.length > 0) {
242
- // Use defaultItems as fallback
243
- itemsToSet = defaultItems;
244
- }
245
- if (itemsToSet.length > 0) {
246
- setState(s => ({ ...s, items: itemsToSet }));
210
+ // For enableConfigMode=false: always sync with fixedItems
211
+ if (!enableConfigMode) {
212
+ if (fixedItems.length > 0) {
213
+ setState(s => ({ ...s, items: fixedItems }));
247
214
  }
215
+ return;
216
+ }
217
+ // For enableConfigMode=true: only initialize once
218
+ if (isItemsInitialized.current)
219
+ return;
220
+ // Wait until contextMenuItems is populated
221
+ if (contextMenuItems.length === 0)
222
+ return;
223
+ const flatItems = flattenMenuItems(contextMenuItems);
224
+ if (flatItems.length === 0)
225
+ return;
226
+ let itemsToSet = [];
227
+ if (initialConfig.savedItemIds.length > 0) {
228
+ // Restore items in the saved order from localStorage
229
+ const restoredItems = initialConfig.savedItemIds
230
+ .map((id) => {
231
+ if (id.startsWith('separator-')) {
232
+ return {
233
+ id,
234
+ name: 'Separator',
235
+ icon: _jsx(Separator, {}),
236
+ onClick: () => { },
237
+ isSeparator: true,
238
+ };
239
+ }
240
+ return flatItems.find(item => item.id === id);
241
+ })
242
+ .filter((item) => item !== undefined);
243
+ itemsToSet = restoredItems;
244
+ }
245
+ // If still empty, try defaultPinnedItems
246
+ if (itemsToSet.length === 0 && defaultPinnedItems.length > 0) {
247
+ const resolvedDefaultItems = defaultPinnedItems
248
+ .map((id) => flatItems.find(item => item.id === id))
249
+ .filter((item) => item !== undefined);
250
+ itemsToSet = resolvedDefaultItems;
248
251
  }
249
- }, enableConfigMode ? [] : [defaultItems]); // Update when defaultItems change if config mode is disabled
252
+ if (itemsToSet.length > 0) {
253
+ isItemsInitialized.current = true;
254
+ setState(s => ({ ...s, items: itemsToSet }));
255
+ }
256
+ // eslint-disable-next-line react-hooks/exhaustive-deps
257
+ }, [contextMenuItems, fixedItems, enableConfigMode]);
250
258
  // Sync with external pinnedItemIds when they change (from parent component)
251
259
  useEffect(() => {
252
260
  // Skip sync if a local change was just made (e.g. right-click remove/add separator)
@@ -256,6 +264,10 @@ const TMFloatingMenuBar = ({ containerRef, contextMenuItems = [], isConstrained
256
264
  }
257
265
  if (externalPinnedItemIds === undefined || !enableConfigMode)
258
266
  return;
267
+ // Skip sync if external is empty but we have initialized items (first login case)
268
+ // The parent hook starts with [] but we've initialized with defaults
269
+ if (externalPinnedItemIds.length === 0 && state.items.length > 0)
270
+ return;
259
271
  const flatItems = flattenMenuItems(contextMenuItems);
260
272
  // Build items from external pinned IDs
261
273
  const itemsFromExternal = externalPinnedItemIds
@@ -16,9 +16,9 @@ export interface TMFloatingMenuBarProps {
16
16
  isConstrained?: boolean;
17
17
  defaultPosition?: Position;
18
18
  maxItems?: number;
19
- contextMenuDefaultPinnedIds?: string[];
19
+ defaultPinnedItems?: string[];
20
20
  defaultOrientation?: 'horizontal' | 'vertical';
21
- defaultItems?: TMFloatingMenuItem[];
21
+ fixedItems?: TMFloatingMenuItem[];
22
22
  enableConfigMode?: boolean;
23
23
  bgColor?: string;
24
24
  hasContextMenu?: boolean;
@@ -614,7 +614,7 @@ const TMSearchResult = ({ allTasks = [], getAllTasks, deleteTaskByIdsCallback, a
614
614
  _jsx(TMLayoutItem, { children: _jsx(TMSearchResultSelector, { searchResults: currentSearchResults, disableAccordionIfSingleCategory: disableAccordionIfSingleCategory, selectedTID: selectedSearchResultTID, selectedSearchResult: selectedSearchResult, autoSelectFirst: !isMobile || currentSearchResults.length === 1, onSelectionChanged: onSearchResultSelectionChanged }) })
615
615
  :
616
616
  _jsx(_Fragment, {}), _jsx(TMLayoutItem, { children: _jsx(TMSearchResultGrid, { showSearch: showSearch, fromDTD: fromDTD, allUsers: allUsers, inputFocusedItem: focusedItem, inputSelectedItems: selectedItems, searchResult: searchResults.length > 1 ? selectedSearchResult : searchResults[0], lastUpdateSearchTime: lastUpdateSearchTime, openInOffice: openInOffice, onDblClick: () => openFormHandler(LayoutModes.Update), floatingMenuItems: floatingMenuItems, onSelectionChanged: (items) => { setSelectedItems(items); }, onVisibleItemChanged: setVisibleItems, onFocusedItemChanged: setFocusedItem, onDownloadDcmtsAsync: async (inputDcmts, downloadType, downloadMode, _y, confirmAttachments) => await downloadDcmtsAsync(inputDcmts, downloadType, downloadMode, onFileOpened, confirmAttachments), showExportForm: showExportForm, onCloseExportForm: onCloseExportForm }) })] }), allowFloatingBar && showFloatingBar && deviceType !== DeviceType.MOBILE &&
617
- _jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 1, y: 88 }, contextMenuDefaultPinnedIds: ['rel-det', 'rel-mst', 'dl'], defaultOrientation: 'horizontal', hasContextMenu: false, pinnedItemIds: pinnedItemIds, onPinChange: setPinnedItemIds })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
617
+ _jsx(TMFloatingMenuBar, { containerRef: floatingBarContainerRef, contextMenuItems: floatingMenuItems, isConstrained: true, defaultPosition: { x: 1, y: 88 }, defaultPinnedItems: ['rel-det', 'rel-mst', 'dl'], defaultOrientation: 'horizontal', hasContextMenu: false, pinnedItemIds: pinnedItemIds, onPinChange: setPinnedItemIds })] }), showApprovePopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 0, onClose: () => setShowApprovePopup(false) }), showRejectPopup && _jsx(WorkFlowApproveRejectPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), isReject: 1, onClose: () => setShowRejectPopup(false) }), showReAssignPopup && _jsx(WorkFlowReAssignPopUp, { deviceType: deviceType, onCompleted: onWFOperationCompleted, selectedItems: getSelectedDcmtsOrFocused(selectedItems, focusedItem), onClose: () => setShowReAssignPopup(false) }), showMoreInfoPopup && _jsx(WorkFlowMoreInfoPopUp, { TID: focusedItem?.TID, DID: focusedItem?.DID, deviceType: deviceType, onCompleted: onWFOperationCompleted, onClose: () => setShowMoreInfoPopup(false) }), isOpenBatchUpdate && _jsx(TMBatchUpdateForm, { isModal: true, titleModal: `${SDKUI_Localizator.BatchUpdate} (${getSelectionDcmtInfo().length} documenti selezionati)`, inputDcmts: getSelectionDcmtInfo(), TID: focusedItem ? focusedItem?.TID : selectedItems[0]?.TID, DID: focusedItem ? focusedItem?.DID : selectedItems[0]?.DID, onBack: () => {
618
618
  setIsOpenBatchUpdate(false);
619
619
  }, onSavedCallbackAsync: async () => {
620
620
  setIsOpenBatchUpdate(false);
@@ -187,55 +187,50 @@ const TMViewHistoryDcmt = (props) => {
187
187
  const tooltipContent = (_jsxs("div", { style: { textAlign: 'left' }, children: [_jsxs("div", { children: [_jsx("span", { style: { fontWeight: 'bold' }, children: "ID:" }), " ", data.id ?? '-'] }), _jsxs("div", { children: [_jsx("span", { style: { fontWeight: 'bold' }, children: "DID:" }), " ", data.DID ?? '-'] }), _jsxs("div", { children: [_jsx("span", { style: { fontWeight: 'bold' }, children: "TID:" }), " ", data.TID ?? '-'] }), _jsx("hr", {}), _jsxs("div", { children: [_jsxs("span", { style: { fontWeight: 'bold' }, children: [SDKUI_Localizator.Author, ":"] }), " ", data.UpdaterDisplayName ?? '-'] }), _jsxs("div", { children: [_jsxs("span", { style: { fontWeight: 'bold' }, children: [SDKUI_Localizator.Version, ":"] }), " ", data.Version] }), _jsxs("div", { children: [_jsxs("span", { style: { fontWeight: 'bold' }, children: [SDKUI_Localizator.Size, ":"] }), " ", formatBytes(Number(data.FileSize ?? 0))] }), _jsx("hr", {}), _jsxs("div", { children: [_jsxs("span", { style: { fontWeight: 'bold' }, children: [SDKUI_Localizator.CreationTime, ":"] }), " ", Globalization.getDateTimeDisplayValue(data.CreationTime)] }), _jsxs("div", { children: [_jsxs("span", { style: { fontWeight: 'bold' }, children: [SDKUI_Localizator.LastUpdateTime, ":"] }), " ", Globalization.getDateTimeDisplayValue(data.LastUpdateTime)] })] }));
188
188
  return _jsx("div", { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' }, children: _jsx(TMDcmtIcon, { tid: Number(data.TID), did: Number(data.DID), fileExtension: data.FileExt, downloadMode: 'openInNewWindow', tooltipContent: tooltipContent }) });
189
189
  }, []);
190
- const onContextMenuPreparing = (e) => {
191
- if (e === undefined)
192
- return;
193
- if (e.target === 'content') {
194
- e.items = e.items || [];
195
- e.items = [
196
- {
197
- icon: "datafield",
198
- text: SDKUI_Localizator.OpenForm,
199
- disabled: focusedRowKey === undefined,
200
- onClick: () => setShowDcmtForm(true),
201
- },
202
- {
203
- icon: "download",
204
- text: 'Download',
205
- disabled: focusedRowKey === undefined,
206
- onClick: () => downloadFilesCallback(),
207
- },
208
- {
209
- icon: "trash",
210
- text: SDKUI_Localizator.Delete,
211
- disabled: focusedRowKey === undefined,
212
- onClick: deleteFilesCallback,
213
- beginGroup: true
214
- },
215
- {
216
- icon: showSearch ? "eyeclose" : "eyeopen",
217
- onClick: () => setShowSearch(prevShowSearch => !prevShowSearch),
218
- text: showSearch ? SDKUI_Localizator.HideSearch : SDKUI_Localizator.ShowSearch,
219
- visible: true,
220
- disabled: false,
221
- beginGroup: true
222
- },
223
- {
224
- icon: showId ? 'eyeclose' : 'eyeopen',
225
- onClick: () => setShowId(prevShowId => !prevShowId),
226
- text: showId ? SDKUI_Localizator.ID_Hide : SDKUI_Localizator.ID_Show,
227
- visible: true,
228
- disabled: false,
229
- },
230
- {
231
- icon: "refresh",
232
- text: SDKUI_Localizator.Refresh,
233
- disabled: false,
234
- onClick: loadData,
235
- },
236
- ];
237
- }
238
- };
190
+ const customContextMenuItems = useMemo(() => {
191
+ return [
192
+ {
193
+ icon: _jsx("span", { className: "dx-icon-datafield" }),
194
+ name: SDKUI_Localizator.OpenForm,
195
+ disabled: focusedRowKey === undefined,
196
+ onClick: () => setShowDcmtForm(true),
197
+ },
198
+ {
199
+ icon: _jsx("span", { className: "dx-icon-download" }),
200
+ name: 'Download',
201
+ disabled: focusedRowKey === undefined,
202
+ onClick: () => downloadFilesCallback(),
203
+ },
204
+ {
205
+ icon: _jsx("span", { className: "dx-icon-trash" }),
206
+ name: SDKUI_Localizator.Delete,
207
+ disabled: focusedRowKey === undefined,
208
+ onClick: deleteFilesCallback,
209
+ beginGroup: true
210
+ },
211
+ {
212
+ icon: _jsx("span", { className: showSearch ? "dx-icon-eyeclose" : "dx-icon-eyeopen" }),
213
+ onClick: () => setShowSearch(prevShowSearch => !prevShowSearch),
214
+ name: showSearch ? SDKUI_Localizator.HideSearch : SDKUI_Localizator.ShowSearch,
215
+ visible: true,
216
+ disabled: false,
217
+ beginGroup: true
218
+ },
219
+ {
220
+ icon: _jsx("span", { className: showId ? "dx-icon-eyeclose" : "dx-icon-eyeopen" }),
221
+ onClick: () => setShowId(prevShowId => !prevShowId),
222
+ name: showId ? SDKUI_Localizator.ID_Hide : SDKUI_Localizator.ID_Show,
223
+ visible: true,
224
+ disabled: false,
225
+ },
226
+ {
227
+ icon: _jsx("span", { className: "dx-icon-refresh" }),
228
+ name: SDKUI_Localizator.Refresh,
229
+ disabled: false,
230
+ onClick: async () => await loadData(),
231
+ },
232
+ ];
233
+ }, [focusedRowKey, showSearch, showId]);
239
234
  // Handler for double-click cell event
240
235
  const onCellDblClick = useCallback((e) => {
241
236
  if (e.column.dataField === "FileExt")
@@ -279,7 +274,7 @@ const TMViewHistoryDcmt = (props) => {
279
274
  { dataField: "LastUpdateTimeDisplay", caption: SDKUI_Localizator.LastUpdateTime },
280
275
  ]);
281
276
  }, [showId]);
282
- return _jsx(TMModal, { title: `${SDKUI_Localizator.SearchResult} \u2014 ${SDKUI_Localizator.History + ": " + (fromDTD.nameLoc ?? SDKUI_Localizator.Document) + " (DID:" + inputDcmt.DID})`, width: calcResponsiveSizes(deviceType, '700px', '700px', '95%'), height: calcResponsiveSizes(deviceType, '80%', '80%', '95%'), onClose: onClose, 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: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showLocalWaitPanel, showWaitPanelPrimary: showLocalPrimary, waitPanelTitle: waitLocalPanelTitle, waitPanelTextPrimary: waitLocalPanelTextPrimary, waitPanelValuePrimary: waitLocalPanelValuePrimary, waitPanelMaxValuePrimary: waitLocalPanelMaxValuePrimary, isCancelable: true, abortController: abortLocalController, children: [_jsx(TMDataGrid, { dataSource: dcmtHistory, dataColumns: dataColumns, focusedRowKey: focusedRowKey, selection: selection, onContextMenuPreparing: onContextMenuPreparing, onFocusedRowChanged: onFocusedRowChanged, onCellDblClick: onCellDblClick, noDataText: SDKUI_Localizator.NoDataToDisplay, showSearchPanel: showSearch }), (showDcmtForm && selectedDcmt !== undefined) &&
277
+ return _jsx(TMModal, { title: `${SDKUI_Localizator.SearchResult} \u2014 ${SDKUI_Localizator.History + ": " + (fromDTD.nameLoc ?? SDKUI_Localizator.Document) + " (DID:" + inputDcmt.DID})`, width: calcResponsiveSizes(deviceType, '700px', '700px', '95%'), height: calcResponsiveSizes(deviceType, '80%', '80%', '95%'), onClose: onClose, 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: _jsxs(TMLayoutWaitingContainer, { direction: 'vertical', showWaitPanel: showLocalWaitPanel, showWaitPanelPrimary: showLocalPrimary, waitPanelTitle: waitLocalPanelTitle, waitPanelTextPrimary: waitLocalPanelTextPrimary, waitPanelValuePrimary: waitLocalPanelValuePrimary, waitPanelMaxValuePrimary: waitLocalPanelMaxValuePrimary, isCancelable: true, abortController: abortLocalController, children: [_jsx(TMDataGrid, { dataSource: dcmtHistory, dataColumns: dataColumns, focusedRowKey: focusedRowKey, selection: selection, customContextMenuItems: customContextMenuItems, onFocusedRowChanged: onFocusedRowChanged, onCellDblClick: onCellDblClick, noDataText: SDKUI_Localizator.NoDataToDisplay, showSearchPanel: showSearch }), (showDcmtForm && selectedDcmt !== undefined) &&
283
278
  _jsx(TMDcmtForm, { TID: Number(selectedDcmt.TID), DID: Number(selectedDcmt.DID), formMode: FormModes.ReadOnly, isModal: true, widthModal: "95%", heightModal: "95%", titleModal: fromDTD.name ?? SDKUI_Localizator.SearchResult, allowNavigation: dcmtHistory.length > 0, itemIndex: selectedIndex + 1, count: dcmtHistory.length, onClose: () => { setShowDcmtForm(false); }, canNext: canNavigateHandler('next'), canPrev: canNavigateHandler('prev'), onNext: () => onNavigateHandler('next'), onPrev: () => onNavigateHandler('prev'), allTasks: allTasks, getAllTasks: getAllTasks, deleteTaskByIdsCallback: deleteTaskByIdsCallback, addTaskCallback: addTaskCallback, editTaskCallback: editTaskCallback, handleNavigateToWGs: handleNavigateToWGs, handleNavigateToDossiers: handleNavigateToDossiers, moreInfoTasks: getMoreInfoTasksForDocument(allTasks ?? [], Number(selectedDcmt.TID), Number(selectedDcmt.DID)) })] }) }) });
284
279
  };
285
280
  export default TMViewHistoryDcmt;
@@ -1822,7 +1822,7 @@ const WFDiagram = ({ xmlDiagramString, currentSetID, allowEdit = true, onDiagram
1822
1822
  }, [isFullScreen]);
1823
1823
  const diagramContent = (_jsxs(CanvasContainer, { onDoubleClick: handleCanvasDoubleClick, children: [_jsx("input", { ref: fileInputRef, type: "file", accept: ".xml" // Filtra per file XML
1824
1824
  , onChange: handleFileChange, style: { display: 'none' } }), SDK_Globals.tmSession?.SessionDescr?.appModuleID === AppModules.SURFER ?
1825
- _jsx(TMFloatingMenuBar, { containerRef: diagramRef, defaultPosition: { x: 45, y: 85 }, enableConfigMode: false, defaultItems: [
1825
+ _jsx(TMFloatingMenuBar, { containerRef: diagramRef, defaultPosition: { x: 45, y: 85 }, enableConfigMode: false, fixedItems: [
1826
1826
  { icon: _jsx(IconZoomIn, {}), name: SDKUI_Localizator.ZoomIn, disabled: isAutoZoomEnabled, onClick: () => { handleZoomIn(); }, id: 'zoom-in', isPinned: true },
1827
1827
  { icon: _jsx(IconZoomOut, {}), name: SDKUI_Localizator.ZoomOut, disabled: isAutoZoomEnabled, onClick: () => { handleZoomOut(); }, id: 'zoom-out', isPinned: true },
1828
1828
  { icon: _jsx(IconZoomAuto, {}), name: 'AutoZoom', onClick: () => { handleToggleAutoZoom(); }, id: 'zoom-auto', isPinned: true, isToggle: isAutoZoomEnabled },
@@ -83,8 +83,7 @@ export declare class SDKUI_Localizator {
83
83
  static get Calendar(): "Kalender" | "Calendar" | "Calendario" | "Calendrier" | "Calendário";
84
84
  static get CancelCheckOut(): string;
85
85
  static get CassettoDoganaleExportMRN(): "MRN-Erholung für den Export" | "MRN recovery for export" | "Recuperación MRN para exportación" | "Récupération MRN pour l'export" | "Recuperação MRN para exportação" | "Recupero MRN per Export";
86
- static get CassettoDoganaleExportVU(): "Wiederherstellung des Ausreisevisums" | "Exit Visa Recovery" | "Recuperación de Visa de Salida" | "Sortie Récupération Visa" | "Recuperação de Visto de Saída" | "Recupero Visto Uscire per Export";
87
- static get CassettoDoganaleExportEUR1(): "EUR1-Erholung für den Export" | "EUR1 recovery for export" | "Recuperación EUR1 para exportación" | "Récupération EUR1 pour l'export" | "Recuperação EUR1 para exportação" | "Recupero EUR1 per Export";
86
+ static get CassettoDoganaleExportVUEur1(): "Wiederherstellung des Ausreisevisums" | "Exit Visa Recovery" | "Recuperación de Visa de Salida" | "Sortie Récupération Visa" | "Recuperação de Visto de Saída" | "Recupero Visto Uscire ed EUR1 per Export";
88
87
  static get CassettoDoganaleImportMRN(): "MRN-Erholung für den Import" | "MRN recovery for import" | "Recuperación MRN para importación" | "Récupération MRN à l'import" | "Recuperação MRN para importação" | "Recupero MRN per Import";
89
88
  static get CassettoDoganalePlus_UserName(): "STD-Benutzer des ADM-Portals" | "STD User of the ADM Portal" | "Usuario STD del Portal ADM" | "Utilisateur STD du portail ADM" | "Utilizador DST do Portal ADM" | "Utente STD del Portale ADM";
90
89
  static get Cancel(): "Abbrechen" | "Cancel" | "Anular" | "Annuler" | "Cancelar" | "Annulla";
@@ -256,7 +255,7 @@ export declare class SDKUI_Localizator {
256
255
  static get ExportMRNOuputFile(): "Dateipfad für den Export (MRN)" | "File Path for Export (MRN)" | "Ruta de archivo para exportación (MRN)" | "Chemin du fichier à exporter (MRN)" | "Caminho do arquivo para exportação (MRN)" | "Percorso del File per Export (MRN)";
257
256
  static get ExportVU(): "Exportieren – Gesehener Ausgang" | "Export - Seen Exit" | "Exportar - Salida vista" | "Exporter - Vu Sortie" | "Exportar - Saída vista" | "Export - Visto Uscire";
258
257
  static get ExportVUDayBack(): "Anzahl der Tage für die Exportdatenwiederherstellung (Gesehener Ausgang)" | "Number of days for export data recovery (Seen Exit)" | "Número de días para la recuperación de datos de exportación (Salida vista)" | "Nombre de jours pour la récupération des données d'exportation (Vu Sortie)" | "Número de dias para recuperação de dados de exportação (Saída vista)" | "Numero di giorni per il recupero dei dati di Export (Visto Uscire)";
259
- static get ExportVUOuputFile(): "Dateipfad für den Export (Gesehener Ausgang)" | "File Path for Export (Seen Exit)" | "Ruta de archivo para exportación (Salida vista)" | "Chemin du fichier à exporter (Vu Sortie)" | "Caminho do arquivo para exportação (Saída vista)" | "Percorso del File per Export (Visto Uscire)";
258
+ static get ExportVUEUR1OuputFile(): "Dateipfad für den Export (Gesehener Ausgang und EUR1)" | "File Path for Export (Seen Exit and EUR1)" | "Ruta de archivo para exportación (Salida vista y EUR1)" | "Chemin du fichier à exporter (Vu Sortie et EUR1)" | "Caminho do arquivo para exportação (Saída vista e EUR1)" | "Percorso del File per Export (Visto Uscire ed EUR1)";
260
259
  static get Extension(): string;
261
260
  static get Favorites(): "Favoriten" | "Favorites" | "Favoritos" | "Favoris" | "Preferiti";
262
261
  static get FavoritesAndRecentDcmts(): "Zuletzt verwendete und bevorzugte Dokumente" | "Preferred and recent documents" | "Documentos preferidos y recientes" | "Documents préférés et récents" | "Documentos preferidos e recentes" | "Documenti preferiti e recenti";
@@ -355,7 +354,7 @@ export declare class SDKUI_Localizator {
355
354
  static get Login(): string;
356
355
  static get LogDelete(): "Löschen der Logik" | "Logical delete" | "Cancelación lógica" | "Suppression logique" | "Lógica de cancelamento" | "Cancellazione logica";
357
356
  static get Logout(): "Abmelden" | "Logout" | "Cerrar sesión" | "Déconnexion" | "Sair" | "Esci";
358
- static get LogScreenFolder(): "Ordner für Screenshot-Protokolle" | "Log screenshot folder" | "Carpeta de registro de capturas de pantalla" | "Dossier de journal des captures d'écran" | "Pasta de log de capturas de tela" | "Cartella di log screenshot";
357
+ static get LogFolder(): "Protokollordner" | "Log folder" | "Carpeta de registro" | "Dossier de journal" | "Pasta de registro" | "Cartella di log";
359
358
  static get Low(): "Niedrig" | "Low" | "Baja" | "Faible" | "Baixa" | "Bassa";
360
359
  static get MakeEditable(): "Bearbeitbar machen" | "Make editable" | "Hacer editable" | "Rendre modifiable" | "Faça editável" | "Rendi editabile";
361
360
  static get ManageFromTaskPanel(): string;
@@ -785,24 +785,14 @@ export class SDKUI_Localizator {
785
785
  default: return "Recupero MRN per Export";
786
786
  }
787
787
  }
788
- static get CassettoDoganaleExportVU() {
788
+ static get CassettoDoganaleExportVUEur1() {
789
789
  switch (this._cultureID) {
790
790
  case CultureIDs.De_DE: return "Wiederherstellung des Ausreisevisums";
791
791
  case CultureIDs.En_US: return "Exit Visa Recovery";
792
792
  case CultureIDs.Es_ES: return "Recuperación de Visa de Salida";
793
793
  case CultureIDs.Fr_FR: return "Sortie Récupération Visa";
794
794
  case CultureIDs.Pt_PT: return "Recuperação de Visto de Saída";
795
- default: return "Recupero Visto Uscire per Export";
796
- }
797
- }
798
- static get CassettoDoganaleExportEUR1() {
799
- switch (this._cultureID) {
800
- case CultureIDs.De_DE: return "EUR1-Erholung für den Export";
801
- case CultureIDs.En_US: return "EUR1 recovery for export";
802
- case CultureIDs.Es_ES: return "Recuperación EUR1 para exportación";
803
- case CultureIDs.Fr_FR: return "Récupération EUR1 pour l'export";
804
- case CultureIDs.Pt_PT: return "Recuperação EUR1 para exportação";
805
- default: return "Recupero EUR1 per Export";
795
+ default: return "Recupero Visto Uscire ed EUR1 per Export";
806
796
  }
807
797
  }
808
798
  static get CassettoDoganaleImportMRN() {
@@ -2527,14 +2517,14 @@ export class SDKUI_Localizator {
2527
2517
  default: return "Numero di giorni per il recupero dei dati di Export (Visto Uscire)";
2528
2518
  }
2529
2519
  }
2530
- static get ExportVUOuputFile() {
2520
+ static get ExportVUEUR1OuputFile() {
2531
2521
  switch (this._cultureID) {
2532
- case CultureIDs.De_DE: return "Dateipfad für den Export (Gesehener Ausgang)";
2533
- case CultureIDs.En_US: return "File Path for Export (Seen Exit)";
2534
- case CultureIDs.Es_ES: return "Ruta de archivo para exportación (Salida vista)";
2535
- case CultureIDs.Fr_FR: return "Chemin du fichier à exporter (Vu Sortie)";
2536
- case CultureIDs.Pt_PT: return "Caminho do arquivo para exportação (Saída vista)";
2537
- default: return "Percorso del File per Export (Visto Uscire)";
2522
+ case CultureIDs.De_DE: return "Dateipfad für den Export (Gesehener Ausgang und EUR1)";
2523
+ case CultureIDs.En_US: return "File Path for Export (Seen Exit and EUR1)";
2524
+ case CultureIDs.Es_ES: return "Ruta de archivo para exportación (Salida vista y EUR1)";
2525
+ case CultureIDs.Fr_FR: return "Chemin du fichier à exporter (Vu Sortie et EUR1)";
2526
+ case CultureIDs.Pt_PT: return "Caminho do arquivo para exportação (Saída vista e EUR1)";
2527
+ default: return "Percorso del File per Export (Visto Uscire ed EUR1)";
2538
2528
  }
2539
2529
  }
2540
2530
  static get Extension() {
@@ -3516,14 +3506,14 @@ export class SDKUI_Localizator {
3516
3506
  default: return "Esci";
3517
3507
  }
3518
3508
  }
3519
- static get LogScreenFolder() {
3509
+ static get LogFolder() {
3520
3510
  switch (this._cultureID) {
3521
- case CultureIDs.De_DE: return "Ordner für Screenshot-Protokolle";
3522
- case CultureIDs.En_US: return "Log screenshot folder";
3523
- case CultureIDs.Es_ES: return "Carpeta de registro de capturas de pantalla";
3524
- case CultureIDs.Fr_FR: return "Dossier de journal des captures d'écran";
3525
- case CultureIDs.Pt_PT: return "Pasta de log de capturas de tela";
3526
- default: return "Cartella di log screenshot";
3511
+ case CultureIDs.De_DE: return "Protokollordner";
3512
+ case CultureIDs.En_US: return "Log folder";
3513
+ case CultureIDs.Es_ES: return "Carpeta de registro";
3514
+ case CultureIDs.Fr_FR: return "Dossier de journal";
3515
+ case CultureIDs.Pt_PT: return "Pasta de registro";
3516
+ default: return "Cartella di log";
3527
3517
  }
3528
3518
  }
3529
3519
  static get Low() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.20.0-dev1.123",
3
+ "version": "6.20.0-dev1.125",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",