@topconsultnpm/sdkui-react 6.21.0-dev1.36 → 6.21.0-dev1.38

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.
@@ -4,6 +4,7 @@ import { SDK_Localizator, DataListCacheService } from '@topconsultnpm/sdk-ts';
4
4
  import { StyledDivHorizontal } from '../base/Styled';
5
5
  import { IconSearch, SDKUI_Localizator, TMImageLibrary } from '../../helper';
6
6
  import TMSpinner from '../base/TMSpinner';
7
+ import TMTooltip from '../base/TMTooltip';
7
8
  import TMSummary from '../editors/TMSummary';
8
9
  import TMChooserForm from '../forms/TMChooserForm';
9
10
  import TMDataListItemViewer from '../viewers/TMDataListItemViewer';
@@ -11,7 +12,8 @@ const TMDataListItemChooser = ({ labelColor, width = '100%', dataListId, icon, b
11
12
  const [showChooser, setShowChooser] = useState(false);
12
13
  const renderTemplate = () => {
13
14
  const isPlaceholder = values?.[0] === placeHolder;
14
- return (_jsxs(StyledDivHorizontal, { style: { width: '100%', color: isPlaceholder ? '#a9a9a9' : 'inherit' }, children: [values && values.length > 0 && _jsx(TMDataListItemViewer, { dataListId: dataListId, value: values?.[0] }), values && values.length > 1 && _jsx("p", { style: { marginLeft: '10px' }, children: `(+${values.length - 1} ${values.length == 2 ? 'altro' : 'altri'})` })] }));
15
+ return (_jsxs(StyledDivHorizontal, { style: { width: '100%', justifyContent: 'flex-start', color: isPlaceholder ? '#a9a9a9' : 'inherit' }, children: [values && values.length > 0 && _jsx(TMDataListItemViewer, { dataListId: dataListId, value: values?.[0], width: 'auto' }), values && values.length > 1 &&
16
+ _jsx(TMTooltip, { content: values.slice(1).join(', '), children: _jsx("p", { style: { marginLeft: '10px' }, children: `(+${values.length - 1} ${values.length == 2 ? 'altro' : 'altri'})` }) })] }));
15
17
  };
16
18
  const summaryInputRef = useRef(null);
17
19
  return (_jsxs(_Fragment, { children: [_jsx(TMSummary, { ref: summaryInputRef, placeHolder: placeHolder, labelColor: labelColor, width: width, icon: icon, buttons: buttons, readOnly: readOnly, backgroundColor: backgroundColor, showBorder: showBorder, hasValue: values && values.length > 0, showClearButton: showClearButton, iconEditButton: _jsx(IconSearch, { fontSize: 16 }), onEditorClick: () => {
@@ -39,4 +39,4 @@ interface ITMDynDataListItemChooserFormProps extends ITMChooserFormProps<DataLis
39
39
  dynDL?: DynamicDataListDescriptor;
40
40
  searchResult?: SearchResultDescriptor;
41
41
  }
42
- export declare const TMDynDataListItemChooserForm: React.FunctionComponent<ITMDynDataListItemChooserFormProps>;
42
+ export declare const TMDynDataListItemChooserForm: (props: ITMDynDataListItemChooserFormProps) => import("react/jsx-runtime").JSX.Element;
@@ -82,7 +82,8 @@ const TMDynDataListItemChooser = ({ tid, md, width = '100%', titleForm, openChoo
82
82
  };
83
83
  const renderTemplate = () => {
84
84
  const isPlaceholder = values?.[0] === placeHolder;
85
- return (_jsxs(StyledDivHorizontal, { style: { width: '100%', color: isPlaceholder ? '#a9a9a9' : 'inherit' }, children: [dataSource && _jsxs(StyledDivHorizontal, { children: [getIcon(), _jsx("p", { style: { marginLeft: '5px' }, children: getDescription() })] }), values && values.length > 1 && _jsx("p", { style: { marginLeft: '10px' }, children: `(+${values.length - 1} ${values.length == 2 ? 'altro' : 'altri'})` })] }));
85
+ return (_jsxs(StyledDivHorizontal, { style: { width: '100%', color: isPlaceholder ? '#a9a9a9' : 'inherit' }, children: [dataSource && _jsxs(StyledDivHorizontal, { children: [getIcon(), _jsx("p", { style: { marginLeft: '5px' }, children: getDescription() })] }), values && values.length > 1 &&
86
+ _jsx(TMTooltip, { content: values.slice(1).join(', '), children: _jsx("p", { style: { marginLeft: '10px' }, children: `(+${values.length - 1} ${values.length == 2 ? 'altro' : 'altri'})` }) })] }));
86
87
  };
87
88
  return (_jsxs(_Fragment, { children: [_jsx(TMSummary, { placeHolder: placeHolder, width: width, icon: icon, labelColor: labelColor, backgroundColor: backgroundColor, buttons: buttons, showBorder: showBorder, readOnly: readOnly, hasValue: values && values.length > 0, showClearButton: showClearButton, iconEditButton: _jsx(IconSearch, { fontSize: 16 }), onEditorClick: () => {
88
89
  if (!readOnly) {
@@ -135,9 +136,10 @@ const TMDynDataListItemChooser = ({ tid, md, width = '100%', titleForm, openChoo
135
136
  export default TMDynDataListItemChooser;
136
137
  const cellRenderIcon = () => _jsx(IconDetails, {});
137
138
  export const TMDynDataListItemChooserForm = (props) => {
139
+ const { TID, MID, layoutMode, dynDL, searchResult, selectedIDs, title, width, height, onChoose } = props;
138
140
  // Generate unique keys for all columns
139
- const uniqueKeys = generateUniqueColumnKeys(props.searchResult?.dtdResult?.columns, props.searchResult?.fromTID);
140
- const dataColumns = props.searchResult?.dtdResult?.columns?.map((col, index) => {
141
+ const uniqueKeys = generateUniqueColumnKeys(searchResult?.dtdResult?.columns, searchResult?.fromTID);
142
+ const dataColumns = searchResult?.dtdResult?.columns?.map((col, index) => {
141
143
  const isVisible = col.extendedProperties?.["Visibility"] != "Hidden";
142
144
  const dataType = () => {
143
145
  switch (col.dataType) {
@@ -149,23 +151,23 @@ export const TMDynDataListItemChooserForm = (props) => {
149
151
  };
150
152
  return { dataField: uniqueKeys[index], caption: col.caption, visible: isVisible, dataType: dataType(), format: col.dataType === DataColumnTypes.DateTime ? Globalization.getDateDisplayFormat() : "" };
151
153
  });
152
- const keyValue = uniqueKeys[props.dynDL?.selectItemForValue ?? 0] ?? '';
154
+ const keyValue = uniqueKeys[dynDL?.selectItemForValue ?? 0] ?? '';
153
155
  const getItems = async (refreshCache) => {
154
- if (!props.searchResult)
156
+ if (!searchResult)
155
157
  return [];
156
158
  if (refreshCache)
157
159
  DataListCacheService.RemoveAll();
158
160
  TMSpinner.show({ description: `${SDKUI_Localizator.Loading} - ${SDK_Localizator.DataList} ...` });
159
- let result = await SDK_Globals.tmSession?.NewSearchEngine().GetDynDataListValuesAsync(props.TID, props.MID, props.layoutMode, [])
161
+ let result = await SDK_Globals.tmSession?.NewSearchEngine().GetDynDataListValuesAsync(TID, MID, layoutMode, [])
160
162
  .catch((err) => { TMSpinner.hide(); TMExceptionBoxManager.show({ exception: err }); });
161
163
  TMSpinner.hide();
162
164
  return result ? searchResultDescriptorToSimpleArray(result) ?? [] : [];
163
165
  };
164
166
  const getTitle = () => {
165
- let title = SDK_Localizator.DataList;
166
- if (props.title)
167
- title += `: ${props.title}`;
168
- return title;
167
+ let titleDataList = SDK_Localizator.DataList;
168
+ if (title)
169
+ titleDataList += `: ${title}`;
170
+ return titleDataList;
169
171
  };
170
- return (_jsx(TMChooserForm, { title: getTitle(), allowMultipleSelection: props.allowMultipleSelection, width: props.width, height: props.height, keyName: keyValue ?? '', showDefaultColumns: false, hasShowId: false, columns: dataColumns, selectedIDs: props.selectedIDs, cellRenderIcon: cellRenderIcon, dataSource: searchResultDescriptorToSimpleArray(props.searchResult) ?? [], getItems: getItems, onClose: props.onClose, onChoose: (IDs) => props.onChoose?.(IDs) }));
172
+ return (_jsx(TMChooserForm, { title: getTitle(), allowMultipleSelection: props.allowMultipleSelection, width: width, height: height, keyName: keyValue ?? '', showDefaultColumns: false, hasShowId: false, columns: dataColumns, selectedIDs: selectedIDs, cellRenderIcon: cellRenderIcon, dataSource: searchResultDescriptorToSimpleArray(searchResult) ?? [], getItems: getItems, onClose: props.onClose, onChoose: (IDs) => onChoose?.(IDs) }));
171
173
  };
@@ -79,11 +79,12 @@ const TMMetadataEditor = ({ isSelected = false, customLabel, isReadOnly, isLexPr
79
79
  if (value?.startsWith("{@QueryParam") || value == "{@UserName}" || value == "{@UserID}" || queryOperator == QueryOperators.Custom || isEditable)
80
80
  return _jsx(TMTextBox, { placeHolder: layoutMode === LayoutModes.Ark ? md?.defaultValue ?? '' : '', isModifiedWhen: isModifiedWhenInternal(), readOnly: isReadOnlyResult, label: (modulesWithLabelTop || showLabelTop) ? (customLabel ?? md?.nameLoc) : undefined, icon: showLabelTop ? icon : undefined, validationItems: validationItems, disabled: disabled, elementStyle: { width: '100%' }, type: 'text', maxLength: isEditable ? undefined : maxLength, autoFocus: autoFocus, value: value ?? '', onValueChanged: (e) => onValueChange?.(e.target.value), onBlur: (newValue) => onValueChanged?.(newValue) });
81
81
  if (md?.dataDomain == MetadataDataDomains.DynamicDataList)
82
- return _jsx(TMDynDataListItemChooser, { placeHolder: layoutMode === LayoutModes.Ark ? md?.defaultValue ?? '' : '', titleForm: md.nameLoc, readOnly: isReadOnlyResult, layoutMode: layoutMode, isModifiedWhen: isModifiedWhenInternal(), label: (modulesWithLabelTop || showLabelTop) ? (customLabel ?? md?.nameLoc) : undefined, icon: showLabelTop ? icon : undefined, validationItems: validationItems, disabled: disabled, md: md, tid: tid, openChooserBySingleClick: openChooserBySingleClick, queryParamsDynDataList: queryParamsDynDataList, onCascadeRefreshDynDataLists: onCascadeRefreshDynDataLists, onCascadeUpdateMIDs: onCascadeUpdateMIDs, elementStyle: { width: '100%' }, backgroundColor: TMColors.default_background, allowMultipleSelection: multipleSelectionIsenabled, values: value ? [value] : [], showClearButton: !isReadOnlyResult, onValueChanged: (IDs) => {
83
- if (!IDs || IDs.length <= 0)
82
+ return _jsx(TMDynDataListItemChooser, { placeHolder: layoutMode === LayoutModes.Ark ? md?.defaultValue ?? '' : '', titleForm: md.nameLoc, readOnly: isReadOnlyResult, layoutMode: layoutMode, isModifiedWhen: isModifiedWhenInternal(), label: (modulesWithLabelTop || showLabelTop) ? (customLabel ?? md?.nameLoc) : undefined, icon: showLabelTop ? icon : undefined, validationItems: validationItems, disabled: disabled, md: md, tid: tid, openChooserBySingleClick: openChooserBySingleClick, queryParamsDynDataList: queryParamsDynDataList, onCascadeRefreshDynDataLists: onCascadeRefreshDynDataLists, onCascadeUpdateMIDs: onCascadeUpdateMIDs, elementStyle: { width: '100%' }, backgroundColor: TMColors.default_background, allowMultipleSelection: multipleSelectionIsenabled, values: value ? value.split(',').filter(v => v.trim() !== '') : [], showClearButton: !isReadOnlyResult, onValueChanged: (IDs) => {
83
+ const filteredIDs = IDs?.filter(id => id.trim() !== '');
84
+ if (!filteredIDs || filteredIDs.length <= 0)
84
85
  onValueChanged?.(undefined);
85
86
  else
86
- onValueChanged?.(IDs[0]);
87
+ onValueChanged?.(filteredIDs.join(","));
87
88
  }, updateIsModalOpen: updateIsModalOpen });
88
89
  if (md?.dataDomain == MetadataDataDomains.DataList)
89
90
  return _jsx(TMDataListItemChooser, { placeHolder: layoutMode === LayoutModes.Ark ? md?.defaultValue ?? '' : '', titleForm: md.nameLoc, readOnly: isReadOnlyResult, isModifiedWhen: isModifiedWhenInternal(), label: (modulesWithLabelTop || showLabelTop) ? (customLabel ?? md?.nameLoc) : undefined, icon: showLabelTop ? icon : undefined, validationItems: validationItems, disabled: disabled, elementStyle: { width: '100%' }, backgroundColor: TMColors.default_background, dataListId: md.dataListID, openChooserBySingleClick: openChooserBySingleClick, allowMultipleSelection: multipleSelectionIsenabled, values: value?.split(',').map((item) => !item.startsWith("'") ? item : item.slice(1, -1)) ?? [], showClearButton: !isReadOnlyResult, onValueChanged: (IDs) => {
@@ -148,6 +148,18 @@ const TMSearchWhereItemEditor = React.memo(({ whereItem, queryParamsDynDataList,
148
148
  let dtd = await DcmtTypeListCacheService.GetAsync(whereItem.tid, true);
149
149
  return dtd?.metadata?.find(o => o.id === whereItem.mid);
150
150
  };
151
+ // Rimuove gli apici singoli da valori separati da virgola: 'msegato','plevolella' -> msegato,plevolella
152
+ const stripQuotes = (value) => {
153
+ if (!value || typeof value !== 'string')
154
+ return value;
155
+ return value.split(',').map(item => {
156
+ const trimmed = item.trim();
157
+ if (trimmed.startsWith("'") && trimmed.endsWith("'")) {
158
+ return trimmed.slice(1, -1);
159
+ }
160
+ return trimmed;
161
+ }).join(',');
162
+ };
151
163
  const normalizeValue = (value, isForValue1 = true) => {
152
164
  let newValues = [];
153
165
  let newValue = value;
@@ -161,7 +173,7 @@ const TMSearchWhereItemEditor = React.memo(({ whereItem, queryParamsDynDataList,
161
173
  }
162
174
  onValueChanged?.(newValues);
163
175
  };
164
- return (_jsxs(StyledRowItem, { style: { marginBottom: 0, width: '100%' }, children: [showValue1 && _jsx(TMMetadataEditor, { openChooserBySingleClick: openChooserBySingleClick, isSelected: isSelected, tid: whereItem.tid, mid: whereItem.mid, layoutMode: LayoutModes.None, isEditable: isEditableList, value: whereItem.value1, queryOperator: whereItem.operator, queryParamsDynDataList: queryParamsDynDataList, autoFocus: autoFocus ?? false, containerElement: undefined, onValueChanged: (value) => { normalizeValue(value, true); }, onCascadeRefreshDynDataLists: onCascadeRefreshDynDataLists, onCascadeUpdateMIDs: onCascadeUpdateMIDs, updateIsModalOpen: updateIsModalOpen }), showValue2 && _jsx(TMMetadataEditor, { openChooserBySingleClick: openChooserBySingleClick, isSelected: isSelected, tid: whereItem.tid, mid: whereItem.mid, layoutMode: LayoutModes.None, isEditable: isEditableList, value: whereItem.value2, queryOperator: whereItem.operator, autoFocus: autoFocus ?? false, containerElement: undefined, onValueChanged: (value) => { normalizeValue(value, false); }, updateIsModalOpen: updateIsModalOpen })] }));
176
+ return (_jsxs(StyledRowItem, { style: { marginBottom: 0, width: '100%' }, children: [showValue1 && _jsx(TMMetadataEditor, { openChooserBySingleClick: openChooserBySingleClick, isSelected: isSelected, tid: whereItem.tid, mid: whereItem.mid, layoutMode: LayoutModes.None, isEditable: isEditableList, value: stripQuotes(whereItem.value1), queryOperator: whereItem.operator, queryParamsDynDataList: queryParamsDynDataList, autoFocus: autoFocus ?? false, containerElement: undefined, onValueChanged: (value) => { normalizeValue(value, true); }, onCascadeRefreshDynDataLists: onCascadeRefreshDynDataLists, onCascadeUpdateMIDs: onCascadeUpdateMIDs, updateIsModalOpen: updateIsModalOpen }), showValue2 && _jsx(TMMetadataEditor, { openChooserBySingleClick: openChooserBySingleClick, isSelected: isSelected, tid: whereItem.tid, mid: whereItem.mid, layoutMode: LayoutModes.None, isEditable: isEditableList, value: stripQuotes(whereItem.value2), queryOperator: whereItem.operator, autoFocus: autoFocus ?? false, containerElement: undefined, onValueChanged: (value) => { normalizeValue(value, false); }, updateIsModalOpen: updateIsModalOpen })] }));
165
177
  });
166
178
  const TMSearchWhereItemCard = React.memo(({ index, whereItem, isSelected, queryParamsDynDataList, showEditor, showCompleteMetadataName, showId, isEditableList, onWhereItemChange, onHideEditor, onCascadeRefreshDynDataLists, onCascadeUpdateMIDs, updateIsModalOpen }) => {
167
179
  const [isOpen, setIsOpen] = useState(false);
@@ -16,17 +16,40 @@ const TMChooserForm = ({ children, title, allowMultipleSelection = false, allowA
16
16
  const [selectedRowKeys, setSelectedRowKeys] = useState(selectedIDs ?? []);
17
17
  const [focusedRowKey, setFocusedRowKey] = useState(selectedIDs?.[0]);
18
18
  const [selectedRowCounter, setSelectedRowCounter] = useState([]);
19
+ // Helper per confronto case-insensitive
20
+ const includesCaseInsensitive = (arr, value) => {
21
+ if (!arr)
22
+ return false;
23
+ if (typeof value === 'string') {
24
+ return arr.some(item => typeof item === 'string' && item.toLowerCase() === value.toLowerCase());
25
+ }
26
+ return arr.includes(value);
27
+ };
19
28
  useEffect(() => { doGetItems(false); }, [getItems]);
29
+ // Normalizza selectedRowKeys per corrispondere al case reale dei dati
30
+ const normalizeSelectedKeys = useCallback((items, keys) => {
31
+ return keys.map(key => {
32
+ if (typeof key === 'string') {
33
+ const match = items.find((item) => typeof item[keyName] === 'string' && item[keyName].toLowerCase() === key.toLowerCase());
34
+ return match ? match[keyName] : key;
35
+ }
36
+ return key;
37
+ });
38
+ }, [keyName]);
20
39
  useEffect(() => {
40
+ const normalizedKeys = normalizeSelectedKeys(allItems, selectedRowKeys);
41
+ if (JSON.stringify(normalizedKeys) !== JSON.stringify(selectedRowKeys)) {
42
+ setSelectedRowKeys(normalizedKeys);
43
+ }
21
44
  if (showOnlySelectedItems)
22
- setFilteredItems(allItems.filter((o) => selectedRowKeys?.includes(o[keyName])));
45
+ setFilteredItems(allItems.filter((o) => includesCaseInsensitive(normalizedKeys, o[keyName])));
23
46
  else
24
47
  setFilteredItems(allItems);
25
48
  }, [showOnlySelectedItems, allItems, selectedRowKeys, keyName]);
26
49
  useEffect(() => {
27
50
  setSelectedRowCounter(selectedRowKeys);
28
51
  }, [selectedRowKeys]);
29
- const getSelectedIDs = () => { return filteredItems.filter((o) => selectedRowKeys?.includes(o[keyName])).map((item) => { return convertID ? convertID(item) : item[keyName]; }); };
52
+ const getSelectedIDs = () => { return filteredItems.filter((o) => includesCaseInsensitive(selectedRowKeys, o[keyName])).map((item) => { return convertID ? convertID(item) : item[keyName]; }); };
30
53
  const getFocusedIDs = () => { return filteredItems.filter((o) => o[keyName] == focusedRowKey).map((item) => { return convertID ? convertID(item) : item[keyName]; }); };
31
54
  const renderTitle = () => { return title ? `${title} (${selectedRowCounter.length}/${filteredItems.length})` : SDKUI_Localizator.Select; };
32
55
  const doGetItems = (refreshCache) => {
@@ -5,7 +5,8 @@ interface ITMDataListItemViewerProps {
5
5
  value?: string | Date | number;
6
6
  viewMode?: DataListViewModes;
7
7
  showTooltip?: boolean;
8
+ width?: string;
8
9
  }
9
- declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip }: ITMDataListItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
10
+ declare const TMDataListItemViewer: ({ dataListId, value, viewMode, showTooltip, width }: ITMDataListItemViewerProps) => import("react/jsx-runtime").JSX.Element | null;
10
11
  export default TMDataListItemViewer;
11
12
  export declare const cellRenderDataListItem: (data: DataGridTypes.ColumnCellTemplateData, dataListId?: number, viewMode?: DataListViewModes) => import("react/jsx-runtime").JSX.Element;
@@ -5,7 +5,7 @@ import { SDKUI_Localizator } from '../../helper';
5
5
  import TMTooltip from '../base/TMTooltip';
6
6
  import { TMExceptionBoxManager } from '../base/TMPopUp';
7
7
  import { useDataListItem } from '../../hooks/useDataListItem';
8
- const TMDataListItemViewer = ({ dataListId, value, viewMode = DataListViewModes.ImageAndDescription, showTooltip = true }) => {
8
+ const TMDataListItemViewer = ({ dataListId, value, viewMode = DataListViewModes.ImageAndDescription, showTooltip = true, width = '100%' }) => {
9
9
  const { loadDataListsAsync, getDataListItem, renderDataListCell, convertToDataListValue } = useDataListItem();
10
10
  const [dataListItem, setDataListItem] = useState(undefined);
11
11
  useEffect(() => {
@@ -36,7 +36,7 @@ const TMDataListItemViewer = ({ dataListId, value, viewMode = DataListViewModes.
36
36
  return null;
37
37
  }
38
38
  const content = renderDataListCell(value, dataListId, viewMode);
39
- return showTooltip ? (_jsx(TMTooltip, { content: dataListItem ? dataListItem.value : SDKUI_Localizator.ValueNotPresent, parentStyle: { width: '100%' }, childStyle: { width: '100%' }, children: content })) : content;
39
+ return showTooltip ? (_jsx(TMTooltip, { content: dataListItem ? dataListItem.value : SDKUI_Localizator.ValueNotPresent, parentStyle: { width }, childStyle: { width }, children: content })) : content;
40
40
  };
41
41
  export default TMDataListItemViewer;
42
42
  export const cellRenderDataListItem = (data, dataListId, viewMode) => {
package/package.json CHANGED
@@ -1,57 +1,57 @@
1
- {
2
- "name": "@topconsultnpm/sdkui-react",
3
- "version": "6.21.0-dev1.36",
4
- "description": "",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1",
7
- "clean": "powershell Remove-Item lib/ -recurse",
8
- "copy-files": "copyfiles -u 1 src/assets/*.* src/assets/ImageLibrary/*.* src/assets/thumbnails/*.* src/assets/IconsS4t/*.* src/assets/Metadata/*.* src/css/tm-sdkui.css lib/",
9
- "tm-build": "npm run clean && tsc && npm run copy-files",
10
- "tm-watch": "tsc -w",
11
- "tm-publish": "npm publish --tag latest",
12
- "tm-publish_wl": "npm publish",
13
- "storybook": "storybook dev -p 6006",
14
- "build-storybook": "storybook build"
15
- },
16
- "author": "TopConsult",
17
- "license": "ISC",
18
- "devDependencies": {
19
- "@chromatic-com/storybook": "^5.1.2",
20
- "@storybook/addon-docs": "^10.3.5",
21
- "@storybook/addon-onboarding": "^10.3.5",
22
- "@storybook/react-vite": "^10.3.5",
23
- "@types/htmlparser2": "^3.10.7",
24
- "@types/node": "^24.12.2",
25
- "@types/react": "^18.3.3",
26
- "@types/react-dom": "^18.3.3",
27
- "copyfiles": "^2.4.1",
28
- "esbuild": "^0.25.0",
29
- "react": "^18.3.1",
30
- "react-dom": "^18.3.1",
31
- "storybook": "^10.3.5",
32
- "typescript": "^5.9.3",
33
- "vite": "^6.1.1"
34
- },
35
- "main": "dist/cjs/index.js",
36
- "types": "./index.d.ts",
37
- "module": "lib/esm/index.js",
38
- "files": [
39
- "dist",
40
- "lib"
41
- ],
42
- "dependencies": {
43
- "@topconsultnpm/sdk-ts": "6.21.0-dev1.4",
44
- "buffer": "^6.0.3",
45
- "devextreme": "^25.2.6",
46
- "devextreme-react": "^25.2.6",
47
- "exceljs": "^4.4.0",
48
- "htmlparser2": "^10.0.0",
49
- "pdfjs-dist": "5.4.296",
50
- "react-pdf": "^10.3.0",
51
- "react-router-dom": "^6.15.0",
52
- "styled-components": "^6.1.1"
53
- },
54
- "overrides": {
55
- "esbuild": "^0.25.0"
56
- }
57
- }
1
+ {
2
+ "name": "@topconsultnpm/sdkui-react",
3
+ "version": "6.21.0-dev1.38",
4
+ "description": "",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1",
7
+ "clean": "powershell Remove-Item lib/ -recurse",
8
+ "copy-files": "copyfiles -u 1 src/assets/*.* src/assets/ImageLibrary/*.* src/assets/thumbnails/*.* src/assets/IconsS4t/*.* src/assets/Metadata/*.* src/css/tm-sdkui.css lib/",
9
+ "tm-build": "npm run clean && tsc && npm run copy-files",
10
+ "tm-watch": "tsc -w",
11
+ "tm-publish": "npm publish --tag latest",
12
+ "tm-publish_wl": "npm publish",
13
+ "storybook": "storybook dev -p 6006",
14
+ "build-storybook": "storybook build"
15
+ },
16
+ "author": "TopConsult",
17
+ "license": "ISC",
18
+ "devDependencies": {
19
+ "@chromatic-com/storybook": "^5.1.2",
20
+ "@storybook/addon-docs": "^10.3.5",
21
+ "@storybook/addon-onboarding": "^10.3.5",
22
+ "@storybook/react-vite": "^10.3.5",
23
+ "@types/htmlparser2": "^3.10.7",
24
+ "@types/node": "^24.12.2",
25
+ "@types/react": "^18.3.3",
26
+ "@types/react-dom": "^18.3.3",
27
+ "copyfiles": "^2.4.1",
28
+ "esbuild": "^0.25.0",
29
+ "react": "^18.3.1",
30
+ "react-dom": "^18.3.1",
31
+ "storybook": "^10.3.5",
32
+ "typescript": "^5.9.3",
33
+ "vite": "^6.1.1"
34
+ },
35
+ "main": "dist/cjs/index.js",
36
+ "types": "./index.d.ts",
37
+ "module": "lib/esm/index.js",
38
+ "files": [
39
+ "dist",
40
+ "lib"
41
+ ],
42
+ "dependencies": {
43
+ "@topconsultnpm/sdk-ts": "6.21.0-dev1.5",
44
+ "buffer": "^6.0.3",
45
+ "devextreme": "^25.2.6",
46
+ "devextreme-react": "^25.2.6",
47
+ "exceljs": "^4.4.0",
48
+ "htmlparser2": "^10.0.0",
49
+ "pdfjs-dist": "5.4.296",
50
+ "react-pdf": "^10.3.0",
51
+ "react-router-dom": "^6.15.0",
52
+ "styled-components": "^6.1.1"
53
+ },
54
+ "overrides": {
55
+ "esbuild": "^0.25.0"
56
+ }
57
+ }