@zat-design/sisyphus-react 4.5.6-beta.2 → 4.5.6-beta.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.
@@ -5,12 +5,22 @@
5
5
  export const getMenuRoute = menuItem => {
6
6
  return menuItem.redirectUrl || menuItem.url || '';
7
7
  };
8
+ export const hasRelationKey = relationKey => relationKey !== undefined && relationKey !== null && relationKey !== '';
9
+ export const findExistingTab = (tabsList, menuItem) => {
10
+ if (hasRelationKey(menuItem.relationKey)) {
11
+ return tabsList.find(tab => tab.relationKey === menuItem.relationKey || tab.menuItem?.relationKey === menuItem.relationKey);
12
+ }
13
+ const menuRoute = getMenuRoute(menuItem);
14
+ return tabsList.find(tab => tab.menuItem?.code === menuItem.code || tab.url === menuRoute);
15
+ };
8
16
 
9
17
  /**
10
18
  * 根据菜单项生成TabItem
11
19
  */
12
20
  export const createTabFromMenu = (menuItem, index = 0) => {
13
21
  const route = getMenuRoute(menuItem);
22
+ // pinned 优先取菜单显式声明,否则由 closable===false 推导(声明式固定标签)
23
+ const pinned = menuItem.pinned ?? menuItem.closable === false;
14
24
  const result = {
15
25
  id: String(menuItem.id || menuItem.code || menuItem.url || index),
16
26
  code: menuItem.code,
@@ -18,8 +28,10 @@ export const createTabFromMenu = (menuItem, index = 0) => {
18
28
  title: menuItem.name,
19
29
  url: route,
20
30
  closable: menuItem.closable !== false,
31
+ pinned,
21
32
  menuItem,
22
- icon: menuItem.icon || menuItem.imgUrl
33
+ icon: menuItem.icon || menuItem.imgUrl,
34
+ relationKey: menuItem.relationKey
23
35
  };
24
36
  return result;
25
37
  };
@@ -115,4 +127,97 @@ export const canOpenAsTab = menuItem => {
115
127
  if (!menuItem) return false;
116
128
  if (!(menuItem.url || menuItem.redirectUrl)) return false;
117
129
  return isLeafMenuItem(menuItem);
130
+ };
131
+
132
+ /**
133
+ * 推导标签页是否处于固定状态。
134
+ * pinned 为本质状态;未显式设置 pinned 的旧缓存标签,用 closable===false 推导。
135
+ */
136
+ export const derivePinned = tab => tab.pinned ?? tab.closable === false;
137
+
138
+ /**
139
+ * 分区边界:第一个「非固定标签」的下标,等于固定标签的数量。
140
+ * 约定固定区始终排在普通区左侧,故边界即两区分界点。
141
+ */
142
+ export const getPinnedBoundary = tabs => {
143
+ const index = tabs.findIndex(tab => !derivePinned(tab));
144
+ return index === -1 ? tabs.length : index;
145
+ };
146
+
147
+ /**
148
+ * 不依赖外部库的数组移动(immutable)。
149
+ * from/to 越界时返回原数组的浅拷贝。
150
+ */
151
+ const moveItem = (list, from, to) => {
152
+ const result = [...list];
153
+ if (from < 0 || from >= result.length || to < 0 || to >= result.length) return result;
154
+ const [removed] = result.splice(from, 1);
155
+ result.splice(to, 0, removed);
156
+ return result;
157
+ };
158
+
159
+ /**
160
+ * 固定标签:将目标标签设为 pinned=true / closable=false,并移动到固定区末尾。
161
+ * - 已固定则幂等(顺序不变)
162
+ * - tabId 不存在时返回原数组引用
163
+ */
164
+ export const pinTab = (tabs, tabId) => {
165
+ const index = tabs.findIndex(tab => tab.id === tabId);
166
+ if (index === -1) return tabs;
167
+ if (derivePinned(tabs[index])) return tabs;
168
+ const pinnedTab = {
169
+ ...tabs[index],
170
+ pinned: true,
171
+ closable: false
172
+ };
173
+ // 移除目标后计算固定区末尾位置(= 剩余标签中的固定数量)
174
+ const rest = tabs.filter((_, i) => i !== index);
175
+ const insertAt = getPinnedBoundary(rest);
176
+ return [...rest.slice(0, insertAt), pinnedTab, ...rest.slice(insertAt)];
177
+ };
178
+
179
+ /**
180
+ * 取消固定:将目标标签设为 pinned=false / closable=true,并移动到普通区最前
181
+ * (即剩余固定区之后的第一位)。
182
+ * - 已是普通标签则幂等(顺序不变)
183
+ * - tabId 不存在时返回原数组引用
184
+ */
185
+ export const unpinTab = (tabs, tabId) => {
186
+ const index = tabs.findIndex(tab => tab.id === tabId);
187
+ if (index === -1) return tabs;
188
+ if (!derivePinned(tabs[index])) return tabs;
189
+ const normalTab = {
190
+ ...tabs[index],
191
+ pinned: false,
192
+ closable: true
193
+ };
194
+ const rest = tabs.filter((_, i) => i !== index);
195
+ const insertAt = getPinnedBoundary(rest);
196
+ return [...rest.slice(0, insertAt), normalTab, ...rest.slice(insertAt)];
197
+ };
198
+
199
+ /**
200
+ * 约束重排:在普通 arrayMove 基础上,钳制落点以维持「固定区在左、普通区在右」不变量。
201
+ * - 被拖动的普通标签:落点钳制到 >= boundary(不进固定区)
202
+ * - 被拖动的固定标签:落点钳制到 <= boundary-1(不出固定区)
203
+ * - 钳制后落点等于原位、或 id 相同/无效时,返回原数组引用(避免无效更新)
204
+ */
205
+ export const reorderWithPinConstraint = (tabs, activeId, overId) => {
206
+ if (activeId === overId) return tabs;
207
+ const activeIndex = tabs.findIndex(tab => tab.id === activeId);
208
+ const overIndex = tabs.findIndex(tab => tab.id === overId);
209
+ if (activeIndex === -1 || overIndex === -1) return tabs;
210
+ const boundary = getPinnedBoundary(tabs);
211
+ const activePinned = derivePinned(tabs[activeIndex]);
212
+ let targetIndex = overIndex;
213
+ if (activePinned) {
214
+ // 固定标签只能落在固定区内:[0, boundary-1]
215
+ const maxIndex = boundary - 1;
216
+ if (targetIndex > maxIndex) targetIndex = maxIndex;
217
+ } else {
218
+ // 普通标签只能落在普通区内:[boundary, length-1]
219
+ if (targetIndex < boundary) targetIndex = boundary;
220
+ }
221
+ if (targetIndex === activeIndex) return tabs;
222
+ return moveItem(tabs, activeIndex, targetIndex);
118
223
  };
@@ -129,6 +129,10 @@ export interface MenusType {
129
129
  * @default "_self"
130
130
  */
131
131
  target?: '_blank' | '_parent' | '_self' | '_top';
132
+ /**
133
+ * @description 标签页关联键;相同关联键的业务详情重复打开时复用已有标签页
134
+ */
135
+ relationKey?: string | number;
132
136
  /**
133
137
  * @description 允许扩展字段
134
138
  */
@@ -324,6 +328,11 @@ export interface TabItem {
324
328
  * @description 是否可关闭
325
329
  */
326
330
  closable: boolean;
331
+ /**
332
+ * @description 是否固定标签(本质状态)。固定后不可关闭并排入左侧固定区;
333
+ * closable 为其派生结果(pinned 时 closable=false)。未设置时以 closable===false 推导。
334
+ */
335
+ pinned?: boolean;
327
336
  /**
328
337
  * @description 关联菜单项
329
338
  */
@@ -336,6 +345,10 @@ export interface TabItem {
336
345
  * @description 图标
337
346
  */
338
347
  icon?: ReactNode | string;
348
+ /**
349
+ * @description 标签页关联键;用于业务详情页复用已有标签页
350
+ */
351
+ relationKey?: string | number;
339
352
  }
340
353
  export interface TabsState {
341
354
  tabsList: TabItem[];
@@ -361,6 +374,10 @@ export interface AddTabParams {
361
374
  * @description 额外的业务数据
362
375
  */
363
376
  extra?: Record<string, any>;
377
+ /**
378
+ * @description 标签页关联键;相同关联键的业务详情重复打开时复用已有标签页
379
+ */
380
+ relationKey?: string | number;
364
381
  }
365
382
  /**
366
383
  * @description 添加标签页的选项
@@ -397,6 +414,10 @@ export interface UpdateTabParams {
397
414
  * @description 是否可关闭
398
415
  */
399
416
  closable?: boolean;
417
+ /**
418
+ * @description 是否固定标签(本质状态,driven closable)
419
+ */
420
+ pinned?: boolean;
400
421
  }
401
422
  /**
402
423
  * @description 获取标签页信息返回值
@@ -308,7 +308,9 @@
308
308
  // 高度动画:CSS Grid 技巧,支持不定高度平滑过渡
309
309
  display: grid;
310
310
  grid-template-rows: 0fr;
311
- transition: margin-left 0.3s cubic-bezier(0.2, 0, 0, 1), grid-template-rows 0.3s cubic-bezier(0.4, 0, 0.2, 1);
311
+ transition:
312
+ margin-left 0.3s cubic-bezier(0.2, 0, 0, 1),
313
+ grid-template-rows 0.3s cubic-bezier(0.4, 0, 0.2, 1);
312
314
 
313
315
  // 菜单展开时与内容区同步右移
314
316
  &.tabs-menu-open {
@@ -383,6 +385,20 @@
383
385
  border-radius: 0;
384
386
  padding-top: var(--zaui-space-size-md, 16px);
385
387
  border-top-right-radius: var(--zaui-border-radius, 8px);
388
+
389
+ .pro-layout-tabs-content {
390
+ > .tab-pane {
391
+ > .pro-header.pro-header-no-describe:first-child {
392
+ padding: 0 !important;
393
+
394
+ .pro-header-title,
395
+ .pro-header-top {
396
+ margin: 0;
397
+ padding: 0;
398
+ }
399
+ }
400
+ }
401
+ }
386
402
  }
387
403
  }
388
404
 
@@ -7,6 +7,7 @@ import { CheckOutlined } from '@ant-design/icons';
7
7
  import { ReactSVG } from 'react-svg';
8
8
  import { isEmpty, isEllipsisActive } from "../../../utils";
9
9
  import copySvg from "../../../assets/copy.svg";
10
+ import locale from "../../../locale";
10
11
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
12
  const {
12
13
  Paragraph,
@@ -198,7 +199,7 @@ const RenderColumn = props => {
198
199
  className: "drag-icon",
199
200
  src: copySvg
200
201
  }, "copy-icon"), /*#__PURE__*/_jsx(CheckOutlined, {}, "copied-icon")],
201
- tooltips: ['复制', '复制成功']
202
+ tooltips: locale.ProHeader.copyTooltips
202
203
  },
203
204
  children: node
204
205
  })
