@topconsultnpm/sdkui-react 6.19.0-dev1.5 → 6.19.0-dev1.51

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 (55) hide show
  1. package/lib/components/base/Styled.d.ts +1 -0
  2. package/lib/components/base/Styled.js +40 -0
  3. package/lib/components/base/TMFileManagerDataGridView.js +4 -1
  4. package/lib/components/base/TMTreeView.js +3 -2
  5. package/lib/components/editors/TMHtmlEditor.d.ts +5 -0
  6. package/lib/components/editors/TMHtmlEditor.js +72 -12
  7. package/lib/components/editors/TMMetadataValues.js +90 -40
  8. package/lib/components/features/archive/TMArchive.d.ts +2 -0
  9. package/lib/components/features/archive/TMArchive.js +56 -25
  10. package/lib/components/features/blog/TMBlogCommentForm.js +57 -41
  11. package/lib/components/features/documents/TMDcmtForm.d.ts +10 -3
  12. package/lib/components/features/documents/TMDcmtForm.js +138 -36
  13. package/lib/components/features/documents/TMDragDropOverlay.js +2 -1
  14. package/lib/components/features/documents/TMMasterDetailDcmts.js +1 -1
  15. package/lib/components/features/documents/TMRelationViewer.d.ts +53 -3
  16. package/lib/components/features/documents/TMRelationViewer.js +232 -85
  17. package/lib/components/features/search/TMSearch.d.ts +3 -1
  18. package/lib/components/features/search/TMSearch.js +13 -4
  19. package/lib/components/features/search/TMSearchQueryPanel.d.ts +1 -1
  20. package/lib/components/features/search/TMSearchQueryPanel.js +36 -7
  21. package/lib/components/features/search/TMSearchResult.d.ts +3 -1
  22. package/lib/components/features/search/TMSearchResult.js +102 -328
  23. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +2 -2
  24. package/lib/components/features/search/TMSearchResultsMenuItems.js +32 -15
  25. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +3 -1
  26. package/lib/components/features/workflow/TMWorkflowPopup.js +17 -4
  27. package/lib/components/forms/TMChooserForm.d.ts +1 -1
  28. package/lib/components/forms/TMChooserForm.js +2 -2
  29. package/lib/components/grids/TMBlogsUtils.d.ts +1 -0
  30. package/lib/components/grids/TMBlogsUtils.js +40 -4
  31. package/lib/components/index.d.ts +3 -0
  32. package/lib/components/index.js +3 -0
  33. package/lib/components/viewers/TMTidViewer.js +29 -4
  34. package/lib/css/tm-sdkui.css +1 -1
  35. package/lib/helper/SDKUI_Globals.d.ts +2 -1
  36. package/lib/helper/SDKUI_Globals.js +1 -0
  37. package/lib/helper/SDKUI_Localizator.d.ts +4 -0
  38. package/lib/helper/SDKUI_Localizator.js +46 -0
  39. package/lib/helper/TMIcons.d.ts +2 -0
  40. package/lib/helper/TMIcons.js +6 -0
  41. package/lib/helper/TMToppyMessage.d.ts +7 -0
  42. package/lib/helper/TMToppyMessage.js +42 -0
  43. package/lib/helper/TMUtils.d.ts +7 -0
  44. package/lib/helper/TMUtils.js +16 -0
  45. package/lib/helper/index.d.ts +1 -0
  46. package/lib/helper/index.js +1 -0
  47. package/lib/hooks/useRelatedDocuments.d.ts +72 -0
  48. package/lib/hooks/useRelatedDocuments.js +655 -0
  49. package/lib/index.d.ts +1 -0
  50. package/lib/index.js +1 -0
  51. package/lib/ts/types.d.ts +14 -0
  52. package/lib/ts/types.js +15 -0
  53. package/lib/utils/theme.d.ts +1 -0
  54. package/lib/utils/theme.js +1 -0
  55. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { AccessLevels, AccessLevelsEx, AppModules, FileFormats, LayoutModes, SDK_Globals, DcmtTypeListCacheService, LicenseModuleStatus } from '@topconsultnpm/sdk-ts';
3
- import { IconActivity, IconArchiveDoc, IconBatchUpdate, IconCheckFile, IconCheckIn, IconCircleInfo, IconCloseCircle, IconConvertFilePdf, IconDelete, IconDotsVerticalCircleOutline, IconDownload, IconEdit, IconExportTo, IconFileDots, IconHide, IconInfo, IconMenuCAArchive, IconPlatform, IconPreview, IconRelation, IconSearch, IconShow, IconStar, IconSubstFile, IconUndo, IconUserGroupOutline, SDKUI_Localizator, svgToString, searchResultToMetadataValues, IconSignaturePencil, IconArchiveMaster, IconArchiveDetail, IconDetailDcmts } from '../../../helper';
3
+ import { IconActivity, IconArchiveDoc, IconBatchUpdate, IconCheckFile, IconCheckIn, IconCircleInfo, IconCloseCircle, IconConvertFilePdf, IconDelete, IconDotsVerticalCircleOutline, IconDownload, IconEdit, IconExportTo, IconFileDots, IconHide, IconInfo, IconMenuCAArchive, IconPlatform, IconPreview, IconRelation, IconSearch, IconShow, IconStar, IconSubstFile, IconUndo, IconUserGroupOutline, SDKUI_Localizator, svgToString, searchResultToMetadataValues, IconSignaturePencil, IconArchiveMaster, IconArchiveDetail, IconDetailDcmts, isPdfEditorEnabled, IconPair, IconUnpair, IconSharedDcmt } from '../../../helper';
4
4
  import ShowAlert from '../../base/TMAlert';
5
5
  import { TMMessageBoxManager, ButtonNames, TMExceptionBoxManager } from '../../base/TMPopUp';
6
6
  import TMSpinner from '../../base/TMSpinner';
@@ -75,15 +75,7 @@ export const signatureInformationCallback = async (isMobile, inputDcmts) => {
75
75
  TMExceptionBoxManager.show({ exception: error });
76
76
  }
77
77
  };
