@topconsultnpm/sdkui-react 6.22.0-dev3.2 → 6.22.0-dev3.4

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 (119) hide show
  1. package/lib/components/NewComponents/ContextMenu/styles.d.ts +43 -17
  2. package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +78 -19
  3. package/lib/components/base/Styled.d.ts +79 -27
  4. package/lib/components/base/Styled.js +7 -5
  5. package/lib/components/base/TMCounterBar.d.ts +2 -2
  6. package/lib/components/base/TMCounterContainer.d.ts +2 -1
  7. package/lib/components/base/TMCustomButton.d.ts +1 -1
  8. package/lib/components/base/TMDataGrid.d.ts +2 -0
  9. package/lib/components/base/TMDataGrid.js +253 -225
  10. package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
  11. package/lib/components/base/TMFileManager.d.ts +2 -1
  12. package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
  13. package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
  14. package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
  15. package/lib/components/base/TMFileManagerUtils.d.ts +3 -1
  16. package/lib/components/base/TMLayout.d.ts +4 -4
  17. package/lib/components/base/TMList.d.ts +2 -1
  18. package/lib/components/base/TMListView.d.ts +1 -1
  19. package/lib/components/base/TMPanel.js +167 -167
  20. package/lib/components/base/TMSpinner.d.ts +2 -1
  21. package/lib/components/base/TMTab.d.ts +4 -3
  22. package/lib/components/base/TMTabControl.d.ts +99 -0
  23. package/lib/components/base/TMTabControl.js +652 -0
  24. package/lib/components/base/TMTooltip.d.ts +1 -1
  25. package/lib/components/base/TMTreeView.d.ts +13 -5
  26. package/lib/components/base/TMUserAvatar.d.ts +2 -1
  27. package/lib/components/base/TMVilViewer.d.ts +2 -1
  28. package/lib/components/base/TMWaitPanel.d.ts +3 -2
  29. package/lib/components/choosers/TMDistinctValues.js +27 -18
  30. package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
  31. package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
  32. package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
  33. package/lib/components/choosers/TMQuickSearchInfo.d.ts +2 -1
  34. package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
  35. package/lib/components/choosers/TMUserChooser.d.ts +2 -2
  36. package/lib/components/editors/TMEditorStyled.d.ts +15 -5
  37. package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
  38. package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
  39. package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
  40. package/lib/components/editors/TMMetadataValues.js +5 -5
  41. package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
  42. package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
  43. package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
  44. package/lib/components/features/documents/TMDcmtForm.js +1 -1
  45. package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
  46. package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
  47. package/lib/components/features/documents/TMDcmtPreview.d.ts +7 -3
  48. package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
  49. package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
  50. package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
  51. package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
  52. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
  53. package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +13 -15
  54. package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
  55. package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
  56. package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
  57. package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
  58. package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
  59. package/lib/components/features/search/TMSearch.d.ts +1 -1
  60. package/lib/components/features/search/TMSearch.js +68 -9
  61. package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
  62. package/lib/components/features/search/TMSearchResult.js +87 -79
  63. package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
  64. package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
  65. package/lib/components/features/search/TMTreeSelector.js +15 -9
  66. package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
  67. package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
  68. package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
  69. package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
  70. package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
  71. package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
  72. package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
  73. package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
  74. package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
  75. package/lib/components/features/tasks/TMTasksView.js +6 -12
  76. package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
  77. package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
  78. package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
  79. package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
  80. package/lib/components/forms/Login/Chooser.d.ts +2 -2
  81. package/lib/components/forms/TMChooserForm.d.ts +2 -1
  82. package/lib/components/forms/TMSaveForm.d.ts +4 -4
  83. package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
  84. package/lib/components/grids/TMBlogHeader.d.ts +1 -1
  85. package/lib/components/grids/TMBlogsPost.d.ts +1 -1
  86. package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
  87. package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
  88. package/lib/components/index.d.ts +2 -0
  89. package/lib/components/index.js +2 -0
  90. package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
  91. package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
  92. package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +4 -2
  93. package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
  94. package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
  95. package/lib/components/pages/TMPage.d.ts +1 -1
  96. package/lib/components/query/TMQueryEditor.d.ts +12 -4
  97. package/lib/components/settings/SettingsAppearance.d.ts +2 -1
  98. package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
  99. package/lib/components/sidebar/TMCommandsPanel.d.ts +3 -1
  100. package/lib/components/sidebar/TMHeader.d.ts +3 -3
  101. package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
  102. package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
  103. package/lib/components/viewers/TMMidViewer.d.ts +2 -2
  104. package/lib/components/viewers/TMTidViewer.d.ts +2 -2
  105. package/lib/helper/SDKUI_Localizator.d.ts +4 -0
  106. package/lib/helper/SDKUI_Localizator.js +40 -0
  107. package/lib/helper/TMAppUpdatedModal.d.ts +2 -1
  108. package/lib/helper/TMAppUpdatedModal.js +93 -93
  109. package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
  110. package/lib/helper/TMIcons.d.ts +280 -280
  111. package/lib/helper/TMPdfViewer.d.ts +2 -1
  112. package/lib/helper/TMToppyMessage.d.ts +2 -2
  113. package/lib/helper/TMUtils.d.ts +10 -4
  114. package/lib/helper/helpers.d.ts +1 -1
  115. package/lib/hooks/useInputDialog.d.ts +2 -1
  116. package/lib/services/caseflow/CaseFlowService.d.ts +11 -0
  117. package/lib/services/caseflow/CaseFlowService.js +27 -0
  118. package/lib/services/platform_services.d.ts +3 -2
  119. package/package.json +22 -22