@@ -9,6 +9,7 @@ import WORD from "../style/icon-word.png";
9
9
  import lookSvg from "../../assets/look.svg";
10
10
  import deleteSvg from "../../assets/delete.svg";
11
11
  import downloadSvg from "../../assets/download.svg";
12
+ import locale from "../../locale";
12
13
 
13
14
  /**
14
15
  * @description: b 转成 Kb
@@ -119,10 +120,10 @@ const FileItem = props => {
119
120
  src: lookSvg
120
121
  })
121
122
  }), _showRemoveIcon && !disabled && (isConfirmDelete ? /*#__PURE__*/_jsx(Popconfirm, {
122
- title: "\u786E\u5B9A\u5220\u9664?",
123
+ title: locale.ProUpload.deleteConfirmTitle,
123
124
  onConfirm: _onRemove,
124
- okText: "\u786E\u8BA4",
125
- cancelText: "\u53D6\u6D88",
125
+ okText: locale.ProDrawerForm.confirm,
126
+ cancelText: locale.ProDrawerForm.cancel,
126
127
  children: /*#__PURE__*/_jsx(Button, {
127
128
  type: "link",
128
129
  className: "file-action-item",
@@ -10,6 +10,12 @@ declare const _default: {
10
10
  tipAlt: string;
11
11
  closeAlt: string;
12
12
  tabMaxLimitMessage: string;
13
+ tabMenuClose: string;
14
+ tabMenuCloseOthers: string;
15
+ tabMenuCloseRight: string;
16
+ tabMenuCloseAll: string;
17
+ tabMenuPin: string;
18
+ tabMenuUnpin: string;
13
19
  };
14
20
  ProHeader: {
15
21
  versionTitle: string;
@@ -18,6 +24,8 @@ declare const _default: {
18
24
  confirmTitle: string;
19
25
  backText: string;
20
26
  copyTooltips: string[];
27
+ itemsCountPrefix: string;
28
+ itemsSeparator: string;
21
29
  };
22
30
  ProDownload: {
23
31
  errorMessage: string;
@@ -39,6 +47,8 @@ declare const _default: {
39
47
  formListConfirmMessage: string;
40
48
  noData: string;
41
49
  moreItems: string;
50
+ confirmTitle: string;
51
+ confirmContent: string;
42
52
  };
43
53
  ProAction: {
44
54
  errorMessage: string;
@@ -80,6 +90,7 @@ declare const _default: {
80
90
  view: string;
81
91
  delete: string;
82
92
  download: string;
93
+ deleteConfirmTitle: string;
83
94
  };
84
95
  ProStep: {
85
96
  catalogue: string;
@@ -4,45 +4,55 @@ export default {
4
4
  confirm: 'Confirm',
5
5
  cancel: 'Cancel',
6
6
  isSureClose: 'Confirm to close the current page',
7
- secondTipsWhenSave: 'Close the current page content will not be saved, need to click the Save button to save'
7
+ secondTipsWhenSave: 'Unsaved changes will be lost. Click Save to keep your changes.'
8
8
  },
9
9
  ProLayout: {
10
10
  tipAlt: 'Tips',
11
11
  closeAlt: 'Close',
12
- tabMaxLimitMessage: 'Menu tabs cannot exceed the maximum limit of {max}'
12
+ tabMaxLimitMessage: 'Menu tabs cannot exceed the maximum limit of {max}',
13
+ tabMenuClose: 'Close',
14
+ tabMenuCloseOthers: 'Close others',
15
+ tabMenuCloseRight: 'Close tabs to the right',
16
+ tabMenuCloseAll: 'Close all',
17
+ tabMenuPin: 'Pin tab',
18
+ tabMenuUnpin: 'Unpin tab'
13
19
  },
14
20
  ProHeader: {
15
21
  versionTitle: 'Version number',
16
22
  confirm: 'Confirm',
17
23
  cancel: 'Cancel',
18
24
  confirmTitle: 'Confirm return?',
19
- backText: 'Return',
20
- copyTooltips: ['Copy', 'Copy successfully']
25
+ backText: 'Back',
26
+ copyTooltips: ['Copy', 'Copied successfully'],
27
+ itemsCountPrefix: '{count} items in total, ',
28
+ itemsSeparator: ', '
21
29
  },
22
30
  ProDownload: {
23
31
  errorMessage: 'Request failed!'
24
32
  },
25
33
  ProForm: {
26
34
  unfold: 'Unfold',
27
- packUp: 'PackUp',
35
+ packUp: 'Collapse',
28
36
  inputPlaceholder: 'Please enter',
29
37
  treeSelectPlaceholder: 'Please select',
30
38
  selectPlaceHolder: 'Please select',
31
39
  switchText: ['Yes', 'No'],
32
- ruleStartEndText: ['start value', 'end value'],
40
+ ruleStartEndText: ['Start value', 'End value'],
33
41
  search: 'Search',
34
42
  reset: 'Reset',
35
- ruleText: 'correct',
36
- completeText: 'enter in full',
43
+ ruleText: 'valid',
44
+ completeText: 'Please complete all fields',
37
45
  halfRuleText: 'Enter the value of ({total})',
38
46
  formListActions: ['Add', 'Delete', 'Copy', 'Move up', 'Move down', 'Add a new line', 'Click add'],
39
- formListConfirmMessage: 'Are you sure delete it?',
47
+ formListConfirmMessage: 'Are you sure you want to delete?',
40
48
  noData: 'No data',
41
- moreItems: '{count} more...'
49
+ moreItems: '{count} more...',
50
+ confirmTitle: 'Confirm action',
51
+ confirmContent: 'Are you sure you want to modify this field?'
42
52
  },
43
53
  ProAction: {
44
54
  errorMessage: 'The configuration config for ProAction must be data',
45
- defaultTitle: 'Are you sure delete it?'
55
+ defaultTitle: 'Are you sure you want to delete?'
46
56
  },
47
57
  ProTable: {
48
58
  noData: 'No data',
@@ -51,7 +61,7 @@ export default {
51
61
  transformResponseMsg: 'Please return the correct data type',
52
62
  deselect: 'Deselect',
53
63
  selectCurPage: 'Select the current page ({total} items)',
54
- selectAll: 'Select All ({total} items)',
64
+ selectAll: 'Select all ({total} items)',
55
65
  hasSelected: '{selectedNum} items selected',
56
66
  total: '{total} items in total'
57
67
  },
@@ -61,25 +71,26 @@ export default {
61
71
  },
62
72
  ProTree: {
63
73
  inputPlaceholder: 'Please enter',
64
- unExpand: 'Put it all away',
74
+ unExpand: 'Collapse all',
65
75
  expand: 'Expand all',
66
76
  all: 'Select all',
67
- emptyTips: "what you were looking for couldn't be found"
77
+ emptyTips: 'No results found'
68
78
  },
69
79
  ProUpload: {
70
80
  exampleTitle: 'View sample',
71
- errorInfoExt: 'Only {} format files are supported',
81
+ errorInfoExt: 'Supported file formats:',
72
82
  errorInfoSize: 'File size cannot exceed ',
73
83
  buttonText: 'Upload',
74
84
  draggerSelect: 'Select file',
75
85
  draggerDelete: 'Delete',
76
- draggerTips: 'Click or drag file to this area to upload',
77
- draggerBtnTxt: 'Click to upload',
78
- draggerFileExt: 'Support for extensions',
79
- draggerLimitless: 'Limitless',
86
+ draggerTips: 'Click or drag file to this area to ',
87
+ draggerBtnTxt: 'upload',
88
+ draggerFileExt: 'Supported extensions',
89
+ draggerLimitless: 'No limit',
80
90
  view: 'View',
81
91
  delete: 'Delete',
82
- download: 'Download'
92
+ download: 'Download',
93
+ deleteConfirmTitle: 'Are you sure you want to delete?'
83
94
  },
84
95
  ProStep: {
85
96
  catalogue: 'Catalogue'
@@ -138,27 +149,27 @@ export default {
138
149
  clearAll: 'Clear all',
139
150
  checkNumber: '{num} items selected',
140
151
  noFinal: 'Oops, the content you are looking for is not found.',
141
- specifyMode: ['all', 'specify']
152
+ specifyMode: ['All', 'Specify']
142
153
  },
143
154
  ProTimeLimit: {
144
- foreverText: 'long term'
155
+ foreverText: 'Permanent'
145
156
  },
146
157
  ProThemeTools: {
147
- title: 'Global style customization ',
148
- copySuccess: 'Copy success! ',
158
+ title: 'Global style customization',
159
+ copySuccess: 'Copied successfully!',
149
160
  layout: 'Layout',
150
- layoutMode: ['Compact ', 'Regular', 'Loose'],
161
+ layoutMode: ['Compact', 'Regular', 'Loose'],
151
162
  themeColor: 'Theme color',
152
163
  formLabel: 'Form label',
153
164
  bigText: 'Large text mode',
154
- flex: ['Left align ', 'Right align'],
155
- switchText: ['on', 'off'],
165
+ flex: ['Left align', 'Right align'],
166
+ switchText: ['On', 'Off'],
156
167
  tableBorder: 'Table border',
157
- tableStripe: 'Table zebra',
168
+ tableStripe: 'Table zebra stripe',
158
169
  reset: 'Reset'
159
170
  },
160
171
  ProViewer: {
161
- preview: 'preview'
172
+ preview: 'Preview'
162
173
  },
163
174
  ProIcon: {
164
175
  language: 'en'
@@ -166,10 +177,10 @@ export default {
166
177
  RangePicker: {
167
178
  ranges: {
168
179
  today: 'Today',
169
- lastWeek: 'Last Week',
170
- lastMonth: 'Last Month',
171
- last3Months: 'Last 3 Months',
172
- lastYear: 'Last Year'
180
+ lastWeek: 'Last week',
181
+ lastMonth: 'Last month',
182
+ last3Months: 'Last 3 months',
183
+ lastYear: 'Last year'
173
184
  }
174
185
  }
175
186
  };
@@ -10,6 +10,12 @@ declare const _default: {
10
10
  tipAlt: string;
11
11
  closeAlt: string;
12
12
  tabMaxLimitMessage: string;
13
+ tabMenuClose: string;
14
+ tabMenuCloseOthers: string;
15
+ tabMenuCloseRight: string;
16
+ tabMenuCloseAll: string;
17
+ tabMenuPin: string;
18
+ tabMenuUnpin: string;
13
19
  };
14
20
  ProHeader: {
15
21
  versionTitle: string;
@@ -18,6 +24,8 @@ declare const _default: {
18
24
  cancel: string;
19
25
  backText: string;
20
26
  copyTooltips: string[];
27
+ itemsCountPrefix: string;
28
+ itemsSeparator: string;
21
29
  };
22
30
  ProDownload: {
23
31
  errorMessage: string;
@@ -39,6 +47,8 @@ declare const _default: {
39
47
  formListConfirmMessage: string;
40
48
  noData: string;
41
49
  moreItems: string;
50
+ confirmTitle: string;
51
+ confirmContent: string;
42
52
  };
43
53
  ProAction: {
44
54
  errorMessage: string;
@@ -80,6 +90,7 @@ declare const _default: {
80
90
  view: string;
81
91
  delete: string;
82
92
  download: string;
93
+ deleteConfirmTitle: string;
83
94
  };
84
95
  ProStep: {
85
96
  catalogue: string;
@@ -9,7 +9,13 @@ export default {
9
9
  ProLayout: {
10
10
  tipAlt: '提示',
11
11
  closeAlt: '关闭',
12
- tabMaxLimitMessage: '菜单tab不能超过上限{max}'
12
+ tabMaxLimitMessage: '菜单tab不能超过上限{max}',
13
+ tabMenuClose: '关闭',
14
+ tabMenuCloseOthers: '关闭其他',
15
+ tabMenuCloseRight: '关闭右侧标签页',
16
+ tabMenuCloseAll: '关闭全部',
17
+ tabMenuPin: '固定标签',
18
+ tabMenuUnpin: '取消固定'
13
19
  },
14
20
  ProHeader: {
15
21
  versionTitle: '版本号',
@@ -17,7 +23,9 @@ export default {
17
23
  confirm: '确定',
18
24
  cancel: '取消',
19
25
  backText: '返回',
20
- copyTooltips: ['复制', '复制成功']
26
+ copyTooltips: ['复制', '复制成功'],
27
+ itemsCountPrefix: '共{count}个,',
28
+ itemsSeparator: ' 、'
21
29
  },
22
30
  ProDownload: {
23
31
  errorMessage: '请求失败!'
@@ -38,7 +46,9 @@ export default {
38
46
  formListActions: ['新增', '删除', '复制', '上移', '下移', '新增一行', '点击添加'],
39
47
  formListConfirmMessage: '确认删除吗?',
40
48
  noData: '暂无数据',
41
- moreItems: '更多{count}项...'
49
+ moreItems: '更多{count}项...',
50
+ confirmTitle: '操作提示',
51
+ confirmContent: '确定要修改该字段吗?'
42
52
  },
43
53
  ProAction: {
44
54
  errorMessage: 'ProAction 配置 config 必须为数据',
@@ -79,7 +89,8 @@ export default {
79
89
  draggerLimitless: '无限制',
80
90
  view: '查看',
81
91
  delete: '删除',
82
- download: '下载'
92
+ download: '下载',
93
+ deleteConfirmTitle: '确定删除?'
83
94
  },
84
95
  ProStep: {
85
96
  catalogue: '目录'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zat-design/sisyphus-react",
3
- "version": "4.5.6-beta.2",
3
+ "version": "4.5.6-beta.4",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "es",
@@ -66,6 +66,7 @@
66
66
  "lint-staged:js": "eslint --ext .js,.jsx,.ts,.tsx --ignore-pattern '**/__tests__/**' --ignore-pattern '**/*.test.*' --ignore-pattern '**/*.spec.*'",
67
67
  "code-standards:check": "node ./scripts/code-standards-check.mjs",
68
68
  "check:types": "node ./scripts/check-public-types.mjs",
69
+ "check:locale": "node ./scripts/check-locale.mjs",
69
70
  "commit-msg:format": "node ./scripts/format-commit-msg.mjs",
70
71
  "lint:fix": "eslint --fix --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
71
72
  "lint:js": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
@@ -122,7 +123,7 @@
122
123
  "lodash": "^4.17.21",
123
124
  "react-intersection-observer": "^9.13.0",
124
125
  "react-resizable": "^3.0.5",
125
- "react-svg": "^15.1.7"
126
+ "react-svg": "^17.2.4"
126
127
  },
127
128
  "peerDependencies": {
128
129
  "@ant-design/icons": ">=6.0.0",