@topconsultnpm/sdkui-react 6.22.0-dev2.43 → 6.22.0-dev2.45

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 (112) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +43 -45
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +60 -67
  3. package/lib/components/base/Styled.d.ts +77 -93
  4. package/lib/components/base/TMCounterBar.d.ts +2 -2
  5. package/lib/components/base/TMCounterContainer.d.ts +1 -2
  6. package/lib/components/base/TMCustomButton.d.ts +1 -1
  7. package/lib/components/base/TMDataGridExportForm.d.ts +1 -2
  8. package/lib/components/base/TMFileManager.d.ts +1 -2
  9. package/lib/components/base/TMFileManagerDataGridView.d.ts +1 -2
  10. package/lib/components/base/TMFileManagerDataGridView.js +11 -2
  11. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  12. package/lib/components/base/TMFileManagerThumbnailItems.js +19 -9
  13. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  14. package/lib/components/base/TMFileManagerUtils.d.ts +7 -4
  15. package/lib/components/base/TMFileManagerUtils.js +21 -1
  16. package/lib/components/base/TMLayout.d.ts +4 -4
  17. package/lib/components/base/TMList.d.ts +1 -2
  18. package/lib/components/base/TMListView.d.ts +1 -1
  19. package/lib/components/base/TMSpinner.d.ts +1 -2
  20. package/lib/components/base/TMTab.d.ts +3 -4
  21. package/lib/components/base/TMTooltip.d.ts +1 -1
  22. package/lib/components/base/TMTreeView.d.ts +8 -14
  23. package/lib/components/base/TMUserAvatar.d.ts +1 -2
  24. package/lib/components/base/TMVilViewer.d.ts +1 -2
  25. package/lib/components/base/TMWaitPanel.d.ts +2 -3
  26. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  27. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +1 -2
  28. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +1 -2
  29. package/lib/components/choosers/TMQuickSearchInfo.d.ts +1 -2
  30. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  31. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  32. package/lib/components/editors/TMEditorStyled.d.ts +42 -20
  33. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  34. package/lib/components/editors/TMHtmlContentDisplay.d.ts +1 -2
  35. package/lib/components/editors/TMHtmlEditor.d.ts +1 -2
  36. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  37. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  38. package/lib/components/features/blog/TMBlogCommentForm.d.ts +1 -2
  39. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  40. package/lib/components/features/documents/TMDcmtIcon.d.ts +1 -2
  41. package/lib/components/features/documents/TMDcmtIcon.js +5 -3
  42. package/lib/components/features/documents/TMDcmtPreview.d.ts +6 -8
  43. package/lib/components/features/documents/TMDcmtTasks.d.ts +1 -2
  44. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  45. package/lib/components/features/documents/TMMasterInfoFields.d.ts +1 -2
  46. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +1 -2
  47. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +1 -2
  48. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  49. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +1 -2
  50. package/lib/components/features/search/TMMetadataOutputForm.d.ts +1 -2
  51. package/lib/components/features/search/TMMetadataSorterForm.d.ts +1 -2
  52. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  53. package/lib/components/features/search/TMSearchQueryPanel.d.ts +3 -9
  54. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  55. package/lib/components/features/search/TMSignatureInfoContent.d.ts +1 -2
  56. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +1 -2
  57. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  58. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  59. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  60. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  61. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  62. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  63. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  64. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  65. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +2 -3
  66. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +7 -8
  67. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +1 -3
  68. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +1 -3
  69. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  70. package/lib/components/forms/TMChooserForm.d.ts +1 -2
  71. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  72. package/lib/components/grids/TMBlogAttachments.d.ts +1 -2
  73. package/lib/components/grids/TMBlogAttachments.js +13 -2
  74. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  75. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  76. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  77. package/lib/components/grids/TMValidationItemsList.d.ts +1 -2
  78. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -2
  79. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  80. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +6 -5
  81. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  82. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  83. package/lib/components/pages/TMPage.d.ts +1 -1
  84. package/lib/components/query/TMQueryEditor.d.ts +10 -14
  85. package/lib/components/settings/SettingsAppearance.d.ts +1 -2
  86. package/lib/components/sidebar/TMAboutApp.d.ts +1 -2
  87. package/lib/components/sidebar/TMCommandsPanel.d.ts +4 -4
  88. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  89. package/lib/components/sidebar/TMHeader.js +30 -20
  90. package/lib/components/viewers/TMDataListItemViewer.d.ts +2 -3
  91. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +2 -3
  92. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  93. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  94. package/lib/helper/SDKUI_Globals.d.ts +1 -0
  95. package/lib/helper/SDKUI_Globals.js +1 -0
  96. package/lib/helper/SDKUI_Localizator.d.ts +6 -0
  97. package/lib/helper/SDKUI_Localizator.js +60 -0
  98. package/lib/helper/TMAppUpdatedModal.d.ts +1 -0
  99. package/lib/helper/TMAppUpdatedModal.js +134 -0
  100. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  101. package/lib/helper/TMIcons.d.ts +280 -280
  102. package/lib/helper/TMPdfViewer.d.ts +1 -2
  103. package/lib/helper/TMToppyMessage.d.ts +2 -2
  104. package/lib/helper/TMUtils.d.ts +9 -10
  105. package/lib/helper/TMUtils.js +13 -1
  106. package/lib/helper/helpers.d.ts +3 -1
  107. package/lib/helper/helpers.js +2 -0
  108. package/lib/helper/index.d.ts +1 -0
  109. package/lib/helper/index.js +1 -0
  110. package/lib/hooks/useInputDialog.d.ts +1 -2
  111. package/lib/services/platform_services.d.ts +2 -3
  112. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useRef, useMemo } from 'react';
