@hi-ui/hiui 4.16.4 → 4.17.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @hi-ui/hiui
2
2
 
3
+ ## 4.17.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#3410](https://github.com/XiaoMi/hiui/pull/3410) [`b2de718e9`](https://github.com/XiaoMi/hiui/commit/b2de718e9fd12dbe8fa1d762c6924696c19bc924) Thanks [@zyprepare](https://github.com/zyprepare)! - feat(locale-context): 增加语言包 & 增加 merge 方法
8
+
9
+ ### Patch Changes
10
+
11
+ - [#3407](https://github.com/XiaoMi/hiui/pull/3407) [`4a1444965`](https://github.com/XiaoMi/hiui/commit/4a1444965bdeeeb12333e43a05caa2e76d74eb47) Thanks [@zyprepare](https://github.com/zyprepare)! - perf(cascader): 体验优化:每次打开菜单时自动定位到已选节点 (#3406)
12
+
13
+ - [#3409](https://github.com/XiaoMi/hiui/pull/3409) [`467701f`](https://github.com/XiaoMi/hiui/commit/467701f925d0bb0709e3fd17ca6e178fa1ca01c6) Thanks [@zyprepare](https://github.com/zyprepare)! - refactor(check-tree-select): 搜索和全选勾选逻辑调整,过滤后的结果勾选态还是按照全量数据进行计算,全选态根据过滤后的数据进行计算 (#3398)
14
+
15
+ - Updated dependencies [[`b2de718e9`](https://github.com/XiaoMi/hiui/commit/b2de718e9fd12dbe8fa1d762c6924696c19bc924), [`4a1444965`](https://github.com/XiaoMi/hiui/commit/4a1444965bdeeeb12333e43a05caa2e76d74eb47), [`467701f`](https://github.com/XiaoMi/hiui/commit/467701f925d0bb0709e3fd17ca6e178fa1ca01c6)]:
16
+ - @hi-ui/provider@4.2.0
17
+ - @hi-ui/core@4.0.11
18
+ - @hi-ui/cascader@4.5.1
19
+ - @hi-ui/check-tree-select@4.7.6
20
+
21
+ ## 4.16.5
22
+
23
+ ### Patch Changes
24
+
25
+ - [#3382](https://github.com/XiaoMi/hiui/pull/3382) [`144de50f5`](https://github.com/XiaoMi/hiui/commit/144de50f528c834942d1d04467f7234c1710f758) Thanks [@zyprepare](https://github.com/zyprepare)! - fix(table): 统计行加上表头分组情况的处理 (#3381)
26
+
27
+ - [#3380](https://github.com/XiaoMi/hiui/pull/3380) [`9808ab271`](https://github.com/XiaoMi/hiui/commit/9808ab27177458431767602538ee52d1f2a3a9e6) Thanks [@zyprepare](https://github.com/zyprepare)! - fix(preview): prevent movement on right-click in Preview component (#3379)
28
+
29
+ - Updated dependencies [[`144de50f5`](https://github.com/XiaoMi/hiui/commit/144de50f528c834942d1d04467f7234c1710f758), [`d5b4363`](https://github.com/XiaoMi/hiui/commit/d5b4363888ebc0869a70482de2eb114326ee4d3c), [`9808ab271`](https://github.com/XiaoMi/hiui/commit/9808ab27177458431767602538ee52d1f2a3a9e6)]:
30
+ - @hi-ui/table@4.12.2
31
+ - @hi-ui/core@4.0.10
32
+ - @hi-ui/preview@4.2.2
33
+
3
34
  ## 4.16.4
4
35
 
5
36
  ### Patch Changes
@@ -34,15 +34,16 @@ var LocaleProvider = function LocaleProvider(_ref) {
34
34
  locale = _ref$locale === void 0 ? DEFAULT_LOCALE : _ref$locale,
35
35
  languages = _ref.languages;
36
36
  var get = React.useMemo(function () {
37
- var languageData = _typeof__default["default"](languages) === 'object' ? languages : USER_LANGUAGES_TABLES[locale] || index["default"][locale];
37
+ var languageData = _typeof__default["default"](languages) === 'object' ? languages : USER_LANGUAGES_TABLES[locale] || index.BUILT_IN_LOCALES[locale];
38
38
  if (!languageData) {
39
- index$1.invariant(false, "Will use " + DEFAULT_LOCALE + " as default locale because of the " + locale + " language package is missing.");
40
- languageData = index["default"][DEFAULT_LOCALE];
39
+ index$1.invariant(false, "Language package for \"" + locale + "\" is missing. Please import and pass it via the \"languages\" prop. Falling back to " + DEFAULT_LOCALE + ".");
40
+ languageData = index.BUILT_IN_LOCALES[DEFAULT_LOCALE];
41
41
  }
42
42
  return LocaleContext.getLanguage(languageData);
43
43
  }, [locale, languages]);
44
44
  var providedValue = React.useMemo(function () {
45
- return Object.assign(Object.assign({}, index["default"][locale]), {
45
+ var localeData = USER_LANGUAGES_TABLES[locale] || index.BUILT_IN_LOCALES[locale] || {};
46
+ return Object.assign(Object.assign({}, localeData), {
46
47
  get: get,
47
48
  locale: locale
48
49
  });
@@ -54,6 +55,19 @@ var LocaleProvider = function LocaleProvider(_ref) {
54
55
  if (index$1.__DEV__) {
55
56
  LocaleProvider.displayName = 'LocaleProvider';
56
57
  }
58
+ /**
59
+ * 使用完整的自定义语言包扩展国际化
60
+ * @param locale - 地区标识
61
+ * @param languages - 完整的语言包对象
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * LocaleProvider.extends('pt-BR', {
66
+ * timePicker: { ok: 'OK', to: '-', now: 'Agora' },
67
+ * // ... 其他翻译
68
+ * })
69
+ * ```
70
+ */
57
71
  var extendsLanguage = function extendsLanguage(locale, languages) {
58
72
  if (!languages) {
59
73
  delete USER_LANGUAGES_TABLES[locale];
@@ -61,5 +75,48 @@ var extendsLanguage = function extendsLanguage(locale, languages) {
61
75
  USER_LANGUAGES_TABLES[locale] = languages;
62
76
  }
63
77
  };
78
+ /**
79
+ * 合并默认语言包和自定义翻译
80
+ * 支持基于现有的内置语言包进行部分覆盖
81
+ * @param baseLocale - 基础语言(如 'en-US')
82
+ * @param customLocale - 自定义地区标识
83
+ * @param overrides - 要覆盖的翻译对象(支持深度覆盖)
84
+ *
85
+ * @example
86
+ * ```tsx
87
+ * LocaleProvider.merge('en-US', 'en-GB', {
88
+ * modal: { confirmText: 'Confirm', cancelText: 'Cancel' }
89
+ * })
90
+ * ```
91
+ */
92
+ var mergeLanguage = function mergeLanguage(baseLocale, customLocale, overrides) {
93
+ var baseLanguage = USER_LANGUAGES_TABLES[baseLocale] || index.BUILT_IN_LOCALES[baseLocale] || index.BUILT_IN_LOCALES[DEFAULT_LOCALE];
94
+ if (!baseLanguage) {
95
+ index$1.invariant(false, "Base locale \"" + baseLocale + "\" is not found. Please use LocaleProvider.extends() to add it first.");
96
+ return;
97
+ }
98
+ // 深度合并
99
+ var merged = deepMerge(baseLanguage, overrides);
100
+ USER_LANGUAGES_TABLES[customLocale] = merged;
101
+ };
102
+ /**
103
+ * 深度合并对象
104
+ */
105
+ function deepMerge(target, source) {
106
+ var result = Object.assign({}, target);
107
+ for (var key in source) {
108
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
109
+ var sourceValue = source[key];
110
+ var targetValue = result[key];
111
+ if (sourceValue !== null && _typeof__default["default"](sourceValue) === 'object' && !Array.isArray(sourceValue) && targetValue !== null && _typeof__default["default"](targetValue) === 'object' && !Array.isArray(targetValue)) {
112
+ result[key] = deepMerge(targetValue, sourceValue);
113
+ } else {
114
+ result[key] = sourceValue;
115
+ }
116
+ }
117
+ }
118
+ return result;
119
+ }
64
120
  LocaleProvider["extends"] = extendsLanguage;
121
+ LocaleProvider.merge = mergeLanguage;
65
122
  exports.LocaleProvider = LocaleProvider;
@@ -58,6 +58,7 @@ var enUS = {
58
58
  timeperiod: ['Select Start Date Time', 'Select Start End Time'],
59
59
  timerange: ['Select Start Date Time', 'Select Start End Time']
60
60
  },
61
+ year: 'year',
61
62
  timePeriod: 'Period',
62
63
  hours: 'H',
63
64
  minutes: 'M',
@@ -26,11 +26,12 @@ var zhTW = require('./zh-TW.js');
26
26
  * This source code is licensed under the MIT license found in the
27
27
  * LICENSE file in the root directory of this source tree.
28
28
  */
29
- var localeMap = {
29
+ var BUILT_IN_LOCALES = {
30
30
  'zh-CN': zhCN["default"],
31
31
  'zh-Hans': zhCN["default"],
32
32
  'en-US': enUS["default"],
33
33
  'zh-HK': zhHK["default"],
34
34
  'zh-TW': zhTW["default"]
35
35
  };
36
- exports["default"] = localeMap;
36
+ exports.BUILT_IN_LOCALES = BUILT_IN_LOCALES;
37
+ exports["default"] = BUILT_IN_LOCALES;
@@ -27,6 +27,35 @@ var LocaleEnum = {
27
27
  ZH_HANS: 'zh-Hans',
28
28
  EN_US: 'en-US',
29
29
  ZH_HK: 'zh-HK',
30
- ZH_TW: 'zh-TW'
30
+ ZH_TW: 'zh-TW',
31
+ TH_TH: 'th-TH',
32
+ // European languages
33
+ PT_PT: 'pt-PT',
34
+ PT_BR: 'pt-BR',
35
+ FR_FR: 'fr-FR',
36
+ DE_DE: 'de-DE',
37
+ ES_ES: 'es-ES',
38
+ IT_IT: 'it-IT',
39
+ NL_NL: 'nl-NL',
40
+ EL_GR: 'el-GR',
41
+ CS_CZ: 'cs-CZ',
42
+ DA_DK: 'da-DK',
43
+ FI_FI: 'fi-FI',
44
+ TR_TR: 'tr-TR',
45
+ // Asian languages
46
+ JA_JP: 'ja-JP',
47
+ KO_KR: 'ko-KR',
48
+ VI_VN: 'vi-VN',
49
+ // Caucasian & Central Asian languages
50
+ HY_AM: 'hy-AM',
51
+ AZ_AZ: 'az-AZ',
52
+ RU_RU: 'ru-RU',
53
+ KA_GE: 'ka-GE',
54
+ UZ_UZ: 'uz-UZ',
55
+ // Balkan languages
56
+ BS_BA: 'bs-BA',
57
+ BG_BG: 'bg-BG',
58
+ // South Asian languages
59
+ UR_PK: 'ur-PK'
31
60
  };
32
61
  exports.LocaleEnum = LocaleEnum;
@@ -11,7 +11,7 @@ import _typeof from '@babel/runtime/helpers/esm/typeof';
11
11
  import React, { useMemo } from 'react';
12
12
  import { invariant, __DEV__ } from '../../../../utils/env/lib/esm/index.js';
13
13
  import { getLanguage, LocaleContext } from './LocaleContext.js';
14
- import localeMap from './locale/index.js';
14
+ import { BUILT_IN_LOCALES } from './locale/index.js';
15
15
  var DEFAULT_LOCALE = 'zh-CN';
16
16
  // 自定义语言包注册表
17
17
  var USER_LANGUAGES_TABLES = {};
@@ -21,15 +21,16 @@ var LocaleProvider = function LocaleProvider(_ref) {
21
21
  locale = _ref$locale === void 0 ? DEFAULT_LOCALE : _ref$locale,
22
22
  languages = _ref.languages;
23
23
  var get = useMemo(function () {
24
- var languageData = _typeof(languages) === 'object' ? languages : USER_LANGUAGES_TABLES[locale] || localeMap[locale];
24
+ var languageData = _typeof(languages) === 'object' ? languages : USER_LANGUAGES_TABLES[locale] || BUILT_IN_LOCALES[locale];
25
25
  if (!languageData) {
26
- invariant(false, "Will use " + DEFAULT_LOCALE + " as default locale because of the " + locale + " language package is missing.");
27
- languageData = localeMap[DEFAULT_LOCALE];
26
+ invariant(false, "Language package for \"" + locale + "\" is missing. Please import and pass it via the \"languages\" prop. Falling back to " + DEFAULT_LOCALE + ".");
27
+ languageData = BUILT_IN_LOCALES[DEFAULT_LOCALE];
28
28
  }
29
29
  return getLanguage(languageData);
30
30
  }, [locale, languages]);
31
31
  var providedValue = useMemo(function () {
32
- return Object.assign(Object.assign({}, localeMap[locale]), {
32
+ var localeData = USER_LANGUAGES_TABLES[locale] || BUILT_IN_LOCALES[locale] || {};
33
+ return Object.assign(Object.assign({}, localeData), {
33
34
  get: get,
34
35
  locale: locale
35
36
  });
@@ -41,6 +42,19 @@ var LocaleProvider = function LocaleProvider(_ref) {
41
42
  if (__DEV__) {
42
43
  LocaleProvider.displayName = 'LocaleProvider';
43
44
  }
45
+ /**
46
+ * 使用完整的自定义语言包扩展国际化
47
+ * @param locale - 地区标识
48
+ * @param languages - 完整的语言包对象
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * LocaleProvider.extends('pt-BR', {
53
+ * timePicker: { ok: 'OK', to: '-', now: 'Agora' },
54
+ * // ... 其他翻译
55
+ * })
56
+ * ```
57
+ */
44
58
  var extendsLanguage = function extendsLanguage(locale, languages) {
45
59
  if (!languages) {
46
60
  delete USER_LANGUAGES_TABLES[locale];
@@ -48,5 +62,48 @@ var extendsLanguage = function extendsLanguage(locale, languages) {
48
62
  USER_LANGUAGES_TABLES[locale] = languages;
49
63
  }
50
64
  };
65
+ /**
66
+ * 合并默认语言包和自定义翻译
67
+ * 支持基于现有的内置语言包进行部分覆盖
68
+ * @param baseLocale - 基础语言(如 'en-US')
69
+ * @param customLocale - 自定义地区标识
70
+ * @param overrides - 要覆盖的翻译对象(支持深度覆盖)
71
+ *
72
+ * @example
73
+ * ```tsx
74
+ * LocaleProvider.merge('en-US', 'en-GB', {
75
+ * modal: { confirmText: 'Confirm', cancelText: 'Cancel' }
76
+ * })
77
+ * ```
78
+ */
79
+ var mergeLanguage = function mergeLanguage(baseLocale, customLocale, overrides) {
80
+ var baseLanguage = USER_LANGUAGES_TABLES[baseLocale] || BUILT_IN_LOCALES[baseLocale] || BUILT_IN_LOCALES[DEFAULT_LOCALE];
81
+ if (!baseLanguage) {
82
+ invariant(false, "Base locale \"" + baseLocale + "\" is not found. Please use LocaleProvider.extends() to add it first.");
83
+ return;
84
+ }
85
+ // 深度合并
86
+ var merged = deepMerge(baseLanguage, overrides);
87
+ USER_LANGUAGES_TABLES[customLocale] = merged;
88
+ };
89
+ /**
90
+ * 深度合并对象
91
+ */
92
+ function deepMerge(target, source) {
93
+ var result = Object.assign({}, target);
94
+ for (var key in source) {
95
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
96
+ var sourceValue = source[key];
97
+ var targetValue = result[key];
98
+ if (sourceValue !== null && _typeof(sourceValue) === 'object' && !Array.isArray(sourceValue) && targetValue !== null && _typeof(targetValue) === 'object' && !Array.isArray(targetValue)) {
99
+ result[key] = deepMerge(targetValue, sourceValue);
100
+ } else {
101
+ result[key] = sourceValue;
102
+ }
103
+ }
104
+ }
105
+ return result;
106
+ }
51
107
  LocaleProvider["extends"] = extendsLanguage;
108
+ LocaleProvider.merge = mergeLanguage;
52
109
  export { LocaleProvider };
@@ -52,6 +52,7 @@ var enUS = {
52
52
  timeperiod: ['Select Start Date Time', 'Select Start End Time'],
53
53
  timerange: ['Select Start Date Time', 'Select Start End Time']
54
54
  },
55
+ year: 'year',
55
56
  timePeriod: 'Period',
56
57
  hours: 'H',
57
58
  minutes: 'M',
@@ -21,11 +21,11 @@ import zhTW from './zh-TW.js';
21
21
  * This source code is licensed under the MIT license found in the
22
22
  * LICENSE file in the root directory of this source tree.
23
23
  */
24
- var localeMap = {
24
+ var BUILT_IN_LOCALES = {
25
25
  'zh-CN': zhCN,
26
26
  'zh-Hans': zhCN,
27
27
  'en-US': enUS,
28
28
  'zh-HK': zhHK,
29
29
  'zh-TW': zhTW
30
30
  };
31
- export { localeMap as default };
31
+ export { BUILT_IN_LOCALES, BUILT_IN_LOCALES as default };
@@ -21,6 +21,35 @@ var LocaleEnum = {
21
21
  ZH_HANS: 'zh-Hans',
22
22
  EN_US: 'en-US',
23
23
  ZH_HK: 'zh-HK',
24
- ZH_TW: 'zh-TW'
24
+ ZH_TW: 'zh-TW',
25
+ TH_TH: 'th-TH',
26
+ // European languages
27
+ PT_PT: 'pt-PT',
28
+ PT_BR: 'pt-BR',
29
+ FR_FR: 'fr-FR',
30
+ DE_DE: 'de-DE',
31
+ ES_ES: 'es-ES',
32
+ IT_IT: 'it-IT',
33
+ NL_NL: 'nl-NL',
34
+ EL_GR: 'el-GR',
35
+ CS_CZ: 'cs-CZ',
36
+ DA_DK: 'da-DK',
37
+ FI_FI: 'fi-FI',
38
+ TR_TR: 'tr-TR',
39
+ // Asian languages
40
+ JA_JP: 'ja-JP',
41
+ KO_KR: 'ko-KR',
42
+ VI_VN: 'vi-VN',
43
+ // Caucasian & Central Asian languages
44
+ HY_AM: 'hy-AM',
45
+ AZ_AZ: 'az-AZ',
46
+ RU_RU: 'ru-RU',
47
+ KA_GE: 'ka-GE',
48
+ UZ_UZ: 'uz-UZ',
49
+ // Balkan languages
50
+ BS_BA: 'bs-BA',
51
+ BG_BG: 'bg-BG',
52
+ // South Asian languages
53
+ UR_PK: 'ur-PK'
25
54
  };
26
55
  export { LocaleEnum };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/hiui",
3
- "version": "4.16.4",
3
+ "version": "4.17.0",
4
4
  "description": "The root-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HiUI <mi-hiui@xiaomi.com>",
@@ -52,10 +52,10 @@
52
52
  "@hi-ui/button": "^4.0.10",
53
53
  "@hi-ui/card": "^4.0.9",
54
54
  "@hi-ui/carousel": "^4.1.1",
55
- "@hi-ui/cascader": "^4.5.0",
55
+ "@hi-ui/cascader": "^4.5.1",
56
56
  "@hi-ui/check-cascader": "^4.5.2",
57
57
  "@hi-ui/check-select": "^4.6.4",
58
- "@hi-ui/check-tree-select": "^4.7.5",
58
+ "@hi-ui/check-tree-select": "^4.7.6",
59
59
  "@hi-ui/checkbox": "^4.0.10",
60
60
  "@hi-ui/collapse": "^4.1.6",
61
61
  "@hi-ui/counter": "^4.1.9",
@@ -82,9 +82,9 @@
82
82
  "@hi-ui/picker": "^4.1.8",
83
83
  "@hi-ui/pop-confirm": "^4.2.5",
84
84
  "@hi-ui/popover": "^4.2.0",
85
- "@hi-ui/preview": "^4.2.1",
85
+ "@hi-ui/preview": "^4.2.2",
86
86
  "@hi-ui/progress": "^4.0.11",
87
- "@hi-ui/provider": "^4.1.1",
87
+ "@hi-ui/provider": "^4.2.0",
88
88
  "@hi-ui/radio": "^4.1.4",
89
89
  "@hi-ui/rating": "^4.0.10",
90
90
  "@hi-ui/result": "^4.0.8",
@@ -97,7 +97,7 @@
97
97
  "@hi-ui/stepper": "^4.1.0",
98
98
  "@hi-ui/svg-icon": "^4.0.8",
99
99
  "@hi-ui/switch": "^4.0.11",
100
- "@hi-ui/table": "^4.12.1",
100
+ "@hi-ui/table": "^4.12.2",
101
101
  "@hi-ui/tabs": "^4.2.0",
102
102
  "@hi-ui/tag": "^4.3.0",
103
103
  "@hi-ui/textarea": "^4.1.7",
@@ -112,12 +112,12 @@
112
112
  "@hi-ui/zen-mode": "^4.0.8"
113
113
  },
114
114
  "peerDependencies": {
115
- "@hi-ui/core": ">=4.0.9",
115
+ "@hi-ui/core": ">=4.0.11",
116
116
  "react": ">=16.8.6",
117
117
  "react-dom": ">=16.8.6"
118
118
  },
119
119
  "devDependencies": {
120
- "@hi-ui/core": "^4.0.9",
120
+ "@hi-ui/core": "^4.0.11",
121
121
  "@hi-ui/core-css": "^4.1.5",
122
122
  "react": "^17.0.1",
123
123
  "react-dom": "^17.0.1"