@topconsultnpm/sdkui-react 6.19.0-test.1 → 6.19.0

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 (216) hide show
  1. package/lib/assets/IconsS4t/add.svg +12 -12
  2. package/lib/assets/IconsS4t/aggiorna.svg +18 -18
  3. package/lib/assets/IconsS4t/bookmark.svg +42 -42
  4. package/lib/assets/IconsS4t/cancella.svg +15 -15
  5. package/lib/assets/IconsS4t/check-box.svg +19 -19
  6. package/lib/assets/IconsS4t/down-arrow-signBook.svg +40 -40
  7. package/lib/assets/IconsS4t/down.svg +28 -28
  8. package/lib/assets/IconsS4t/edit-file.svg +19 -19
  9. package/lib/assets/IconsS4t/edita.svg +32 -32
  10. package/lib/assets/IconsS4t/firma.svg +19 -19
  11. package/lib/assets/IconsS4t/icona_download.svg +16 -16
  12. package/lib/assets/IconsS4t/info.svg +51 -51
  13. package/lib/assets/IconsS4t/left.svg +20 -20
  14. package/lib/assets/IconsS4t/line.svg +40 -40
  15. package/lib/assets/IconsS4t/more.svg +19 -19
  16. package/lib/assets/IconsS4t/plus.svg +23 -23
  17. package/lib/assets/IconsS4t/printer.svg +49 -49
  18. package/lib/assets/IconsS4t/radio-on-button.svg +25 -25
  19. package/lib/assets/IconsS4t/rectangle.svg +41 -41
  20. package/lib/assets/IconsS4t/redo.svg +19 -19
  21. package/lib/assets/IconsS4t/right-arrow-signBook-finish.svg +40 -40
  22. package/lib/assets/IconsS4t/right-arrow-signBook.svg +40 -40
  23. package/lib/assets/IconsS4t/right.svg +22 -22
  24. package/lib/assets/IconsS4t/searchbar.svg +21 -21
  25. package/lib/assets/IconsS4t/text-box.svg +36 -36
  26. package/lib/assets/IconsS4t/tick.svg +8 -8
  27. package/lib/assets/IconsS4t/trash-white.svg +10 -10
  28. package/lib/assets/IconsS4t/undo.svg +19 -19
  29. package/lib/assets/IconsS4t/up.svg +32 -32
  30. package/lib/assets/IconsS4t/video-streaming.svg +2 -2
  31. package/lib/assets/IconsS4t/zoom-in.svg +58 -58
  32. package/lib/assets/IconsS4t/zoom-out.svg +56 -56
  33. package/lib/assets/icomoon.svg +96 -96
  34. package/lib/assets/italy.svg +16 -16
  35. package/lib/assets/six.svg +3 -3
  36. package/lib/assets/thumbnails/index.ts +39 -39
  37. package/lib/assets/topmedia-six.svg +65 -65
  38. package/lib/assets/topmeida-six-bianco.svg +65 -65
  39. package/lib/components/base/Styled.js +302 -302
  40. package/lib/components/base/TMAccordion.js +43 -43
  41. package/lib/components/base/TMAccordionNew.d.ts +28 -0
  42. package/lib/components/base/TMAccordionNew.js +326 -0
  43. package/lib/components/base/TMAreaManager.js +23 -23
  44. package/lib/components/base/TMButton.d.ts +1 -0
  45. package/lib/components/base/TMButton.js +136 -136
  46. package/lib/components/base/TMClosableList.js +46 -46
  47. package/lib/components/base/TMConfirm.js +20 -20
  48. package/lib/components/base/TMContextMenu.js +4 -4
  49. package/lib/components/base/TMContextMenuOLD.js +25 -25
  50. package/lib/components/base/TMCounterBar.js +32 -32
  51. package/lib/components/base/TMCounterContainer.js +30 -30
  52. package/lib/components/base/TMCustomButton.d.ts +1 -1
  53. package/lib/components/base/TMCustomButton.js +90 -35
  54. package/lib/components/base/TMDataGridExportForm.d.ts +1 -1
  55. package/lib/components/base/TMDataGridExportForm.js +9 -3
  56. package/lib/components/base/TMDropDownMenu.js +24 -24
  57. package/lib/components/base/TMFileManager.js +12 -3
  58. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -0
  59. package/lib/components/base/TMFileManagerDataGridView.js +12 -3
  60. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +2 -0
  61. package/lib/components/base/TMFileManagerThumbnailItems.js +12 -2
  62. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +2 -0
  63. package/lib/components/base/TMFileManagerThumbnailsView.js +2 -2
  64. package/lib/components/base/TMFileManagerUtils.js +19 -19
  65. package/lib/components/base/TMFloatingToolbar.js +34 -34
  66. package/lib/components/base/TMLayout.js +44 -44
  67. package/lib/components/base/TMList.js +34 -34
  68. package/lib/components/base/TMModal.d.ts +2 -0
  69. package/lib/components/base/TMModal.js +79 -34
  70. package/lib/components/base/TMPanel.js +57 -57
  71. package/lib/components/base/TMPopUp.js +186 -117
  72. package/lib/components/base/TMProgressBar.js +20 -20
  73. package/lib/components/base/TMResizableMenu.js +28 -28
  74. package/lib/components/base/TMRightSidebar.js +40 -40
  75. package/lib/components/base/TMSpinner.js +121 -121
  76. package/lib/components/base/TMTab.js +11 -11
  77. package/lib/components/base/TMToggleButton.js +36 -36
  78. package/lib/components/base/TMToolbarCard.js +35 -35
  79. package/lib/components/base/TMTooltip.d.ts +1 -1
  80. package/lib/components/base/TMTooltip.js +1 -1
  81. package/lib/components/base/TMTreeView.js +16 -16
  82. package/lib/components/base/TMUserAvatar.js +7 -7
  83. package/lib/components/base/TMWaitPanel.js +30 -24
  84. package/lib/components/choosers/TMCultureIDPicker.js +35 -35
  85. package/lib/components/choosers/TMDataListItemChooser.js +1 -1
  86. package/lib/components/choosers/TMDataListItemPicker.js +54 -54
  87. package/lib/components/choosers/TMDcmtTypeChooser.js +2 -2
  88. package/lib/components/choosers/TMDynDataListItemChooser.js +5 -4
  89. package/lib/components/choosers/TMMetadataChooser.d.ts +4 -1
  90. package/lib/components/choosers/TMMetadataChooser.js +31 -8
  91. package/lib/components/choosers/TMUserChooser.d.ts +4 -0
  92. package/lib/components/choosers/TMUserChooser.js +21 -5
  93. package/lib/components/editors/TMCheckBox.js +24 -24
  94. package/lib/components/editors/TMDateBox.d.ts +1 -1
  95. package/lib/components/editors/TMDropDown.js +43 -43
  96. package/lib/components/editors/TMEditorStyled.js +71 -71
  97. package/lib/components/editors/TMHtmlContentDisplay.js +16 -16
  98. package/lib/components/editors/TMLocalizedTextBox.js +31 -31
  99. package/lib/components/editors/TMMetadataValues.js +71 -22
  100. package/lib/components/editors/TMRadioButton.js +39 -39
  101. package/lib/components/editors/TMSummary.js +39 -39
  102. package/lib/components/editors/TMTextArea.d.ts +1 -0
  103. package/lib/components/editors/TMTextArea.js +56 -22
  104. package/lib/components/editors/TMTextBox.js +53 -23
  105. package/lib/components/editors/TMTextExpression.js +36 -28
  106. package/lib/components/features/assistant/ToppyDraggableHelpCenter.d.ts +30 -0
  107. package/lib/components/features/assistant/ToppyDraggableHelpCenter.js +482 -0
  108. package/lib/components/features/assistant/ToppySpeechBubble.d.ts +9 -0
  109. package/lib/components/features/assistant/ToppySpeechBubble.js +117 -0
  110. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -0
  111. package/lib/components/features/blog/TMBlogCommentForm.js +21 -9
  112. package/lib/components/features/documents/TMDcmtBlog.js +1 -1
  113. package/lib/components/features/documents/TMDcmtForm.d.ts +1 -0
  114. package/lib/components/features/documents/TMDcmtForm.js +331 -65
  115. package/lib/components/features/documents/TMDcmtIcon.js +17 -12
  116. package/lib/components/features/documents/TMDcmtPreview.js +75 -38
  117. package/lib/components/features/documents/TMFileUploader.js +21 -21
  118. package/lib/components/features/documents/TMRelationViewer.js +56 -23
  119. package/lib/components/features/search/TMSavedQuerySelector.js +53 -53
  120. package/lib/components/features/search/TMSearch.js +2 -2
  121. package/lib/components/features/search/TMSearchQueryEditor.js +14 -14
  122. package/lib/components/features/search/TMSearchQueryPanel.js +41 -59
  123. package/lib/components/features/search/TMSearchResult.js +256 -51
  124. package/lib/components/features/search/TMSearchResultCheckoutInfoForm.d.ts +8 -0
  125. package/lib/components/features/search/TMSearchResultCheckoutInfoForm.js +134 -0
  126. package/lib/components/features/search/TMSearchResultsMenuItems.d.ts +3 -2
  127. package/lib/components/features/search/TMSearchResultsMenuItems.js +94 -59
  128. package/lib/components/features/search/TMSignSettingsForm.d.ts +9 -0
  129. package/lib/components/features/search/TMSignSettingsForm.js +621 -0
  130. package/lib/components/features/search/TMTreeSelector.js +67 -67
  131. package/lib/components/features/search/TMViewHistoryDcmtForm.d.ts +18 -0
  132. package/lib/components/features/search/TMViewHistoryDcmtForm.js +215 -0
  133. package/lib/components/features/tasks/TMTaskForm.js +42 -36
  134. package/lib/components/features/tasks/TMTasksAgenda.js +4 -4
  135. package/lib/components/features/tasks/TMTasksCalendar.js +2 -2
  136. package/lib/components/features/tasks/TMTasksHeader.js +1 -1
  137. package/lib/components/features/tasks/TMTasksUtils.d.ts +2 -1
  138. package/lib/components/features/tasks/TMTasksUtils.js +18 -3
  139. package/lib/components/features/tasks/TMTasksUtilsView.js +26 -4
  140. package/lib/components/features/tasks/TMTasksView.js +12 -6
  141. package/lib/components/features/wg/TMWGsCopyMoveForm.js +9 -9
  142. package/lib/components/features/workflow/TMWorkflowPopup.js +44 -44
  143. package/lib/components/features/workflow/diagram/ConnectionComponent.js +29 -29
  144. package/lib/components/features/workflow/diagram/ConnectionForm.js +10 -10
  145. package/lib/components/features/workflow/diagram/DiagramItemComponent.js +57 -57
  146. package/lib/components/features/workflow/diagram/DiagramItemForm.js +40 -35
  147. package/lib/components/features/workflow/diagram/DiagramItemSvgContent.js +12 -12
  148. package/lib/components/features/workflow/diagram/RecipientList.js +39 -39
  149. package/lib/components/features/workflow/diagram/WFDiagram.js +317 -285
  150. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.js +4 -4
  151. package/lib/components/forms/Login/Chooser.js +35 -35
  152. package/lib/components/forms/Login/Menu.js +22 -22
  153. package/lib/components/forms/Login/SelectBox.js +46 -46
  154. package/lib/components/forms/Login/TMLoginForm.js +14 -14
  155. package/lib/components/forms/Login/TextBox.js +57 -57
  156. package/lib/components/forms/TMResultDialog.js +8 -2
  157. package/lib/components/forms/TMSaveForm.js +3 -11
  158. package/lib/components/grids/TMBlogAttachments.d.ts +0 -14
  159. package/lib/components/grids/TMBlogAttachments.js +10 -5
  160. package/lib/components/grids/TMBlogsPost.d.ts +8 -3
  161. package/lib/components/grids/TMBlogsPost.js +100 -39
  162. package/lib/components/grids/TMBlogsPostUtils.d.ts +1 -0
  163. package/lib/components/grids/TMBlogsPostUtils.js +32 -11
  164. package/lib/components/grids/TMRecentsManager.js +52 -52
  165. package/lib/components/grids/TMValidationItemsList.js +48 -48
  166. package/lib/components/index.d.ts +2 -1
  167. package/lib/components/index.js +2 -1
  168. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +1 -0
  169. package/lib/components/layout/panelManager/TMPanelManagerContainer.js +14 -14
  170. package/lib/components/layout/panelManager/TMPanelManagerContext.js +0 -1
  171. package/lib/components/layout/panelManager/TMPanelManagerToolbar.js +36 -35
  172. package/lib/components/layout/panelManager/types.d.ts +1 -0
  173. package/lib/components/pages/TMPage.js +1 -1
  174. package/lib/components/query/TMQueryEditor.js +17 -17
  175. package/lib/components/query/TMQuerySummary.d.ts +1 -0
  176. package/lib/components/query/TMQuerySummary.js +15 -15
  177. package/lib/components/settings/SettingsAppearance.js +9 -1
  178. package/lib/components/sidebar/TMCommandsPanel.js +10 -10
  179. package/lib/components/sidebar/TMHeader.js +307 -307
  180. package/lib/components/sidebar/TMSidebar.js +24 -24
  181. package/lib/components/sidebar/TMSidebarItem.js +21 -21
  182. package/lib/components/viewers/TMDataListItemViewer.d.ts +1 -1
  183. package/lib/components/viewers/TMMidViewer.d.ts +1 -1
  184. package/lib/components/viewers/TMTidViewer.d.ts +1 -1
  185. package/lib/components/wizard/TMStepIndicator.js +102 -102
  186. package/lib/components/wizard/TMWizard.js +29 -29
  187. package/lib/helper/GlobalStyles.d.ts +2 -0
  188. package/lib/helper/GlobalStyles.js +10 -0
  189. package/lib/helper/Globalization.d.ts +1 -0
  190. package/lib/helper/Globalization.js +30 -0
  191. package/lib/helper/SDKUI_Globals.d.ts +9 -0
  192. package/lib/helper/SDKUI_Globals.js +10 -1
  193. package/lib/helper/SDKUI_Localizator.d.ts +59 -2
  194. package/lib/helper/SDKUI_Localizator.js +617 -22
  195. package/lib/helper/TMCustomSearchBar.js +1 -1
  196. package/lib/helper/TMIcons.d.ts +6 -1
  197. package/lib/helper/TMIcons.js +22 -2
  198. package/lib/helper/TMToppyMessage.d.ts +1 -0
  199. package/lib/helper/TMToppyMessage.js +33 -32
  200. package/lib/helper/TMUtils.d.ts +42 -4
  201. package/lib/helper/TMUtils.js +227 -60
  202. package/lib/helper/cicoHelper.d.ts +31 -0
  203. package/lib/helper/cicoHelper.js +155 -0
  204. package/lib/helper/dcmtsHelper.d.ts +2 -1
  205. package/lib/helper/dcmtsHelper.js +56 -17
  206. package/lib/helper/helpers.d.ts +8 -1
  207. package/lib/helper/helpers.js +43 -21
  208. package/lib/helper/index.d.ts +1 -0
  209. package/lib/helper/index.js +1 -0
  210. package/lib/hooks/useDcmtOperations.d.ts +1 -1
  211. package/lib/hooks/useDcmtOperations.js +10 -6
  212. package/lib/hooks/useRelatedDocuments.js +35 -26
  213. package/lib/ts/types.d.ts +3 -1
  214. package/package.json +54 -54
  215. package/lib/components/features/assistant/ToppyHelpCenter.d.ts +0 -12
  216. package/lib/components/features/assistant/ToppyHelpCenter.js +0 -173