@@ -19,11 +19,11 @@ const TMDataGrid = React.forwardRef((props, ref) => {
19
19
  // main properties
20
20
  keyExpr = 'id', dataSource, focusedRowEnabled = true, hoverStateEnabled = true, focusedRowKey, selectedRowKeys = [],
21
21
  // custom options
22
- dataColumns = [], pageSize = TMDataGridPageSize.Large, showHeaderFilter = true, showFilterPanel = true, showHeaderColumnChooser = false, showLoadPanel = true, showSearchPanel = true, searchPanelToolbarPosition = 'before', searchPanelFocusTrigger = 0, counterConfig = { show: false, items: new Map() }, compactPager = false, onHasFiltersChange, customContextMenuItems,
22
+ dataColumns = [], pageSize = TMDataGridPageSize.Large, showHeaderFilter = true, showFilterPanel = true, showHeaderColumnChooser = false, showLoadPanel = true, showSearchPanel = true, searchPanelToolbarPosition = 'before', searchPanelFocusTrigger = 0, keepSearchPanelFocus = true, counterConfig = { show: false, items: new Map() }, compactPager = false, onHasFiltersChange, customContextMenuItems,
23
23
  // events and callbacks
24
24
  onSelectionChanged, onFocusedRowChanged, onRowDblClick, onRowClick, onCellClick, onCellDblClick, onOptionChanged, onContentReady, onContextMenuPreparing, onInitialized, onEditorPreparing, onCellPrepared, onRowPrepared, onRowUpdating, onRowExpanded, onRowCollapsed, onRowUpdated, onSaved, onEditCanceled, onEditingStart, onEditingChange, customizeColumns, onKeyDown, scrolling = { mode: 'standard', useNative: SDKUI_Globals.userSettings?.themeSettings.gridSettings.useNativeScrollbar === 1 }, paging = { enabled: true, pageSize: pageSize }, pager = { visible: true, showInfo: true, showNavigationButtons: true }, selection = { mode: 'multiple', showCheckBoxesMode: "always", selectAllMode: "allPages" }, sorting, summary, stateStoring, grouping, groupPanel, filterRow, headerFilter, editing, rowDragging, masterDetail,
25
25
  // other properties
26
- disabled = false, autoNavigateToFocusedRow = true, columnResizingMode = 'widget', columnHidingEnabled = true, columnAutoWidth = true, allowColumnResizing = true, allowColumnReordering = true, showBorders = true, showRowLines = SDKUI_Globals.userSettings?.themeSettings.gridSettings.showRowLines === 1, showColumnLines = SDKUI_Globals.userSettings?.themeSettings.gridSettings.showColumnLines === 1, showColumnHeaders = true, rowAlternationEnabled = false, wordWrapEnabled = false, noDataText, columnMinWidth,
26
+ disabled = false, autoNavigateToFocusedRow = true, columnResizingMode = 'widget', columnHidingEnabled = true, columnAutoWidth = true, allowColumnResizing = true, allowColumnReordering = true, showBorders = true, showRowLines = SDKUI_Globals.userSettings?.themeSettings.gridSettings.showRowLines === 1, showColumnLines = SDKUI_Globals.userSettings?.themeSettings.gridSettings.showColumnLines === 1, showColumnHeaders = true, rowAlternationEnabled = false, repaintChangesOnly = false, wordWrapEnabled = false, noDataText, columnMinWidth,
27
27
  // styles
28
28
  id, width = '100%', height = '100%', } = props;
29
29
  const internalRef = React.useRef(null);
@@ -42,6 +42,9 @@ const TMDataGrid = React.forwardRef((props, ref) => {
42
42
  const gridContainerRef = useRef(null);
43
43
  // Ref per evitare focus ripetuti sulla search panel
44
44
  const searchPanelFocusedRef = useRef(false);
45
+ // true quando il testo è stato confermato mentre si stava scrivendo: il fuoco va rimesso nella casella
46
+ const restoreSearchPanelFocusRef = useRef(false);
47
+ const getSearchPanelInput = useCallback(() => internalRef.current?.instance().element().querySelector('.dx-datagrid-search-panel input'), []);
45
48
  useEffect(() => {
46
49
  const count = getRecordCount(dataSource);
47
50
  setTotalRecordCount(count);
@@ -342,12 +345,33 @@ const TMDataGrid = React.forwardRef((props, ref) => {
342
345
  }
343
346
  }, 100);
344
347
  }
345
- }, [onContentReady, showSearchPanel, searchPanelFocusTrigger]);
348
+ /* Applicando il testo la griglia ricostruisce la propria barra di intestazione, e con essa la casella di
349
+ ricerca: senza rimettere il fuoco si dovrebbe cliccare di nuovo nella casella per continuare a scrivere.
350
+ Il rinvio serve ad agire sulla casella definitiva, non su quella che sta per essere sostituita. */
351
+ if (restoreSearchPanelFocusRef.current) {
352
+ restoreSearchPanelFocusRef.current = false;
353
+ setTimeout(() => {
354
+ const searchInput = getSearchPanelInput();
355
+ if (!searchInput || document.activeElement === searchInput)
356
+ return;
357
+ searchInput.focus();
358
+ // Il cursore va in fondo al testo già digitato: si continua a scrivere da dove si era rimasti
359
+ const caretPosition = searchInput.value.length;
360
+ searchInput.setSelectionRange(caretPosition, caretPosition);
361
+ }, 0);
362
+ }
363
+ }, [onContentReady, showSearchPanel, searchPanelFocusTrigger, getSearchPanelInput]);
346
364
  const onOptionChangedCallback = useCallback((e) => {
347
365
  // Assicurati che component esista
348
366
  const grid = e.component;
349
367
  if (!grid)
350
368
  return;
369
+ // Il testo digitato viene confermato dopo una pausa: se il fuoco è ancora nella casella, va conservato.
370
+ // Senza la casella a video non c'è nulla da riportare a fuoco: il testo può cambiare solo da codice
371
+ if (keepSearchPanelFocus && showSearchPanel && e.fullName === 'searchPanel.text') {
372
+ const searchInput = getSearchPanelInput();
373
+ restoreSearchPanelFocusRef.current = !!searchInput && document.activeElement === searchInput;
374
+ }
351
375
  // Controlla se il cambiamento riguarda i filtri
352
376
  const isFilterChange = e.fullName === 'filterValue' || (e.fullName?.startsWith('columns') && e.fullName.endsWith('filterValues'));
353
377
  if (isFilterChange) {
@@ -374,7 +398,11 @@ const TMDataGrid = React.forwardRef((props, ref) => {
374
398
  }
375
399
  // Propaga l'evento originale
376
400
  onOptionChanged?.(e);
377
- }, [onOptionChanged, onHasFiltersChange]);
401
+ }, [onOptionChanged, onHasFiltersChange, keepSearchPanelFocus, showSearchPanel, getSearchPanelInput]);
402
+ /* Ricreare questo oggetto a ogni render lo farebbe leggere come un cambiamento da devextreme-react, che confronta
403
+ le opzioni per riferimento: ogni cambio di headerFilter invalida la barra di intestazione della griglia, cioè
404
+ proprio dove sta la casella di ricerca. Tenendolo stabile la barra viene ricostruita solo quando serve davvero. */
405
+ const headerFilterSearch = useMemo(() => ({ enabled: true, ...headerFilter?.search }), [headerFilter?.search]);
378
406
  // In modalità compatta il pager usa il displayMode 'compact' di DevExtreme (page numbers sostituiti da "pagina / totale"),