78
- const PDF_EDITOR_ID = "60007";
79
- const isWidgetEnabled = (widgetId, widgetsString) => {
80
- const widgets = widgetsString.split(";").filter(Boolean);
81
- return widgets.includes(widgetId);
82
- };
83
- const isPdfEditorEnabled = (widgetsString) => {
84
- return isWidgetEnabled(PDF_EDITOR_ID, widgetsString);
85
- };
86
- export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, onRefreshDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, confirmAttachments, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, hasMasterRelation, hasDetailRelation, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToManyDocuments) => {
78
+ export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem, context, showFloatingBar, workingGroupContext, showSearch, setShowFloatingBar, openFormHandler, openSharedArchiveHandler, showSharedDcmtsHandler, downloadDcmtsAsync, runOperationAsync, onRefreshSearchAsync, onRefreshDataRowsAsync, onRefreshAfterAddDcmtToFavs, confirmFormat, confirmAttachments, openTaskFormHandler, openDetailDcmtsFormHandler, openMasterDcmtsFormHandler, openBatchUpdateFormHandler, openExportForm, handleToggleSearch, handleSignApprove, openWGsCopyMoveForm, openCommentFormCallback, openEditPdf, openAddDocumentForm, passToArchiveCallback, archiveMasterDocuments, archiveDetailDocuments, hasMasterRelation, hasDetailRelation, canArchiveMasterRelation, canArchiveDetailRelation, pairManyToManyDocuments, hasManyToManyRelation) => {
87
79
  const isPdfEditorLicensed = SDK_Globals?.license?.dcmtArchiveLicenses?.[0]?.siX_60007?.status === LicenseModuleStatus.Licensed;
88
80
  let pdfEditorAvailable = false;
89
81
  if (dtd && dtd.widgets && dtd.widgets.length > 0) {
@@ -243,7 +235,7 @@ export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem,
243
235
  ?.filter(md => md.mid && md.mid > 100 && md.value && md.value.length > 0)
244
236
  .map(md => ({ mid: md.mid, value: md.value })) || [];
245
237
  TMSpinner.hide();
246
- passToArchiveCallback?.(outputMids);
238
+ passToArchiveCallback?.(outputMids, item.TID);
247
239
  }
248
240
  catch (error) {
249
241
  TMSpinner.hide();
@@ -354,17 +346,17 @@ export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem,
354
346
  disabled: disabledForMultiRow(selectedItems, focusedItem),
355
347
  items: [
356
348
  {
357
- icon: svgToString(_jsx(IconRelation, {})),
349
+ icon: svgToString(_jsx(IconPair, {})),
358
350
  text: "Abbina documenti molti a molti",
359
351
  operationType: 'multiRow',
360
- disabled: disabledForMultiRow(selectedItems, focusedItem),
352
+ disabled: !hasManyToManyRelation || disabledForMultiRow(selectedItems, focusedItem),
361
353
  onClick: async () => await pairManyToManyDocuments?.(true)
362
354
  },
363
355
  {
364
- icon: svgToString(_jsx(IconRelation, {})),
356
+ icon: svgToString(_jsx(IconUnpair, {})),
365
357
  text: "Disabbina documenti molti a molti",
366
358
  operationType: 'multiRow',
367
- disabled: disabledForMultiRow(selectedItems, focusedItem),
359
+ disabled: !hasManyToManyRelation || disabledForMultiRow(selectedItems, focusedItem),
368
360
  onClick: async () => await pairManyToManyDocuments?.(false)
369
361
  },
370
362
  {
@@ -402,6 +394,30 @@ export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem,
402
394
  ]
403
395
  };
404
396
  };
397
+ const sharedDcmtsMenuItem = () => {
398
+ return {
399
+ icon: svgToString(_jsx(IconSharedDcmt, {})),
400
+ text: 'Documenti condivisi',
401
+ operationType: 'multiRow',
402
+ disabled: disabledForMultiRow(selectedItems, focusedItem),
403
+ items: [
404
+ {
405
+ icon: svgToString(_jsx(IconSharedDcmt, {})),
406
+ text: "Archiviazione condivisa",
407
+ operationType: 'singleRow',
408
+ disabled: disabledForSingleRow(selectedItems, focusedItem),
409
+ onClick: async () => { await openSharedArchiveHandler(); }
410
+ },
411
+ {
412
+ icon: svgToString(_jsx(IconSharedDcmt, {})),
413
+ text: "Mostra documenti condivisi",
414
+ operationType: 'multiRow',
415
+ disabled: disabledForMultiRow(selectedItems, focusedItem),
416
+ onClick: async () => { await showSharedDcmtsHandler(); }
417
+ }
418
+ ]
419
+ };
420
+ };
405
421
  /* const shareMenuItem = (): TMDataGridContextMenuItem => {
406
422
  return {
407
423
  icon: svgToString(<IconShare />),
@@ -635,6 +651,7 @@ export const getCommandsMenuItems = (isMobile, dtd, selectedItems, focusedItem,
635
651
  signatureMenuItem(),
636
652
  // checkinMenuItem(),
637
653
  relationsMenuItem(),
654
+ sharedDcmtsMenuItem(),
638
655
  // shareMenuItem(),
639
656
  fullTextSearchMenuItem(),
640
657
  otherMenuItem(),
@@ -1,5 +1,7 @@
1
+ import { DcmtTypeDescriptor } from '@topconsultnpm/sdk-ts';
1
2
  import { DeviceType } from "../../base/TMDeviceProvider";
2
3
  interface IWorkflowOperationButtonsProps {
4
+ dtd: DcmtTypeDescriptor | undefined;
3
5
  approveDisable?: boolean;
4
6
  signApproveDisable?: boolean;
5
7
  rejectDisable?: boolean;
@@ -12,7 +14,7 @@ interface IWorkflowOperationButtonsProps {
12
14
  onReAssign?: () => void;
13
15
  onMoreInfo?: () => void;
14
16
  }
15
- export declare const WorkFlowOperationButtons: ({ deviceType, approveDisable, signApproveDisable, reassignDisable, rejectDisable, infoDisable, onApprove, onSignApprove, onReAssign, onReject, onMoreInfo }: IWorkflowOperationButtonsProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const WorkFlowOperationButtons: (props: IWorkflowOperationButtonsProps) => import("react/jsx-runtime").JSX.Element;
16
18
  export declare const WorkFlowApproveRejectPopUp: ({ TID, DID, deviceType, isReject, selectedItems, onClose, onCompleted }: {
17
19
  TID?: number;
18
20
  DID?: number;
@@ -1,8 +1,8 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { Priorities, ResultTypes, SDK_Globals, SDK_Localizator, TaskEngine, UserListCacheService, ValidationItem, WorkflowCacheService } from '@topconsultnpm/sdk-ts';
4
4
  import styled from "styled-components";
5
- import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo, DateDisplayTypes, TASK_MORE_INFO_PREFIX_NAME, IconSignaturePencil } from "../../../helper";
5
+ import { SDKUI_Localizator, IconApply, IconCloseOutline, IconUser, IconInfo, DateDisplayTypes, TASK_MORE_INFO_PREFIX_NAME, IconSignaturePencil, isSign4TopEnabled } from "../../../helper";
6
6
  import { TMColors } from "../../../utils/theme";
7
7
  import TMButton from "../../base/TMButton";
8
8
  import { DeviceType } from "../../base/TMDeviceProvider";
@@ -65,9 +65,22 @@ const StyledHorizontalContainer = styled.div `
65
65
  gap: 10px;
66
66
  /* align-items: flex-end; */
67
67
  `;
68
- export const WorkFlowOperationButtons = ({ deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, reassignDisable = false, rejectDisable = false, infoDisable = false, onApprove, onSignApprove, onReAssign, onReject, onMoreInfo }) => {
68
+ export const WorkFlowOperationButtons = (props) => {
69
+ const { dtd = undefined, deviceType = DeviceType.DESKTOP, approveDisable = false, signApproveDisable = false, rejectDisable = false, reassignDisable = false, infoDisable = false, onApprove, onSignApprove, onReject, onReAssign, onMoreInfo } = props;
69
70
  const isMobile = deviceType === DeviceType.MOBILE;
70
- return (_jsxs(StyledWorkFlowOperationButtonsContainer, { "$isMobile": isMobile, children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: approveDisable, onClick: () => !approveDisable && onApprove?.(), advancedColor: TMColors.success, color: 'success' }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconSignaturePencil, {}), caption: SDKUI_Localizator.SignatureAndApprove, width: '160px', disabled: signApproveDisable, onClick: () => !signApproveDisable && onSignApprove?.(), advancedColor: TMColors.success, color: 'success' }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: 'error' }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: reassignDisable, onClick: () => !reassignDisable && onReAssign?.(), advancedColor: TMColors.tertiary, color: 'tertiary' }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: '180px', disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: 'info' })] }));
71
+ // Stato per distinguere workflow di firma vs approvazione
72
+ const [isSignWorkflow, setIsSignWorkflow] = useState(false);
73
+ useEffect(() => {
74
+ // Controlla se il documento ha dei widget definiti, se il documento ha il widget SIGN4_TOP abilitato, allora è un workflow di firma
75
+ if (dtd && dtd.widgets && dtd.widgets.length > 0) {
76
+ setIsSignWorkflow(isSign4TopEnabled(dtd.widgets));
77
+ }
78
+ else {
79
+ // Se non ci sono widget o non è SIGN4_TOP, imposta il workflow di default (approvazione senza firma)
80
+ setIsSignWorkflow(false);
81
+ }
82
+ }, [dtd]);
83
+ return (_jsx(StyledWorkFlowOperationButtonsContainer, { "$isMobile": isMobile, children: isSignWorkflow ? (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconSignaturePencil, {}), caption: SDKUI_Localizator.SignatureAndApprove, width: "160px", disabled: signApproveDisable, onClick: () => !signApproveDisable && onSignApprove?.(), advancedColor: TMColors.success, color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: "info" })] })) : (_jsxs(_Fragment, { children: [_jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconApply, {}), caption: SDKUI_Localizator.Approve, disabled: approveDisable, onClick: () => !approveDisable && onApprove?.(), advancedColor: TMColors.success, color: "success" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconCloseOutline, {}), caption: SDKUI_Localizator.Reject, disabled: rejectDisable, onClick: () => !rejectDisable && onReject?.(), advancedColor: TMColors.error, color: "error" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconUser, { fontSize: 16 }), caption: SDKUI_Localizator.Reassign, disabled: reassignDisable, onClick: () => !reassignDisable && onReAssign?.(), advancedColor: TMColors.tertiary, color: "tertiary" }), _jsx(TMButton, { btnStyle: isMobile ? 'toolbar' : 'advanced', showTooltip: isMobile, icon: _jsx(IconInfo, { fontSize: 16 }), caption: SDKUI_Localizator.MoreInformation, width: "180px", disabled: infoDisable, onClick: () => !infoDisable && onMoreInfo?.(), advancedColor: TMColors.info, color: "info" })] })) }));
71
84
  };
72
85
  export const WorkFlowApproveRejectPopUp = ({ TID = 0, DID = 0, deviceType = DeviceType.DESKTOP, isReject, selectedItems = [], onClose, onCompleted }) => {
73
86
  const [commentValue, setCommentValue] = useState('');
@@ -1,3 +1,3 @@
1
1
  import { ITMChooserFormProps } from '../../ts';
2
- declare const TMChooserForm: <T>({ children, title, allowMultipleSelection, allowApplyWithZeroSelection, startWithShowOnlySelectedItems, hasShowOnlySelectedItems, allowGrouping, allowSorting, width, height, dataSource, selectedIDs, manageUseLocalizedName, hasShowId, hideRefresh, keyName, customButtons, showDefaultColumns, columns, summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }: ITMChooserFormProps<T>) => import("react/jsx-runtime").JSX.Element;
2
+ declare const TMChooserForm: <T>({ children, title, allowMultipleSelection, allowApplyWithZeroSelection, startWithShowOnlySelectedItems, hasShowOnlySelectedItems, allowGrouping, allowSorting, width, height, dataSource, selectedIDs, manageUseLocalizedName, hasShowId, hideRefresh, keyName, customButtons, showFilterPanel, showDefaultColumns, columns, summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }: ITMChooserFormProps<T>) => import("react/jsx-runtime").JSX.Element;
3
3
  export default TMChooserForm;
@@ -8,7 +8,7 @@ import TMModal from '../base/TMModal';
8
8
  import TMLayoutContainer, { TMLayoutItem } from '../base/TMLayout';
9
9
  import { TMColors } from '../../utils/theme';
10
10
  import TMDataGrid from '../base/TMDataGrid';
11
- const TMChooserForm = ({ children, title, allowMultipleSelection = false, allowApplyWithZeroSelection = false, startWithShowOnlySelectedItems = true, hasShowOnlySelectedItems = false, allowGrouping, allowSorting = true, width, height, dataSource, selectedIDs, manageUseLocalizedName = true, hasShowId = true, hideRefresh = false, keyName = "id", customButtons, showDefaultColumns = true, columns = [], summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }) => {
11
+ const TMChooserForm = ({ children, title, allowMultipleSelection = false, allowApplyWithZeroSelection = false, startWithShowOnlySelectedItems = true, hasShowOnlySelectedItems = false, allowGrouping, allowSorting = true, width, height, dataSource, selectedIDs, manageUseLocalizedName = true, hasShowId = true, hideRefresh = false, keyName = "id", customButtons, showFilterPanel = false, showDefaultColumns = true, columns = [], summaryItems, convertID, customFilter, getItems, cellRenderIcon, cellRenderNameAndDesc, onChoose, onClose, onShowIdChanged }) => {
12
12
  const [showId, setShowId] = useState(false);
13
13
  const [showOnlySelectedItems, setShowOnlySelectedItems] = useState(allowMultipleSelection && hasShowOnlySelectedItems && startWithShowOnlySelectedItems && selectedIDs != undefined && selectedIDs.length > 0);
14
14
  const [allItems, setAllItems] = useState([]);
@@ -88,7 +88,7 @@ const TMChooserForm = ({ children, title, allowMultipleSelection = false, allowA
88
88
  }, [manageUseLocalizedName, summaryItems]);
89
89
  return (_jsx(TMModal, { title: renderTitle(), width: width ?? '550px', height: height ?? '600px', toolbar: _jsx(ToolbarButtons, {}), onClose: onClose, children: children ??
90
90
  filteredItems.length > 0
91
- ? _jsx(TMDataGrid, { dataSource: filteredItems, keyExpr: keyName, dataColumns: dataColumns, focusedRowKey: focusedRowKey, selectedRowKeys: selectedRowKeys, searchPanelFocusStarting: true, headerFilter: { visible: true }, selection: { mode: allowMultipleSelection ? 'multiple' : 'single', showCheckBoxesMode: 'always', selectAllMode: 'allPages' }, grouping: allowGrouping ? { autoExpandAll: false, expandMode: 'rowClick' } : undefined, summary: customSummary, onFocusedRowChanged: handleFocusedRowChange, onSelectionChanged: handleSelectionChanged, onRowDblClick: handleRowDoubleClick })
91
+ ? _jsx(TMDataGrid, { dataSource: filteredItems, keyExpr: keyName, dataColumns: dataColumns, focusedRowKey: focusedRowKey, selectedRowKeys: selectedRowKeys, searchPanelFocusStarting: true, headerFilter: { visible: true }, selection: { mode: allowMultipleSelection ? 'multiple' : 'single', showCheckBoxesMode: 'always', selectAllMode: 'allPages' }, grouping: allowGrouping ? { autoExpandAll: false, expandMode: 'rowClick' } : undefined, summary: customSummary, showFilterPanel: showFilterPanel, onFocusedRowChanged: handleFocusedRowChange, onSelectionChanged: handleSelectionChanged, onRowDblClick: handleRowDoubleClick })
92
92
  : _jsx(TMLayoutContainer, { gap: 30, alignItems: 'center', justifyContent: 'center', children: _jsx(TMLayoutItem, { children: _jsx("p", { style: { height: "100%", color: TMColors.primaryColor, fontSize: "1.5rem", display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: SDKUI_Localizator.NoDataToDisplay }) }) }) }));
93
93
  };
94
94
  export default TMChooserForm;
@@ -76,6 +76,7 @@ export declare const getAttachmentInfo: (attachment: BlogPostAttachment, treeFs:
76
76
  draftExist: boolean;
77
77
  archivedDocumentsExist: boolean;
78
78
  };
79
+ export declare const findFileItemByTidDid: (tree: FileItem | undefined, tid: number | undefined, did: number | undefined) => FileItem | null;
79
80
  export declare const AttachmentElement: (attachment: BlogPostAttachment, treeFs: FileItem | undefined, draftLatestInfoMap: Map<number, {
80
81
  latestVersion: number;
81
82
  folderId: number;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import styled from "styled-components";
3
- import { SDK_Globals } from "@topconsultnpm/sdk-ts";
3
+ import { SDK_Globals, SystemTIDs } from "@topconsultnpm/sdk-ts";
4
4
  import { extractInitialsFromName, formatBytes, getAvatarColor, IconAttachment, IconCADossier, IconMenuCAWorkingGroups, SDKUI_Localizator } from "../../helper";
5
5
  import TMTooltip from "../base/TMTooltip";
6
6
  import { TMColors } from '../../utils/theme';
@@ -130,16 +130,50 @@ export const getAttachmentInfo = (attachment, treeFs, draftLatestInfoMap, archiv
130
130
  }
131
131
  }
132
132
  if (descriptor) {
133
+ // Default name from descriptor
133
134
  name = descriptor.name ?? "-";
135
+ // If descriptor is DSAttachs, try to find the actual archived file in treeFs by tid/did
136
+ if (descriptor.id === SystemTIDs.DSAttachs && treeFs && attachment.tid && attachment.did) {
137
+ const found = findFileItemByTidDid(treeFs, attachment.tid, attachment.did);
138
+ if (found) {
139
+ name = found.name ?? name;
140
+ fileExt = found.ext ?? (found.name && found.name.includes('.') ? found.name.substring(found.name.lastIndexOf('.') + 1) : fileExt);
141
+ archivedDocumentsExist = true;
142
+ }
143
+ }
134
144
  const content = (_jsxs("div", { children: [archivedDocumentMap && (_jsxs("div", { children: [_jsx("span", { style: { fontWeight: 'bold' }, children: SDKUI_Localizator.Size }), ": ", fileSize] })), _jsx("hr", {}), _jsxs("div", { children: [_jsx("span", { style: { fontWeight: 'bold' }, children: SDKUI_Localizator.Path }), ": \"", SDKUI_Localizator.ArchivedDocuments, "\\", `${descriptor.name} (DID: ${attachment.did})`, "\""] })] }));
135
145
  tooltipContent = getTooltipContent(descriptor.name, content);
136
- nameElement = (_jsx("span", { children: highlightText(`${name} (DID: ${attachment.did})`, searchText, isSelected) }));
146
+ nameElement = (_jsx("span", { children: descriptor.id !== SystemTIDs.DSAttachs
147
+ ? highlightText(`${name} (DID: ${attachment.did})`, searchText, isSelected)
148
+ : highlightText(`${name}`, searchText, isSelected) }));
137
149
  }
138
150
  }
139
151
  return { name, nameElement, tooltipContent, folderId, fileExt, draftExist, archivedDocumentsExist };
140
152
  };
153
+ // Helper: find a file item by tid and did inside the treeFs structure
154
+ export const findFileItemByTidDid = (tree, tid, did) => {
155
+ if (!tree || tid === undefined || did === undefined)
156
+ return null;
157
+ const stack = [tree];
158
+ while (stack.length > 0) {
159
+ const node = stack.pop();
160
+ if (!node)
161
+ continue;
162
+ if (!node.isDirectory) {
163
+ if ((node.tid === tid || node.tid === Number(tid)) && (node.did === did || node.did === Number(did))) {
164
+ return node;
165
+ }
166
+ }
167
+ if (node.items && node.items.length > 0) {
168
+ for (const child of node.items) {
169
+ stack.push(child);
170
+ }
171
+ }
172
+ }
173
+ return null;
174
+ };
141
175
  export const AttachmentElement = (attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color, setShowDcmtForm, handleFocusedAttachment, setAnchorEl, contextMenuRef) => {
142
- const { name, nameElement, tooltipContent, folderId, fileExt, draftExist } = getAttachmentInfo(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color);
176
+ const { name, nameElement, tooltipContent, fileExt, archivedDocumentsExist, draftExist } = getAttachmentInfo(attachment, treeFs, draftLatestInfoMap, archivedDocumentMap, dcmtTypeDescriptors, isSelected, searchText, color);
143
177
  const onDoubleClick = (e) => {
144
178
  e.preventDefault();
145
179
  e.stopPropagation();
@@ -176,7 +210,9 @@ export const AttachmentElement = (attachment, treeFs, draftLatestInfoMap, archiv
176
210
  }, onMouseLeave: (e) => {
177
211
  e.currentTarget.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.1)';
178
212
  e.currentTarget.style.backgroundColor = isSelected ? color : colors.WHITE;
179
- }, children: _jsxs("div", { style: { alignItems: 'center', display: 'flex' }, children: [fileExt ? _jsx("div", { style: { marginRight: "10px" }, children: _jsx(TMDcmtIcon, { tid: attachment.tid, did: attachment.did, fileExtension: fileExt, downloadMode: 'openInNewWindow', tooltipContent: tooltipContent }) }) : _jsx(IconAttachment, { style: { marginRight: "5px" } }), _jsx("span", { children: nameElement })] }) }, attachment.did);
213
+ }, children: _jsxs("div", { style: { alignItems: 'center', display: 'flex' }, children: [(!archivedDocumentsExist && !draftExist) ?
214
+ _jsx(IconAttachment, { style: { marginRight: "5px" } }) :
215
+ _jsx("div", { style: { marginRight: "10px" }, children: _jsx(TMDcmtIcon, { tid: attachment.tid, did: attachment.did, fileExtension: fileExt, downloadMode: 'openInNewWindow', tooltipContent: tooltipContent }) }), _jsx("span", { children: nameElement })] }) }, attachment.did);
180
216
  };
181
217
  export const OwnerInitialsBadge = (blogPost) => {
182
218
  return _jsx(TMTooltip, { content: blogPost.ownerName ?? '-', children: _jsx("div", { style: {
@@ -84,6 +84,9 @@ export * from "./viewers/TMDataListItemViewer";
84
84
  export * from "./base/TMDeviceProvider";
85
85
  export { default as TMDataGrid } from "./base/TMDataGrid";
86
86
  export { default as TMFileManager } from "./base/TMFileManager";
87
+ export { default as TMFileManagerDataGridView } from "./base/TMFileManagerDataGridView";
88
+ export { default as TMFileManagerThumbnailsView } from "./base/TMFileManagerThumbnailsView";
89
+ export * from "./base/TMFileManagerUtils";
87
90
  export * from "./base/TMFileManagerUtils";
88
91
  export { default as TMCounterContainer } from "./base/TMCounterContainer";
89
92
  export * from "./base/TMCounterContainer";
@@ -102,6 +102,9 @@ export * from "./viewers/TMDataListItemViewer";
102
102
  export * from "./base/TMDeviceProvider";
103
103
  export { default as TMDataGrid } from "./base/TMDataGrid";
104
104
  export { default as TMFileManager } from "./base/TMFileManager";
105
+ export { default as TMFileManagerDataGridView } from "./base/TMFileManagerDataGridView";
106
+ export { default as TMFileManagerThumbnailsView } from "./base/TMFileManagerThumbnailsView";
107
+ export * from "./base/TMFileManagerUtils";
105
108
  export * from "./base/TMFileManagerUtils";
106
109
  export { default as TMCounterContainer } from "./base/TMCounterContainer";
107
110
  export * from "./base/TMCounterContainer";
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
- import { IconDcmtType, IconDcmtTypeOnlyMetadata, IconLocked, IconView, LocalizeArchiveConstraints, LocalizeParametricFilterTypes, SDKUI_Localizator, TMImageLibrary } from '../../helper';
4
- import { ArchiveConstraints, DcmtTypeListCacheService, OwnershipLevels, ParametricFilterTypes, SDK_Globals, SDK_Localizator, TemplateTIDs } from '@topconsultnpm/sdk-ts';
3
+ import { IconDcmtType, IconDcmtTypeOnlyMetadata, IconLocked, IconView, isCreateCertificateEnabled, isPdfEditorEnabled, isSign4TopEnabled, LocalizeArchiveConstraints, LocalizeParametricFilterTypes, SDKUI_Localizator, TMImageLibrary } from '../../helper';
4
+ import { AccessLevels, AccessLevelsEx, ArchiveConstraints, DcmtTypeListCacheService, OwnershipLevels, ParametricFilterTypes, SDK_Globals, SDK_Localizator, TemplateTIDs } from '@topconsultnpm/sdk-ts';
5
5
  import TMSpinner from '../base/TMSpinner';
6
6
  import { StyledDivHorizontal, StyledTooltipContainer, StyledTooltipItem, StyledTooltipSeparatorItem } from '../base/Styled';
7
7
  import TMTooltip from '../base/TMTooltip';
@@ -306,13 +306,38 @@ export const cellRenderTID = (data, noneSelectionText) => {
306
306
  return (_jsx(TMTidViewer, { tid: data.value, noneSelectionText: noneSelectionText }));
307
307
  };
308
308
  export const renderDTDTooltipContent = (dtd) => {
309
+ const mapAccessLevelToLocalizedString = (level) => {
310
+ if (level === undefined || level === null)
311
+ return SDKUI_Localizator.No;
312
+ switch (level) {
313
+ case AccessLevelsEx.Yes || AccessLevels.Yes:
314
+ return SDKUI_Localizator.Yes;
315
+ case AccessLevelsEx.No || AccessLevels.No:
316
+ return SDKUI_Localizator.No;
317
+ case AccessLevelsEx.Deny || AccessLevels.Deny:
318
+ return SDKUI_Localizator.Deny;
319
+ case AccessLevelsEx.Mixed:
320
+ return SDKUI_Localizator.Mixed;
321
+ case AccessLevelsEx.None || AccessLevels.None:
322
+ return SDK_Localizator.None;
323
+ default:
324
+ return level.toString();
325
+ }
326
+ };
309
327
  return (!dtd ? null
310
328
  : _jsxs(StyledTooltipContainer, { children: [_jsx(StyledTooltipItem, { children: `${SDK_Globals.useLocalizedName ? dtd.nameLoc : dtd.name} (${dtd.isView ? 'VID' : 'TID'}: ${dtd.id}, RootTID: ${dtd.rootTID ?? 0})` }), dtd.description && _jsx(StyledTooltipItem, { children: dtd.description }), _jsx(StyledTooltipSeparatorItem, {}), dtd.customData2 === "NOTGRANTED"
311
329
  ? _jsx(StyledTooltipItem, { style: { fontWeight: 600 }, children: 'Tipo documento NON autorizzato' })
312
330
  :
313
331
  _jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ArchiveConstraint}: ${LocalizeArchiveConstraints(dtd.archiveConstraint)}` }), dtd.isView && dtd.parametricFilterType != ParametricFilterTypes.None && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ParametricFilter}: ${LocalizeParametricFilterTypes(dtd.parametricFilterType)}` }), dtd.isView && dtd.withCheckOption && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ViewWithCheckOption}: ${SDKUI_Localizator.Yes}` }), dtd.isLexProt && dtd.isLexProt > 0 && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LexProt}: ${SDKUI_Localizator.Yes}` }), dtd.isFreeSearchable && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search_Free}: ${SDKUI_Localizator.Yes}` }), dtd.templateTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Template}: ${dtd.templateTID}` }), dtd.traceTID && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Tracing}: ${SDKUI_Localizator.Yes} - ${dtd.templateTID == TemplateTIDs.Trace_DcmtType ? SDKUI_Localizator.Destination : SDKUI_Localizator.Source} ${dtd.traceTID < 0 ? SDKUI_Localizator.Disabled : ''}` }), dtd.wfAppr && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.WorkflowApproval}: ${SDKUI_Localizator.Yes}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.BlogCase}: ${SDKUI_Localizator.Yes}` }), dtd.cico && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${SDKUI_Localizator.Yes}` }), dtd.perm ?