3
3
  import six from '../../assets/six.png';
4
- import { getAvatarColor, IconCloseOutline, IconCopy, openApps, SDKUI_Localizator } from '../../helper';
4
+ import { getAvatarColor, IconCloseOutline, IconCopy, IconOpenInNew, openApps, SDKUI_Localizator, WHATS_NEWS_LINK_URL } from '../../helper';
5
5
  import styled, { keyframes } from 'styled-components';
6
6
  import { SDK_Globals, AuthenticationModes, AppModules, UserLevels, CultureIDs } from '@topconsultnpm/sdk-ts';
7
7
  import { TMColors } from '../../utils/theme';
@@ -10,6 +10,7 @@ import { DeviceType, useDeviceType } from '../base/TMDeviceProvider';
10
10
  import { TMAboutApp } from './TMAboutApp';
11
11
  import ShowAlert from '../base/TMAlert';
12
12
  import TMResizableMenu from '../base/TMResizableMenu';
13
+ import TMTooltip from '../base/TMTooltip';
13
14
  import it from '../../assets/italy.svg';
14
15
  import de from '../../assets/german.svg';
15
16
  import fr from '../../assets/france.svg';
@@ -253,10 +254,10 @@ const TMHeader = ({ customButtons = _jsx(_Fragment, {}), onMenusOpen, showSettin
253
254
  e.preventDefault();
254
255
  setMenuStatus(prev => !prev);
255
256
  }, children: _jsx(UserAvatar, { "$bgColor": avatarColor, children: userInitials }) }), menuStatus &&