379
407
  // salvo displayMode esplicito passato dal chiamante
380
408
  const effectivePager = useMemo(() => {
@@ -388,14 +416,14 @@ const TMDataGrid = React.forwardRef((props, ref) => {
388
416
  // events and callbacks
389
417
  onSelectionChanged: onSelectionChangedCallback, onRowDblClick: onRowDblClickCallback, onRowPrepared: onRowPrepared, onContextMenuPreparing: onContextMenuPreparingCallback, onToolbarPreparing: onToolbarPreparingCallback, onFocusedRowChanged: onFocusedRowChanged, onRowClick: onRowClick, onCellClick: onCellClick, onCellDblClick: onCellDblClick, onOptionChanged: onOptionChangedCallback, onContentReady: onContentReadyCallback, onInitialized: onInitialized, customizeColumns: customizeColumns, onEditorPreparing: onEditorPreparing, onCellPrepared: onCellPrepared, onRowUpdating: onRowUpdating, onRowExpanded: onRowExpanded, onRowCollapsed: onRowCollapsed, onRowUpdated: onRowUpdated, onSaved: onSaved, onEditCanceled: onEditCanceled, onEditingStart: onEditingStart, onEditingChange: onEditingChange, onKeyDown: onKeyDown,
390
418
  // other properties
391
- disabled: disabled, autoNavigateToFocusedRow: autoNavigateToFocusedRow, focusedRowKey: focusedRowKey, columnHidingEnabled: columnHidingEnabled, columnResizingMode: columnResizingMode, columnAutoWidth: columnAutoWidth, allowColumnResizing: allowColumnResizing, allowColumnReordering: allowColumnReordering, showBorders: showBorders, showRowLines: showRowLines, showColumnLines: showColumnLines, showColumnHeaders: showColumnHeaders, rowAlternationEnabled: rowAlternationEnabled, wordWrapEnabled: wordWrapEnabled, columnMinWidth: columnMinWidth, noDataText: noDataText,
419
+ disabled: disabled, autoNavigateToFocusedRow: autoNavigateToFocusedRow, focusedRowKey: focusedRowKey, columnHidingEnabled: columnHidingEnabled, columnResizingMode: columnResizingMode, columnAutoWidth: columnAutoWidth, allowColumnResizing: allowColumnResizing, allowColumnReordering: allowColumnReordering, showBorders: showBorders, showRowLines: showRowLines, showColumnLines: showColumnLines, showColumnHeaders: showColumnHeaders, rowAlternationEnabled: rowAlternationEnabled, repaintChangesOnly: repaintChangesOnly, wordWrapEnabled: wordWrapEnabled, columnMinWidth: columnMinWidth, noDataText: noDataText,
392
420
  // styles
393
421
  width: width, height: height, style: {
394
422
  userSelect: 'none',
395
423
  // Temporary: iOS-specific styles to prevent default long-press menu and text selection
396
424
  WebkitTouchCallout: 'none',
397
425
  WebkitUserSelect: 'none'
398
- }, children: [dataColumns.map((column, index) => (_jsx(Column, { ...column, alignment: column.alignment ?? 'left' }, column.caption + index.toString()))), sorting && _jsx(Sorting, { ...sorting }), selection && _jsx(Selection, { ...selection }), scrolling && _jsx(Scrolling, { ...scrolling }), summary && _jsx(Summary, { ...summary }), showHeaderFilter && _jsx(HeaderFilter, { visible: true, ...headerFilter, search: { enabled: true, ...headerFilter?.search } }), rowDragging && _jsx(RowDragging, { ...rowDragging }), filterRow && _jsx(FilterRow, { ...filterRow }), showFilterPanel && _jsx(FilterPanel, { visible: true }), showHeaderColumnChooser && _jsxs(ColumnChooser, { height: "400px", enabled: !showHeaderColumnChooser, mode: "select", children: [_jsx(Position, { my: "center", at: "center", of: window }), _jsx(ColumnChooserSearch, { enabled: true }), _jsx(ColumnChooserSelection, { allowSelectAll: false, selectByClick: true, recursive: true })] }), stateStoring && _jsx(StateStoring, { ...stateStoring }), groupPanel && _jsx(GroupPanel, { ...groupPanel }), _jsx(Grouping, { contextMenuEnabled: true, ...grouping }), _jsx(LoadPanel, { enabled: showLoadPanel }), _jsx(SearchPanel, { visible: showSearchPanel, searchVisibleColumnsOnly: true, highlightSearchText: true }), editing && _jsx(Editing, { ...editing }), paging && _jsx(Paging, { ...paging }), effectivePager && _jsx(Pager, { ...effectivePager, visible: totalRecordCount > pageSize }), masterDetail && _jsx(MasterDetail, { ...masterDetail })] }) }), counterConfig.show && _jsx("div", { style: { width: "100%", height: "25px", display: "flex", alignItems: "center", gap: "15px", backgroundColor: "#e0e0e0" }, children: _jsx(TMCounterContainer, { items: counterValues, bgColorContainer: counterConfig.bgColorContainer, bgColorItem: counterConfig.bgColorItem, hoverColorItem: counterConfig.hoverColorItem, textColorItem: counterConfig.textColorItem }) }), customContextMenuItems && (_jsx(TMContextMenu, { target: ".dx-data-row", items: processCustomContextMenuItems(customContextMenuItems, customContextMenuRowKey), externalControl: {
426
+ }, children: [dataColumns.map((column, index) => (_jsx(Column, { ...column, alignment: column.alignment ?? 'left' }, column.caption + index.toString()))), sorting && _jsx(Sorting, { ...sorting }), selection && _jsx(Selection, { ...selection }), scrolling && _jsx(Scrolling, { ...scrolling }), summary && _jsx(Summary, { ...summary }), showHeaderFilter && _jsx(HeaderFilter, { visible: true, ...headerFilter, search: headerFilterSearch }), rowDragging && _jsx(RowDragging, { ...rowDragging }), filterRow && _jsx(FilterRow, { ...filterRow }), showFilterPanel && _jsx(FilterPanel, { visible: true }), showHeaderColumnChooser && _jsxs(ColumnChooser, { height: "400px", enabled: !showHeaderColumnChooser, mode: "select", children: [_jsx(Position, { my: "center", at: "center", of: window }), _jsx(ColumnChooserSearch, { enabled: true }), _jsx(ColumnChooserSelection, { allowSelectAll: false, selectByClick: true, recursive: true })] }), stateStoring && _jsx(StateStoring, { ...stateStoring }), groupPanel && _jsx(GroupPanel, { ...groupPanel }), _jsx(Grouping, { contextMenuEnabled: true, ...grouping }), _jsx(LoadPanel, { enabled: showLoadPanel }), _jsx(SearchPanel, { visible: showSearchPanel, searchVisibleColumnsOnly: true, highlightSearchText: true }), editing && _jsx(Editing, { ...editing }), paging && _jsx(Paging, { ...paging }), effectivePager && _jsx(Pager, { ...effectivePager, visible: totalRecordCount > pageSize }), masterDetail && _jsx(MasterDetail, { ...masterDetail })] }) }), counterConfig.show && _jsx("div", { style: { width: "100%", height: "25px", display: "flex", alignItems: "center", gap: "15px", backgroundColor: "#e0e0e0" }, children: _jsx(TMCounterContainer, { items: counterValues, bgColorContainer: counterConfig.bgColorContainer, bgColorItem: counterConfig.bgColorItem, hoverColorItem: counterConfig.hoverColorItem, textColorItem: counterConfig.textColorItem }) }), customContextMenuItems && (_jsx(TMContextMenu, { target: ".dx-data-row", items: processCustomContextMenuItems(customContextMenuItems, customContextMenuRowKey), externalControl: {
399
427
  visible: customContextMenuVisible,
400
428
  position: customContextMenuPosition,
401
429
  onClose: () => setCustomContextMenuVisible(false)
@@ -406,229 +434,229 @@ export default TMDataGrid;
406
434
  // (padding, altezza minima, font e dimensione dei pulsanti di pagina).
407
435
  // Con compactPager = false non emette nessuna regola: width/height restano inline come in precedenza,
408
436
  // così il rendering è identico a quello del div originale.
409
- const StyledDataGridContainer = styled.div `
410
- ${({ $compactPager }) => $compactPager && css `
411
- & .dx-datagrid-pager {
412
- padding: 2px 4px !important;
413
- min-height: 0 !important;
414
- font-size: 11px;
415
- }
416
-
417
- & .dx-datagrid-pager .dx-page,
418
- & .dx-datagrid-pager .dx-page-size,
419
- & .dx-datagrid-pager .dx-selection,
420
- & .dx-datagrid-pager .dx-navigate-button {
421
- min-width: 18px !important;
422
- min-height: 18px !important;
423
- height: auto !important;
424
- padding: 1px 5px !important;
425
- line-height: 16px !important;
426
- font-size: 11px;
427
- }
428
-
429
- & .dx-datagrid-pager .dx-pages,
430
- & .dx-datagrid-pager .dx-page-sizes,
431
- & .dx-datagrid-pager .dx-info,
432
- & .dx-datagrid-pager .dx-page-index,
433
- & .dx-datagrid-pager .dx-pages .dx-info {
434
- font-size: 11px;
435
- margin-top: 0 !important;
436
- margin-bottom: 0 !important;
437
- }
438
-
439
- & .dx-datagrid-pager .dx-info {
440
- margin-left: 4px !important;
441
- margin-right: 4px !important;
442
- }
443
-
444
- /* Editor del numero di pagina (displayMode compact) */
445
- & .dx-datagrid-pager .dx-page-index .dx-texteditor-input,
446
- & .dx-datagrid-pager .dx-page-sizes .dx-texteditor-input {
447
- min-height: 18px !important;
448
- height: 18px !important;
449
- padding: 0 4px !important;
450
- font-size: 11px;
451
- }
452
- `}
437
+ const StyledDataGridContainer = styled.div `
438
+ ${({ $compactPager }) => $compactPager && css `
439
+ & .dx-datagrid-pager {
440
+ padding: 2px 4px !important;
441
+ min-height: 0 !important;
442
+ font-size: 11px;
443
+ }
444
+
445
+ & .dx-datagrid-pager .dx-page,
446
+ & .dx-datagrid-pager .dx-page-size,
447
+ & .dx-datagrid-pager .dx-selection,
448
+ & .dx-datagrid-pager .dx-navigate-button {
449
+ min-width: 18px !important;
450
+ min-height: 18px !important;
451
+ height: auto !important;
452
+ padding: 1px 5px !important;
453
+ line-height: 16px !important;
454
+ font-size: 11px;
455
+ }
456
+
457
+ & .dx-datagrid-pager .dx-pages,
458
+ & .dx-datagrid-pager .dx-page-sizes,
459
+ & .dx-datagrid-pager .dx-info,
460
+ & .dx-datagrid-pager .dx-page-index,
461
+ & .dx-datagrid-pager .dx-pages .dx-info {
462
+ font-size: 11px;
463
+ margin-top: 0 !important;
464
+ margin-bottom: 0 !important;
465
+ }
466
+
467
+ & .dx-datagrid-pager .dx-info {
468
+ margin-left: 4px !important;
469
+ margin-right: 4px !important;
470
+ }
471
+
472
+ /* Editor del numero di pagina (displayMode compact) */
473
+ & .dx-datagrid-pager .dx-page-index .dx-texteditor-input,
474
+ & .dx-datagrid-pager .dx-page-sizes .dx-texteditor-input {
475
+ min-height: 18px !important;
476
+ height: 18px !important;
477
+ padding: 0 4px !important;
478
+ font-size: 11px;
479
+ }
480
+ `}
453
481
  `;
454
482
  // Stile del pannello del filtro d'intestazione (ricerca, elenco valori, OK/Annulla).
455
483
  // Il popup è in portale sul body, fuori da StyledDataGridContainer: le regole sono globali
456
484
  // ma tutte sotto .dx-header-filter-menu, classe che DevExtreme applica solo a questo popup.
457
- const HeaderFilterMenuGlobalStyle = createGlobalStyle `
458
- .dx-header-filter-menu {
459
-
460
- &.dx-popup-wrapper > .dx-overlay-content.dx-popup-normal {
461
- border: 1px solid #E4E8EE;
462
- border-radius: 8px;
463
- box-shadow: 0 2px 6px rgba(18, 44, 76, .08), 0 12px 28px rgba(18, 44, 76, .14);
464
- overflow: hidden;
465
- }
466
-
467
- &.dx-popup-wrapper .dx-popup-content {
468
- padding: 10px 10px 4px;
469
- }
470
-
471
- /* Campo di ricerca: TextBox mode "search" resa da List o da TreeView (filtri gerarchici) */
472
- .dx-searchbox.dx-list-search,
473
- .dx-searchbox.dx-treeview-search {
474
- margin-bottom: 8px;
475
- border-radius: 6px;
476
- border: 1px solid #CDD2D8;
477
- background-color: #F4F6F9;
478
- box-shadow: none;
479
- transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
480
-
481
- /* fluent disegna qui la barretta di focus, sostituita da bordo + alone */
482
- &::before,
483
- &::after {
484
- display: none;
485
- }
486
-
487
- &.dx-state-hover:not(.dx-state-focused) {
488
- border-color: #AEB6C1;
489
- background-color: #EEF2F7;
490
- }
491
-
492
- &.dx-state-focused {
493
- border-color: #2559A5;
494
- background-color: #FFFFFF;
495
- box-shadow: 0 0 0 2px rgba(37, 89, 165, .16);
496
- }
497
-
498
- .dx-icon-search {
499
- width: 28px;
500
- color: #8A929B;
501
- transition: color .15s ease;
502
- }
503
-
504
- &.dx-state-focused .dx-icon-search {
505
- color: #2559A5;
506
- }
507
-
508
- .dx-texteditor-input {
509
- min-height: 28px;
510
- padding-inline-start: 28px;
511
- padding-inline-end: 8px;
512
- font-size: 12px;
513
- background-color: transparent;
514
- }
515
-
516
- .dx-placeholder {
517
- color: #9AA3AD;
518
- font-size: 12px;
519
-
520
- &::before {
521
- padding-inline-start: 28px;
522
- padding-inline-end: 8px;
523
- }
524
- }
525
-
526
- .dx-clear-button-area .dx-icon-clear {
527
- color: #8A929B;
528
- transition: color .15s ease;
529
- }
530
-
531
- .dx-clear-button-area:hover .dx-icon-clear {
532
- color: #2559A5;
533
- }
534
- }
535
-
536
- .dx-list-item {
537
- border-radius: 4px;
538
- transition: background-color .12s ease;
539
- }
540
-
541
- .dx-list-item-content {
542
- padding: 4px 6px;
543
- }
544
-
545
- .dx-list-item.dx-state-hover,
546
- .dx-list-item.dx-state-focused {
547
- background-color: #F1F6FD;
548
- color: #122C4C;
549
- }
550
-
551
- .dx-list-select-all {
552
- padding: 2px 0 6px;
553
- margin-bottom: 4px;
554
- border-bottom: 1px solid #ECEFF3;
555
- }
556
-
557
- .dx-list-select-all-label {
558
- font-weight: 600;
559
- color: #122C4C;
560
- }
561
-
562
- .dx-checkbox-checked .dx-checkbox-icon,
563
- .dx-checkbox-indeterminate .dx-checkbox-icon {
564
- border-color: #2559A5;
565
- background-color: #2559A5;
566
- }
567
-
568
- .dx-checkbox.dx-state-hover:not(.dx-checkbox-checked) .dx-checkbox-icon {
569
- border-color: #2559A5;
570
- }
571
-
572
- /* il :not() lascia intatto il fade-out nativo della scrollbar */
573
- .dx-scrollable-scroll:not(.dx-state-invisible) .dx-scrollable-scroll-content {
574
- background-color: rgba(18, 44, 76, .28);
575
- border-radius: 3px;
576
- }
577
-
578
- &.dx-popup-wrapper .dx-popup-bottom.dx-toolbar {
579
- padding: 8px 10px 10px;
580
- border-top: 1px solid #ECEFF3;
581
- }
582
-
583
- .dx-popup-bottom .dx-button {
584
- border-radius: 5px;
585
- min-width: 76px;
586
- margin: 0;
587
- }
588
-
589
- .dx-popup-bottom .dx-toolbar-button + .dx-toolbar-button {
590
- margin-inline-start: 6px;
591
-
592
- .dx-button {
593
- margin: 0;
594
- }
595
- }
596
-
597
- /* DevExtreme aggiunge prima OK e poi Annulla: individuarli per posizione li rende indipendenti dalla lingua */
598
- .dx-popup-bottom .dx-toolbar-after > .dx-toolbar-button:first-child .dx-button {
599
- border-color: transparent;
600
- background-color: #2559A5;
601
-
602
- .dx-button-text {
603
- color: #FFFFFF;
604
- }
605
-
606
- &.dx-state-hover {
607
- background-color: #1E4A8C;
608
- }
609
-
610
- &.dx-state-active {
611
- background-color: #1A3F78;
612
- }
613
- }
614
-
615
- .dx-popup-bottom .dx-toolbar-after > .dx-toolbar-button + .dx-toolbar-button .dx-button {
616
- border-color: transparent;
617
- background-color: transparent;
618
-
619
- .dx-button-text {
620
- color: #44506B;
621
- }
622
-
623
- &.dx-state-hover {
624
- background-color: #F0F3F7;
625
- }
626
-
627
- &.dx-state-active {
628
- background-color: #E6EBF2;
629
- }
630
- }
631
- }
485
+ const HeaderFilterMenuGlobalStyle = createGlobalStyle `
486
+ .dx-header-filter-menu {
487
+
488
+ &.dx-popup-wrapper > .dx-overlay-content.dx-popup-normal {
489
+ border: 1px solid #E4E8EE;
490
+ border-radius: 8px;
491
+ box-shadow: 0 2px 6px rgba(18, 44, 76, .08), 0 12px 28px rgba(18, 44, 76, .14);
492
+ overflow: hidden;
493
+ }
494
+
495
+ &.dx-popup-wrapper .dx-popup-content {
496
+ padding: 10px 10px 4px;
497
+ }
498
+
499
+ /* Campo di ricerca: TextBox mode "search" resa da List o da TreeView (filtri gerarchici) */
500
+ .dx-searchbox.dx-list-search,
501
+ .dx-searchbox.dx-treeview-search {
502
+ margin-bottom: 8px;
503
+ border-radius: 6px;
504
+ border: 1px solid #CDD2D8;
505
+ background-color: #F4F6F9;
506
+ box-shadow: none;
507
+ transition: border-color .15s ease, background-color .15s ease, box-shadow .15s ease;
508
+
509
+ /* fluent disegna qui la barretta di focus, sostituita da bordo + alone */
510
+ &::before,
511
+ &::after {
512
+ display: none;
513
+ }
514
+
515
+ &.dx-state-hover:not(.dx-state-focused) {
516
+ border-color: #AEB6C1;
517
+ background-color: #EEF2F7;
518
+ }
519
+
520
+ &.dx-state-focused {
521
+ border-color: #2559A5;
522
+ background-color: #FFFFFF;
523
+ box-shadow: 0 0 0 2px rgba(37, 89, 165, .16);
524
+ }
525
+
526
+ .dx-icon-search {
527
+ width: 28px;
528
+ color: #8A929B;
529
+ transition: color .15s ease;
530
+ }
531
+
532
+ &.dx-state-focused .dx-icon-search {
533
+ color: #2559A5;
534
+ }
535
+
536
+ .dx-texteditor-input {
537
+ min-height: 28px;
538
+ padding-inline-start: 28px;
539
+ padding-inline-end: 8px;
540
+ font-size: 12px;
541
+ background-color: transparent;
542
+ }
543
+
544
+ .dx-placeholder {
545
+ color: #9AA3AD;
546
+ font-size: 12px;
547
+
548
+ &::before {
549
+ padding-inline-start: 28px;
550
+ padding-inline-end: 8px;
551
+ }
552
+ }
553
+
554
+ .dx-clear-button-area .dx-icon-clear {
555
+ color: #8A929B;
556
+ transition: color .15s ease;
557
+ }
558
+
559
+ .dx-clear-button-area:hover .dx-icon-clear {
560
+ color: #2559A5;
561
+ }
562
+ }
563
+
564
+ .dx-list-item {
565
+ border-radius: 4px;
566
+ transition: background-color .12s ease;
567
+ }
568
+
569
+ .dx-list-item-content {
570
+ padding: 4px 6px;
571
+ }
572
+
573
+ .dx-list-item.dx-state-hover,
574
+ .dx-list-item.dx-state-focused {
575
+ background-color: #F1F6FD;
576
+ color: #122C4C;
577
+ }
578
+
579
+ .dx-list-select-all {
580
+ padding: 2px 0 6px;
581
+ margin-bottom: 4px;
582
+ border-bottom: 1px solid #ECEFF3;
583
+ }
584
+
585
+ .dx-list-select-all-label {
586
+ font-weight: 600;
587
+ color: #122C4C;
588
+ }
589
+
590
+ .dx-checkbox-checked .dx-checkbox-icon,
591
+ .dx-checkbox-indeterminate .dx-checkbox-icon {
592
+ border-color: #2559A5;
593
+ background-color: #2559A5;
594
+ }
595
+
596
+ .dx-checkbox.dx-state-hover:not(.dx-checkbox-checked) .dx-checkbox-icon {
597
+ border-color: #2559A5;
598
+ }
599
+
600
+ /* il :not() lascia intatto il fade-out nativo della scrollbar */
601
+ .dx-scrollable-scroll:not(.dx-state-invisible) .dx-scrollable-scroll-content {
602
+ background-color: rgba(18, 44, 76, .28);
603
+ border-radius: 3px;
604
+ }
605
+
606
+ &.dx-popup-wrapper .dx-popup-bottom.dx-toolbar {
607
+ padding: 8px 10px 10px;
608
+ border-top: 1px solid #ECEFF3;
609
+ }
610
+
611
+ .dx-popup-bottom .dx-button {
612
+ border-radius: 5px;
613
+ min-width: 76px;
614
+ margin: 0;
615
+ }
616
+
617
+ .dx-popup-bottom .dx-toolbar-button + .dx-toolbar-button {
618
+ margin-inline-start: 6px;
619
+
620
+ .dx-button {
621
+ margin: 0;
622
+ }
623
+ }
624
+
625
+ /* DevExtreme aggiunge prima OK e poi Annulla: individuarli per posizione li rende indipendenti dalla lingua */
626
+ .dx-popup-bottom .dx-toolbar-after > .dx-toolbar-button:first-child .dx-button {
627
+ border-color: transparent;
628
+ background-color: #2559A5;
629
+
630
+ .dx-button-text {
631
+ color: #FFFFFF;
632
+ }
633
+
634
+ &.dx-state-hover {
635
+ background-color: #1E4A8C;
636
+ }
637
+
638
+ &.dx-state-active {
639
+ background-color: #1A3F78;
640
+ }
641
+ }
642
+
643
+ .dx-popup-bottom .dx-toolbar-after > .dx-toolbar-button + .dx-toolbar-button .dx-button {
644
+ border-color: transparent;
645
+ background-color: transparent;
646
+
647
+ .dx-button-text {
648
+ color: #44506B;
649
+ }
650
+
651
+ &.dx-state-hover {
652
+ background-color: #F0F3F7;
653
+ }
654
+
655
+ &.dx-state-active {
656
+ background-color: #E6EBF2;
657
+ }
658
+ }
659
+ }
632
660
  `;
633
661
  const getRecordCount = (dataSource) => {
634
662
  if (Array.isArray(dataSource)) {
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { IColumnProps } from 'devextreme-react/data-grid';
2
3
  import { SearchResultDescriptor } from '@topconsultnpm/sdk-ts';
3
4
  export type FormatOption = {
@@ -11,5 +12,5 @@ interface TMDataGridExportFormProps {
11
12
  selectedRowKeys: Array<number>;
12
13
  onCloseExportForm: () => void;
13
14
  }
14
- declare const TMDataGridExportForm: (props: TMDataGridExportFormProps) => import("react/jsx-runtime").JSX.Element;
15
+ declare const TMDataGridExportForm: (props: TMDataGridExportFormProps) => React.JSX.Element;
15
16
  export default TMDataGridExportForm;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { FileItem } from "./TMFileManagerUtils";
2
3
  import { TMContextMenuItemProps } from '../NewComponents/ContextMenu/types';
3
4
  interface TMFileManagerProps {
@@ -42,5 +43,5 @@ interface TMFileManagerProps {
42
43
  /** Optional: Callback to handle back button */
43
44
  onMaximizePanel?: () => void;
44
45
  }
45
- declare const TMFileManager: (props: TMFileManagerProps) => import("react/jsx-runtime").JSX.Element;
46
+ declare const TMFileManager: (props: TMFileManagerProps) => React.JSX.Element;
46
47
  export default TMFileManager;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { FileItem } from "./TMFileManagerUtils";
2
3
  import { UserDescriptor } from "@topconsultnpm/sdk-ts";
3
4
  import { TMContextMenuItemProps } from "../NewComponents/ContextMenu/types";
@@ -13,5 +14,5 @@ interface TMFileManagerDataGridViewProps {
13
14
  userID?: number;
14
15
  onDoubleClickHandler?: (fileItem: FileItem | undefined) => void;
15
16
  }
16
- declare const TMFileManagerDataGridView: (props: TMFileManagerDataGridViewProps) => import("react/jsx-runtime").JSX.Element;
17
+ declare const TMFileManagerDataGridView: (props: TMFileManagerDataGridViewProps) => React.JSX.Element;
17
18
  export default TMFileManagerDataGridView;
@@ -20,5 +20,5 @@ export interface TMFileManagerThumbnailItemsProps {
20
20
  onDoubleClick?: (file: FileItem) => void;
21
21
  userID?: number;
22
22
  }
23
- declare const TMFileManagerThumbnailItems: (props: TMFileManagerThumbnailItemsProps) => import("react/jsx-runtime").JSX.Element;
23
+ declare const TMFileManagerThumbnailItems: (props: TMFileManagerThumbnailItemsProps) => React.JSX.Element;
24
24
  export default TMFileManagerThumbnailItems;
@@ -28,5 +28,5 @@ interface TMFileManagerThumbnailsViewProps {
28
28
  };
29
29
  }>>;
30
30
  }
31
- declare const TMFileManagerThumbnailsView: (props: TMFileManagerThumbnailsViewProps) => import("react/jsx-runtime").JSX.Element;
31
+ declare const TMFileManagerThumbnailsView: (props: TMFileManagerThumbnailsViewProps) => React.JSX.Element;
32
32
  export default TMFileManagerThumbnailsView;
@@ -48,7 +48,9 @@ export declare const colors: {
48
48
  LIGHT_YELLOW: string;
49
49
  MEDIUM_GREEN: string;
50
50
  };
51
- export declare const TMFileItemContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
51
+ export declare const TMFileItemContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Merged<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style"> & {
52
+ style?: React.CSSProperties | import("styled-components/dist/types").CSSPropertiesWithVars | undefined;
53
+ }, {
52
54
  $backgroundColor?: string;
53
55
  $textColor?: string;
54
56
  $bgHoverColor?: string;
@@ -17,7 +17,7 @@ declare const TMCard: ({ borderRadius, onClick, scrollX, scrollY, width, height,
17
17
  scroll?: boolean;
18
18
  backgroundColor?: string;
19
19
  color?: string;
20
- }) => import("react/jsx-runtime").JSX.Element;
20
+ }) => React.JSX.Element;
21
21
  declare const TMSplitterLayout: ({ animation, showSeparator, separatorColor, overflow, separatorActiveColor, separatorSize, direction, children, start, min, }: {
22
22
  animation?: boolean;
23
23
  separatorColor?: string;
@@ -29,7 +29,7 @@ declare const TMSplitterLayout: ({ animation, showSeparator, separatorColor, ove
29
29
  children?: React.ReactNode;
30
30
  start?: string[];
31
31
  min?: string[];
32
- }) => import("react/jsx-runtime").JSX.Element;
32
+ }) => React.JSX.Element;
33
33
  declare const TMLayoutItem: ({ onClick, children, width, minWidth, maxWidth, maxHeight, height, minHeight }: {
34
34
  onClick?: () => void;
35
35
  children: React.ReactNode;
@@ -40,7 +40,7 @@ declare const TMLayoutItem: ({ onClick, children, width, minWidth, maxWidth, max
40
40
  fixed?: boolean;
41
41
  height?: string;
42
42
  minHeight?: string;
43
- }) => import("react/jsx-runtime").JSX.Element;
43
+ }) => React.JSX.Element;
44
44
  export interface ITMLayoutContainerProps {
45
45
  children: React.ReactNode;
46
46
  gap?: number;
@@ -50,6 +50,6 @@ export interface ITMLayoutContainerProps {
50
50
  onClick?: () => void;
51
51
  onContextMenu?: (e: React.MouseEvent) => void;
52
52
  }
53
- declare const TMLayoutContainer: ({ gap, onClick, justifyContent, alignItems, children, direction, onContextMenu }: ITMLayoutContainerProps) => import("react/jsx-runtime").JSX.Element;
53
+ declare const TMLayoutContainer: ({ gap, onClick, justifyContent, alignItems, children, direction, onContextMenu }: ITMLayoutContainerProps) => React.JSX.Element;
54
54
  export { TMCard, TMLayoutItem, TMSplitterLayout };
55
55
  export default TMLayoutContainer;