@@ -20,65 +20,69 @@ export var ButtonNames;
20
20
  ButtonNames["OK"] = "OK";
21
21
  ButtonNames["CANCEL"] = "Cancel";
22
22
  })(ButtonNames || (ButtonNames = {}));
23
- const StyledExeptionToolbar = styled.div `
24
- display: flex;
25
- flex-direction: row;
26
- justify-content: center;
27
- align-items: center;
28
- gap: 5px;
29
- padding: 5px;
30
- user-select: none;
31
- border-top: 1px solid #f3f3f3;
32
- /* background-color: ${TMColors.primary_container}; */
33
- background-color: white;
23
+ // Dimensioni minime di default per i popup
24
+ const DEFAULT_MIN_WIDTH = 500;
25
+ const DEFAULT_MIN_HEIGHT = 400;
26
+ const StyledExeptionToolbar = styled.div `
27
+ display: flex;
28
+ flex-direction: row;
29
+ justify-content: center;
30
+ align-items: center;
31
+ gap: 5px;
32
+ padding: 5px;
33
+ user-select: none;
34
+ border-top: 1px solid #f3f3f3;
35
+ /* background-color: ${TMColors.primary_container}; */
36
+ background-color: white;
34
37
  `;
35
- const StyledMessageToolbar = styled.div `
36
- position: relative;
37
- display: flex;
38
- flex-direction: row;
39
- justify-content: flex-end;
40
- align-items: center;
41
- gap: clamp(2px, 1vw, 5px);
42
- padding: clamp(3px, 1vw, 5px);
43
- user-select: none;
44
- border-top: 1px solid #f3f3f3;
45
- background-color: #ffffff;
46
- z-index: 100;
47
- flex-wrap: wrap;
48
-
49
- @media (max-width: 200px) {
50
- flex-direction: column;
51
- gap: 2px;
52
- padding: 3px;
53
- justify-content: center;
54
- }
55
-
56
- @media (max-width: 150px) {
57
- padding: 2px;
58
- gap: 1px;
59
- }
38
+ const StyledMessageToolbar = styled.div `
39
+ position: sticky;
40
+ bottom: 0;
41
+ display: flex;
42
+ flex-direction: row;
43
+ justify-content: flex-end;
44
+ align-items: center;
45
+ gap: clamp(2px, 1vw, 5px);
46
+ padding: clamp(3px, 1vw, 5px);
47
+ user-select: none;
48
+ border-top: 1px solid #f3f3f3;
49
+ background-color: #ffffff;
50
+ z-index: 1;
51
+ flex-wrap: wrap;
52
+
53
+ @media (max-width: 200px) {
54
+ flex-direction: column;
55
+ gap: 2px;
56
+ padding: 3px;
57
+ justify-content: center;
58
+ }
59
+
60
+ @media (max-width: 150px) {
61
+ padding: 2px;
62
+ gap: 1px;
63
+ }
60
64
  `;