256
- _jsx(TMResizableMenu, { ref: menuRef, isVisible: menuStatus, top: 60, right: 10, resizable: false, maxWidth: 300, minWidth: 300, maxHeight: 180, minHeight: 180, padding: 0, children: _jsxs(MenuContainer, { children: [_jsxs(UserProfileSection, { children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, height: 'max-content' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 12, height: 'max-content' }, children: [_jsx(AvatarContainer, { children: _jsx(UserAvatarLarge, { "$bgColor": avatarColor, children: userInitials }) }), _jsxs(UserInfo, { children: [_jsxs(UserNameContainer, { children: [_jsx(UserName, { children: userName }), _jsx(CultureFlag, { src: cultureFlag, alt: cultureName, title: cultureName })] }), domain && _jsx(SessionInfo, { style: { padding: 0, margin: 0 }, children: `(${domain})` })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', justifyContent: 'center', gap: 5 }, children: [_jsx(SessionInfo, { children: endpoint }), _jsx(SessionInfo, { children: archiveId + ' (' + archiveDesc + ')' })] })] }), _jsx(CopyIcon, { onClick: (e) => {
257
- e.stopPropagation();
258
- copyUserInfoToClipboard(userName, cultureId, archiveId, archiveDesc, endpoint, domain);
259
- }, title: SDKUI_Localizator.CopyUserInfo, children: _jsx(IconCopy, { fontSize: 12 }) }), _jsx(LogoutButton, { onClick: () => {
257
+ _jsx(TMResizableMenu, { ref: menuRef, isVisible: menuStatus, top: 60, right: 10, resizable: false, maxWidth: 300, minWidth: 300, maxHeight: 188, minHeight: 188, padding: 0, children: _jsxs(MenuContainer, { children: [_jsxs(UserProfileSection, { children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12, height: 'max-content', flex: 1, minWidth: 0 }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 12, height: 'max-content' }, children: [_jsx(AvatarContainer, { children: _jsx(UserAvatarLarge, { "$bgColor": avatarColor, children: userInitials }) }), _jsxs(UserInfo, { children: [_jsxs(UserNameContainer, { children: [_jsx(UserName, { children: userName }), _jsx(CultureFlag, { src: cultureFlag, alt: cultureName, title: cultureName })] }), domain && _jsx(SessionInfo, { style: { padding: 0, margin: 0 }, children: `(${domain})` })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', justifyContent: 'center', gap: 5, flex: 1, minWidth: 0 }, children: [_jsx(SessionInfo, { children: endpoint }), _jsx(SessionInfo, { children: archiveId + ' (' + archiveDesc + ')' })] }), _jsxs(HeaderMenuActions, { children: [_jsx(TMTooltip, { content: SDKUI_Localizator.CopyUserInfo, children: _jsx(HeaderMenuActionIcon, { "$color": '#605e5c', onClick: (e) => {
258
+ e.stopPropagation();
259
+ copyUserInfoToClipboard(userName, cultureId, archiveId, archiveDesc, endpoint, domain);
260
+ }, children: _jsx(IconCopy, { fontSize: 14 }) }) }), _jsx(TMTooltip, { content: SDKUI_Localizator.ShowReleaseNotesInfo, children: _jsx(HeaderMenuActionIcon, { as: 'a', "$color": TMColors.primary, href: WHATS_NEWS_LINK_URL, target: '_blank', rel: 'noopener noreferrer', onClick: (e) => e.stopPropagation(), children: _jsx(IconOpenInNew, { fontSize: 14 }) }) })] })] })] }), _jsx(LogoutButton, { onClick: () => {
260
261
  setMenuStatus(false);
261
262
  onLogout && onLogout();
262
263
  }, children: _jsx(LogoutText, { children: SDKUI_Localizator.Logout }) })] }), _jsxs(BottomActionsContainer, { children: [isTopMediaAuth && (_jsx(BottomActionButton, { onClick: () => {
@@ -468,8 +469,9 @@ const MenuContainer = styled.div `
468
469
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
469
470
  `;
470
471
  const UserProfileSection = styled.div `
472
+ position: relative;
471
473
  display: flex;
472
- padding: 20px;
474
+ padding: 16px 20px;
473
475
  background: linear-gradient(135deg, #f8f9fa 0%, #f1f3f4 100%);
474
476
  border-bottom: 1px solid #e1e5e9;
475
477
  gap: 12px;
@@ -515,7 +517,7 @@ const CultureFlag = styled.img `
515
517
  `;
516
518
  const LogoutButton = styled.div `
517
519
  position: absolute;
518
- top: 20px;
520
+ top: 16px;
519
521
  right: 20px;
520
522
  cursor: pointer;
521
523
  transition: all 0.2s ease;
@@ -546,29 +548,37 @@ const AvatarContainer = styled.div `
546
548
  position: relative;
547
549
  flex-shrink: 0;
548
550
  `;
549
- const CopyIcon = styled.div `
550
- position: absolute;
551
- bottom: 50px;
552
- right: 15px;
553
- width: 20px;
554
- height: 20px;
551
+ const HeaderMenuActions = styled.div `
552
+ display: flex;
553
+ flex-direction: column;
554
+ gap: 6px;
555
+ flex-shrink: 0;
556
+ `;
557
+ const HeaderMenuActionIcon = styled.div `
558
+ width: 22px;
559
+ height: 22px;
555
560
  background: white;
556
- border: 1px solid #e1e5e9;
561
+ border: 1px solid ${props => props.$color}55;
557
562
  border-radius: 50%;
558
563
  display: flex;
559
564
  align-items: center;
560
565
  justify-content: center;
561
566
  cursor: pointer;
562
- color: #605e5c;
563
567
  transition: all 0.2s ease;
564
568
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
565
- z-index: 10;
566
- opacity: 0.6;
569
+ text-decoration: none;
567
570
 
568
- &:hover {
569
- background: #b7b7b7;
571
+ /* "&&" alza la specificita': un eventuale "a, a:visited { color: inherit }"
572
+ dell'app ospite vincerebbe sulla singola classe di styled-components */
573
+ &&,
574
+ &&:visited {
575
+ color: ${props => props.$color};
576
+ }
577
+
578
+ &&:hover {
579
+ background: ${props => props.$color};
580
+ border-color: ${props => props.$color};
570
581
  color: white;
571
- opacity: 1;
572
582
  }
573
583
 
574
584
  &:active {
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { DataListViewModes } from '@topconsultnpm/sdk-ts';
3
2
  import { DataGridTypes } from 'devextreme-react/data-grid';
4
3
  interface ITMDataListItemViewerProps {
@@ -8,6 +7,6 @@ interface ITMDataListItemViewerProps {
8
7
  showTooltip?: boolean;
9
8
  width?: string;
10
9
  }
11
- declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip, width }: ITMDataListItemViewerProps) => React.JSX.Element | null;
10
+ declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip, width }: ITMDataListItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
12
11
  export default TMDataListItemViewer;
13
- export declare const cellRenderDataListItem: (data: DataGridTypes.ColumnCellTemplateData, dataListId?: number, viewMode?: DataListViewModes) => React.JSX.Element;
12
+ export declare const cellRenderDataListItem: (data: DataGridTypes.ColumnCellTemplateData, dataListId?: number, viewMode?: DataListViewModes) => import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,8 @@
1
- import React from 'react';
2
1
  import { DataGridTypes } from 'devextreme-react/data-grid';
3
2
  interface ITMDataUserIdItemViewerProps {
4
3
  userId?: number;
5
4
  showIcon?: boolean;
6
5
  }
7
- declare const TMDataUserIdItemViewer: ({ userId, showIcon }: ITMDataUserIdItemViewerProps) => React.JSX.Element | null;
6
+ declare const TMDataUserIdItemViewer: ({ userId, showIcon }: ITMDataUserIdItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
8
7
  export default TMDataUserIdItemViewer;
9
- export declare const cellRenderUserIdItem: (data: DataGridTypes.ColumnCellTemplateData, showIcon?: boolean) => React.JSX.Element;
8
+ export declare const cellRenderUserIdItem: (data: DataGridTypes.ColumnCellTemplateData, showIcon?: boolean) => import("react/jsx-runtime").JSX.Element;
@@ -22,7 +22,7 @@ interface ITMMetadataIcon {
22
22
  isMetadataSelected?: boolean;
23
23
  elementStyle?: React.CSSProperties;
24
24
  }
25
- export declare const TMMetadataIcon: ({ tid, md, color, layoutMode, isMetadataSelected, elementStyle }: ITMMetadataIcon) => React.JSX.Element | null;
25
+ export declare const TMMetadataIcon: ({ tid, md, color, layoutMode, isMetadataSelected, elementStyle }: ITMMetadataIcon) => import("react/jsx-runtime").JSX.Element | null;
26
26
  interface ITMMetadataTooltip {
27
27
  tid: number | undefined;
28
28
  md: MetadataDescriptor | undefined;
@@ -31,6 +31,6 @@ interface ITMMetadataTooltip {
31
31
  layoutMode?: LayoutModes;
32
32
  }
33
33
  export declare const TMMetadataTooltip: React.FC<ITMMetadataTooltip>;
34
- export declare const cellRenderMID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string, tid?: number) => React.JSX.Element;
34
+ export declare const cellRenderMID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string, tid?: number) => import("react/jsx-runtime").JSX.Element;
35
35
  export declare const getDisplayAlias: (dcmtTypeName: string | undefined, alias: string | undefined) => string | undefined;
36
36
  export {};
@@ -252,5 +252,5 @@ export interface ITMTidViewerProps {
252
252
  }
253
253
  declare const TMTidViewer: React.FC<ITMTidViewerProps>;
254
254
  export default TMTidViewer;
255
- export declare const cellRenderTID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string) => React.JSX.Element;
256
- export declare const renderDTDTooltipContent: (dtd: DcmtTypeDescriptor | undefined) => React.JSX.Element | null;
255
+ export declare const cellRenderTID: (data: DataGridTypes.ColumnCellTemplateData, noneSelectionText?: string) => import("react/jsx-runtime").JSX.Element;
256
+ export declare const renderDTDTooltipContent: (dtd: DcmtTypeDescriptor | undefined) => import("react/jsx-runtime").JSX.Element | null;
@@ -37,6 +37,7 @@ export declare class UserSettings {
37
37
  dcmtCheckoutInfo: CheckoutInfo[];
38
38
  defaultCheckInOutFolder: string;
39
39
  documentDownloadSettings: DocumentDownloadSettings;
40
+ lastSeenAppVersion: string;
40
41
  constructor(skipCssUpdate?: boolean);
41
42
  /** Load settings from local storage or other sources */
42
43
  static LoadSettings(userID: number | undefined, archiveID: string | undefined): UserSettings;
@@ -59,6 +59,7 @@ export class UserSettings {
59
59
  this.dcmtCheckoutInfo = [];
60
60
  this.defaultCheckInOutFolder = DEFAULT_CHECK_IN_OUT_FOLDER;
61
61
  this.documentDownloadSettings = new DocumentDownloadSettings();
62
+ this.lastSeenAppVersion = '';
62
63
  this.themeSettings = new ThemeSettings(skipCssUpdate);
63
64
  }
64
65
  /** Load settings from local storage or other sources */
@@ -43,6 +43,10 @@ export declare class SDKUI_Localizator {
43
43
  static get Apply(): "Anwenden" | "Apply" | "Aplicar" | "Applique" | "Applica";
44
44
  static get ApplyAndClose(): "Anwenden und Schließen" | "Apply and close" | "Aplicar y cerrar" | "Applique et ferme" | "Aplicar e fechar" | "Applica e chiudi";
45
45
  static get ApplyContextualFilter(): string;
46
+ static get AppUpdatedMessage(): string;
47
+ static get AppUpdatedMessageFromTo(): string;
48
+ static get AppUpdatedSubMessage(): string;
49
+ static get AppUpdatedTitle(): string;
46
50
  static get Approve(): "Genehmigen" | "Approve" | "Aprobar" | "Approuver" | "Aprovar" | "Approva";
47
51
  static get Archive(): "Archiv" | "Archive" | "Almacenar" | "Armazena" | "Archivia";
48
52
  static get ArchiveConstraint(): "Archivierungsbeschränkung" | "Archive constraint" | "Vínculo de almacenamiento" | "Contrainte d'archivage" | "Armazenamento de restrição" | "Vincolo di archiviazione";
@@ -220,6 +224,7 @@ export declare class SDKUI_Localizator {
220
224
  static get DiagramItemTypes_End(): "Ende" | "End" | "Fin" | "Fim" | "Fine";
221
225
  static get Disabled(): "Deaktiviert" | "Disabled" | "Deshabilitado" | "Désactivé" | "Desabilitado" | "Disabilitato";
222
226
  static get DisableMultipleSelection(): string;
227
+ static get DiscoverWhatsNew(): string;
223
228
  static get DisplayFormat(): string;
224
229
  static get DisplayNameMethod(): string;
225
230
  static get DisplayNameMethod_Abstract(): string;
@@ -803,6 +808,7 @@ export declare class SDKUI_Localizator {
803
808
  static get ShowLeftPanel(): "Linkes Panel anzeigen" | "Show left panel" | "Mostrar panel izquierdo" | "Afficher le panneau de gauche" | "Mostrar painel esquerdo" | "Mostra il pannello sinistro";
804
809
  static get ShowMasterInfo(): string;
805
810
  static get ShowPartialResults(): string;
811
+ static get ShowReleaseNotesInfo(): string;
806
812
  static get ShowSearch(): "Suche anzeigen" | "Show search" | "Mostrar búsqueda" | "Afficher la recherche" | "Mostrar pesquisa" | "Mostra ricerca";
807
813
  static get ShowSharedDocuments(): "Gemeinsame Dokumente anzeigen" | "Show shared documents" | "Mostrar documentos compartidos" | "Afficher les documents partagés" | "Mostrar documentos compartilhados" | "Mostra documenti condivisi";
808
814
  static get ShowColumnSeparatingLines(): string;
@@ -384,6 +384,46 @@ export class SDKUI_Localizator {
384
384
  default: return "Applica filtro contestuale";
385
385
  }
386
386
  }
387
+ static get AppUpdatedMessage() {
388
+ switch (this._cultureID) {
389
+ case CultureIDs.De_DE: return "Die Anwendung wurde auf Version {{0}} aktualisiert.";
390
+ case CultureIDs.En_US: return "The application has been updated to version {{0}}.";
391
+ case CultureIDs.Es_ES: return "La aplicación se ha actualizado a la versión {{0}}.";
392
+ case CultureIDs.Fr_FR: return "L'application a été mise à jour vers la version {{0}}.";
393
+ case CultureIDs.Pt_PT: return "A aplicação foi atualizada para a versão {{0}}.";
394
+ default: return "L'applicazione è stata aggiornata alla versione {{0}}.";
395
+ }
396
+ }
397
+ static get AppUpdatedMessageFromTo() {
398
+ switch (this._cultureID) {
399
+ case CultureIDs.De_DE: return "Die Anwendung wurde von Version {{0}} auf Version {{1}} aktualisiert.";
400
+ case CultureIDs.En_US: return "The application has been updated from version {{0}} to version {{1}}.";
401
+ case CultureIDs.Es_ES: return "La aplicación se ha actualizado de la versión {{0}} a la versión {{1}}.";
402
+ case CultureIDs.Fr_FR: return "L'application a été mise à jour de la version {{0}} à la version {{1}}.";
403
+ case CultureIDs.Pt_PT: return "A aplicação foi atualizada da versão {{0}} para a versão {{1}}.";
404
+ default: return "L'applicazione è stata aggiornata dalla versione {{0}} alla versione {{1}}.";
405
+ }
406
+ }
407
+ static get AppUpdatedSubMessage() {
408
+ switch (this._cultureID) {
409
+ case CultureIDs.De_DE: return "Entdecken Sie die neuen Funktionen und Verbesserungen dieser Version.";
410
+ case CultureIDs.En_US: return "Discover the new features and improvements introduced in this version.";
411
+ case CultureIDs.Es_ES: return "Descubra las nuevas funciones y mejoras introducidas en esta versión.";
412
+ case CultureIDs.Fr_FR: return "Découvrez les nouvelles fonctionnalités et améliorations de cette version.";
413
+ case CultureIDs.Pt_PT: return "Descubra as novas funcionalidades e melhorias desta versão.";
414
+ default: return "Scopri le nuove funzionalità e i miglioramenti introdotti in questa versione.";
415
+ }
416
+ }
417
+ static get AppUpdatedTitle() {
418
+ switch (this._cultureID) {
419
+ case CultureIDs.De_DE: return "Aktualisierung abgeschlossen";
420
+ case CultureIDs.En_US: return "Update completed";
421
+ case CultureIDs.Es_ES: return "Actualización completada";
422
+ case CultureIDs.Fr_FR: return "Mise à jour terminée";
423
+ case CultureIDs.Pt_PT: return "Atualização concluída";
424
+ default: return "Aggiornamento completato";
425
+ }
426
+ }
387
427
  static get Approve() {
388
428
  switch (this._cultureID) {
389
429
  case CultureIDs.De_DE: return "Genehmigen";
@@ -2149,6 +2189,16 @@ export class SDKUI_Localizator {
2149
2189
  default: return "Disabilita selezione multipla";
2150
2190
  }
2151
2191
  }
2192
+ static get DiscoverWhatsNew() {
2193
+ switch (this._cultureID) {
2194
+ case CultureIDs.De_DE: return "Neuigkeiten entdecken";
2195
+ case CultureIDs.En_US: return "Discover what's new";
2196
+ case CultureIDs.Es_ES: return "Descubre las novedades";
2197
+ case CultureIDs.Fr_FR: return "Découvrir les nouveautés";
2198
+ case CultureIDs.Pt_PT: return "Descobrir as novidades";
2199
+ default: return "Scopri le novità";
2200
+ }
2201
+ }
2152
2202
  static get DisplayFormat() {
2153
2203
  switch (this._cultureID) {
2154
2204
  case CultureIDs.De_DE: return "Anzeigeformat";
@@ -8010,6 +8060,16 @@ export class SDKUI_Localizator {
8010
8060
  default: return "Mostra risultati parziali";
8011
8061
  }
8012
8062
  }
8063
+ static get ShowReleaseNotesInfo() {
8064
+ switch (this._cultureID) {
8065
+ case CultureIDs.De_DE: return "Informationen zu den Versionshinweisen anzeigen";
8066
+ case CultureIDs.En_US: return "Show release notes information";
8067
+ case CultureIDs.Es_ES: return "Mostrar información sobre las notas de la versión";
8068
+ case CultureIDs.Fr_FR: return "Afficher les informations sur les notes de version";
8069
+ case CultureIDs.Pt_PT: return "Mostrar informações sobre as notas de versão";
8070
+ default: return "Mostra informazioni sulle note di rilascio";
8071
+ }
8072
+ }
8013
8073
  static get ShowSearch() {
8014
8074
  switch (this._cultureID) {
8015
8075
  case CultureIDs.De_DE: return "Suche anzeigen";
@@ -0,0 +1 @@
1
+ export declare const TMAppUpdatedModal: () => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import styled from 'styled-components';
4
+ import { AppModules, SDK_Globals } from '@topconsultnpm/sdk-ts';
5
+ import { useDeviceType, TMModal } from '../components';
6
+ import { calcResponsiveSizes, WHATS_NEWS_LINK_URL } from './helpers';
7
+ import { SDKUI_Globals } from './SDKUI_Globals';
8
+ import { SDKUI_Localizator } from './SDKUI_Localizator';
9
+ import { IconUpdate, IconOpenInNew } from './TMIcons';
10
+ import { getAppModuleButtonColors } from './TMUtils';
11
+ const Content = styled.div `
12
+ display: flex;
13
+ flex-direction: column;
14
+ width: 100%;
15
+ background-color: #ffffff;
16
+ `;
17
+ const Header = styled.div `
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: center;
21
+ gap: 14px;
22
+ padding: 32px 30px 26px 30px;
23
+ background-color: ${({ $backgroundColor }) => $backgroundColor};
24
+ color: #ffffff;
25
+ text-align: center;
26
+ `;
27
+ const HeaderIcon = styled.div `
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ width: 68px;
32
+ height: 68px;
33
+ border-radius: 50%;
34
+ background-color: rgba(255, 255, 255, 0.18);
35
+ border: 1px solid rgba(255, 255, 255, 0.35);
36
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
37
+ `;
38
+ const HeaderTitle = styled.h2 `
39
+ margin: 0;
40
+ font-size: 22px;
41
+ font-weight: 600;
42
+ letter-spacing: 0.2px;
43
+ `;
44
+ const VersionBadge = styled.span `
45
+ display: inline-block;
46
+ padding: 4px 12px;
47
+ border-radius: 999px;
48
+ background-color: rgba(255, 255, 255, 0.22);
49
+ border: 1px solid rgba(255, 255, 255, 0.4);
50
+ font-size: 13px;
51
+ font-weight: 600;
52
+ letter-spacing: 0.3px;
53
+ `;
54
+ const Body = styled.div `
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: 10px;
58
+ padding: 26px 30px 22px 30px;
59
+ text-align: center;
60
+ `;
61
+ const Message = styled.p `
62
+ margin: 0;
63
+ font-size: 15px;
64
+ line-height: 1.6;
65
+ color: #242424;
66
+ `;
67
+ const SubMessage = styled.p `
68
+ margin: 0;
69
+ font-size: 13px;
70
+ line-height: 1.6;
71
+ color: #6b6b6b;
72
+ `;
73
+ const Footer = styled.div `
74
+ display: flex;
75
+ flex-direction: row;
76
+ justify-content: center;
77
+ align-items: center;
78
+ flex-wrap: wrap;
79
+ gap: 12px;
80
+ padding: 0 30px 28px 30px;
81
+ `;
82
+ const BaseButton = styled.button `
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ gap: 8px;
87
+ min-width: 150px;
88
+ padding: 10px 18px;
89
+ border-radius: 8px;
90
+ font-size: 14px;
91
+ font-weight: 600;
92
+ cursor: pointer;
93
+ transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
94
+ `;
95
+ const PrimaryButton = styled(BaseButton) `
96
+ border: 1px solid ${({ $base }) => $base};
97
+ background-color: ${({ $base }) => $base};
98
+ color: #ffffff;
99
+
100
+ &:hover {
101
+ background-color: ${({ $hover }) => $hover};
102
+ border-color: ${({ $hover }) => $hover};
103
+ box-shadow: 0 2px 8px ${({ $shadow }) => $shadow};
104
+ }
105
+ `;
106
+ const SecondaryButton = styled(BaseButton) `
107
+ border: 1px solid #d5d5d5;
108
+ background-color: #ffffff;
109
+ color: #444444;
110
+
111
+ &:hover {
112
+ background-color: #f3f3f3;
113
+ border-color: #bdbdbd;
114
+ }
115
+ `;
116
+ export const TMAppUpdatedModal = () => {
117
+ const deviceType = useDeviceType();
118
+ const currentVersion = SDK_Globals.appVersion ?? '';
119
+ const appModuleID = SDK_Globals.tmSession?.SessionDescr?.appModuleID ?? AppModules.SURFER;
120
+ const appModuleColors = useMemo(() => getAppModuleButtonColors(appModuleID), [appModuleID]);
121
+ const [previousVersion] = useState(() => SDKUI_Globals.userSettings.lastSeenAppVersion ?? '');
122
+ const [isOpen, setIsOpen] = useState(() => currentVersion !== '' && previousVersion !== currentVersion);
123
+ useEffect(() => {
124
+ if (!isOpen)
125
+ return;
126
+ SDKUI_Globals.userSettings.lastSeenAppVersion = currentVersion;
127
+ }, [isOpen, currentVersion]);
128
+ const onClose = () => { setIsOpen(false); };
129
+ if (!isOpen)
130
+ return null;
131
+ return (_jsx(TMModal, { width: calcResponsiveSizes(deviceType, '520px', '520px', '95%'), height: 'auto', showHeader: false, resizable: false, onClose: onClose, children: _jsxs(Content, { children: [_jsxs(Header, { "$backgroundColor": appModuleColors.base, children: [_jsx(HeaderIcon, { children: _jsx(IconUpdate, { fontSize: 34 }) }), _jsx(HeaderTitle, { children: SDKUI_Localizator.AppUpdatedTitle }), _jsx(VersionBadge, { children: `${SDK_Globals.appModule} ${currentVersion}` })] }), _jsxs(Body, { children: [_jsx(Message, { children: previousVersion
132
+ ? SDKUI_Localizator.AppUpdatedMessageFromTo.replaceParams(previousVersion, currentVersion)
133
+ : SDKUI_Localizator.AppUpdatedMessage.replaceParams(currentVersion) }), _jsx(SubMessage, { children: SDKUI_Localizator.AppUpdatedSubMessage })] }), _jsxs(Footer, { children: [_jsxs(PrimaryButton, { "$base": appModuleColors.base, "$hover": appModuleColors.hover, "$shadow": appModuleColors.shadow, onClick: () => window.open(WHATS_NEWS_LINK_URL, '_blank', 'noopener,noreferrer'), children: [_jsx(IconOpenInNew, { fontSize: 18 }), SDKUI_Localizator.DiscoverWhatsNew] }), _jsx(SecondaryButton, { onClick: onClose, children: SDKUI_Localizator.Close })] })] }) }));
134
+ };
@@ -12,5 +12,5 @@ interface TMCommandsContextMenuProps {
12
12
  trigger?: 'right' | 'left';
13
13
  children?: React.ReactNode;
14
14
  }
15
- export declare const TMCommandsContextMenu: React.MemoExoticComponent<({ target, menuItems, id, showEvent, onHiding, trigger, children }: TMCommandsContextMenuProps) => React.JSX.Element>;
15
+ export declare const TMCommandsContextMenu: React.MemoExoticComponent<({ target, menuItems, id, showEvent, onHiding, trigger, children }: TMCommandsContextMenuProps) => import("react/jsx-runtime").JSX.Element>;
16
16
  export {};