@topconsultnpm/sdkui-react-beta 6.13.25 → 6.13.26
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/assets/icomoon.svg +96 -96
- package/lib/assets/italy.svg +16 -16
- package/lib/assets/topmedia-six.svg +65 -65
- package/lib/assets/topmeida-six-bianco.svg +65 -65
- package/lib/components/base/TMListView.js +5 -5
- package/lib/helper/helpers.d.ts +4 -0
- package/lib/helper/helpers.js +36 -0
- package/package.json +1 -1
@@ -6,9 +6,9 @@ import TMContextMenu, { useTMContextMenu } from './TMContextMenu';
|
|
6
6
|
import { IconApply, IconCloseCircle, IconColumns, IconDown, IconHide, IconShow, IconUp, IconVisible } from '../../helper/TMIcons';
|
7
7
|
import { TMSearchBar } from '../sidebar/TMHeader';
|
8
8
|
import TMTooltip from './TMTooltip';
|
9
|
-
import { SDKUI_Localizator } from '../../helper';
|
9
|
+
import { getContrastColor, SDKUI_Localizator } from '../../helper';
|
10
10
|
import { TMColors } from '../../utils/theme';
|
11
|
-
const StyledListItem = styled.div ` width: 100%; height: max-content; border-bottom: 1px solid #e5e5e5; background-color: ${props => props.$isSelected ? props.$color ? `${props.$color}99` : '#00000030' : 'transparent'} ; color: ${props => props.$isSelected ? props.$
|
11
|
+
const StyledListItem = styled.div ` width: 100%; height: max-content; border-bottom: 1px solid #e5e5e5; background-color: ${props => props.$isSelected ? props.$color ? `${props.$color}99` : '#00000030' : 'transparent'} ; color: ${props => props.$isSelected ? props.$textColor : '#000000'} ; &:hover{ background-color: ${props => props.$color ? props.$isSelected ? `${props.$color}99` : `${props.$color}40` : props.$isSelected ? '#00000030' : '#00000010'};} `;
|
12
12
|
const StyledListViewContainer = styled.div ` position: relative; display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start; width: 100%; height: 100%; `;
|
13
13
|
const StyledSearchContainer = styled.div ` width: 100%; height: max-content; padding: 5px; border-bottom: 1px solid #e5e5e5; display: flex; align-items: center; gap: 10px; `;
|
14
14
|
const StyledListViewFooter = styled.div ` background-color: ${props => props.$bgColor}; width: 100%; height: 25px; padding: 5px 15px; border-top: 1px solid #e5e5e5; display: flex; align-items: center; gap: 10px; `;
|
@@ -257,7 +257,7 @@ const TMListView = ({ customGroupingHeaders, headerBackGroundColor, header, show
|
|
257
257
|
}
|
258
258
|
// map memo
|
259
259
|
const memoList = useMemo(() => currentDataSource.map((data, index) => {
|
260
|
-
return (_jsx(StyledListItem, { "$isSelected": isSelected(data), "$color": customColor, onClick: () => { onSelectionChanged && onSelectionChanged(data); onItemClick && onItemClick(data); }, onDoubleClick: () => onItemDblClick && onItemDblClick(data), children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', justifyContent: 'flex-start', gap: 5, padding: '5px 5px' }, children: [localShowId && _jsxs("p", { style: { color: isSelected(data) ? '
|
260
|
+
return (_jsx(StyledListItem, { "$isSelected": isSelected(data), "$color": getContrastColor(customColor).bgColor, "$textColor": getContrastColor(customColor).textColor, onClick: () => { onSelectionChanged && onSelectionChanged(data); onItemClick && onItemClick(data); }, onDoubleClick: () => onItemDblClick && onItemDblClick(data), children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'flex-start', justifyContent: 'flex-start', gap: 5, padding: '5px 5px' }, children: [localShowId && _jsxs("p", { style: { color: isSelected(data) ? 'red' : 'black', backgroundColor: `${customColor}20`, width: '100%', padding: '2px 5px', borderRadius: '5px', height: 'max-content', textAlign: 'left' }, children: [" ", exprKey + ' : ' + data[exprKey], " "] }), _jsxs("div", { style: { width: '100%', height: '100%' }, children: [" ", itemTemplate ? itemTemplate(data) : _jsx("div", {})] })] }) }, index));
|
261
261
|
}), [currentDataSource, selectedItem, localShowId, customColor]);
|
262
262
|
const groupedMemoList = useMemo(() => groupKeys.map((key, index) => {
|
263
263
|
const groupingText = () => {
|
@@ -282,9 +282,9 @@ const TMListView = ({ customGroupingHeaders, headerBackGroundColor, header, show
|
|
282
282
|
customGroupingHeaders[index] ?
|
283
283
|
_jsx("div", { style: { width: '100%', height: '100%', display: 'flex', alignItems: 'center' }, children: customGroupingHeaders[index] })
|
284
284
|
:
|
285
|
-
_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 10 }, children: [_jsx("p", { children: groupingText() }), _jsx("div", { style: { width: '16px', height: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: customColor, color:
|
285
|
+
_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 10 }, children: [_jsx("p", { children: groupingText() }), _jsx("div", { style: { width: '16px', height: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: getContrastColor(customColor).textColor, color: getContrastColor(customColor).bgColor, boxShadow: '1px 1px 2px #00000020', borderRadius: '30px', fontWeight: 'bold' }, children: groupByKey(currentDataSource, grouping)[key].length })] })
|
286
286
|
:
|
287
|
-
_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 10 }, children: [_jsx("p", { children: groupingText() }), _jsx("div", { style: { width: '16px', height: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: customColor, color:
|
287
|
+
_jsxs("div", { style: { display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 10 }, children: [_jsx("p", { children: groupingText() }), _jsx("div", { style: { width: '16px', height: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: getContrastColor(customColor).textColor, color: getContrastColor(customColor).bgColor, boxShadow: '1px 1px 2px #00000020', borderRadius: '30px', fontWeight: 'bold' }, children: groupByKey(currentDataSource, grouping)[key].length })] }), _jsxs("div", { style: { cursor: 'pointer' }, onClick: () => { let arr = [...openList]; arr[index] = !arr[index]; setOpenList(arr); }, children: [" ", openList[index] ? _jsx(IconUp, { fontSize: 12 }) : _jsx(IconDown, { fontSize: 12 }), " "] })] }) }), openList[index] && _jsx("div", { style: { width: '100%', height: '100%' }, children: groupByKey(currentDataSource, grouping)[key].map((data, index2) => (_jsx(StyledListItem, { "$isSelected": data === selectedItem, "$color": getContrastColor(customColor).bgColor, "$textColor": getContrastColor(customColor).textColor, onClick: () => { onSelectionChanged && onSelectionChanged(data); onItemClick && onItemClick(data); }, onDoubleClick: () => { onItemDblClick && onItemDblClick(data); }, children: _jsxs("div", { style: { width: '100%', height: 'max-content', display: 'flex', flexDirection: 'column', padding: '5px 5px' }, children: [localShowId && _jsxs("p", { style: { color: data === selectedItem ? 'red' : 'black', backgroundColor: `${customColor}20`, width: '100%', padding: '2px 5px', borderRadius: '5px', height: 'max-content', textAlign: 'left' }, children: [" ", 'ID: ' + data.id, " "] }), _jsxs("div", { style: { width: '100%', height: '100%' }, children: [" ", itemTemplate ? itemTemplate(data) : _jsx("div", {})] })] }) }, index2))) })] }, index));
|
288
288
|
}), [currentDataSource, selectedItem, localShowId, customColor, openList, grouping, customGroupingHeaders]);
|
289
289
|
// List height
|
290
290
|
const listHeight = () => {
|
package/lib/helper/helpers.d.ts
CHANGED
@@ -40,3 +40,7 @@ export declare function isPositiveNumber(val: unknown): val is number;
|
|
40
40
|
export declare function sleep(ms: number): Promise<void>;
|
41
41
|
export declare const dialogConfirmOperation: (title: string, msg: string, operationAsync: () => Promise<void>) => void;
|
42
42
|
export declare function getExceptionMessage(ex: any): string;
|
43
|
+
export declare function getContrastColor(inputColor: string): {
|
44
|
+
bgColor: string;
|
45
|
+
textColor: string;
|
46
|
+
};
|
package/lib/helper/helpers.js
CHANGED
@@ -664,3 +664,39 @@ export function getExceptionMessage(ex) {
|
|
664
664
|
let msg = ex.isApiException ? ex.response.title : ex.message;
|
665
665
|
return msg ?? ex.toString();
|
666
666
|
}
|
667
|
+
export function getContrastColor(inputColor) {
|
668
|
+
let hex = inputColor;
|
669
|
+
if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(inputColor)) {
|
670
|
+
const temp = document.createElement('div');
|
671
|
+
temp.style.color = inputColor;
|
672
|
+
document.body.appendChild(temp);
|
673
|
+
const rgb = getComputedStyle(temp).color;
|
674
|
+
document.body.removeChild(temp);
|
675
|
+
const regex = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/;
|
676
|
+
const match = regex.exec(rgb);
|
677
|
+
if (match) {
|
678
|
+
const r = parseInt(match[1]).toString(16).padStart(2, '0');
|
679
|
+
const g = parseInt(match[2]).toString(16).padStart(2, '0');
|
680
|
+
const b = parseInt(match[3]).toString(16).padStart(2, '0');
|
681
|
+
hex = `#${r}${g}${b}`;
|
682
|
+
}
|
683
|
+
else {
|
684
|
+
hex = '#000000';
|
685
|
+
}
|
686
|
+
}
|
687
|
+
const color = hex.replace('#', '');
|
688
|
+
const r = parseInt(color.substring(0, 2), 16);
|
689
|
+
const g = parseInt(color.substring(2, 4), 16);
|
690
|
+
const b = parseInt(color.substring(4, 6), 16);
|
691
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
692
|
+
if (inputColor === 'transparent' || inputColor === 'rgba(255, 255, 255, 0)' || inputColor === 'none' || inputColor === 'white' || inputColor === '#ffffff' || inputColor === '#fff') {
|
693
|
+
return {
|
694
|
+
bgColor: '#aeaeae',
|
695
|
+
textColor: '#393939'
|
696
|
+
};
|
697
|
+
}
|
698
|
+
return {
|
699
|
+
bgColor: hex,
|
700
|
+
textColor: luminance > 0.6 ? '#000000' : '#FFFFFF'
|
701
|
+
};
|
702
|
+
}
|