61
- const TabContextContainer = styled.div `
62
- padding: 10px;
63
- height: 100%;
64
- width: 100%;
65
- border-radius: 5px;
66
- overflow: auto;
67
- user-select: none;
68
- position: relative;
65
+ const TabContextContainer = styled.div `
66
+ padding: 10px;
67
+ height: 100%;
68
+ width: 100%;
69
+ border-radius: 5px;
70
+ overflow: auto;
71
+ user-select: none;
72
+ position: relative;
69
73
  `;
70
- const StyledAppVersionText = styled.p `
71
- width: '200px';
72
- display: 'flex';
73
- flex-direction: row;
74
- justify-content: space-between;
75
- align-items: center;
76
- color: ${props => props.$color};
74
+ const StyledAppVersionText = styled.p `
75
+ width: '200px';
76
+ display: 'flex';
77
+ flex-direction: row;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ color: ${props => props.$color};
77
81
  `;
78
- const StyledCopyInclipBoardButtonContainer = styled.div `
79
- position: absolute;
80
- bottom: 10px;
81
- right: 10px;
82
+ const StyledCopyInclipBoardButtonContainer = styled.div `
83
+ position: absolute;
84
+ bottom: 10px;
85
+ right: 10px;
82
86
  `;
83
87
  const Message = ({ msg }) => {
84
88
  let wrapper = document.createElement('div');
@@ -89,68 +93,70 @@ const Message = ({ msg }) => {
89
93
  }, []);
90
94
  return (_jsx("div", { ref: containerRef }));
91
95
  };
92
- const ResponsiveMessageContainer = styled.div `
93
- display: flex;
94
- flex-direction: column;
95
- height: 100%;
96
- width: 100%;
97
- background-color: #ffffff;
96
+ const ResponsiveMessageContainer = styled.div `
97
+ display: flex;
98
+ flex-direction: column;
99
+ height: 100%;
100
+ width: 100%;
101
+ background-color: #ffffff;
102
+ overflow: hidden;
98
103
  `;
