@topconsultnpm/sdkui-react 6.22.0-dev3.2 → 6.22.0-dev3.21
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.
- package/lib/components/NewComponents/ContextMenu/styles.d.ts +43 -17
- package/lib/components/NewComponents/FloatingMenuBar/styles.d.ts +78 -19
- package/lib/components/base/Styled.d.ts +79 -27
- package/lib/components/base/Styled.js +7 -5
- package/lib/components/base/TMCounterBar.d.ts +2 -2
- package/lib/components/base/TMCounterContainer.d.ts +2 -1
- package/lib/components/base/TMCustomButton.d.ts +1 -1
- package/lib/components/base/TMDataGrid.d.ts +2 -0
- package/lib/components/base/TMDataGrid.js +34 -6
- package/lib/components/base/TMDataGridExportForm.d.ts +2 -1
- package/lib/components/base/TMFileManager.d.ts +2 -1
- package/lib/components/base/TMFileManagerDataGridView.d.ts +2 -1
- package/lib/components/base/TMFileManagerThumbnailItems.d.ts +1 -1
- package/lib/components/base/TMFileManagerThumbnailsView.d.ts +1 -1
- package/lib/components/base/TMFileManagerUtils.d.ts +3 -1
- package/lib/components/base/TMLayout.d.ts +4 -4
- package/lib/components/base/TMList.d.ts +2 -1
- package/lib/components/base/TMListView.d.ts +1 -1
- package/lib/components/base/TMPanel.js +167 -167
- package/lib/components/base/TMSpinner.d.ts +2 -1
- package/lib/components/base/TMTab.d.ts +4 -3
- package/lib/components/base/TMTabControl.d.ts +106 -0
- package/lib/components/base/TMTabControl.js +664 -0
- package/lib/components/base/TMTooltip.d.ts +1 -1
- package/lib/components/base/TMTreeView.d.ts +13 -5
- package/lib/components/base/TMTreeView.js +19 -1
- package/lib/components/base/TMUserAvatar.d.ts +2 -1
- package/lib/components/base/TMVilViewer.d.ts +2 -1
- package/lib/components/base/TMWaitPanel.d.ts +3 -2
- package/lib/components/base/TMWaitPanel.js +1 -1
- package/lib/components/choosers/TMDistinctValues.js +27 -18
- package/lib/components/choosers/TMDynDataListItemChooser.d.ts +1 -1
- package/lib/components/choosers/TMInvoiceRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMOrderRetrieveFormats.d.ts +2 -1
- package/lib/components/choosers/TMQuickSearchInfo.d.ts +2 -1
- package/lib/components/choosers/TMRelationChooser.d.ts +3 -3
- package/lib/components/choosers/TMUserChooser.d.ts +2 -2
- package/lib/components/editors/TMEditorStyled.d.ts +15 -5
- package/lib/components/editors/TMFormulaEditor.d.ts +1 -1
- package/lib/components/editors/TMHtmlContentDisplay.d.ts +2 -1
- package/lib/components/editors/TMHtmlEditor.d.ts +2 -1
- package/lib/components/editors/TMMetadataValues.js +5 -5
- package/lib/components/editors/TMTreeDropDown.d.ts +1 -1
- package/lib/components/features/archive/TMArchive.js +7 -2
- package/lib/components/features/assistant/TMToppyDraggableHelpCenter.d.ts +1 -1
- package/lib/components/features/blog/TMBlogCommentForm.d.ts +2 -1
- package/lib/components/features/documents/TMCopyToFolderForm.js +18 -7
- package/lib/components/features/documents/TMDcmtForm.js +3 -2
- package/lib/components/features/documents/TMDcmtFormActionButtons.d.ts +1 -1
- package/lib/components/features/documents/TMDcmtIcon.d.ts +2 -1
- package/lib/components/features/documents/TMDcmtPreview.d.ts +7 -3
- package/lib/components/features/documents/TMDcmtTasks.d.ts +2 -1
- package/lib/components/features/documents/TMDragDropOverlay.d.ts +1 -1
- package/lib/components/features/documents/TMFileUploader.js +26 -26
- package/lib/components/features/documents/TMMasterDetailDcmts.js +40 -13
- package/lib/components/features/documents/TMMasterInfoFields.d.ts +2 -1
- package/lib/components/features/documents/TMMergeToPdfForm.d.ts +2 -1
- package/lib/components/features/documents/TMMergeToPdfForm.js +8 -7
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.d.ts +2 -1
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsForm.js +13 -15
- package/lib/components/features/documents/TMMultiMasterDetailDcmtsUtils.d.ts +4 -4
- package/lib/components/features/documents/TMRelationViewer.d.ts +21 -3
- package/lib/components/features/documents/TMRelationViewer.js +140 -104
- package/lib/components/features/documents/relationTreeState.d.ts +32 -0
- package/lib/components/features/documents/relationTreeState.js +89 -0
- package/lib/components/features/search/TMDcmtCheckoutInfoForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataOutputForm.d.ts +2 -1
- package/lib/components/features/search/TMMetadataSorterForm.d.ts +2 -1
- package/lib/components/features/search/TMSavedQuerySelector.d.ts +2 -2
- package/lib/components/features/search/TMSearch.d.ts +1 -1
- package/lib/components/features/search/TMSearch.js +68 -9
- package/lib/components/features/search/TMSearchQueryPanel.d.ts +9 -3
- package/lib/components/features/search/TMSearchResult.d.ts +5 -0
- package/lib/components/features/search/TMSearchResult.js +13 -4
- package/lib/components/features/search/TMSearchResultFloatingActionButton.d.ts +1 -1
- package/lib/components/features/search/TMSignatureInfoContent.d.ts +2 -1
- package/lib/components/features/search/TMTreeSelector.js +37 -35
- package/lib/components/features/search/TMViewHistoryDcmt.d.ts +2 -1
- package/lib/components/features/tasks/TMTaskForm.d.ts +1 -1
- package/lib/components/features/tasks/TMTaskFormUtils.d.ts +10 -10
- package/lib/components/features/tasks/TMTasksAgenda.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksCalendar.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksHeader.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksPanelContent.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksUtilsView.d.ts +5 -5
- package/lib/components/features/tasks/TMTasksView.d.ts +1 -1
- package/lib/components/features/tasks/TMTasksView.js +6 -12
- package/lib/components/features/wg/TMWGsCopyMoveForm.d.ts +3 -2
- package/lib/components/features/workflow/TMWorkflowPopup.d.ts +8 -7
- package/lib/components/features/workflow/diagram/WorkitemRecipientsEditor.d.ts +3 -1
- package/lib/components/forms/Login/ChangePasswordInputs.d.ts +3 -1
- package/lib/components/forms/Login/Chooser.d.ts +2 -2
- package/lib/components/forms/TMChooserForm.d.ts +2 -1
- package/lib/components/forms/TMResultDialog.js +1 -1
- package/lib/components/forms/TMSaveForm.d.ts +4 -4
- package/lib/components/grids/TMBlogAttachments.d.ts +2 -1
- package/lib/components/grids/TMBlogHeader.d.ts +1 -1
- package/lib/components/grids/TMBlogsPost.d.ts +1 -1
- package/lib/components/grids/TMBlogsPostUtils.d.ts +9 -9
- package/lib/components/grids/TMValidationItemsList.d.ts +2 -1
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/layout/panelManager/TMPanelManagerContainer.d.ts +2 -1
- package/lib/components/layout/panelManager/TMPanelManagerContext.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelManagerToolbar.d.ts +4 -2
- package/lib/components/layout/panelManager/TMPanelManagerWithPersistenceProvider.d.ts +2 -2
- package/lib/components/layout/panelManager/TMPanelWrapper.d.ts +2 -2
- package/lib/components/pages/TMPage.d.ts +1 -1
- package/lib/components/query/TMQueryEditor.d.ts +12 -4
- package/lib/components/settings/SettingsAppearance.d.ts +2 -1
- package/lib/components/sidebar/TMAboutApp.d.ts +2 -1
- package/lib/components/sidebar/TMCommandsPanel.d.ts +3 -1
- package/lib/components/sidebar/TMHeader.d.ts +3 -3
- package/lib/components/viewers/TMDataListItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMDataUserIdItemViewer.d.ts +3 -2
- package/lib/components/viewers/TMMidViewer.d.ts +2 -2
- package/lib/components/viewers/TMTidViewer.d.ts +2 -2
- package/lib/helper/Enum_Localizator.js +1 -0
- package/lib/helper/SDKUI_Localizator.d.ts +6 -0
- package/lib/helper/SDKUI_Localizator.js +60 -0
- package/lib/helper/TMAppUpdatedModal.d.ts +2 -1
- package/lib/helper/TMAppUpdatedModal.js +93 -93
- package/lib/helper/TMCommandsContextMenu.d.ts +1 -1
- package/lib/helper/TMIcons.d.ts +280 -280
- package/lib/helper/TMPdfViewer.d.ts +2 -1
- package/lib/helper/TMToppyMessage.d.ts +2 -2
- package/lib/helper/TMUtils.d.ts +10 -4
- package/lib/helper/helpers.d.ts +1 -1
- package/lib/hooks/useDcmtOperations.js +94 -56
- package/lib/hooks/useDocumentOperations.d.ts +1 -0
- package/lib/hooks/useDocumentOperations.js +2 -2
- package/lib/hooks/useInputDialog.d.ts +2 -1
- package/lib/hooks/usePreventFileDrop.js +9 -0
- package/lib/services/caseflow/CaseFlowService.d.ts +32 -1
- package/lib/services/caseflow/CaseFlowService.js +58 -1
- package/lib/services/platform_services.d.ts +3 -2
- 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
|
-
|
|
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:
|
|
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)
|
|
@@ -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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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").
|
|
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
|
-
}) =>
|
|
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
|
-
}) =>
|
|
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
|
-
}) =>
|
|
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) =>
|
|
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;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
interface ITMListItem {
|
|
2
3
|
icon: any;
|
|
3
4
|
text?: string;
|
|
@@ -5,5 +6,5 @@ interface ITMListItem {
|
|
|
5
6
|
}
|
|
6
7
|
declare const TMList: ({ items }: {
|
|
7
8
|
items: ITMListItem[];
|
|
8
|
-
}) =>
|
|
9
|
+
}) => React.JSX.Element;
|
|
9
10
|
export default TMList;
|
|
@@ -37,6 +37,6 @@ interface ListProps<T> {
|
|
|
37
37
|
onItemDblClick?: (item: T) => void;
|
|
38
38
|
itemTemplate?: (item: T) => JSX.Element;
|
|
39
39
|
}
|
|
40
|
-
declare const TMListView: <T>({ customGroupingHeaders, headerBackGroundColor, header, showId, setShowId, showSearch, setShowSearch, grouping, orderBy, id, onScrollChange, scroll, searchKeys, searchable, itemTemplate, customColor, dataSource, exprKey, onSelectionChanged, onItemClick, onItemDblClick, selectedItem, autoScrollToSelectedItem }: ListProps<T>) =>
|
|
40
|
+
declare const TMListView: <T>({ customGroupingHeaders, headerBackGroundColor, header, showId, setShowId, showSearch, setShowSearch, grouping, orderBy, id, onScrollChange, scroll, searchKeys, searchable, itemTemplate, customColor, dataSource, exprKey, onSelectionChanged, onItemClick, onItemDblClick, selectedItem, autoScrollToSelectedItem }: ListProps<T>) => React.JSX.Element;
|
|
41
41
|
export default TMListView;
|
|
42
42
|
export declare const CustomListViewHeader: React.FC<ITMListViewHeader>;
|
|
@@ -6,97 +6,97 @@ import TMButton from './TMButton';
|
|
|
6
6
|
import { LoadIndicator } from 'devextreme-react/load-indicator';
|
|
7
7
|
import { TMExceptionBoxManager } from './TMPopUp';
|
|
8
8
|
import { Gutters, TMColors } from '../../utils/theme';
|
|
9
|
-
const StyledBackButton = styled.button `
|
|
10
|
-
display: flex;
|
|
11
|
-
align-items: center;
|
|
12
|
-
justify-content: center;
|
|
13
|
-
gap: 4px;
|
|
14
|
-
padding: 4px 10px;
|
|
15
|
-
border: 1px solid ${({ $isActive }) => $isActive ? 'rgba(37, 89, 165, 0.3)' : 'rgba(255, 255, 255, 0.4)'};
|
|
16
|
-
border-radius: 6px;
|
|
17
|
-
cursor: pointer;
|
|
18
|
-
font-weight: 500;
|
|
19
|
-
font-size: 0.85rem;
|
|
20
|
-
flex-shrink: 0;
|
|
21
|
-
transition: all 0.15s ease;
|
|
22
|
-
background-color: ${({ $isActive }) => $isActive ? '#FFFFFF' : '#2559A5'};
|
|
23
|
-
box-shadow: none;
|
|
24
|
-
|
|
25
|
-
&&, && * {
|
|
26
|
-
color: ${({ $isActive }) => $isActive ? '#2559A5' : '#FFFFFF'} !important;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
svg {
|
|
30
|
-
font-size: 14px;
|
|
31
|
-
}
|
|
9
|
+
const StyledBackButton = styled.button `
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
gap: 4px;
|
|
14
|
+
padding: 4px 10px;
|
|
15
|
+
border: 1px solid ${({ $isActive }) => $isActive ? 'rgba(37, 89, 165, 0.3)' : 'rgba(255, 255, 255, 0.4)'};
|
|
16
|
+
border-radius: 6px;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
font-weight: 500;
|
|
19
|
+
font-size: 0.85rem;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
transition: all 0.15s ease;
|
|
22
|
+
background-color: ${({ $isActive }) => $isActive ? '#FFFFFF' : '#2559A5'};
|
|
23
|
+
box-shadow: none;
|
|
24
|
+
|
|
25
|
+
&&, && * {
|
|
26
|
+
color: ${({ $isActive }) => $isActive ? '#2559A5' : '#FFFFFF'} !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
svg {
|
|
30
|
+
font-size: 14px;
|
|
31
|
+
}
|
|
32
32
|
`;
|
|
33
33
|
import { AppModules, SDK_Globals } from '@topconsultnpm/sdk-ts';
|
|
34
34
|
import { DeviceType, useDeviceType } from './TMDeviceProvider';
|
|
35
|
-
const StyledPanelContainer = styled.div `
|
|
36
|
-
width: 100%;
|
|
37
|
-
height: 100%;
|
|
38
|
-
font-size: 1rem;
|
|
39
|
-
box-shadow: 3px 3px 5px #D3D3D3BF;
|
|
40
|
-
border-radius: 10px;
|
|
41
|
-
opacity: 1;
|
|
42
|
-
background: #FFFFFF;
|
|
43
|
-
min-height: 0;
|
|
44
|
-
overflow: hidden;
|
|
45
|
-
position: ${({ $isMaximized }) => $isMaximized ? 'fixed' : 'relative'};
|
|
46
|
-
top: ${({ $isMaximized }) => $isMaximized ? '50px' : 'auto'};
|
|
47
|
-
left: ${({ $isMaximized }) => $isMaximized ? '50px' : 'auto'};
|
|
48
|
-
width: ${({ $isMaximized }) => $isMaximized ? `calc(100vw - 50px - (${Gutters.getGutters()}px * 2))` : '100%'};
|
|
49
|
-
height: ${({ $isMaximized }) => $isMaximized ? `calc(100vh - 50px - (${Gutters.getGutters()}px * 2))` : '100%'};
|
|
50
|
-
z-index: ${({ $isMaximized }) => $isMaximized ? 2000 : 'auto'};
|
|
51
|
-
margin: ${({ $isMaximized }) => $isMaximized ? `${Gutters.getGutters()}px` : '0'};
|
|
52
|
-
outline: none;
|
|
53
|
-
/* transition: all 0.2s; */
|
|
35
|
+
const StyledPanelContainer = styled.div `
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: 100%;
|
|
38
|
+
font-size: 1rem;
|
|
39
|
+
box-shadow: 3px 3px 5px #D3D3D3BF;
|
|
40
|
+
border-radius: 10px;
|
|
41
|
+
opacity: 1;
|
|
42
|
+
background: #FFFFFF;
|
|
43
|
+
min-height: 0;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
position: ${({ $isMaximized }) => $isMaximized ? 'fixed' : 'relative'};
|
|
46
|
+
top: ${({ $isMaximized }) => $isMaximized ? '50px' : 'auto'};
|
|
47
|
+
left: ${({ $isMaximized }) => $isMaximized ? '50px' : 'auto'};
|
|
48
|
+
width: ${({ $isMaximized }) => $isMaximized ? `calc(100vw - 50px - (${Gutters.getGutters()}px * 2))` : '100%'};
|
|
49
|
+
height: ${({ $isMaximized }) => $isMaximized ? `calc(100vh - 50px - (${Gutters.getGutters()}px * 2))` : '100%'};
|
|
50
|
+
z-index: ${({ $isMaximized }) => $isMaximized ? 2000 : 'auto'};
|
|
51
|
+
margin: ${({ $isMaximized }) => $isMaximized ? `${Gutters.getGutters()}px` : '0'};
|
|
52
|
+
outline: none;
|
|
53
|
+
/* transition: all 0.2s; */
|
|
54
54
|
`;
|
|
55
|
-
const StyledPanelHeader = styled.div `
|
|
56
|
-
width:100% ;
|
|
57
|
-
display: flex;
|
|
58
|
-
flex-direction: row;
|
|
59
|
-
align-items: center;
|
|
60
|
-
justify-content: flex-start;
|
|
61
|
-
padding: 4px 10px;
|
|
55
|
+
const StyledPanelHeader = styled.div `
|
|
56
|
+
width:100% ;
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: row;
|
|
59
|
+
align-items: center;
|
|
60
|
+
justify-content: flex-start;
|
|
61
|
+
padding: 4px 10px;
|
|
62
62
|
background: ${({ $isActive, $backgroundColor, $activeGradient }) => $isActive
|
|
63
63
|
? ($activeGradient ??
|
|
64
64
|
'linear-gradient(270deg, #46B5A2 16%, #3BAABC 34%, #3BAABC 34%, #3681AD 54%, #3368A5 72%, #2F549D 88%, #304F99 100%)')
|
|
65
|
-
: ($backgroundColor ?? '#F4F4F4')};
|
|
66
|
-
box-shadow: 3px 3px 5px #D3D3D3BF;
|
|
67
|
-
color: ${({ $isActive, $color }) => $isActive ? '#FFFFFF' : ($color ?? '#2559A5')};
|
|
68
|
-
border-top-right-radius: 10px;
|
|
69
|
-
border-top-left-radius: 10px;
|
|
70
|
-
height: 40px;
|
|
71
|
-
font-weight: 600;
|
|
72
|
-
outline: none;
|
|
73
|
-
&:focus {
|
|
74
|
-
outline: none;
|
|
75
|
-
}
|
|
76
|
-
// Ensure all children inherit the header color
|
|
77
|
-
&,
|
|
78
|
-
* {
|
|
79
|
-
color: ${({ $isActive, $color }) => $isActive ? '#FFFFFF' : ($color ?? '#2559A5')} !important;
|
|
80
|
-
}
|
|
65
|
+
: ($backgroundColor ?? '#F4F4F4')};
|
|
66
|
+
box-shadow: 3px 3px 5px #D3D3D3BF;
|
|
67
|
+
color: ${({ $isActive, $color }) => $isActive ? '#FFFFFF' : ($color ?? '#2559A5')};
|
|
68
|
+
border-top-right-radius: 10px;
|
|
69
|
+
border-top-left-radius: 10px;
|
|
70
|
+
height: 40px;
|
|
71
|
+
font-weight: 600;
|
|
72
|
+
outline: none;
|
|
73
|
+
&:focus {
|
|
74
|
+
outline: none;
|
|
75
|
+
}
|
|
76
|
+
// Ensure all children inherit the header color
|
|
77
|
+
&,
|
|
78
|
+
* {
|
|
79
|
+
color: ${({ $isActive, $color }) => $isActive ? '#FFFFFF' : ($color ?? '#2559A5')} !important;
|
|
80
|
+
}
|
|
81
81
|
`;
|
|
82
|
-
const StyledPanelContent = styled.div `
|
|
83
|
-
width: 100%;
|
|
84
|
-
height: ${props => props.$height};
|
|
85
|
-
min-height: 0;
|
|
86
|
-
overflow: hidden;
|
|
87
|
-
border-bottom-right-radius: 10px;
|
|
88
|
-
border-bottom-left-radius: 10px;
|
|
89
|
-
padding: ${props => props.$padding};
|
|
90
|
-
display: flex;
|
|
91
|
-
justify-content: space-between;
|
|
92
|
-
position: relative;
|
|
93
|
-
user-select: none;
|
|
94
|
-
-webkit-touch-callout: none;
|
|
95
|
-
-webkit-user-select: none;
|
|
96
|
-
outline: none;
|
|
97
|
-
&:focus {
|
|
98
|
-
outline: none;
|
|
99
|
-
}
|
|
82
|
+
const StyledPanelContent = styled.div `
|
|
83
|
+
width: 100%;
|
|
84
|
+
height: ${props => props.$height};
|
|
85
|
+
min-height: 0;
|
|
86
|
+
overflow: hidden;
|
|
87
|
+
border-bottom-right-radius: 10px;
|
|
88
|
+
border-bottom-left-radius: 10px;
|
|
89
|
+
padding: ${props => props.$padding};
|
|
90
|
+
display: flex;
|
|
91
|
+
justify-content: space-between;
|
|
92
|
+
position: relative;
|
|
93
|
+
user-select: none;
|
|
94
|
+
-webkit-touch-callout: none;
|
|
95
|
+
-webkit-user-select: none;
|
|
96
|
+
outline: none;
|
|
97
|
+
&:focus {
|
|
98
|
+
outline: none;
|
|
99
|
+
}
|
|
100
100
|
`;
|
|
101
101
|
// Allineata al TABLET_BREAKPOINT (768) di TMDeviceProvider
|
|
102
102
|
const MOBILE_MEDIA_QUERY = '(max-width: 767.98px)';
|
|
@@ -105,102 +105,102 @@ const MOBILE_MEDIA_QUERY = '(max-width: 767.98px)';
|
|
|
105
105
|
// la track (larga quanto il viewport) va a +100% della PROPRIA larghezza, il testo a -100%
|
|
106
106
|
// della SUA. Le due animazioni hanno stessa durata ed easing, quindi lo scostamento netto
|
|
107
107
|
// in ogni istante è esattamente e(t) * (viewport - testo).
|
|
108
|
-
const panelTitleTrackMarquee = keyframes `
|
|
109
|
-
0%, 15% { transform: translateX(0); }
|
|
110
|
-
45%, 55% { transform: translateX(100%); }
|
|
111
|
-
85%, 100% { transform: translateX(0); }
|
|
108
|
+
const panelTitleTrackMarquee = keyframes `
|
|
109
|
+
0%, 15% { transform: translateX(0); }
|
|
110
|
+
45%, 55% { transform: translateX(100%); }
|
|
111
|
+
85%, 100% { transform: translateX(0); }
|
|
112
112
|
`;
|
|
113
|
-
const panelTitleTextMarquee = keyframes `
|
|
114
|
-
0%, 15% { transform: translateX(0); }
|
|
115
|
-
45%, 55% { transform: translateX(-100%); }
|
|
116
|
-
85%, 100% { transform: translateX(0); }
|
|
113
|
+
const panelTitleTextMarquee = keyframes `
|
|
114
|
+
0%, 15% { transform: translateX(0); }
|
|
115
|
+
45%, 55% { transform: translateX(-100%); }
|
|
116
|
+
85%, 100% { transform: translateX(0); }
|
|
117
117
|
`;
|
|
118
118
|
// Ritaglia il testo in eccesso: è l'unico box con overflow hidden, la track ci scorre dentro
|
|
119
|
-
const StyledPanelTitleViewport = styled.div `
|
|
120
|
-
flex: 1;
|
|
121
|
-
display: flex;
|
|
122
|
-
align-items: center;
|
|
123
|
-
justify-content: flex-start;
|
|
124
|
-
min-width: 0;
|
|
125
|
-
overflow: hidden;
|
|
126
|
-
padding: 0 8px;
|
|
119
|
+
const StyledPanelTitleViewport = styled.div `
|
|
120
|
+
flex: 1;
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
justify-content: flex-start;
|
|
124
|
+
min-width: 0;
|
|
125
|
+
overflow: hidden;
|
|
126
|
+
padding: 0 8px;
|
|
127
127
|
`;
|
|
128
128
|
// Larga quanto il viewport: è il metro con cui il -100% del testo viene compensato.
|
|
129
|
-
const StyledPanelTitleTrack = styled.div `
|
|
130
|
-
flex: 1;
|
|
131
|
-
min-width: 0;
|
|
132
|
-
display: flex;
|
|
133
|
-
align-items: center;
|
|
134
|
-
|
|
135
|
-
${({ $marquee }) => $marquee && css `
|
|
136
|
-
@media ${MOBILE_MEDIA_QUERY} {
|
|
137
|
-
animation: ${panelTitleTrackMarquee} 10s ease-in-out infinite;
|
|
138
|
-
|
|
139
|
-
@media (prefers-reduced-motion: reduce) {
|
|
140
|
-
animation: none;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
`}
|
|
129
|
+
const StyledPanelTitleTrack = styled.div `
|
|
130
|
+
flex: 1;
|
|
131
|
+
min-width: 0;
|
|
132
|
+
display: flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
|
|
135
|
+
${({ $marquee }) => $marquee && css `
|
|
136
|
+
@media ${MOBILE_MEDIA_QUERY} {
|
|
137
|
+
animation: ${panelTitleTrackMarquee} 10s ease-in-out infinite;
|
|
138
|
+
|
|
139
|
+
@media (prefers-reduced-motion: reduce) {
|
|
140
|
+
animation: none;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
`}
|
|
144
144
|
`;
|
|
145
145
|
// Senza $marquee resta il troncamento con i puntini di sempre
|
|
146
|
-
const StyledPanelTitle = styled.div `
|
|
147
|
-
margin: 0;
|
|
148
|
-
white-space: nowrap;
|
|
149
|
-
overflow: hidden;
|
|
150
|
-
text-overflow: ellipsis;
|
|
151
|
-
|
|
152
|
-
${({ $marquee }) => $marquee && css `
|
|
153
|
-
@media ${MOBILE_MEDIA_QUERY} {
|
|
154
|
-
flex: 0 0 auto;
|
|
155
|
-
width: max-content;
|
|
156
|
-
min-width: 100%;
|
|
157
|
-
max-width: none;
|
|
158
|
-
overflow: visible;
|
|
159
|
-
text-overflow: clip;
|
|
160
|
-
animation: ${panelTitleTextMarquee} 10s ease-in-out infinite;
|
|
161
|
-
|
|
162
|
-
@media (prefers-reduced-motion: reduce) {
|
|
163
|
-
animation: none;
|
|
164
|
-
width: auto;
|
|
165
|
-
min-width: 0;
|
|
166
|
-
overflow: hidden;
|
|
167
|
-
text-overflow: ellipsis;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
`}
|
|
146
|
+
const StyledPanelTitle = styled.div `
|
|
147
|
+
margin: 0;
|
|
148
|
+
white-space: nowrap;
|
|
149
|
+
overflow: hidden;
|
|
150
|
+
text-overflow: ellipsis;
|
|
151
|
+
|
|
152
|
+
${({ $marquee }) => $marquee && css `
|
|
153
|
+
@media ${MOBILE_MEDIA_QUERY} {
|
|
154
|
+
flex: 0 0 auto;
|
|
155
|
+
width: max-content;
|
|
156
|
+
min-width: 100%;
|
|
157
|
+
max-width: none;
|
|
158
|
+
overflow: visible;
|
|
159
|
+
text-overflow: clip;
|
|
160
|
+
animation: ${panelTitleTextMarquee} 10s ease-in-out infinite;
|
|
161
|
+
|
|
162
|
+
@media (prefers-reduced-motion: reduce) {
|
|
163
|
+
animation: none;
|
|
164
|
+
width: auto;
|
|
165
|
+
min-width: 0;
|
|
166
|
+
overflow: hidden;
|
|
167
|
+
text-overflow: ellipsis;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
`}
|
|
171
171
|
`;
|
|
172
|
-
const refreshSpin = keyframes `
|
|
173
|
-
from { transform: rotate(0deg); }
|
|
174
|
-
to { transform: rotate(360deg); }
|
|
172
|
+
const refreshSpin = keyframes `
|
|
173
|
+
from { transform: rotate(0deg); }
|
|
174
|
+
to { transform: rotate(360deg); }
|
|
175
175
|
`;
|
|
176
176
|
// Fa girare l'icona per tutta la durata del ricaricamento
|
|
177
|
-
const StyledRefreshIcon = styled.span `
|
|
178
|
-
display: flex;
|
|
179
|
-
align-items: center;
|
|
180
|
-
justify-content: center;
|
|
181
|
-
|
|
182
|
-
${({ $isSpinning }) => $isSpinning && css `
|
|
183
|
-
animation: ${refreshSpin} 1s linear infinite;
|
|
184
|
-
|
|
185
|
-
@media (prefers-reduced-motion: reduce) {
|
|
186
|
-
animation: none;
|
|
187
|
-
}
|
|
188
|
-
`}
|
|
177
|
+
const StyledRefreshIcon = styled.span `
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
justify-content: center;
|
|
181
|
+
|
|
182
|
+
${({ $isSpinning }) => $isSpinning && css `
|
|
183
|
+
animation: ${refreshSpin} 1s linear infinite;
|
|
184
|
+
|
|
185
|
+
@media (prefers-reduced-motion: reduce) {
|
|
186
|
+
animation: none;
|
|
187
|
+
}
|
|
188
|
+
`}
|
|
189
189
|
`;
|
|
190
190
|
// Copre il solo contenuto del pannello (StyledPanelContent è position: relative con overflow hidden)
|
|
191
|
-
const StyledPanelLoaderOverlay = styled.div `
|
|
192
|
-
position: absolute;
|
|
193
|
-
inset: 0;
|
|
194
|
-
z-index: 10;
|
|
195
|
-
display: flex;
|
|
196
|
-
flex-direction: column;
|
|
197
|
-
align-items: center;
|
|
198
|
-
justify-content: center;
|
|
199
|
-
gap: 10px;
|
|
200
|
-
background: rgba(255, 255, 255, 0.65);
|
|
201
|
-
border-bottom-right-radius: 10px;
|
|
202
|
-
border-bottom-left-radius: 10px;
|
|
203
|
-
color: ${TMColors.primaryColor};
|
|
191
|
+
const StyledPanelLoaderOverlay = styled.div `
|
|
192
|
+
position: absolute;
|
|
193
|
+
inset: 0;
|
|
194
|
+
z-index: 10;
|
|
195
|
+
display: flex;
|
|
196
|
+
flex-direction: column;
|
|
197
|
+
align-items: center;
|
|
198
|
+
justify-content: center;
|
|
199
|
+
gap: 10px;
|
|
200
|
+
background: rgba(255, 255, 255, 0.65);
|
|
201
|
+
border-bottom-right-radius: 10px;
|
|
202
|
+
border-bottom-left-radius: 10px;
|
|
203
|
+
color: ${TMColors.primaryColor};
|
|
204
204
|
`;
|
|
205
205
|
/**
|
|
206
206
|
* TMPanel - Pannello con supporto Controlled/Uncontrolled
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
interface ITMSpinner {
|
|
2
3
|
backgroundColor?: string;
|
|
3
4
|
fontSize?: string;
|
|
@@ -7,7 +8,7 @@ interface ITMSpinner {
|
|
|
7
8
|
onCancel?: () => void;
|
|
8
9
|
cancelText?: string;
|
|
9
10
|
}
|
|
10
|
-
declare const Spinner: ({ backgroundColor, description, fontSize, width, flat, onCancel, cancelText }: ITMSpinner) =>
|
|
11
|
+
declare const Spinner: ({ backgroundColor, description, fontSize, width, flat, onCancel, cancelText }: ITMSpinner) => React.JSX.Element;
|
|
11
12
|
declare class TMSpinner {
|
|
12
13
|
static show({ description, backgroundColor, fontSize, flat, onCancel, cancelText }?: ITMSpinner): void;
|
|
13
14
|
static hide(): void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { ValidationItem } from '@topconsultnpm/sdk-ts';
|
|
2
3
|
export interface ITMTabProps {
|
|
3
4
|
title: string;
|
|
@@ -7,14 +8,14 @@ export declare const TMTab: ({ label, propsToBeValidated, children }: {
|
|
|
7
8
|
label?: string;
|
|
8
9
|
propsToBeValidated?: string[] | undefined;
|
|
9
10
|
children?: any;
|
|
10
|
-
}) =>
|
|
11
|
+
}) => React.JSX.Element;
|
|
11
12
|
export declare const TMTabItemBadge: ({ vil }: {
|
|
12
13
|
vil: ValidationItem[];
|
|
13
|
-
}) =>
|
|
14
|
+
}) => React.JSX.Element;
|
|
14
15
|
declare const TMTabGroup: ({ children, fontSize, validationItems, onTabIndexChanged }: {
|
|
15
16
|
onTabIndexChanged?: (e: number) => void;
|
|
16
17
|
children: any;
|
|
17
18
|
fontSize?: string;
|
|
18
19
|
validationItems?: ValidationItem[];
|
|
19
|
-
}) =>
|
|
20
|
+
}) => React.JSX.Element;
|
|
20
21
|
export default TMTabGroup;
|