314
- _jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { "$color": 'primary', "$marginTop": '5px', children: SDKUI_Localizator.Perms }), _jsx(StyledTooltipSeparatorItem, {}), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Archive}: ${dtd.perm.canArchive}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.View_Metadato}: ${dtd.perm.canView}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search}: ${dtd.perm.canSearch}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Update}: ${dtd.perm.canUpdate}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.RetrieveFile}: ${dtd.perm.canRetrieveFile}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.AddOrSubstFile}: ${dtd.perm.canSubstFile}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LogDelete}: ${dtd.perm.canLogicalDelete}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.PhysDelete}: ${dtd.perm.canPhysicalDelete}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Read}: ${dtd.perm.canReadBlog}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Write}: ${dtd.perm.canWriteBlog}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${dtd.perm.canCICO}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ChronologyDelete}: ${dtd.perm.canDelChron}` })] })
332
+ _jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { "$color": 'primary', "$marginTop": '5px', children: SDKUI_Localizator.Perms }), _jsx(StyledTooltipSeparatorItem, {}), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Archive}: ${mapAccessLevelToLocalizedString(dtd.perm.canArchive)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.View_Metadato}: ${mapAccessLevelToLocalizedString(dtd.perm.canView)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search}: ${mapAccessLevelToLocalizedString(dtd.perm.canSearch)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Update}: ${mapAccessLevelToLocalizedString(dtd.perm.canUpdate)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.RetrieveFile}: ${mapAccessLevelToLocalizedString(dtd.perm.canRetrieveFile)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.AddOrSubstFile}: ${mapAccessLevelToLocalizedString(dtd.perm.canSubstFile)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LogDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canLogicalDelete)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.PhysDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canPhysicalDelete)}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Read}: ${mapAccessLevelToLocalizedString(dtd.perm.canReadBlog)}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Write}: ${mapAccessLevelToLocalizedString(dtd.perm.canWriteBlog)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${mapAccessLevelToLocalizedString(dtd.perm.canCICO)}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ChronologyDelete}: ${mapAccessLevelToLocalizedString(dtd.perm.canDelChron)}` })] })
315
333
  : dtd.ownershipLevel == OwnershipLevels.DirectOwner || dtd.ownershipLevel == OwnershipLevels.IndirectOwner ?