99
- const ResponsiveMessageContent = styled.div `
100
- flex: 1;
101
- display: flex;
102
- flex-direction: column;
103
- align-items: center;
104
- justify-content: center;
105
- gap: clamp(8px, 2vw, 20px);
106
- padding: clamp(8px, 3vw, 25px) clamp(5px, 2vw, 30px);
107
- min-height: clamp(80px, 15vh, 120px);
108
-
109
- @media (min-width: 300px) {
110
- flex-direction: ${props => props.$isMobile ? 'column' : 'row'};
111
- }
112
-
113
- @media (max-width: 200px) {
114
- padding: 5px;
115
- gap: 5px;
116
- min-height: 60px;
117
- }
104
+ const ResponsiveMessageContent = styled.div `
105
+ flex: 1;
106
+ display: flex;
107
+ flex-direction: column;
108
+ align-items: center;
109
+ justify-content: center;
110
+ gap: clamp(8px, 2vw, 20px);
111
+ padding: clamp(8px, 3vw, 25px) clamp(5px, 2vw, 30px);
112
+ min-height: clamp(80px, 15vh, 120px);
113
+ overflow: auto;
114
+
115
+ @media (min-width: 300px) {
116
+ flex-direction: ${props => props.$isMobile ? 'column' : 'row'};
117
+ }
118
+
119
+ @media (max-width: 200px) {
120
+ padding: 5px;
121
+ gap: 5px;
122
+ min-height: 60px;
123
+ }
118
124
  `;
119
- const ResponsiveToppyImage = styled.img `
120
- width: clamp(25px, 8vw, 60px);
121
- height: clamp(31px, 10vw, 75px);
122
- flex-shrink: 0;
123
- transform: ${props => props.$isMobile ? 'none' : 'translateY(8px)'};
124
-
125
- @media (max-width: 200px) {
126
- width: 20px;
127
- height: 25px;
128
- transform: none;
129
- }
130
-
131
- @media (min-width: 300px) {
132
- transform: ${props => props.$isMobile ? 'none' : 'translateY(8px)'};
133
- }
125
+ const ResponsiveToppyImage = styled.img `
126
+ width: clamp(25px, 8vw, 60px);
127
+ height: clamp(31px, 10vw, 75px);
128
+ flex-shrink: 0;
129
+ transform: ${props => props.$isMobile ? 'none' : 'translateY(8px)'};
130
+
131
+ @media (max-width: 200px) {
132
+ width: 20px;
133
+ height: 25px;
134
+ transform: none;
135
+ }
136
+
137
+ @media (min-width: 300px) {
138
+ transform: ${props => props.$isMobile ? 'none' : 'translateY(8px)'};
139
+ }
134
140
  `;
