@arco-design/mobile-react 2.35.2 → 2.36.1

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.
Files changed (81) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/_helpers/hooks.d.ts +10 -2
  5. package/cjs/_helpers/hooks.js +12 -5
  6. package/cjs/date-picker/index.js +218 -18
  7. package/cjs/date-picker/style/css/index.css +42 -0
  8. package/cjs/date-picker/style/index.less +38 -1
  9. package/cjs/date-picker/type.d.ts +22 -6
  10. package/cjs/ellipsis/components/js-ellipsis.js +3 -1
  11. package/cjs/form/linked-container.d.ts +2 -2
  12. package/cjs/form/linked-container.js +5 -1
  13. package/cjs/picker/index.js +3 -2
  14. package/cjs/picker/type.d.ts +5 -0
  15. package/cjs/popover/hooks/usePosition.js +26 -8
  16. package/cjs/search-bar/association.js +2 -2
  17. package/cjs/search-bar/type.d.ts +1 -1
  18. package/cjs/stepper/hooks/useValue.js +3 -1
  19. package/cjs/tabs/index.js +1 -1
  20. package/cjs/tabs/type.d.ts +2 -2
  21. package/dist/index.js +301 -47
  22. package/dist/index.min.js +4 -4
  23. package/dist/style.css +23 -0
  24. package/dist/style.min.css +1 -1
  25. package/esm/_helpers/hooks.d.ts +10 -2
  26. package/esm/_helpers/hooks.js +12 -5
  27. package/esm/date-picker/index.js +218 -18
  28. package/esm/date-picker/style/css/index.css +42 -0
  29. package/esm/date-picker/style/index.less +38 -1
  30. package/esm/date-picker/type.d.ts +22 -6
  31. package/esm/ellipsis/components/js-ellipsis.js +3 -1
  32. package/esm/form/linked-container.d.ts +2 -2
  33. package/esm/form/linked-container.js +5 -1
  34. package/esm/picker/index.js +3 -2
  35. package/esm/picker/type.d.ts +5 -0
  36. package/esm/popover/hooks/usePosition.js +26 -8
  37. package/esm/search-bar/association.js +2 -2
  38. package/esm/search-bar/type.d.ts +1 -1
  39. package/esm/stepper/hooks/useValue.js +1 -0
  40. package/esm/tabs/index.js +1 -1
  41. package/esm/tabs/type.d.ts +2 -2
  42. package/esnext/_helpers/hooks.d.ts +10 -2
  43. package/esnext/_helpers/hooks.js +12 -5
  44. package/esnext/date-picker/index.js +167 -10
  45. package/esnext/date-picker/style/css/index.css +42 -0
  46. package/esnext/date-picker/style/index.less +38 -1
  47. package/esnext/date-picker/type.d.ts +22 -6
  48. package/esnext/ellipsis/components/js-ellipsis.js +2 -0
  49. package/esnext/form/linked-container.d.ts +2 -2
  50. package/esnext/form/linked-container.js +7 -2
  51. package/esnext/picker/index.js +2 -1
  52. package/esnext/picker/type.d.ts +5 -0
  53. package/esnext/popover/hooks/usePosition.js +32 -12
  54. package/esnext/search-bar/association.js +1 -1
  55. package/esnext/search-bar/type.d.ts +1 -1
  56. package/esnext/stepper/hooks/useValue.js +1 -0
  57. package/esnext/tabs/index.js +1 -1
  58. package/esnext/tabs/type.d.ts +2 -2
  59. package/package.json +3 -3
  60. package/tokens/app/arcodesign/default/css-variables.less +10 -0
  61. package/tokens/app/arcodesign/default/index.d.ts +10 -0
  62. package/tokens/app/arcodesign/default/index.js +11 -1
  63. package/tokens/app/arcodesign/default/index.json +108 -0
  64. package/tokens/app/arcodesign/default/index.less +10 -0
  65. package/umd/_helpers/hooks.d.ts +10 -2
  66. package/umd/_helpers/hooks.js +12 -5
  67. package/umd/date-picker/index.js +218 -18
  68. package/umd/date-picker/style/css/index.css +42 -0
  69. package/umd/date-picker/style/index.less +38 -1
  70. package/umd/date-picker/type.d.ts +22 -6
  71. package/umd/ellipsis/components/js-ellipsis.js +3 -1
  72. package/umd/form/linked-container.d.ts +2 -2
  73. package/umd/form/linked-container.js +5 -1
  74. package/umd/picker/index.js +3 -2
  75. package/umd/picker/type.d.ts +5 -0
  76. package/umd/popover/hooks/usePosition.js +26 -8
  77. package/umd/search-bar/association.js +2 -2
  78. package/umd/search-bar/type.d.ts +1 -1
  79. package/umd/stepper/hooks/useValue.js +5 -5
  80. package/umd/tabs/index.js +1 -1
  81. package/umd/tabs/type.d.ts +2 -2