316
334
  _jsxs(_Fragment, { children: [_jsx(StyledTooltipItem, { "$color": 'primary', "$marginTop": '5px', children: SDKUI_Localizator.Perms }), _jsx(StyledTooltipSeparatorItem, {}), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Archive}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.View_Metadato}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Search}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Update}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.RetrieveFile}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.AddOrSubstFile}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.LogDelete}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.PhysDelete}: ${SDKUI_Localizator.Yes}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Read}: ${SDKUI_Localizator.Yes}` }), dtd.hasBlog && _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.Blog_Write}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.CheckIn}: ${SDKUI_Localizator.Yes}` }), _jsx(StyledTooltipItem, { children: `${SDKUI_Localizator.ChronologyDelete}: ${SDKUI_Localizator.Yes}` })] })
317
- : _jsx(_Fragment, {})] })] }));
335
+ : _jsx(_Fragment, {}), (dtd.widgets && dtd.widgets.length > 0) ? (() => {
336
+ const enabledWidgets = [
337
+ isSign4TopEnabled(dtd.widgets) ? 'Sign4Top' : null,
338
+ isCreateCertificateEnabled(dtd.widgets) ? `Sign4Top - ${SDKUI_Localizator.Create} ${SDK_Localizator.SignCert.toLocaleLowerCase()}` : null,
339
+ isPdfEditorEnabled(dtd.widgets) ? 'PDFEditor' : null,
340
+ ].filter(Boolean);
341
+ return (_jsxs(_Fragment, { children: [_jsx(StyledTooltipSeparatorItem, {}), enabledWidgets.length > 0 && (_jsxs(StyledTooltipItem, { children: ["Widgets: ", enabledWidgets.join(', ')] })), enabledWidgets.length === 0 && (_jsxs(StyledTooltipItem, { children: ["Widgets: ", SDKUI_Localizator.No] }))] }));
342
+ })() : (_jsxs(_Fragment, { children: [_jsx(StyledTooltipSeparatorItem, {}), _jsxs(StyledTooltipItem, { children: ["Widgets: ", SDKUI_Localizator.No] })] }))] })] }));
318
343
  };
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";@import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";*{margin:0;padding:0;box-sizing:border-box;font-family:"Open Sans",sans-serif}.tm-tooltip-container-base,.tm-tooltip-container-base-right,.tm-tooltip-container-base-bottom,.tm-tooltip-container-base-left,.tm-tooltip-container-base-top{position:absolute;width:max-content;height:max-content;border-radius:5px;user-select:none;z-index:20000070}.tm-tooltip-container-base-top{top:-0.8rem;left:0;transform:translateY(-100%)}.tm-tooltip-container-base-left{left:-0.8rem;top:0;transform:translateX(-100%)}.tm-tooltip-container-base-bottom{bottom:-0.8rem;left:0;transform:translateY(100%)}.tm-tooltip-container-base-right{right:-0.8rem;top:0;transform:translateX(100%)}.tm-tooltip-arrow,.tm-tooltip-arrow-right,.tm-tooltip-arrow-left,.tm-tooltip-arrow-top,.tm-tooltip-arrow-bottom{position:absolute;width:0;height:0;z-index:50000}.tm-tooltip-arrow-bottom{top:-8px;left:8px;border-bottom:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-top{bottom:-8px;left:8px;border-top:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-left{top:8px;right:-8px;border-left:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-right{top:8px;left:-8px;border-right:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}#user-credentials-popup .dx-accordion-item-title::before{content:none !important}*{margin:0;padding:0;box-sizing:border-box;font-family:"Open Sans",sans-serif}.tm-tooltip-container-base,.tm-tooltip-container-base-top,.tm-tooltip-container-base-left,.tm-tooltip-container-base-bottom,.tm-tooltip-container-base-right{position:absolute;width:max-content;height:max-content;border-radius:5px;user-select:none;z-index:20000070}.tm-tooltip-container-base-top{top:-0.8rem;left:0;transform:translateY(-100%)}.tm-tooltip-container-base-left{left:-0.8rem;top:0;transform:translateX(-100%)}.tm-tooltip-container-base-bottom{bottom:-0.8rem;left:0;transform:translateY(100%)}.tm-tooltip-container-base-right{right:-0.8rem;top:0;transform:translateX(100%)}.tm-tooltip-arrow,.tm-tooltip-arrow-bottom,.tm-tooltip-arrow-top,.tm-tooltip-arrow-left,.tm-tooltip-arrow-right{position:absolute;width:0;height:0;z-index:50000}.tm-tooltip-arrow-bottom{top:-8px;left:8px;border-bottom:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-top{bottom:-8px;left:8px;border-top:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-left{top:8px;right:-8px;border-left:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-right{top:8px;left:-8px;border-right:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}#user-credentials-popup .dx-accordion-item-title::before{content:none !important}@keyframes show-error{0%{display:none;opacity:0;z-index:20000999}5%{display:block;opacity:1;z-index:20000999}95%{display:block;opacity:1;z-index:20000999}100%{opacity:0;display:none;z-index:20000999}}.tm-alert-animation-style{animation:show-error both;animation-timing-function:linear;animation-iteration-count:none;z-index:20000999}.tm-alert-container{position:absolute;width:100%;height:100%;z-index:20000999}@keyframes loading{from{width:0}to{width:100%}}.tm-alert-loading{width:100%;height:5px;position:absolute;bottom:0;left:0;animation:loading;animation-duration:5000ms}.tm-alert-icon{position:absolute;width:22px;height:22px;background-color:#fff;top:"20px";left:"20px";border-radius:50%;display:flex;align-items:center;justify-content:center}.dx-context-menu.dx-overlay-content{height:auto !important;max-height:none !important}.dx-context-menu .dx-menu-items-container{max-height:none !important}
1
+ @import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";@import"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap";*{margin:0;padding:0;box-sizing:border-box;font-family:"Open Sans",sans-serif}.tm-tooltip-container-base,.tm-tooltip-container-base-right,.tm-tooltip-container-base-bottom,.tm-tooltip-container-base-left,.tm-tooltip-container-base-top{position:absolute;width:max-content;height:max-content;border-radius:5px;user-select:none;z-index:20000070}.tm-tooltip-container-base-top{top:-0.8rem;left:0;transform:translateY(-100%)}.tm-tooltip-container-base-left{left:-0.8rem;top:0;transform:translateX(-100%)}.tm-tooltip-container-base-bottom{bottom:-0.8rem;left:0;transform:translateY(100%)}.tm-tooltip-container-base-right{right:-0.8rem;top:0;transform:translateX(100%)}.tm-tooltip-arrow,.tm-tooltip-arrow-right,.tm-tooltip-arrow-left,.tm-tooltip-arrow-top,.tm-tooltip-arrow-bottom{position:absolute;width:0;height:0;z-index:50000}.tm-tooltip-arrow-bottom{top:-8px;left:8px;border-bottom:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-top{bottom:-8px;left:8px;border-top:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-left{top:8px;right:-8px;border-left:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-right{top:8px;left:-8px;border-right:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}#user-credentials-popup .dx-accordion-item-title::before{content:none !important}*{margin:0;padding:0;box-sizing:border-box;font-family:"Open Sans",sans-serif}.tm-tooltip-container-base,.tm-tooltip-container-base-top,.tm-tooltip-container-base-left,.tm-tooltip-container-base-bottom,.tm-tooltip-container-base-right{position:absolute;width:max-content;height:max-content;border-radius:5px;user-select:none;z-index:20000070}.tm-tooltip-container-base-top{top:-0.8rem;left:0;transform:translateY(-100%)}.tm-tooltip-container-base-left{left:-0.8rem;top:0;transform:translateX(-100%)}.tm-tooltip-container-base-bottom{bottom:-0.8rem;left:0;transform:translateY(100%)}.tm-tooltip-container-base-right{right:-0.8rem;top:0;transform:translateX(100%)}.tm-tooltip-arrow,.tm-tooltip-arrow-bottom,.tm-tooltip-arrow-top,.tm-tooltip-arrow-left,.tm-tooltip-arrow-right{position:absolute;width:0;height:0;z-index:50000}.tm-tooltip-arrow-bottom{top:-8px;left:8px;border-bottom:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-top{bottom:-8px;left:8px;border-top:9px solid #fff;border-left:9px solid rgba(0,0,0,0);border-right:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-left{top:8px;right:-8px;border-left:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}.tm-tooltip-arrow-right{top:8px;left:-8px;border-right:9px solid #fff;border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0)}#user-credentials-popup .dx-accordion-item-title::before{content:none !important}@keyframes show-error{0%{display:none;opacity:0;z-index:20000999}5%{display:block;opacity:1;z-index:20000999}95%{display:block;opacity:1;z-index:20000999}100%{opacity:0;display:none;z-index:20000999}}.tm-alert-animation-style{animation:show-error both;animation-timing-function:linear;animation-iteration-count:none;z-index:20000999}.tm-alert-container{position:absolute;width:100%;height:100%;z-index:20000999}@keyframes loading{from{width:0}to{width:100%}}.tm-alert-loading{width:100%;height:5px;position:absolute;bottom:0;left:0;animation:loading;animation-duration:5000ms}.tm-alert-icon{position:absolute;width:22px;height:22px;background-color:#fff;top:"20px";left:"20px";border-radius:50%;display:flex;align-items:center;justify-content:center}.dx-context-menu.dx-overlay-content{height:auto !important;max-height:none !important}.dx-context-menu .dx-menu-items-container{max-height:none !important}.custom-mentions-wrapper span.dx-mention span[contenteditable=false]>span:first-child{font-size:0;width:0;display:inline-block;overflow:hidden}.custom-mentions-wrapper span.dx-mention{color:#2559a5;font-weight:bold;background-color:rgba(0,0,0,0)}
@@ -1,4 +1,4 @@
1
- import { InvoiceRetrieveFormats, OrderRetrieveFormats } from "@topconsultnpm/sdk-ts";
1
+ import { InvoiceRetrieveFormats, ObjectClasses, OrderRetrieveFormats } from "@topconsultnpm/sdk-ts";
2
2
  export declare const dcmtsFileCacheDownload: Map<string, File>;
3
3
  export declare const dcmtsFileCachePreview: Map<string, File>;
4
4
  export declare const CACHE_SIZE_LIMIT = 10;
@@ -44,6 +44,7 @@ export declare class ThemeSettings {
44
44
  };
45
45
  }
46
46
  export declare class SearchSettings {
47
+ autoFindReferences: ObjectClasses[];
47
48
  invoiceRetrieveFormat: InvoiceRetrieveFormats;
48
49
  orderRetrieveFormat: OrderRetrieveFormats;
49
50
  mruTIDs: number[];
@@ -87,6 +87,7 @@ export class ThemeSettings {
87
87
  }
88
88
  export class SearchSettings {
89
89
  constructor() {
90
+ this.autoFindReferences = [];
90
91
  this.invoiceRetrieveFormat = InvoiceRetrieveFormats.ASW_HTML;
91
92
  this.orderRetrieveFormat = OrderRetrieveFormats.NSO_HTML;
92
93
  this.mruTIDs = [];
@@ -130,7 +130,9 @@ export declare class SDKUI_Localizator {
130
130
  static get DeletionCompletedSuccessfully(): "Löschung erfolgreich abgeschlossen" | "Deletion completed successfully" | "Eliminación completada con éxito" | "Suppression terminée avec succès" | "Exclusão concluída com sucesso" | "Eliminazione completata con successo";
131
131
  static get Deleted(): "Gelöscht" | "Deleted" | "Eliminados" | "Supprimés" | "Excluídos" | "Eliminati";
132
132
  static get DeletionOperationInterrupted(): "Löschvorgang abgebrochen" | "Deletion operation interrupted" | "Operación de eliminación interrumpida" | "Opération de suppression interrompue" | "Operação de exclusão interrompida" | "Operazione di eliminazione interrotta";
133
+ static get Deny(): "Ablehnen" | "Deny" | "Denegar" | "Refuser" | "Negar" | "Negato";
133
134
  static get Description(): "Beschreibung" | "Description" | "Descripción" | "Descrição" | "Descrizione";
135
+ static get DescriptionLengthExceededMessage(): "Die Beschreibung ist zu lang: {{0}} Zeichen zu viel" | "Description is too long: {{0}} characters too many" | "La descripción es demasiado larga: {{0}} caracteres de más" | "La description est trop longue : {{0}} caractères en trop" | "A descrição é demasiado longa: {{0}} caracteres a mais" | "La descrizione è troppo lunga: {{0}} caratteri in più";
134
136
  static get DescriptionTooLongMessage(): "Die Beschreibung ist zu lang: Maximal {{0}' Zeichen" | "Description is too long: Max {{0}} characters" | "La descripción es demasiado larga: Máximo {{0}} caracteres" | "La description est trop longue : Maximum {{0}} caractères" | "A descrição é demasiado longa: Máximo {{0}} caracteres" | "La descrizione è troppo lunga: Massimo {{0}} caratteri";
135
137
  static get Design(): "Design" | "Diseño" | "Conception" | "Projeto" | "Progettazione";
136
138
  static get Destination(): "Bestimmung" | "Destination" | "Destino" | "Destinazione";
@@ -170,6 +172,7 @@ export declare class SDKUI_Localizator {
170
172
  static get DownloadXMLAttachments(): string;
171
173
  static get Draft(): string;
172
174
  static get Drafts(): string;
175
+ static get DropFileHere(): "Ziehen Sie Ihre Datei hierher" | "Drop your file here" | "Suelta tu archivo aquí" | "Déposez votre fichier ici" | "Solte seu arquivo aqui";
173
176
  static get DropFileToShare(): string;
174
177
  static get Duplicate(): "Duplikat" | "Duplicate" | "Duplicar" | "Dupliquer" | "Duplicado" | "Duplica";
175
178
  static get Duplicate_ConfirmFor1(): "Möchten Sie '{{0}}' duplizieren?" | "Are you sure you want to duplicate '{{0}}'?" | "¿Estás seguro de que deseas duplicar '{{0}}'?" | "Êtes-vous sûr de vouloir dupliquer '{{0}}'?" | "Você tem certeza que deseja duplicar '{{0}}'?" | "Sei sicuro di voler duplicare '{{0}}'?";
@@ -323,6 +326,7 @@ export declare class SDKUI_Localizator {
323
326
  static get Message(): "Nachricht" | "Message" | "Mensaje" | "Mensagem" | "Messaggio";
324
327
  static get Min_Value(): "Der Minimalwert ist {{0}}" | "The minimum value is {{0}}" | "El valor mínimo es {{0}}" | "La valeur minimale est {{0}}" | "O valor mínimo é {{0}}" | "Il valore minimo è {{0}}";
325
328
  static get Minimize(): "Minimieren" | "Minimize" | "Minimizar" | "Minimiser" | "Minimizza";
329
+ static get Mixed(): "Gemischt" | "Mixed" | "Mixto" | "Mixte" | "Misto";
326
330
  static get More(): "andere" | "more" | "otros" | "autres" | "outros" | "altri";
327
331
  static get MoreInformation(): "Mehr Informationen" | "More information" | "Más información" | "Plus d'informations" | "Mais informações" | "Maggiori informazioni";
328
332
  static get MoreInfoCompleteRequestSentBy(): string;
@@ -1255,6 +1255,16 @@ export class SDKUI_Localizator {
1255
1255
  default: return "Operazione di eliminazione interrotta";
1256
1256
  }
1257
1257
  }
1258
+ static get Deny() {
1259
+ switch (this._cultureID) {
1260
+ case CultureIDs.De_DE: return "Ablehnen";
1261
+ case CultureIDs.En_US: return "Deny";
1262
+ case CultureIDs.Es_ES: return "Denegar";
1263
+ case CultureIDs.Fr_FR: return "Refuser";
1264
+ case CultureIDs.Pt_PT: return "Negar";
1265
+ default: return "Negato";
1266
+ }
1267
+ }
1258
1268
  static get Description() {
1259
1269
  switch (this._cultureID) {
1260
1270
  case CultureIDs.De_DE: return "Beschreibung";
@@ -1265,6 +1275,22 @@ export class SDKUI_Localizator {
1265
1275
  default: return "Descrizione";
1266
1276
  }
1267
1277
  }
1278
+ static get DescriptionLengthExceededMessage() {
1279
+ switch (this._cultureID) {
1280
+ case CultureIDs.De_DE:
1281
+ return "Die Beschreibung ist zu lang: {{0}} Zeichen zu viel";
1282
+ case CultureIDs.En_US:
1283
+ return "Description is too long: {{0}} characters too many";
1284
+ case CultureIDs.Es_ES:
1285
+ return "La descripción es demasiado larga: {{0}} caracteres de más";
1286
+ case CultureIDs.Fr_FR:
1287
+ return "La description est trop longue : {{0}} caractères en trop";
1288
+ case CultureIDs.Pt_PT:
1289
+ return "A descrição é demasiado longa: {{0}} caracteres a mais";
1290
+ default:
1291
+ return "La descrizione è troppo lunga: {{0}} caratteri in più";
1292
+ }
1293
+ }
1268
1294
  static get DescriptionTooLongMessage() {
1269
1295
  switch (this._cultureID) {
1270
1296
  case CultureIDs.De_DE: return "Die Beschreibung ist zu lang: Maximal {{0}' Zeichen";
@@ -1606,6 +1632,16 @@ export class SDKUI_Localizator {
1606
1632
  default: return "Bozze";
1607
1633
  }
1608
1634
  }
1635
+ static get DropFileHere() {
1636
+ switch (this._cultureID) {
1637
+ case CultureIDs.De_DE: return "Ziehen Sie Ihre Datei hierher";
1638
+ case CultureIDs.En_US: return "Drop your file here";
1639
+ case CultureIDs.Es_ES: return "Suelta tu archivo aquí";
1640
+ case CultureIDs.Fr_FR: return "Déposez votre fichier ici";
1641
+ case CultureIDs.Pt_PT: return "Solte seu arquivo aqui";
1642
+ default: return "Drop your file here";
1643
+ }
1644
+ }
1609
1645
  static get DropFileToShare() {
1610
1646
  switch (this._cultureID) {
1611
1647
  case CultureIDs.De_DE: return "Datei zum Teilen hier ablegen";
@@ -3138,6 +3174,16 @@ export class SDKUI_Localizator {
3138
3174
  default: return "Minimizza";
3139
3175
  }
3140
3176
  }
3177
+ static get Mixed() {
3178
+ switch (this._cultureID) {
3179
+ case CultureIDs.De_DE: return "Gemischt";
3180
+ case CultureIDs.En_US: return "Mixed";
3181
+ case CultureIDs.Es_ES: return "Mixto";
3182
+ case CultureIDs.Fr_FR: return "Mixte";
3183
+ case CultureIDs.Pt_PT: return "Misto";
3184
+ default: return "Misto";
3185
+ }
3186
+ }
3141
3187
  static get More() {
3142
3188
  switch (this._cultureID) {
3143
3189
  case CultureIDs.De_DE: return "andere";
@@ -267,5 +267,7 @@ export declare function IconNew(props: React.SVGProps<SVGSVGElement>): import("r
267
267
  export declare function IconFileOpenOutline(props: Readonly<React.SVGProps<SVGSVGElement>>): import("react/jsx-runtime").JSX.Element;
268
268
  export declare function IconArchiveDetail(props: React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
269
269
  export declare function IconArchiveMaster(props: React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
270
+ export declare function IconPair(props: React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
271
+ export declare function IconUnpair(props: React.SVGProps<SVGSVGElement>): import("react/jsx-runtime").JSX.Element;
270
272
  export declare function IconBackhandIndexPointingRight(props: Readonly<React.SVGProps<SVGSVGElement>>): import("react/jsx-runtime").JSX.Element;
271
273
  export { Icon123, IconABC, IconAccessPoint, IconAddressBook, IconSignCert, IconServerService, IconActivity, IconActivityLog, IconAdd, IconAddCircleOutline, IconAll, IconApply, IconApplyAndClose, IconArchive, IconArchiveDoc, IconArrowDown, IconArrowLeft, IconArrowRight, IconArrowUp, IconAtSign, IconAttachment, IconAutoConfig, IconBackward, IconBasket, IconBoard, IconBoxArchiveIn, IconBxInfo, IconBxLock, IconCalendar, IconCloseCircle, IconCloseOutline, IconCloud, IconCircleInfo, IconClear, IconColumns, IconCommand, IconCopy, IconCount, IconCrown, IconDashboard, IconDcmtType, IconDcmtTypeOnlyMetadata, IconDcmtTypeSys, IconDelete, IconDetails, IconDown, IconDownload, IconDotsVerticalCircleOutline, IconDuplicate, IconEdit, IconEqual, IconEqualNot, IconEraser, IconExpandRight, IconExport, IconFastBackward, IconFoldeAdd, IconFolderSearch, IconFolderZip, IconFastForward, IconFastSearch, IconFileDots, IconFilter, IconForceStop, IconForward, IconFreeze, IconFreeSearch, IconGreaterThan, IconGreaterThanOrEqual, IconHistory, IconImport, IconTag, IconInfo, IconInsertAbove, IconInsertBelow, IconHeart, IconHide, IconLanguage, IconLeft, IconLessThan, IconLessThanOrEqual, IconLock, IconLockClosed, IconLogin, IconLink, IconLogout, IconMail, IconMapping, IconMic, IconMenuHorizontal, IconMenuKebab, IconMenuVertical, IconMetadata, IconMetadata_Computed, IconMetadata_DataList, IconMetadata_Date, IconMetadata_DynamicDataList, IconMetadata_Numerator, IconMetadata_Numeric, IconMetadata_Special, IconMetadata_Text, IconMetadata_User, IconMonitor, IconOpenInNew, IconNotification, IconPassword, IconPencil, IconPlatform, IconPlay, IconPreview, IconPrinter, IconPrintOutline, IconProcess, IconProgressAbortRequested, IconProgressCompleted, IconProgressNotCompleted, IconProgressReady, IconProgressRunning, IconProgressStarted, IconRefresh, IconReset, IconRecentlyViewed, IconRight, IconSave, IconSearch, IconSelected, IconSettings, IconShow, IconSort, IconStop, IconStopwatch, IconSuccess, IconAlarmPlus, IconHourglass, IconNone, IconNotStarted, IconProgress, IconSuccessCirlce, IconSuitcase, IconSupport, IconUndo, IconUnFreeze, IconUp, IconUpdate, IconUpload, IconUser, IconUserProfile, IconVisible, IconWarning, IconWeb, IconWifi, IconWindowMaximize, IconWindowMinimize, IconWorkflow, IconWorkspace, IconUserGroup, IconUserGroupOutline, IconUserLevelMember, IconUserLevelAdministrator, IconUserLevelSystemAdministrator, IconUserLevelAutonomousAdministrator, IconDraggabledots, IconRelation, IconEasy, IconSum, IconDisk, IconDataList, IconPalette, IconFormatPageSplit, IconPaste, IconFileSearch, IconStar, IconStarRemove, IconSearchCheck, IconLightningFill, IconArrowUnsorted, IconArrowSortedUp, IconArrowSortedDown, IconConvertFilePdf, IconExportTo, IconSharedDcmt, IconShare, IconBatchUpdate, IconCheckFile, IconStatistics, IconSubstFile, IconAdvanced, IconSync, IconSavedQuery, IconSignature, IconSignaturePencil, IconRecursiveOps, IconCheckIn, IconTree, IconGrid, IconList, IconFolder, IconFolderOpen, IconFactory, IconTest, IconCheck, IconUncheck, IconSortAsc, IconSortDesc, IconRoundFileUpload, IconSortAscLetters, IconSortDescLetters, IconRotate, IconSortAscNumbers, IconSortDescNumbers, IconSortAscClock, IconSortDescClock, IconLayerGroup, IconBell, IconBellCheck, IconBellOutline, IconBellCheckOutline, IconEnvelopeOpenText, IconChangeUser, IconUserCheck, IconRelationManyToMany, IconRelationOneToMany, IconUserExpired, IconKey, IconZoomInLinear, IconZoomOutLinear, IconMenuCAWorkingGroups, IconCADossier, IconMenuCACaseflow, IconMenuDashboard, IconMenuCAAreas, IconMenuTask, IconMenuSearch, IconMenuFullTextSearch, IconMenuFavourite, IconSAPLogin, IconSAPLogin2, IconView, };
@@ -658,6 +658,12 @@ export function IconArchiveDetail(props) {
658
658
  export function IconArchiveMaster(props) {
659
659
  return (_jsxs("svg", { fontSize: props.fontSize ?? FONTSIZE, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "1em", height: "1em", ...props, children: [" ", _jsx("path", { fill: "currentColor", d: "m20.55 5.22l-1.39-1.68A1.51 1.51 0 0 0 18 3H6c-.47 0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V6.5c0-.49-.17-.93-.45-1.28M12 9.5l5.5 5.5H14v2h-4v-2H6.5zM5.12 5l.82-1h12l.93 1z" }), " "] }));
660
660
  }
661
+ export function IconPair(props) {
662
+ return (_jsxs("svg", { fontSize: props.fontSize ?? FONTSIZE, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "1em", height: "1em", ...props, children: [" ", _jsx("path", { fill: "currentColor", d: "M7.5 16.5h6.05c-.21.47-.37.97-.46 1.5H7.5C4.46 18 2 15.54 2 12.5S4.46 7 7.5 7H18c2.21 0 4 1.79 4 4c0 .91-.31 1.74-.83 2.41c-.54-.21-1.12-.34-1.72-.38A2.495 2.495 0 0 0 18 8.5H7.5c-2.21 0-4 1.79-4 4s1.79 4 4 4m2-3c-.55 0-1-.45-1-1s.45-1 1-1H17V10H9.5a2.5 2.5 0 0 0 0 5h5.04a6 6 0 0 1 2.07-1.5zM20 18v-3h-2v3h-3v2h3v3h2v-3h3v-2z" }), " "] }));
663
+ }
664
+ export function IconUnpair(props) {
665
+ return (_jsxs("svg", { fontSize: props.fontSize ?? FONTSIZE, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "1em", height: "1em", ...props, children: [" ", _jsx("path", { fill: "currentColor", d: "M16.61 13.5c-.8.35-1.5.86-2.07 1.5H9.5a2.5 2.5 0 0 1 0-5H17v1.5H9.5c-.55 0-1 .45-1 1s.45 1 1 1zm-13.11-1c0-2.21 1.79-4 4-4H18a2.495 2.495 0 0 1 1.45 4.53c.6.04 1.18.17 1.72.38c.52-.67.83-1.5.83-2.41c0-2.21-1.79-4-4-4H7.5C4.46 7 2 9.46 2 12.5S4.46 18 7.5 18h5.59c.09-.53.25-1.03.46-1.5H7.5c-2.21 0-4-1.79-4-4M15 18v2h8v-2z" }), " "] }));
666
+ }
661
667
  export function IconBackhandIndexPointingRight(props) {
662
668
  return (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 128 128", width: "1em", height: "1em", ...props, children: [_jsx("path", { fill: "#E0BB95", d: "M58.7 41.1c10.8.1 53.3.4 54.9.4c12.8.3 12.7 16.7.7 16.9c-1.5 0-25 1.1-32.2 1.3c5.2 2 7.5 11.9-3.1 14.9c5 2.6 6.4 12.9-4.2 14.7c3.8 2.5 4.3 10.9-6 14.2c-8.4 2.7-28.2 2-40.3-2.3c-9.1-3.3-8.4-5.8-16.7-5.6c-1.4 0-2.1-1.1-2.4-2.4c-1.3-5.9-1.9-26.3-.3-33.8c.4-1.6 1.7-1.8 2.2-1.9c2.1-.4 4.2-2.5 5-4.3c3.2-6.4 12.8-12.8 23.4-18.2c5.5-2.8 9.2-8.8 10.4-18.3c.8-6.3 8.6-7.7 11.8-2.5c2.2 3.6 2.9 7 2.9 10.4c.2 6.2-1.6 10.1-6.1 16.5" }), _jsx("defs", { children: _jsx("path", { id: "notoBackhandIndexPointingRightMediumLightSkinTone0", d: "M58.7 41.1c10.8.1 53.3.4 54.9.4c12.8.3 12.7 16.7.7 16.9c-1.5 0-25 1.1-32.2 1.3c5.2 2 7.5 11.9-3.1 14.9c5 2.6 6.4 12.9-4.2 14.7c3.8 2.5 4.3 10.9-6 14.2c-8.4 2.7-28.2 2-40.3-2.3c-9.1-3.3-8.4-5.8-16.7-5.6c-1.4 0-2.1-1.1-2.4-2.4c-1.3-5.9-1.9-26.3-.3-33.8c.4-1.6 1.7-1.8 2.2-1.9c2.1-.4 4.2-2.5 5-4.3c3.2-6.4 12.8-12.8 23.4-18.2c5.5-2.8 9.2-8.8 10.4-18.3c.8-6.3 8.6-7.7 11.8-2.5c2.2 3.6 2.9 7 2.9 10.4c.2 6.2-1.6 10.1-6.1 16.5" }) }), _jsx("clipPath", { id: "notoBackhandIndexPointingRightMediumLightSkinTone1", children: _jsx("use", { href: "#notoBackhandIndexPointingRightMediumLightSkinTone0" }) }), _jsx("g", { fill: "#D19661", clipPath: "url(#notoBackhandIndexPointingRightMediumLightSkinTone1)", children: _jsx("path", { d: "M73.3 59.5c.1 1.6 2.8 2.9 2.8 6.4c0 3.7-3 4.7-3.1 7.5c-.1 2.7 2 3.8 1.5 7.7c-.6 4.5-4.1 4-4.2 7.1c0 2.7 1.8 3.2 1.8 6.6c0 3.1-3 5.8-5.5 7s-1.2 3.4 0 3.4s11.9-1.3 14.5-8.2c3-8 11-29.6 8.8-36.9c-7.1-1-11.5-1.6-13.7-1.8c-.7-.1-2.9-.6-2.9 1.2M60.1 40.7c0 .9.1 1.5 1 1.5c1 0 43.6 2.1 51.6 2.3c9.2.2 8.7 7.6 5.9 10.1c-1.9 1.7.6 4 2.2 2.6s4.4-3.4 4.3-8.4s-4.4-8.6-8.4-8.9c-3.8-.3-56.6.8-56.6.8m-51.9 21c15.9 0 14.1-11.7 25.2-18.9c15.4-10.1 16.3-11.1 19.7-25.2c1.2-4.9 5.7-4.4 7.7-2.1s4.9-1.3 3.6-2.7s-7.8-7.7-14.8-1.1s-42 46.2-42 46.2z" }) }), _jsx("defs", { children: _jsx("use", { href: "#notoBackhandIndexPointingRightMediumLightSkinTone0", id: "notoBackhandIndexPointingRightMediumLightSkinTone2" }) }), _jsx("clipPath", { id: "notoBackhandIndexPointingRightMediumLightSkinTone3", children: _jsx("use", { href: "#notoBackhandIndexPointingRightMediumLightSkinTone2" }) }), _jsx("g", { fill: "#8D542E", clipPath: "url(#notoBackhandIndexPointingRightMediumLightSkinTone3)", children: _jsx("path", { d: "M58.7 41.1h-1.9c-.4 0-.8-.4-.2-1.3s5.8-8 5.8-15c0-3.2-.5-7.7-3.4-12.4c-.6-.9.2-1.4.9-1c.7.5 6.4 3.2 6.5 13.4s-7.7 16.3-7.7 16.3m65.1 8.8c-.5 0-1.1-.2-1.7 1c-.7 1.5-3.1 4.4-8.4 4.7s-38.1 2.5-38.9 2.5c-1.1 0-1.2 1.9.1 1.8c1.7-.1 7.2-.2 7.2-.2s30.9 1.8 36.9-.6c6.1-2.4 4.8-9.2 4.8-9.2M86.6 68.5c-.3-.1-.7-.1-1 .3c-1.5 2-4.6 3.5-10.6 3.3c-1.4 0-1.6 2.7.1 2.7c.7 0 4-.1 4-.1l6.6-.2zm-3.6 15c-.3-.1-.7-.1-1.1.4c-1.5 2-3.5 2.8-9.7 3c-1.5.1-1.4 2.6.2 2.6c1.1 0 2.4-.1 2.4-.1l7-.6zm-5.4 12.7c-.3-.1-.8-.2-1.2.4c-.8 1.1-2.9 3-7.5 4.4c-3.7 1.1-21.3 1.9-32.5-.7c-2.3-.5-9.9-3-13.6-5.3s-7.3-1.6-8.3-1.4s-6.3.7-6.3.7l2.5 3.7l27 8.6l38.5-.6z" }) })] }));
663
669
  }
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ interface TMToppyMessageProps {
3
+ message: ReactNode;
4
+ titleTooltip?: string;
5
+ }
6
+ declare const TMToppyMessage: (props: TMToppyMessageProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default TMToppyMessage;
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from 'styled-components';
3
+ import Toppy from '../assets/Toppy-generico.png';
4
+ import TMLayoutContainer from '../components/base/TMLayout';
5
+ const StyledToppyTextContainer = styled.div `
6
+ padding: 22px 8px;
7
+ width: 100%;
8
+ max-width: 300px;
9
+ border: 1px solid #2559A5;
10
+ border-radius: 30px;
11
+ display: flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ box-sizing: border-box;
15
+ min-height: 100px;
16
+ `;
17
+ const StyledToppyText = styled.p `
18
+ text-align: center;
19
+ color: #2559A5;
20
+ font-size: 1rem;
21
+ user-select: none;
22
+ margin: 0;
23
+ display: -webkit-box;
24
+ -webkit-box-orient: vertical;
25
+ -webkit-line-clamp: 3; /* non è una proprietà standard ma è così diffusa e ben supportata che è considerata una "best practice pragmatica" */
26
+ overflow: hidden;
27
+ text-overflow: ellipsis;
28
+ white-space: normal;
29
+ word-break: break-word;
30
+ line-height: 1.2;
31
+ `;
32
+ const StyledToppyImage = styled.img `
33
+ width: 100%;
34
+ max-width: 120px;
35
+ height: auto;
36
+ display: block;
37
+ `;
38
+ const TMToppyMessage = (props) => {
39
+ const { message, titleTooltip } = props;
40
+ return _jsxs(TMLayoutContainer, { gap: 30, alignItems: 'center', justifyContent: 'center', children: [_jsx(StyledToppyTextContainer, { children: _jsx(StyledToppyText, { title: titleTooltip ? titleTooltip : undefined, children: message }) }), _jsx(StyledToppyImage, { src: Toppy, alt: 'Toppy' })] });
41
+ };
42
+ export default TMToppyMessage;
@@ -11,3 +11,10 @@ export declare const buildValueToLabelMapFromDataColumns: (columns: Array<DataCo
11
11
  }>;
12
12
  export declare const getAvatarColor: (name: string) => string;
13
13
  export declare const extractInitialsFromName: (name: string) => string;
14
+ export declare const SIGN4_TOP_WIDGET_ID = "60003";
15
+ export declare const CREATE_CERTIFICATE_WIDGET_ID = "60003_1";
16
+ export declare const PDF_EDITOR_ID = "60007";
17
+ export declare const isWidgetEnabled: (widgetId: string, widgetsString: string) => boolean;
18
+ export declare const isSign4TopEnabled: (widgetsString: string) => boolean;
19
+ export declare const isCreateCertificateEnabled: (widgetsString: string) => boolean;
20
+ export declare const isPdfEditorEnabled: (widgetsString: string) => boolean;