135
- const ResponsiveMessageText = styled.div `
136
- flex: 1;
137
- text-align: center;
138
- font-size: clamp(12px, 2.5vw, 14px);
139
- line-height: clamp(1.2, 1.4, 1.4);
140
- color: #333;
141
- word-wrap: break-word;
142
- overflow-wrap: break-word;
143
- hyphens: auto;
144
- min-width: 0;
145
-
146
- @media (min-width: 300px) {
147
- text-align: ${props => props.$isMobile ? 'center' : 'left'};
148
- }
149
-
150
- @media (max-width: 150px) {
151
- font-size: 8px;
152
- line-height: 1.1;
153
- }
141
+ const ResponsiveMessageText = styled.div `
142
+ flex: 1;
143
+ text-align: center;
144
+ font-size: clamp(12px, 2.5vw, 14px);
145
+ line-height: clamp(1.2, 1.4, 1.4);
146
+ color: #333;
147
+ word-wrap: break-word;
148
+ overflow-wrap: break-word;
149
+ hyphens: auto;
150
+ min-width: 0;
151
+
152
+ @media (min-width: 300px) {
153
+ text-align: ${props => props.$isMobile ? 'center' : 'left'};
154
+ }
155
+
156
+ @media (max-width: 150px) {
157
+ font-size: 8px;
158
+ line-height: 1.1;
159
+ }
154
160
  `;
155
161
  // ResponsiveButton wrapper component to avoid circular dependency
156
162
  const ResponsiveButton = (props) => {
@@ -163,8 +169,11 @@ const ResponsiveMessageBody = ({ message, isMobile, MessageToolbar, showToppy })
163
169
  const TMMessageBox = ({ resizable = false, onButtonClick, title = 'TopMedia', message = '', buttons, onClose, confirmOnEnter = false, showToppy = true, initialWidth = 'clamp(100px, 90vw, 400px)', initialHeight = 'auto' }) => {
164
170
  let deviceType = useDeviceType();
165
171
  const isMobile = useMemo(() => { return deviceType === DeviceType.MOBILE; }, [deviceType]);
172
+ const popupRef = useRef(null);
166
173
  const [width, setWidth] = useState(initialWidth);
167
174
  const [height, setHeight] = useState(initialHeight);
175
+ const [minWidth, setMinWidth] = useState(0);
176
+ const [minHeight, setMinHeight] = useState(0);
168
177
  const [isVisible, setIsVisible] = useState(true);
169
178
  const [btns, setBtns] = useState(buttons || []);
170
179
  useEffect(() => {
@@ -176,6 +185,34 @@ const TMMessageBox = ({ resizable = false, onButtonClick, title = 'TopMedia', me
176
185
  setBtns(arr);
177
186
  }
178
187
  }, [buttons]);
188
+ /**
189
+ * Gestore chiamato quando il popup viene mostrato.
190
+ * Calcola e imposta le dimensioni minime del popup in base allo spazio disponibile.
191
+ * Le dimensioni minime sono il valore più piccolo tra le dimensioni effettive del parent e le dimensioni minime di default
192
+ */
193
+ const handleShown = () => {
194
+ // Usa requestAnimationFrame per attendere il completamento del rendering
195
+ requestAnimationFrame(() => {
196
+ if (popupRef.current && popupRef.current.instance) {
197
+ const instance = popupRef.current.instance();
198
+ if (instance) {
199
+ // Ottiene l'elemento content del popup
200
+ const element = instance.content();
201
+ if (element) {
202
+ const parentElement = element.parentElement;
203
+ if (parentElement) {
204
+ // Legge le dimensioni effettive del contenitore parent
205
+ const widthPx = parentElement.offsetWidth;
206
+ const heightPx = parentElement.offsetHeight;
207
+ // Imposta le dimensioni minime usando il valore più piccolo tra le dimensioni disponibili e quelle di default
208
+ setMinWidth(widthPx < DEFAULT_MIN_WIDTH ? widthPx : DEFAULT_MIN_WIDTH);
209
+ setMinHeight(heightPx < DEFAULT_MIN_HEIGHT ? heightPx : DEFAULT_MIN_HEIGHT);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ });
215
+ };
179
216
  const handleKeyDown = useCallback((e) => {
180
217
  if (confirmOnEnter && e.key === 'Enter') {
181
218
  e.preventDefault();
@@ -210,19 +247,51 @@ const TMMessageBox = ({ resizable = false, onButtonClick, title = 'TopMedia', me
210
247
  setWidth(e.width.toString());
211
248
  setHeight(e.height.toString());
212
249
  };
213
- return (_jsx(Popup, { animation: undefined, visible: isVisible, showCloseButton: true, width: width, height: height, minHeight: 'clamp(100px, 20vh, 180px)', title: title, onHidden: () => { onClose?.(); setIsVisible(false); }, resizeEnabled: resizable, onResizeEnd: handleResizeEnd, wrapperAttr: { id: 'tm-messagebox-wrapper' }, onShown: () => {
250
+ return (_jsx(Popup, { ref: popupRef, animation: undefined, visible: isVisible, showCloseButton: true, width: width, height: height, minWidth: minWidth, minHeight: minHeight || 'clamp(100px, 20vh, 180px)', maxHeight: '95%', maxWidth: '95%', title: title, onHidden: () => { onClose?.(); setIsVisible(false); }, resizeEnabled: resizable, onShown: () => {
251
+ handleShown();
214
252
  const el = document.getElementById('tm-messagebox-wrapper');
215
253
  if (el)
216
254
  el.style.zIndex = '20000';
217
- }, children: _jsx(ResponsiveMessageBody, { message: message, isMobile: isMobile, MessageToolbar: MessageToolbar, showToppy: showToppy }) }));
255
+ }, onResizeEnd: handleResizeEnd, wrapperAttr: { id: 'tm-messagebox-wrapper' }, children: _jsx(ResponsiveMessageBody, { message: message, isMobile: isMobile, MessageToolbar: MessageToolbar, showToppy: showToppy }) }));
218
256
  };
219
257
  const TMExceptionBox = ({ resizable = false, exception, title = `${SDK_Globals.appModule} v. ${SDK_Globals.appVersion}`, onClose }) => {
258
+ const popupRef = useRef(null);
220
259
  const [isVisible, setIsVisible] = useState(true);
260
+ const [minWidth, setMinWidth] = useState(0);
261
+ const [minHeight, setMinHeight] = useState(0);
221
262
  let d = new Date();
222
263
  let dateString = d.getDate() + '/' + d.getMonth() + 1 + '/' + d.getFullYear();
223
264
  let timeString = d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds() + ':' + d.getMilliseconds();
224
265
  let message = getExceptionMessage(exception);
225
266
  let deviceType = useDeviceType();
267
+ /**
268
+ * Gestore chiamato quando il popup viene mostrato.
269
+ * Calcola e imposta le dimensioni minime del popup in base allo spazio disponibile.
270
+ * Le dimensioni minime sono il valore più piccolo tra le dimensioni effettive del parent e le dimensioni minime di default
271
+ */
272
+ const handleShown = () => {
273
+ // Usa requestAnimationFrame per attendere il completamento del rendering
274
+ requestAnimationFrame(() => {
275
+ if (popupRef.current && popupRef.current.instance) {
276
+ const instance = popupRef.current.instance();
277
+ if (instance) {
278
+ // Ottiene l'elemento content del popup
279
+ const element = instance.content();
280
+ if (element) {
281
+ const parentElement = element.parentElement;
282
+ if (parentElement) {
283
+ // Legge le dimensioni effettive del contenitore parent
284
+ const widthPx = parentElement.offsetWidth;
285
+ const heightPx = parentElement.offsetHeight;
286
+ // Imposta le dimensioni minime usando il valore più piccolo tra le dimensioni disponibili e quelle di default
287
+ setMinWidth(widthPx < DEFAULT_MIN_WIDTH ? widthPx : DEFAULT_MIN_WIDTH);
288
+ setMinHeight(heightPx < DEFAULT_MIN_HEIGHT ? heightPx : DEFAULT_MIN_HEIGHT);
289
+ }
290
+ }
291
+ }
292
+ }
293
+ });
294
+ };
226
295
  const getFullMessage = () => {
227
296
  let fullMessage = '';
228
297
  fullMessage += `${d}\n${'-' + JSON.stringify(exception)}\n` + `-${SDK_Globals.appModule}: ${SDK_Globals.appVersion}\n` + `-SDKUI: ${SDK_Globals.sdkuiVersion}\n` + `-SDK: ${SDK_Globals.sdkVersion}\n`;
@@ -235,7 +304,7 @@ const TMExceptionBox = ({ resizable = false, exception, title = `${SDK_Globals.a
235
304
  const ExceptionToolbar = () => {
236
305
  return (_jsxs(StyledExeptionToolbar, { children: [_jsx(TMButton, { color: 'primaryOutline', btnStyle: 'text', onClick: () => copyToClipBoard(getFullMessage()), caption: SDKUI_Localizator.CopyToClipboard, showTooltip: false }), _jsx(TMButton, { btnStyle: 'text', onClick: () => { onClose?.(); setIsVisible(false); }, caption: SDKUI_Localizator.Close, showTooltip: false, color: 'error' })] }));
237
306
  };
238
- return (_jsx(Popup, { resizeEnabled: resizable, visible: isVisible, onHidden: () => { onClose?.(); setIsVisible(false); }, showCloseButton: true, width: calcResponsiveSizes(deviceType, '600px', '400px', '350px'), height: '350px', title: title, children: _jsxs(TMLayoutContainer, { children: [_jsx(TMLayoutItem, { height: 'calc(100% - 50px)', children: _jsxs(TMTabGroup, { validationItems: [], children: [_jsxs(TMTab, { label: SDKUI_Localizator.Error, children: [_jsxs(TabContextContainer, { style: { height: 'calc(100% - 68px )', paddingRight: '40px' }, children: [_jsxs("p", { children: [" ", _jsx("span", { style: { color: TMColors.primary }, children: "Messaggio: " }), " ", message] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', justifyContent: 'flex-start', alignItems: 'flex-start', gap: '5px', marginTop: '5px' }, children: _jsxs("div", { children: [_jsxs("span", { style: { color: TMColors.primary }, children: [SDKUI_Localizator.Date, " ", SDKUI_Localizator.Time.toLowerCase(), ": "] }), d.toString()] }) })] }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(`Date: ${dateString}\nTime: ${timeString}\nMessage: ${message}`), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] }), _jsxs(TMTab, { label: SDKUI_Localizator.CompleteError, children: [_jsx(TabContextContainer, { style: { paddingRight: '40px' }, children: JSON.stringify(exception).replaceAll('{', '').replaceAll('}', '').split(`,"`).map((t, index) => (_jsxs("div", { style: { padding: '5px', borderBottom: '1px solid rgb(180,180,180)' }, children: ["\u261B", ' ' + (t.toLowerCase().includes('detail') ? (t.replaceAll(`"`, '').replaceAll(`:`, ': ').replaceAll(String.fromCharCode(92), '')) : (t.replaceAll(`"`, '').replaceAll(`:`, ': ')))] }, index))) }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(JSON.stringify(exception).replaceAll('{', '').replaceAll('}', '').replaceAll(',', '\n')), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] }), _jsxs(TMTab, { label: SDKUI_Localizator.Details, children: [_jsxs(TabContextContainer, { children: [_jsxs(StyledAppVersionText, { "$color": TMColors.primary, children: [SDK_Globals.appModule, " ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.appVersion })] }), _jsxs(StyledAppVersionText, { "$color": TMColors.tertiary, children: ["SDKUI: ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.sdkuiVersion })] }), _jsxs(StyledAppVersionText, { "$color": TMColors.success, children: ["SDK : ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.sdkVersion })] })] }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(`-${SDK_Globals.appModule}: ${SDK_Globals.appVersion}\n` + `-SDKUI: ${SDK_Globals.sdkuiVersion}\n` + `-SDK: ${SDK_Globals.sdkVersion}\n`), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] })] }) }), _jsx(TMLayoutItem, { height: '40px', children: _jsx(ExceptionToolbar, {}) })] }) }));
307
+ return (_jsx(Popup, { ref: popupRef, resizeEnabled: resizable, visible: isVisible, onHidden: () => { onClose?.(); setIsVisible(false); }, onShown: handleShown, showCloseButton: true, width: calcResponsiveSizes(deviceType, '600px', '400px', '350px'), height: '350px', minWidth: minWidth, minHeight: minHeight, maxHeight: '95%', maxWidth: '95%', title: title, children: _jsxs(TMLayoutContainer, { children: [_jsx(TMLayoutItem, { height: 'calc(100% - 50px)', children: _jsxs(TMTabGroup, { validationItems: [], children: [_jsxs(TMTab, { label: SDKUI_Localizator.Error, children: [_jsxs(TabContextContainer, { style: { height: 'calc(100% - 68px )', paddingRight: '40px' }, children: [_jsxs("p", { children: [" ", _jsx("span", { style: { color: TMColors.primary }, children: "Messaggio: " }), " ", message] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', justifyContent: 'flex-start', alignItems: 'flex-start', gap: '5px', marginTop: '5px' }, children: _jsxs("div", { children: [_jsxs("span", { style: { color: TMColors.primary }, children: [SDKUI_Localizator.Date, " ", SDKUI_Localizator.Time.toLowerCase(), ": "] }), d.toString()] }) })] }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(`Date: ${dateString}\nTime: ${timeString}\nMessage: ${message}`), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] }), _jsxs(TMTab, { label: SDKUI_Localizator.CompleteError, children: [_jsx(TabContextContainer, { style: { paddingRight: '40px' }, children: JSON.stringify(exception).replaceAll('{', '').replaceAll('}', '').split(`,"`).map((t, index) => (_jsxs("div", { style: { padding: '5px', borderBottom: '1px solid rgb(180,180,180)' }, children: ["\u261B", ' ' + (t.toLowerCase().includes('detail') ? (t.replaceAll(`"`, '').replaceAll(`:`, ': ').replaceAll(String.fromCharCode(92), '')) : (t.replaceAll(`"`, '').replaceAll(`:`, ': ')))] }, index))) }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(JSON.stringify(exception).replaceAll('{', '').replaceAll('}', '').replaceAll(',', '\n')), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] }), _jsxs(TMTab, { label: SDKUI_Localizator.Details, children: [_jsxs(TabContextContainer, { children: [_jsxs(StyledAppVersionText, { "$color": TMColors.primary, children: [SDK_Globals.appModule, " ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.appVersion })] }), _jsxs(StyledAppVersionText, { "$color": TMColors.tertiary, children: ["SDKUI: ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.sdkuiVersion })] }), _jsxs(StyledAppVersionText, { "$color": TMColors.success, children: ["SDK : ", _jsx("span", { style: { fontWeight: 'bold' }, children: SDK_Globals.sdkVersion })] })] }), _jsxs(StyledCopyInclipBoardButtonContainer, { children: [" ", _jsx(TMButton, { color: 'primaryOutline', onClick: () => copyToClipBoard(`-${SDK_Globals.appModule}: ${SDK_Globals.appVersion}\n` + `-SDKUI: ${SDK_Globals.sdkuiVersion}\n` + `-SDK: ${SDK_Globals.sdkVersion}\n`), btnStyle: 'toolbar', icon: _jsx(IconCopy, { fontSize: 18 }), caption: SDKUI_Localizator.CopyToClipboard }), " "] })] })] }) }), _jsx(TMLayoutItem, { height: '40px', children: _jsx(ExceptionToolbar, {}) })] }) }));
239
308
  };
240
309
  class TMExceptionBoxManager {
241
310
  static show({ title, exception, onClose }) {
@@ -2,28 +2,28 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import styled from 'styled-components';
3
3
  import { getColor } from '../../helper';
4
4
  import { Colors } from '../../utils/theme';
5
- const StyledWrapper = styled.div `
6
- display: flex;
7
- flex-direction: row;
8
- justify-content: flex-end;
9
- align-items: center;
10
- width: fit-content;
5
+ const StyledWrapper = styled.div `
6
+ display: flex;
7
+ flex-direction: row;
8
+ justify-content: flex-end;
9
+ align-items: center;
10
+ width: fit-content;
11
11
  `;
12
- const StyledProgressBarContainer = styled.div `
13
- width: 200px;
14
- background-color: white;
15
- height: 12px;
16
- border-radius: 5px;
17
- border: 1px solid ${props => getColor(props.color)};
18
- overflow: hidden;
12
+ const StyledProgressBarContainer = styled.div `
13
+ width: 200px;
14
+ background-color: white;
15
+ height: 12px;
16
+ border-radius: 5px;
17
+ border: 1px solid ${props => getColor(props.color)};
18
+ overflow: hidden;
19
19
  `;
20
- const StyledProgressBar = styled.div.withConfig({ shouldForwardProp: prop => !['currentValue'].includes(prop) }) `
21
- width: ${props => `${200 * props.currentValue}px`};
22
- background: rgb(2,0,36);
23
- background: linear-gradient(270deg, ${Colors.primary} 0%, ${Colors.primary} 35%, ${Colors.secondary});
24
- height: 12px;
25
- border-radius: 5px;
26
- /* border: 1px solid ${props => getColor(props.color)}; */
20
+ const StyledProgressBar = styled.div.withConfig({ shouldForwardProp: prop => !['currentValue'].includes(prop) }) `
21
+ width: ${props => `${200 * props.currentValue}px`};
22
+ background: rgb(2,0,36);
23
+ background: linear-gradient(270deg, ${Colors.primary} 0%, ${Colors.primary} 35%, ${Colors.secondary});
24
+ height: 12px;
25
+ border-radius: 5px;
26
+ /* border: 1px solid ${props => getColor(props.color)}; */
27
27
  `;
28
28
  const TMProgressBar = ({ currentValue = 0, color = 'primary', elementStyle, onAbort }) => {
29
29
  // console.log(currentValue)
@@ -65,34 +65,34 @@ export const TMResizableMenu = forwardRef(({ isVisible, onClose, top, left, bott
65
65
  return createPortal(menuContent, portalRoot);
66
66
  });
67
67
  export default TMResizableMenu;
68
- const MenuContainer = styled.div `
69
- position: absolute;
70
- display: ${({ $display }) => $display};
71
- background-color: white;
72
- border: 1px solid #ccc;
73
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
74
- overflow: auto;
75
- max-width: ${({ $maxWidth }) => ($maxWidth ? `${$maxWidth}px` : 'none')};
76
- max-height: ${({ $maxHeight }) => ($maxHeight ? `${$maxHeight}px` : 'none')};
77
- border-radius: 6px;
78
- padding: ${({ $padding }) => ($padding !== undefined ? `${$padding}px` : '16px')};
79
- z-index: 1532;
80
- min-width: ${({ $minWidth }) => `${$minWidth ?? 350}px`};
81
- min-height: ${({ $minHeight }) => `${$minHeight ?? 500}px`};
68
+ const MenuContainer = styled.div `
69
+ position: absolute;
70
+ display: ${({ $display }) => $display};
71
+ background-color: white;
72
+ border: 1px solid #ccc;
73
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
74
+ overflow: auto;
75
+ max-width: ${({ $maxWidth }) => ($maxWidth ? `${$maxWidth}px` : 'none')};
76
+ max-height: ${({ $maxHeight }) => ($maxHeight ? `${$maxHeight}px` : 'none')};
77
+ border-radius: 6px;
78
+ padding: ${({ $padding }) => ($padding !== undefined ? `${$padding}px` : '16px')};
79
+ z-index: 1532;
80
+ min-width: ${({ $minWidth }) => `${$minWidth ?? 350}px`};
81
+ min-height: ${({ $minHeight }) => `${$minHeight ?? 500}px`};
82
82
  `;
83
- const ResizeHandle = styled.div `
84
- position: absolute;
85
- width: 16px;
86
- height: 16px;
87
- right: 0;
88
- bottom: 0;
89
- cursor: se-resize;
90
- background: linear-gradient(135deg, transparent 40%, #ccc 40%, #ccc 60%, transparent 60%);
83
+ const ResizeHandle = styled.div `
84
+ position: absolute;
85
+ width: 16px;
86
+ height: 16px;
87
+ right: 0;
88
+ bottom: 0;
89
+ cursor: se-resize;
90
+ background: linear-gradient(135deg, transparent 40%, #ccc 40%, #ccc 60%, transparent 60%);
91
91
  `;
92
- const ResizeOverlay = styled.div `
93
- position: fixed;
94
- inset: 0;
95
- z-index: 1531;
96
- pointer-events: all;
97
- cursor: se-resize;
92
+ const ResizeOverlay = styled.div `
93
+ position: fixed;
94
+ inset: 0;
95
+ z-index: 1531;
96
+ pointer-events: all;
97
+ cursor: se-resize;
98
98
  `;
@@ -36,45 +36,45 @@ const TMRightSidebar = ({ items = [], onItemClick, selectedItem, showPanel = fal
36
36
  };
37
37
  export default TMRightSidebar;
38
38
  // Styled Components
39
- const SidebarContainer = styled.div `
40
- width: 30px;
41
- height: 100%;
42
- display: flex;
43
- flex-direction: column;
44
- align-items: center;
45
- background-color: #203e5a;
46
- transition: width 0.3s ease;
47
- border-bottom-right-radius: 10px;
39
+ const SidebarContainer = styled.div `
40
+ width: 30px;
41
+ height: 100%;
42
+ display: flex;
43
+ flex-direction: column;
44
+ align-items: center;
45
+ background-color: #203e5a;
46
+ transition: width 0.3s ease;
47
+ border-bottom-right-radius: 10px;
48
48
  `;
49
- const StyledMenuItem = styled.div `
50
- width: 100%;
51
- display: flex;
52
- align-items: center;
53
- padding: 8px 0;
54
- color: ${props => !props.$disabled ? (props.$isSelected ? props.$selectedColor ?? (TMColors.tertiary) : '#fff') : '#929292'};
55
- cursor: ${props => props.$disabled ? 'default' : 'pointer'};
56
- position: relative;
57
- justify-content: center;
58
- background-color: ${props => !props.$disabled ? (props.$isSelected ? '#2e2e2e' : 'transparent') : 'transparent'};
59
- transition: background-color 0.3s ease, color 0.3s ease;
60
-
61
- &:hover {
62
- background-color: ${props => !props.$disabled && (TMColors.primaryColor)};
63
- }
64
-
65
- span {
66
- position: absolute;
67
- right: 40px;
68
- white-space: nowrap;
69
- overflow: hidden;
70
- font-size: 14px;
71
- opacity: ${({ $isHovered }) => ($isHovered ? 1 : 0)};
72
- padding: 4px 8px;
73
- background-color: #222;
74
- border-radius: 4px;
75
- color: #fff;
76
- pointer-events: none;
77
- transition: opacity 0.1s ease, transform 0.1s ease;
78
- transform: ${({ $isHovered }) => ($isHovered ? 'translateX(0)' : 'translateX(20px)')};
79
- }
49
+ const StyledMenuItem = styled.div `
50
+ width: 100%;
51
+ display: flex;
52
+ align-items: center;
53
+ padding: 8px 0;
54
+ color: ${props => !props.$disabled ? (props.$isSelected ? props.$selectedColor ?? (TMColors.tertiary) : '#fff') : '#929292'};
55
+ cursor: ${props => props.$disabled ? 'default' : 'pointer'};
56
+ position: relative;
57
+ justify-content: center;
58
+ background-color: ${props => !props.$disabled ? (props.$isSelected ? '#2e2e2e' : 'transparent') : 'transparent'};
59
+ transition: background-color 0.3s ease, color 0.3s ease;
60
+
61
+ &:hover {
62
+ background-color: ${props => !props.$disabled && (TMColors.primaryColor)};
63
+ }
64
+
65
+ span {
66
+ position: absolute;
67
+ right: 40px;
68
+ white-space: nowrap;
69
+ overflow: hidden;
70
+ font-size: 14px;
71
+ opacity: ${({ $isHovered }) => ($isHovered ? 1 : 0)};
72
+ padding: 4px 8px;
73
+ background-color: #222;
74
+ border-radius: 4px;
75
+ color: #fff;
76
+ pointer-events: none;
77
+ transition: opacity 0.1s ease, transform 0.1s ease;
78
+ transform: ${({ $isHovered }) => ($isHovered ? 'translateX(0)' : 'translateX(20px)')};
79
+ }
80
80
  `;