@@ -161,24 +161,44 @@ export const usePosition = (props, popoverRef, childRef, wrapperRef) => {
161
161
  // 垂直方向安全距离调整
162
162
  // @en Vertical safety distance adjustment
163
163
  if (verticalAuto) {
164
- const popoverTop = childRect.bottom -
165
- (newConfig.bottom && newConfig.height ? newConfig.bottom + newConfig.height : 0);
166
- const popoverBottom = childRect.top +
167
- (newConfig.top && newConfig.height ? newConfig.top + newConfig.height : 0);
168
- // 顶部安全距离不够,调整到底部
169
- // @en The top safety distance is not enough, adjust to the bottom
170
- if (directionState.indexOf('top') !== -1 && popoverTop < topOffset) {
164
+ const setToBottom = () => {
171
165
  newConfig.top = verticalOffset + childRect.height;
172
166
  newConfig.bottom = null;
173
167
  onAdjustDirection('bottom');
174
- }
175
- else if (directionState.indexOf('bottom') !== -1 &&
176
- popoverBottom + bottomOffset > window.innerHeight) {
177
- // 底部安全距离不够,调整到顶部
178
- // @en The bottom safety distance is not enough, adjust to the top
168
+ };
169
+ const setToTop = () => {
179
170
  newConfig.top = null;
180
171
  newConfig.bottom = verticalOffset + childRect.height;
181
172
  onAdjustDirection('top');
173
+ };
174
+ // 判断上下空间是否都不足以展示气泡内容
175
+ // @en Determine whether there is insufficient space both above and below to display content
176
+ const isPopoverTooTall = window.innerHeight - topOffset - bottomOffset <
177
+ 2 * (newConfig.height || 0) + 2 * verticalOffset + childRect.height;
178
+ if (isPopoverTooTall) {
179
+ const spaceAbove = childRect.top;
180
+ const spaceBelow = window.innerHeight - childRect.bottom;
181
+ spaceAbove > spaceBelow ? setToTop() : setToBottom();
182
+ }
183
+ else {
184
+ const popoverTop = childRect.bottom -
185
+ (newConfig.bottom && newConfig.height
186
+ ? newConfig.bottom + newConfig.height
187
+ : 0);
188
+ const popoverBottom = childRect.top +
189
+ (newConfig.top && newConfig.height ? newConfig.top + newConfig.height : 0);
190
+ // 顶部安全距离不够,调整到底部
191
+ // @en The top safety distance is not enough, adjust to the bottom
192
+ if (directionState.indexOf('top') !== -1 && popoverTop < topOffset) {
193
+ setToBottom();
194
+ }
195
+ else if (
196
+ // 底部安全距离不够,调整到顶部
197
+ // @en The bottom safety distance is not enough, adjust to the top
198
+ directionState.indexOf('bottom') !== -1 &&
199
+ popoverBottom + bottomOffset > window.innerHeight) {
200
+ setToTop();
201
+ }
182
202
  }
183
203
  }
184
204
  // 挂载在全局的气泡需要计算相对屏幕的位置
@@ -36,7 +36,7 @@ export function SearchBarAssociation(props) {
36
36
  if (renderAssociationItem) {
37
37
  node = renderAssociationItem(item, index, node);
38
38
  }
39
- return (React.createElement("div", { key: index, className: `${searchBarAssociationPrefixCls}-item`, onClick: () => onAssociationItemClick?.(item, index) }, node));
39
+ return (React.createElement("div", { key: index, className: `${searchBarAssociationPrefixCls}-item`, onClick: e => onAssociationItemClick?.(item, index, e) }, node));
40
40
  };
41
41
  const renderContent = () => {
42
42
  const associationContent = associationItems.map(renderItem);
@@ -57,7 +57,7 @@ export interface SearchBarAssociationProps<Data = Record<string, any>> {
57
57
  * 每行搜索结果的点击回调
58
58
  * @en Click callback for each row of search results
59
59
  */
60
- onAssociationItemClick?: (item: SearchAssociationItem<Data>, index: number) => void;
60
+ onAssociationItemClick?: (item: SearchAssociationItem<Data>, index: number, event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
61
61
  /**
62
62
  * 搜索联想框整体被点击的回调
63
63
  * @en The callback for the overall click of the search association box
@@ -1,4 +1,5 @@
1
1
  import { useState } from 'react';
2
+ import { Promise } from 'es6-promise';
2
3
  export default function useValue(params) {
3
4
  const { defaultValue, formatter, max, min, value, digits } = params;
4
5
  const [innerValue, setInnerValue] = useState(defaultValue);
@@ -247,7 +247,7 @@ const Tabs = forwardRef((props, ref) => {
247
247
  }
248
248
  function updateLayout() {
249
249
  const { width, height } = getOffset(domRef.current);
250
- cellRef.current && cellRef.current.resetUnderlineStyle();
250
+ cellRef.current && cellRef.current.updateLayout();
251
251
  setWrapWidth(width || domRef.current?.offsetWidth || 0);
252
252
  setWrapHeight(height || domRef.current?.offsetHeight || 0);
253
253
  paneRef.current && paneRef.current.setCurrentHeight();
@@ -561,8 +561,8 @@ export interface TabCellRef {
561
561
  */
562
562
  setCaterpillarAnimate: (ratio?: number) => void;
563
563
  /**
564
- * 重新计算下划线样式
565
- * @en Recalculate underline style
564
+ * 重新计算下划线样式(仅重算位置,如果 tab cell DOM 被人为改变,请调用 updateLayout)
565
+ * @en Recalculate underline style (only recalculate position, if the tab cell DOM is changed manually, please call updateLayout)
566
566
  */
567
567
  resetUnderlineStyle: () => void;
568
568
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arco-design/mobile-react",
3
- "version": "2.35.2",
3
+ "version": "2.36.1",
4
4
  "description": "",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -15,7 +15,7 @@
15
15
  "author": "taoyiyue@bytedance.com",
16
16
  "license": "ISC",
17
17
  "dependencies": {
18
- "@arco-design/mobile-utils": "2.20.4",
18
+ "@arco-design/mobile-utils": "2.21.1",
19
19
  "@arco-design/transformable": "^1.0.0",
20
20
  "@babel/runtime": "^7",
21
21
  "lodash.throttle": "^4.1.1",
@@ -47,5 +47,5 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "a60bba95c16b19816c23b4e59b4db57d16137589"
50
+ "gitHead": "b7c3cd986250450f6433c906cf68bd550883fc7c"
51
51
  }
@@ -1093,4 +1093,14 @@
1093
1093
  --uploader-disabled-delete-icon-color: var(--disabled-color);
1094
1094
  --dark-uploader-item-text-error-color: var(--dark-danger-color);
1095
1095
  --uploader-item-text-error-color: var(--danger-color);
1096
+ --date-picker-range-font-size: ~`pxtorem(16)`;
1097
+ --date-picker-range-background-color: #FBFCFC;
1098
+ --dark-date-picker-range-background-color: #1E1E1E;
1099
+ --dark-date-picker-range-font-color: var(--dark-font-color);
1100
+ --date-picker-range-font-color: var(--font-color);
1101
+ --dark-date-picker-range-disabled-font-color: var(--dark-disabled-color);
1102
+ --date-picker-range-disabled-font-color: var(--disabled-color);
1103
+ --date-picker-range-show-padding: 0 ~`pxtorem(16)`;
1104
+ --date-picker-range-show-min-height: ~`pxtorem(48)`;
1105
+ --date-picker-range-separate-min-width: ~`pxtorem(48)`;
1096
1106
  }
@@ -1092,6 +1092,16 @@ export interface ArcodesignToken extends Record<string, string> {
1092
1092
  'uploader-disabled-delete-icon-color': string;
1093
1093
  'dark-uploader-item-text-error-color': string;
1094
1094
  'uploader-item-text-error-color': string;
1095
+ 'date-picker-range-font-size': string;
1096
+ 'date-picker-range-background-color': string;
1097
+ 'dark-date-picker-range-background-color': string;
1098
+ 'dark-date-picker-range-font-color': string;
1099
+ 'date-picker-range-font-color': string;
1100
+ 'dark-date-picker-range-disabled-font-color': string;
1101
+ 'date-picker-range-disabled-font-color': string;
1102
+ 'date-picker-range-show-padding': string;
1103
+ 'date-picker-range-show-min-height': string;
1104
+ 'date-picker-range-separate-min-width': string;
1095
1105
  }
1096
1106
  declare const tokens: ArcodesignToken;
1097
1107
  export default tokens;
@@ -1103,7 +1103,17 @@ var tokens = {
1103
1103
  "dark-uploader-disabled-delete-icon-color": "var(--dark-disabled-color)",
1104
1104
  "uploader-disabled-delete-icon-color": "var(--disabled-color)",
1105
1105
  "dark-uploader-item-text-error-color": "var(--dark-danger-color)",
1106
- "uploader-item-text-error-color": "var(--danger-color)"
1106
+ "uploader-item-text-error-color": "var(--danger-color)",
1107
+ "date-picker-range-font-size": "0.32rem",
1108
+ "date-picker-range-background-color": "#FBFCFC",
1109
+ "dark-date-picker-range-background-color": "#1E1E1E",
1110
+ "dark-date-picker-range-font-color": "var(--dark-font-color)",
1111
+ "date-picker-range-font-color": "var(--font-color)",
1112
+ "dark-date-picker-range-disabled-font-color": "var(--dark-disabled-color)",
1113
+ "date-picker-range-disabled-font-color": "var(--disabled-color)",
1114
+ "date-picker-range-show-padding": "0 0.32rem",
1115
+ "date-picker-range-show-min-height": "0.96rem",
1116
+ "date-picker-range-separate-min-width": "0.96rem"
1107
1117
  };
1108
1118
  var _default = tokens;
1109
1119
  exports["default"] = _default;
@@ -2699,6 +2699,30 @@
2699
2699
  "jsValue": "#F76965",
2700
2700
  "staticValue": "#F76965"
2701
2701
  },
2702
+ "darkDatePickerRangeBackgroundColor": {
2703
+ "cssKey": "dark-date-picker-range-background-color",
2704
+ "desc": "",
2705
+ "override": "",
2706
+ "value": "#1E1E1E",
2707
+ "jsValue": "#1E1E1E",
2708
+ "staticValue": "#1E1E1E"
2709
+ },
2710
+ "darkDatePickerRangeDisabledFontColor": {
2711
+ "cssKey": "dark-date-picker-range-disabled-font-color",
2712
+ "desc": "",
2713
+ "override": "",
2714
+ "value": "@dark-disabled-color",
2715
+ "jsValue": "@global@darkDisabledColor",
2716
+ "staticValue": "#5f5f60"
2717
+ },
2718
+ "darkDatePickerRangeFontColor": {
2719
+ "cssKey": "dark-date-picker-range-font-color",
2720
+ "desc": "",
2721
+ "override": "",
2722
+ "value": "@dark-font-color",
2723
+ "jsValue": "@global@darkFontColor",
2724
+ "staticValue": "#f6f6f6"
2725
+ },
2702
2726
  "darkDialogBodyAndroidColor": {
2703
2727
  "cssKey": "dark-dialog-body-android-color",
2704
2728
  "desc": "",
@@ -4355,6 +4379,90 @@
4355
4379
  "jsValue": "#FF9626",
4356
4380
  "staticValue": "#FF9626"
4357
4381
  },
4382
+ "datePickerRangeBackgroundColor": {
4383
+ "cssKey": "date-picker-range-background-color",
4384
+ "desc": "日期时间范围选择器背景颜色",
4385
+ "override": "",
4386
+ "value": "#FBFCFC",
4387
+ "jsValue": "#FBFCFC",
4388
+ "staticValue": "#FBFCFC",
4389
+ "localeDesc": {
4390
+ "ch": "日期时间范围选择器背景颜色",
4391
+ "en": "Background color of the date picker range when checked"
4392
+ }
4393
+ },
4394
+ "datePickerRangeDisabledFontColor": {
4395
+ "cssKey": "date-picker-range-disabled-font-color",
4396
+ "desc": "日期时间范围选择器未选中时文字颜色",
4397
+ "override": "",
4398
+ "value": "@disabled-color",
4399
+ "jsValue": "@global@disabledColor",
4400
+ "staticValue": "#c9cdd4",
4401
+ "localeDesc": {
4402
+ "ch": "日期时间范围选择器未选中时文字颜色",
4403
+ "en": "Font color of the date picker range when disabled"
4404
+ }
4405
+ },
4406
+ "datePickerRangeFontColor": {
4407
+ "cssKey": "date-picker-range-font-color",
4408
+ "desc": "日期时间范围选择器选中时文字颜色",
4409
+ "override": "",
4410
+ "value": "@font-color",
4411
+ "jsValue": "@global@fontColor",
4412
+ "staticValue": "#1d2129",
4413
+ "localeDesc": {
4414
+ "ch": "日期时间范围选择器选中时文字颜色",
4415
+ "en": "Font color of the date picker range when checked"
4416
+ }
4417
+ },
4418
+ "datePickerRangeFontSize": {
4419
+ "cssKey": "date-picker-range-font-size",
4420
+ "desc": "日期时间范围选择器文字大小",
4421
+ "override": "",
4422
+ "value": "~`pxtorem(16)`",
4423
+ "jsValue": "@getRem@16",
4424
+ "staticValue": "0.32rem",
4425
+ "localeDesc": {
4426
+ "ch": "日期时间范围选择器文字大小",
4427
+ "en": "Font size of the date picker range"
4428
+ }
4429
+ },
4430
+ "datePickerRangeSeparateMinWidth": {
4431
+ "cssKey": "date-picker-range-separate-min-width",
4432
+ "desc": "日期时间范围选择器展示区域分隔符最小宽度",
4433
+ "override": "",
4434
+ "value": "~`pxtorem(48)`",
4435
+ "jsValue": "@getRem@48",
4436
+ "staticValue": "0.96rem",
4437
+ "localeDesc": {
4438
+ "ch": "日期时间范围选择器展示区域分隔符最小宽度",
4439
+ "en": "Min width of the date picker range separate"
4440
+ }
4441
+ },
4442
+ "datePickerRangeShowMinHeight": {
4443
+ "cssKey": "date-picker-range-show-min-height",
4444
+ "desc": "日期时间范围选择器展示区域最小高度",
4445
+ "override": "",
4446
+ "value": "~`pxtorem(48)`",
4447
+ "jsValue": "@getRem@48",
4448
+ "staticValue": "0.96rem",
4449
+ "localeDesc": {
4450
+ "ch": "日期时间范围选择器展示区域最小高度",
4451
+ "en": "Min height of the date picker range area"
4452
+ }
4453
+ },
4454
+ "datePickerRangeShowPadding": {
4455
+ "cssKey": "date-picker-range-show-padding",
4456
+ "desc": "日期时间范围选择器展示区域外边距大小",
4457
+ "override": "",
4458
+ "value": "0 ~`pxtorem(16)`",
4459
+ "jsValue": "0 @getRem@16",
4460
+ "staticValue": "0 0.32rem",
4461
+ "localeDesc": {
4462
+ "ch": "日期时间范围选择器展示区域外边距大小",
4463
+ "en": "Margin of the date picker range area"
4464
+ }
4465
+ },
4358
4466
  "dialogAndroidBodyFooterGutter": {
4359
4467
  "cssKey": "dialog-android-body-footer-gutter",
4360
4468
  "desc": "对话框 body 和 footer 的间距 (android)",
@@ -1092,4 +1092,14 @@
1092
1092
  @uploader-disabled-delete-icon-color: @disabled-color;
1093
1093
  @dark-uploader-item-text-error-color: @dark-danger-color;
1094
1094
  @uploader-item-text-error-color: @danger-color;
1095
+ @date-picker-range-font-size: ~`pxtorem(16)`;
1096
+ @date-picker-range-background-color: #FBFCFC;
1097
+ @dark-date-picker-range-background-color: #1E1E1E;
1098
+ @dark-date-picker-range-font-color: @dark-font-color;
1099
+ @date-picker-range-font-color: @font-color;
1100
+ @dark-date-picker-range-disabled-font-color: @dark-disabled-color;
1101
+ @date-picker-range-disabled-font-color: @disabled-color;
1102
+ @date-picker-range-show-padding: 0 ~`pxtorem(16)`;
1103
+ @date-picker-range-show-min-height: ~`pxtorem(48)`;
1104
+ @date-picker-range-separate-min-width: ~`pxtorem(48)`;
1095
1105
 
@@ -4,6 +4,7 @@
4
4
  * @name_en General Hooks
5
5
  */
6
6
  import React from 'react';
7
+ import type { SystemOptions } from '@arco-design/mobile-utils';
7
8
  import { BezierType } from '../progress';
8
9
  /**
9
10
  * 监听页面resize事件的统一封装
@@ -130,15 +131,22 @@ export declare function useLatestRef<T>(variable: T): React.MutableRefObject<T>;
130
131
  /**
131
132
  * 从navigator.userAgent中获取当前操作系统,如果无法获取ua,则从ContextProvider传入的system中获取值
132
133
  * @desc {en} Get the current operating system from navigator.userAgent, if ua cannot be obtained, get the value from the system passed in by ContextProvider
133
- * @returns system 操作系统,"" | "pc" | "android" | "ios"
134
+ * @param options 配置选项
135
+ * @param {en} options Configuration options
136
+ * @param options.detectHarmony 是否识别鸿蒙系统,默认为 false,鸿蒙系统会被识别为 android
137
+ * @param {en} options.detectHarmony Whether to detect HarmonyOS separately, default is false, HarmonyOS will be recognized as android
138
+ * @returns 返回当前设备的操作系统,可能的值包括 'android'、'ios'、'harmony' 或 'pc',如果无法获取,则返回空字符串
139
+ * @returns {en} Returns the operating system of the current device, possible values are 'android', 'ios', 'harmony', or 'pc'. Returns an empty string if it cannot be obtained
134
140
  * @example
135
141
  * ```
136
142
  * import { useSystem } from '@arco-design/mobile-react/esm/_helpers/hooks';
137
143
  *
138
144
  * const system = useSystem();
145
+ * // Or with options
146
+ * const systemWithHarmony = useSystem({ detectHarmony: true });
139
147
  * ```
140
148
  */
141
- export declare function useSystem(): "" | "android" | "ios" | "pc";
149
+ export declare function useSystem(options?: SystemOptions): "" | "android" | "harmony" | "ios" | "pc";
142
150
  /**
143
151
  * 获取页面视口宽高大小,并在页面有resize时更新大小
144
152
  * @desc {en} Get the width and height of the page viewport, and update the size when the page is resized
@@ -283,29 +283,36 @@
283
283
  /**
284
284
  * 从navigator.userAgent中获取当前操作系统,如果无法获取ua,则从ContextProvider传入的system中获取值
285
285
  * @desc {en} Get the current operating system from navigator.userAgent, if ua cannot be obtained, get the value from the system passed in by ContextProvider
286
- * @returns system 操作系统,"" | "pc" | "android" | "ios"
286
+ * @param options 配置选项
287
+ * @param {en} options Configuration options
288
+ * @param options.detectHarmony 是否识别鸿蒙系统,默认为 false,鸿蒙系统会被识别为 android
289
+ * @param {en} options.detectHarmony Whether to detect HarmonyOS separately, default is false, HarmonyOS will be recognized as android
290
+ * @returns 返回当前设备的操作系统,可能的值包括 'android'、'ios'、'harmony' 或 'pc',如果无法获取,则返回空字符串
291
+ * @returns {en} Returns the operating system of the current device, possible values are 'android', 'ios', 'harmony', or 'pc'. Returns an empty string if it cannot be obtained
287
292
  * @example
288
293
  * ```
289
294
  * import { useSystem } from '@arco-design/mobile-react/esm/_helpers/hooks';
290
295
  *
291
296
  * const system = useSystem();
297
+ * // Or with options
298
+ * const systemWithHarmony = useSystem({ detectHarmony: true });
292
299
  * ```
293
300
  */
294
301
 
295
302
 
296
- function useSystem() {
303
+ function useSystem(options) {
297
304
  var _useContext = (0, _react.useContext)(_contextProvider.GlobalContext),
298
305
  currentSystem = _useContext.system;
299
306
 
300
307
  var _useState5 = (0, _react.useState)(function () {
301
- return currentSystem || (0, _mobileUtils.getSystem)();
308
+ return currentSystem || (0, _mobileUtils.getSystem)(options);
302
309
  }),
303
310
  system = _useState5[0],
304
311
  setSystem = _useState5[1];
305
312
 
306
313
  (0, _react.useEffect)(function () {
307
- setSystem(currentSystem || (0, _mobileUtils.getSystem)());
308
- }, [currentSystem]);
314
+ setSystem(currentSystem || (0, _mobileUtils.getSystem)(options));
315
+ }, [currentSystem, options]);
309
316
  return system;
310
317
  }
311
318
  /**