@tarojs/plugin-platform-harmony-ets 4.0.0-alpha.2 → 4.0.0-alpha.21

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 (129) hide show
  1. package/dist/apis/base/system.ts +73 -20
  2. package/dist/apis/canvas/index.ts +10 -1
  3. package/dist/apis/device/clipboard.ts +16 -8
  4. package/dist/apis/framework/index.ts +1 -5
  5. package/dist/apis/index.ts +25 -17
  6. package/dist/apis/media/image/index.ts +1 -1
  7. package/dist/apis/storage/index.ts +146 -78
  8. package/dist/apis/ui/animation/animation.ts +71 -29
  9. package/dist/apis/ui/background.ts +2 -1
  10. package/dist/apis/ui/interaction/index.ts +42 -59
  11. package/dist/apis/ui/navigation-bar/index.ts +1 -1
  12. package/dist/apis/ui/pull-down-refresh.ts +9 -3
  13. package/dist/apis/ui/scroll/index.ts +5 -5
  14. package/dist/apis/ui/tab-bar.ts +3 -3
  15. package/dist/apis/utils/index.ts +2 -1
  16. package/dist/apis/wxml/IntersectionObserver.ts +18 -10
  17. package/dist/apis/wxml/selectorQuery.ts +26 -13
  18. package/dist/components-harmony-ets/button.ets +64 -34
  19. package/dist/components-harmony-ets/canvas.ets +51 -0
  20. package/dist/components-harmony-ets/checkbox.ets +72 -61
  21. package/dist/components-harmony-ets/form.ets +51 -29
  22. package/dist/components-harmony-ets/icon.ets +31 -19
  23. package/dist/components-harmony-ets/image.ets +34 -14
  24. package/dist/components-harmony-ets/index.ets +92 -0
  25. package/dist/components-harmony-ets/innerHtml.ets +11 -6
  26. package/dist/components-harmony-ets/input.ets +49 -41
  27. package/dist/components-harmony-ets/label.ets +71 -44
  28. package/dist/components-harmony-ets/listView.ets +26 -0
  29. package/dist/components-harmony-ets/movableArea.ets +126 -0
  30. package/dist/components-harmony-ets/movableView.ets +93 -0
  31. package/dist/components-harmony-ets/navigationBar.ets +65 -0
  32. package/dist/components-harmony-ets/pageMeta.ets +94 -0
  33. package/dist/components-harmony-ets/picker.ets +42 -38
  34. package/dist/components-harmony-ets/progress.ets +52 -0
  35. package/dist/components-harmony-ets/pseudo.ets +80 -0
  36. package/dist/components-harmony-ets/radio.ets +74 -64
  37. package/dist/components-harmony-ets/richText.ets +14 -30
  38. package/dist/components-harmony-ets/scrollList.ets +94 -0
  39. package/dist/components-harmony-ets/scrollView.ets +61 -57
  40. package/dist/components-harmony-ets/slider.ets +18 -14
  41. package/dist/components-harmony-ets/stickySection.ets +42 -0
  42. package/dist/components-harmony-ets/style.ets +381 -130
  43. package/dist/components-harmony-ets/swiper.ets +61 -20
  44. package/dist/components-harmony-ets/switch.ets +36 -32
  45. package/dist/components-harmony-ets/{index.ts → tag.ts} +6 -0
  46. package/dist/components-harmony-ets/text.ets +135 -49
  47. package/dist/components-harmony-ets/textArea.ets +50 -35
  48. package/dist/components-harmony-ets/utils/AttributeManager.ets +1 -1
  49. package/dist/components-harmony-ets/utils/DynamicCenter.ts +2 -2
  50. package/dist/components-harmony-ets/utils/flexManager.ets +49 -19
  51. package/dist/components-harmony-ets/utils/helper.ets +18 -5
  52. package/dist/components-harmony-ets/utils/htmlParser/HarmonyHTMLParser.ts +1 -2
  53. package/dist/components-harmony-ets/utils/htmlParser/index.ts +1 -1
  54. package/dist/components-harmony-ets/utils/index.ts +54 -50
  55. package/dist/components-harmony-ets/utils/styles.ets +170 -93
  56. package/dist/components-harmony-ets/video.ets +34 -21
  57. package/dist/components-harmony-ets/view.ets +63 -52
  58. package/dist/components-harmony-ets/webView.ets +40 -34
  59. package/dist/index.d.ts +152 -0
  60. package/dist/index.js +99 -55
  61. package/dist/index.js.map +1 -1
  62. package/dist/runtime-ets/bom/document.ts +6 -4
  63. package/dist/runtime-ets/bom/getComputedStyle.ts +2 -2
  64. package/dist/runtime-ets/bom/window.ts +7 -0
  65. package/dist/runtime-ets/current.ts +3 -0
  66. package/dist/runtime-ets/dom/bind.ts +28 -12
  67. package/dist/runtime-ets/dom/class-list.ts +2 -2
  68. package/dist/runtime-ets/dom/cssNesting.ts +419 -0
  69. package/dist/runtime-ets/dom/cssStyleDeclaration.ts +28 -42
  70. package/dist/runtime-ets/dom/document.ts +8 -11
  71. package/dist/runtime-ets/dom/element/canvas.ts +136 -0
  72. package/dist/runtime-ets/dom/element/element.ts +348 -57
  73. package/dist/runtime-ets/dom/element/form.ts +31 -26
  74. package/dist/runtime-ets/dom/element/index.ts +30 -2
  75. package/dist/runtime-ets/dom/element/movableArea.ts +11 -0
  76. package/dist/runtime-ets/dom/element/movableView.ts +244 -0
  77. package/dist/runtime-ets/dom/element/normal.ts +35 -8
  78. package/dist/runtime-ets/dom/element/progress.ts +11 -0
  79. package/dist/runtime-ets/dom/element/scrollView.ts +1 -0
  80. package/dist/runtime-ets/dom/element/text.ts +1 -8
  81. package/dist/runtime-ets/dom/element/video.ts +5 -4
  82. package/dist/runtime-ets/dom/element/webView.ts +12 -5
  83. package/dist/runtime-ets/dom/event.ts +2 -4
  84. package/dist/runtime-ets/dom/eventTarget.ts +2 -3
  85. package/dist/runtime-ets/dom/node.ts +54 -29
  86. package/dist/runtime-ets/dom/stylesheet/covertWeb2Hm.ts +416 -235
  87. package/dist/runtime-ets/dom/stylesheet/index.ts +29 -311
  88. package/dist/runtime-ets/dom/stylesheet/type.ts +51 -9
  89. package/dist/runtime-ets/dom/stylesheet/util.ts +33 -27
  90. package/dist/runtime-ets/index.ts +2 -1
  91. package/dist/runtime-ets/interface/event.ts +1 -1
  92. package/dist/runtime-ets/utils/index.ts +73 -13
  93. package/dist/runtime-ets/utils/info.ts +2 -2
  94. package/dist/runtime-framework/react/app.ts +9 -4
  95. package/dist/runtime-framework/react/hooks.ts +0 -1
  96. package/dist/runtime-framework/react/index.ts +0 -2
  97. package/dist/runtime-framework/react/native-page.ts +154 -77
  98. package/dist/runtime-framework/react/page.ts +3 -8
  99. package/dist/runtime-framework/solid/app.ts +25 -45
  100. package/dist/runtime-framework/solid/connect.ts +21 -3
  101. package/dist/runtime-framework/solid/hooks.ts +16 -11
  102. package/dist/runtime-framework/solid/index.ts +6 -2
  103. package/dist/runtime-framework/solid/page.ts +84 -30
  104. package/dist/runtime-framework/solid/reconciler/props.ts +70 -25
  105. package/dist/runtime-framework/solid/reconciler/render.ts +16 -6
  106. package/dist/runtime-framework/solid/reconciler/use.ts +0 -1
  107. package/dist/runtime-framework/solid/utils/index.ts +0 -2
  108. package/dist/runtime-utils.d.ts +827 -0
  109. package/dist/runtime-utils.js +435 -218
  110. package/dist/runtime-utils.js.map +1 -1
  111. package/dist/runtime.d.ts +1 -0
  112. package/dist/runtime.js +435 -218
  113. package/dist/runtime.js.map +1 -1
  114. package/index.js +3 -1
  115. package/package.json +14 -15
  116. package/static/media/cancel.svg +1 -1
  117. package/static/media/circle.svg +1 -1
  118. package/static/media/clear.svg +1 -1
  119. package/static/media/download.svg +1 -1
  120. package/static/media/info.svg +1 -1
  121. package/static/media/info_circle.svg +1 -1
  122. package/static/media/search.svg +1 -1
  123. package/static/media/success.svg +1 -1
  124. package/static/media/success_no_circle.svg +1 -1
  125. package/static/media/warn.svg +1 -1
  126. package/types/harmony.d.ts +4 -0
  127. package/types/index.d.ts +4 -0
  128. package/types/runtime.d.ts +1 -1
  129. /package/dist/runtime-framework/solid/{contant.ts → constant.ts} +0 -0
@@ -1,14 +1,15 @@
1
1
  import { isFunction, isString, isArray, isObject, isNull, isNumber, isUndefined, queryToJson, PLATFORM_TYPE, singleQuote, internalComponents } from '@tarojs/shared';
2
2
  import _display from '@ohos.display';
3
- import { Current, window, hooks, document as document$1, getPageScrollerOrNode, findChildNodeWithDFS, setNodeEventCallbackAndTriggerComponentUpdate, AREA_CHANGE_EVENT_NAME, disconnectEvent, VISIBLE_CHANGE_EVENT_NAME } from '@tarojs/runtime';
3
+ import { Current, window, eventSource, hooks, document as document$1, getPageScrollerOrNode, findChildNodeWithDFS, setNodeEventCallbackAndTriggerComponentUpdate, AREA_CHANGE_EVENT_NAME, disconnectEvent, VISIBLE_CHANGE_EVENT_NAME, getCurrentInstance } from '@tarojs/runtime';
4
4
  import { eventCenter, Events, History } from '@tarojs/runtime/dist/runtime.esm';
5
+ import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant';
5
6
  import deviceInfo from '@ohos.deviceInfo';
6
7
  import i18n from '@ohos.i18n';
7
- import deviceMethod from '@system.device';
8
8
  import errorManager from '@ohos.app.ability.errorManager';
9
9
  import sensor from '@ohos.sensor';
10
10
  import batteryInfo, { BatteryChargeState } from '@ohos.batteryInfo';
11
11
  import pasteboard from '@ohos.pasteboard';
12
+ import promptAction from '@ohos.promptAction';
12
13
  import inputMethodEngine from '@ohos.inputMethodEngine';
13
14
  import network from '@system.network';
14
15
  import call from '@ohos.telephony.call';
@@ -28,11 +29,9 @@ import http from '@ohos.net.http';
28
29
  import webSocket from '@ohos.net.webSocket';
29
30
  import router from '@ohos.router';
30
31
  import bundleManager from '@ohos.bundle.bundleManager';
31
- import dataPreferences from '@ohos.data.preferences';
32
- import hilog from '@ohos.hilog';
32
+ import distributedKVStore from '@ohos.data.distributedKVStore';
33
33
  import matrix4 from '@ohos.matrix4';
34
- import prompt from '@ohos.prompt';
35
- import { pxTransformHelper } from '@tarojs/taro';
34
+ import { pxTransformHelper as pxTransformHelper$1 } from '@tarojs/taro';
36
35
 
37
36
  class MethodHandler {
38
37
  constructor({ name, success, fail, complete }) {
@@ -186,7 +185,7 @@ function temporarilyNotSupport(name, recommended) {
186
185
  return (option = {}, ...args) => {
187
186
  const { success, fail, complete } = option;
188
187
  const handle = new MethodHandler({ name, success, fail, complete });
189
- let errMsg = '暂时不支持 API';
188
+ let errMsg = `暂时不支持 API ${name}`;
190
189
  if (recommended) {
191
190
  errMsg += `, 请使用 ${recommended}`;
192
191
  }
@@ -266,16 +265,63 @@ const preloadWebview = /* @__PURE__ */ temporarilyNotSupport('preloadWebview');
266
265
  const preloadSkylineView = /* @__PURE__ */ temporarilyNotSupport('preloadSkylineView');
267
266
  const preloadAssets = /* @__PURE__ */ temporarilyNotSupport('preloadAssets');
268
267
 
269
- // 设备信息,从 API Version 6 开始支持
270
- const display = _display.getDefaultDisplaySync();
271
- let device;
272
- deviceMethod.getInfo({
273
- success: data => {
274
- device = data;
275
- }
268
+ let display$1;
269
+ let navigationIndicatorRect;
270
+ let safeArea = null;
271
+ let statusBarHeight;
272
+ let windowRect;
273
+ Current.contextPromise.then((context) => {
274
+ const win = window.__ohos.getLastWindow(context);
275
+ win.then(mainWindow => {
276
+ const topRect = mainWindow.getWindowAvoidArea(window.__ohos.AvoidAreaType.TYPE_SYSTEM).topRect;
277
+ navigationIndicatorRect = mainWindow.getWindowAvoidArea(window.__ohos.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect;
278
+ statusBarHeight = topRect.top + topRect.height;
279
+ windowRect = mainWindow.getWindowProperties().windowRect;
280
+ try {
281
+ display$1 = _display.getDefaultDisplaySync();
282
+ setSafeArea({
283
+ top: statusBarHeight,
284
+ left: 0,
285
+ right: display$1.width,
286
+ bottom: navigationIndicatorRect === null || navigationIndicatorRect === void 0 ? void 0 : navigationIndicatorRect.top
287
+ });
288
+ // @ts-ignore
289
+ display$1.getCutoutInfo((err, { boundingRects = [], waterfallDisplayAreaRects = {} } = {}) => {
290
+ var _a, _b, _c, _d, _e, _f;
291
+ if (err === null || err === void 0 ? void 0 : err.code) {
292
+ console.error('Failed to get cutout info', JSON.stringify(err));
293
+ return;
294
+ }
295
+ const top = Math.max(...boundingRects.map(rect => rect.top + rect.height), ((_a = waterfallDisplayAreaRects.top) === null || _a === void 0 ? void 0 : _a.top) + ((_b = waterfallDisplayAreaRects.top) === null || _b === void 0 ? void 0 : _b.height), statusBarHeight);
296
+ const bottom = Math.min(display$1.height - ((_c = waterfallDisplayAreaRects.bottom) === null || _c === void 0 ? void 0 : _c.top), navigationIndicatorRect === null || navigationIndicatorRect === void 0 ? void 0 : navigationIndicatorRect.top);
297
+ const left = ((_d = waterfallDisplayAreaRects.left) === null || _d === void 0 ? void 0 : _d.left) + ((_e = waterfallDisplayAreaRects.left) === null || _e === void 0 ? void 0 : _e.width);
298
+ const right = display$1.width - ((_f = waterfallDisplayAreaRects.right) === null || _f === void 0 ? void 0 : _f.left);
299
+ setSafeArea({
300
+ top,
301
+ left,
302
+ right,
303
+ bottom
304
+ });
305
+ });
306
+ }
307
+ catch (e) {
308
+ console.error('Failed to get display', e);
309
+ }
310
+ });
276
311
  });
312
+ function setSafeArea({ top, left, right, bottom }) {
313
+ safeArea = {
314
+ top,
315
+ bottom,
316
+ left,
317
+ right,
318
+ height: bottom - top,
319
+ width: right - left,
320
+ };
321
+ }
277
322
  /* 同步版本 */
278
323
  const getSystemInfoSync = function () {
324
+ var _a, _b;
279
325
  const res = {};
280
326
  res.SDKVersion = deviceInfo && deviceInfo.sdkApiVersion; // 客户端基础库版本 string
281
327
  res.albumAuthorized = false; // 允许使用相册的开关(仅 iOS 有效) boolean
@@ -285,7 +331,7 @@ const getSystemInfoSync = function () {
285
331
  res.cameraAuthorized = null; // 允许使用摄像头的开关 boolean
286
332
  res.enableDebug = null; // 是否已打开调试 boolean
287
333
  res.fontSizeSetting = null; // 用户字体大小(单位px) number
288
- res.language = i18n && i18n.getSystemLanguage && i18n.getSystemLanguage(); // string
334
+ res.language = (_a = i18n === null || i18n === void 0 ? void 0 : i18n.getSystemLanguage) === null || _a === void 0 ? void 0 : _a.call(i18n); // string
289
335
  res.locationAuthorized = null; // 定位的开关 boolean
290
336
  res.locationEnabled = null; // 地理位置的系统开关 boolean
291
337
  res.microphoneAuthorized = null; // 麦克风的开关 boolean
@@ -296,17 +342,18 @@ const getSystemInfoSync = function () {
296
342
  res.notificationSoundAuthorized = false; // 通知带有声音的开关(仅 iOS 有效)boolean
297
343
  res.phoneCalendarAuthorized = null; // 使用日历的开关 boolean
298
344
  res.wifiEnabled = false; // Wi-Fi 的系统开关 boolean
299
- res.pixelRatio = null; // 设备像素比,number
300
- res.platform = 'android'; // 客户端平台 string
301
- res.safeArea = null; // 在竖屏正方向下的安全区域 General.SafeAreaResult
302
- res.screenHeight = display && display.height; // 屏幕高度,单位px number
303
- res.screenWidth = display && display.width; // 屏幕宽度,单位px number
304
- res.statusBarHeight = null; // 状态栏的高度,单位px number
305
- res.system = deviceInfo && deviceInfo.osFullName; // 操作系统及版本 string
306
- res.theme = null; // 系统当前主题,取值为light或dark 'light' | 'dark'
307
- res.windowWidth = device && device.windowWidth; // 可使用窗口宽度,单位px number
308
- res.windowHeight = device && device.windowHeight; // 可使用窗口高度,单位px number
309
- res.version = deviceInfo && deviceInfo.displayVersion; // 版本号 string
345
+ res.pixelRatio = display$1 && display$1.densityPixels; // 设备像素比,number
346
+ res.platform = 'harmony'; // 客户端平台 string
347
+ res.safeArea = safeArea; // 在竖屏正方向下的安全区域 General.SafeAreaResult
348
+ res.screenHeight = display$1 === null || display$1 === void 0 ? void 0 : display$1.height; // 屏幕高度,单位px number
349
+ res.screenWidth = display$1 === null || display$1 === void 0 ? void 0 : display$1.width; // 屏幕宽度,单位px number
350
+ res.statusBarHeight = statusBarHeight; // 状态栏的高度,单位px number
351
+ res.system = deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.osFullName; // 操作系统及版本 string
352
+ // Note: 更新配置时才能记录
353
+ res.theme = ((_b = AppStorage.get('__TARO_APP_CONFIG')) === null || _b === void 0 ? void 0 : _b.colorMode) === ConfigurationConstant.ColorMode.COLOR_MODE_DARK ? 'dark' : 'light'; // 系统当前主题,取值为light或dark 'light' | 'dark'
354
+ res.windowHeight = windowRect === null || windowRect === void 0 ? void 0 : windowRect.height; // 可使用窗口高度,单位px number
355
+ res.windowWidth = windowRect === null || windowRect === void 0 ? void 0 : windowRect.width; // 可使用窗口宽度,单位px number
356
+ res.version = deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.displayVersion; // 版本号 string
310
357
  return res;
311
358
  };
312
359
  /* 异步版本 */
@@ -412,7 +459,13 @@ const base64ToArrayBuffer = /* @__PURE__ */ temporarilyNotSupport('base64ToArray
412
459
  /** 创建离屏 canvas 实例 */
413
460
  const createOffscreenCanvas = /* @__PURE__ */ temporarilyNotSupport('createOffscreenCanvas');
414
461
  /** 创建 canvas 的绘图上下文 CanvasContext 对象 */
415
- const createCanvasContext = /* @__PURE__ */ temporarilyNotSupport('createOffscreenCanvas');
462
+ // export const createCanvasContext = /* @__PURE__ */ temporarilyNotSupport('createOffscreenCanvas')
463
+ const createCanvasContext = (canvasId) => {
464
+ const dom = eventSource.get(`canvasId-${canvasId}`);
465
+ // return dom as TaroCanvasElement
466
+ if (dom)
467
+ return dom.context;
468
+ };
416
469
  /** 把当前画布指定区域的内容导出生成指定大小的图片 */
417
470
  const canvasToTempFilePath = /* @__PURE__ */ temporarilyNotSupport('createOffscreenCanvas');
418
471
  /** 将像素数据绘制到画布 */
@@ -533,7 +586,7 @@ const getBatteryInfoSync = () => ({
533
586
  isCharging: [BatteryChargeState.ENABLE, BatteryChargeState.FULL].includes(batteryInfo.chargingStatus),
534
587
  level: batteryInfo.batterySOC
535
588
  });
536
- const getBatteryInfo = ({ success, fail, complete } = {}) => __awaiter(void 0, void 0, void 0, function* () {
589
+ const getBatteryInfo = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* ({ success, fail, complete } = {}) {
537
590
  const handle = new MethodHandler({ name: 'getBatteryInfo', success, fail, complete });
538
591
  try {
539
592
  return handle.success(getBatteryInfoSync());
@@ -606,8 +659,20 @@ const setClipboardData = function (options) {
606
659
  }
607
660
  return new Promise((resolve, reject) => {
608
661
  const systemPasteboard = pasteboard.getSystemPasteboard();
609
- const pasteData = pasteboard.createPlainTextData(data);
610
- systemPasteboard.setPasteData(pasteData, (error, data) => {
662
+ const pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, data);
663
+ try {
664
+ systemPasteboard.setDataSync(pasteData);
665
+ promptAction.showToast({
666
+ message: '内容已复制',
667
+ duration: 1500,
668
+ bottom: '50%',
669
+ showMode: 1 // 设置弹窗显示模式,显示在应用之上。
670
+ });
671
+ return handle.success({
672
+ data,
673
+ }, { resolve, reject });
674
+ }
675
+ catch (error) {
611
676
  if (error) {
612
677
  console.error('Failed to set PasteData. Cause: ' + JSON.stringify(error));
613
678
  res = {
@@ -616,12 +681,7 @@ const setClipboardData = function (options) {
616
681
  };
617
682
  callAsyncFail(reject, res, options);
618
683
  }
619
- else {
620
- return handle.success({
621
- data,
622
- }, { resolve, reject });
623
- }
624
- });
684
+ }
625
685
  });
626
686
  };
627
687
  /**
@@ -632,7 +692,7 @@ const getClipboardData = function (options) {
632
692
  const handle = new MethodHandler({ name: 'getClipboardData', success, fail, complete });
633
693
  return new Promise((resolve, reject) => {
634
694
  const systemPasteboard = pasteboard.getSystemPasteboard();
635
- systemPasteboard.getPasteData((error, pasteData) => {
695
+ systemPasteboard.getData((error, pasteData) => {
636
696
  if (error) {
637
697
  console.error('Failed to obtain PasteData. Cause: ' + JSON.stringify(error));
638
698
  return handle.fail({
@@ -771,7 +831,7 @@ const getNetworkType = (options = {}) => {
771
831
  });
772
832
  };
773
833
  const networkStatusManager = new CallbackManager();
774
- const networkStatusListener = (data, code = 0) => __awaiter(void 0, void 0, void 0, function* () {
834
+ const networkStatusListener = (data_1, ...args_1) => __awaiter(void 0, [data_1, ...args_1], void 0, function* (data, code = 0) {
775
835
  if (code > 0) {
776
836
  return networkStatusManager.trigger({ isConnected: false, networkType: 'none' });
777
837
  }
@@ -1984,7 +2044,6 @@ function getEnv() {
1984
2044
  }
1985
2045
  // TODO
1986
2046
  const getCurrentPages = () => [];
1987
- const getCurrentInstance = () => Current;
1988
2047
  const requirePlugin$1 = temporarilyNotSupport('requirePlugin');
1989
2048
 
1990
2049
  // @ts-nocheck
@@ -2014,7 +2073,7 @@ function formatLocation(location) {
2014
2073
  altitude: location.altitude,
2015
2074
  accuracy: location.accuracy,
2016
2075
  speed: location.speed,
2017
- verticalAccuracy: 0,
2076
+ verticalAccuracy: 0, // OHOS 不支持返回此参数,直接设置为默认值
2018
2077
  horizontalAccuracy: 0 // OHOS 不支持返回此参数,直接设置为默认值
2019
2078
  };
2020
2079
  return wxLocate;
@@ -2293,7 +2352,7 @@ const chooseImage = function (options) {
2293
2352
  photoSelectOptions.maxSelectNumber = count; // 选择媒体文件的最大数目
2294
2353
  photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
2295
2354
  photoViewPicker.select(photoSelectOptions).then((photoSelectResult) => {
2296
- callAsyncSuccess(resolve, { tempFilePaths: photoSelectResult.photoUris });
2355
+ callAsyncSuccess(resolve, { tempFilePaths: photoSelectResult.photoUris }, options);
2297
2356
  }).catch((error) => {
2298
2357
  callAsyncFail(reject, error, options);
2299
2358
  });
@@ -3190,113 +3249,172 @@ const getBackgroundFetchData = /* @__PURE__ */ temporarilyNotSupport('getBackgro
3190
3249
  // 周期性更新
3191
3250
  const createCacheManager = /* @__PURE__ */ temporarilyNotSupport('createCacheManager');
3192
3251
 
3193
- const preferencesPromise = Current.contextPromise
3194
- .then((context) => {
3195
- return bundleManager
3196
- .getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
3197
- .then(data => {
3198
- return dataPreferences
3199
- .getPreferences(context, `${data.appInfo.uid}Store`);
3200
- });
3201
- })
3202
- .catch((error) => {
3203
- hilog.error(0x0000, 'TaroFailedTag', 'Failed to load the storage. Cause: %{public}s', error.code ? JSON.stringify(error) : error.message || error);
3252
+ /**
3253
+ * 从API Version 6开始,该模块不再维护,可以使用模块@ohos.data.storage。在API Version 9后,推荐使用新模块@ohos.data.preferences。
3254
+ * https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-data-preferences-0000001427745052-V3
3255
+ */
3256
+ let context;
3257
+ let kvManager;
3258
+ let kvStore;
3259
+ let kvStorePromise;
3260
+ Current.contextPromise.then((ctx) => {
3261
+ context = ctx;
3262
+ const kvManagerConfig = {
3263
+ context: context,
3264
+ bundleName: 'com.example.taro'
3265
+ };
3266
+ try {
3267
+ // 创建KVManager实例
3268
+ kvManager = distributedKVStore.createKVManager(kvManagerConfig);
3269
+ // 继续创建获取数据库
3270
+ const options = {
3271
+ createIfMissing: true,
3272
+ encrypt: false,
3273
+ backup: false,
3274
+ autoSync: false,
3275
+ // kvStoreType不填时,默认创建多设备协同数据库
3276
+ kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,
3277
+ // 多设备协同数据库:kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,
3278
+ securityLevel: distributedKVStore.SecurityLevel.S1
3279
+ };
3280
+ const data = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
3281
+ kvStorePromise = new Promise(resolve => {
3282
+ kvManager.getKVStore(`${data.appInfo.uid}Store`, options, (err, store) => {
3283
+ if (err) {
3284
+ console.error(`Failed to get KVStore: Code:${err.code},message:${err.message}`);
3285
+ return;
3286
+ }
3287
+ kvStore = store;
3288
+ // 请确保获取到键值数据库实例后,再进行相关数据操作
3289
+ resolve();
3290
+ });
3291
+ });
3292
+ }
3293
+ catch (e) {
3294
+ console.error(`Failed to create KVManager. Code:${e.code},message:${e.message}`);
3295
+ }
3296
+ return context;
3204
3297
  });
3205
- function getItem(key) {
3206
- return __awaiter(this, void 0, void 0, function* () {
3207
- try {
3208
- const preferences = yield preferencesPromise;
3209
- const item = yield preferences.get(key, null);
3210
- return { result: true, data: item };
3211
- }
3212
- catch (error) {
3213
- return { result: false };
3214
- }
3215
- });
3216
- }
3217
3298
  const storageSchema = {
3218
3299
  key: 'String'
3219
3300
  };
3220
- function getStorage(options) {
3221
- return new Promise((resolve, reject) => {
3222
- try {
3223
- validateParams('getStorage', options, storageSchema);
3301
+ function checkContextExist(api, isAsync = false) {
3302
+ if (!context) {
3303
+ const message = `${api} 调用失败,Taro 不支持过早地调用 ${api},请确保页面已经渲染完成再调用此 API`;
3304
+ if (isAsync) {
3305
+ return {
3306
+ isExist: false,
3307
+ error: Promise.reject(new Error(message))
3308
+ };
3224
3309
  }
3225
- catch (error) {
3226
- const res = { errMsg: error.message };
3227
- return callAsyncFail(reject, res, options);
3310
+ else {
3311
+ console.warn(message);
3312
+ return {
3313
+ isExist: false,
3314
+ };
3228
3315
  }
3229
- getItem(options.key).then(({ result, data }) => {
3230
- const res = { errMsg: 'getStorage:ok' };
3231
- if (result) {
3232
- res.data = data;
3233
- callAsyncSuccess(resolve, res, options);
3316
+ }
3317
+ return {
3318
+ isExist: true,
3319
+ };
3320
+ }
3321
+ function getStorage(options) {
3322
+ const name = 'getStorage';
3323
+ const { isExist, error } = checkContextExist(name, true);
3324
+ if (!isExist) {
3325
+ return error;
3326
+ }
3327
+ const { key, success, fail, complete } = options || {};
3328
+ const handle = new MethodHandler({ name, success, fail, complete });
3329
+ return new Promise((resolve, reject) => {
3330
+ kvStorePromise.then(() => {
3331
+ try {
3332
+ validateParams(name, options, storageSchema);
3234
3333
  }
3235
- else {
3236
- res.errMsg = 'getStorage:fail data not found';
3237
- callAsyncFail(reject, res, options);
3334
+ catch (error) {
3335
+ const res = { errMsg: error.message };
3336
+ return handle.fail(res, { resolve, reject });
3238
3337
  }
3338
+ kvStore = kvStore;
3339
+ kvStore.get(key, (err, data) => {
3340
+ if (err) {
3341
+ handle.fail({ errMsg: `Failed to get data. Code:${err.code},message:${err.message}` }, { resolve, reject });
3342
+ return;
3343
+ }
3344
+ handle.success({ data }, { resolve, reject });
3345
+ });
3239
3346
  });
3240
3347
  });
3241
3348
  }
3242
3349
  function setStorage(options) {
3350
+ const name = 'setStorage';
3351
+ const { isExist, error } = checkContextExist(name, true);
3352
+ if (!isExist) {
3353
+ return error;
3354
+ }
3355
+ const { key, data, success, fail, complete } = options || {};
3356
+ const handle = new MethodHandler({ name, success, fail, complete });
3243
3357
  return new Promise((resolve, reject) => {
3244
- try {
3245
- validateParams('setStorage', options, storageSchema);
3246
- }
3247
- catch (error) {
3248
- const res = { errMsg: error.message };
3249
- return callAsyncFail(reject, res, options);
3250
- }
3251
- const { key, data } = options;
3252
- const res = { errMsg: 'setStorage:ok' };
3253
- preferencesPromise.then((preferences) => __awaiter(this, void 0, void 0, function* () {
3254
- yield preferences.put(key, data);
3255
- yield preferences.flush();
3256
- callAsyncSuccess(resolve, res, options);
3257
- }));
3358
+ kvStorePromise.then(() => {
3359
+ try {
3360
+ validateParams(name, options, storageSchema);
3361
+ }
3362
+ catch (error) {
3363
+ const res = { errMsg: error.message };
3364
+ return handle.fail(res, { resolve, reject });
3365
+ }
3366
+ kvStore = kvStore;
3367
+ kvStore.put(key, data, (err) => {
3368
+ if (err) {
3369
+ handle.fail({ errMsg: `Failed to put data. Code:${err.code},message:${err.message}` }, { resolve, reject });
3370
+ return;
3371
+ }
3372
+ handle.success({}, { resolve, reject });
3373
+ });
3374
+ });
3258
3375
  });
3259
3376
  }
3260
3377
  function removeStorage(options) {
3378
+ const name = 'removeStorage';
3379
+ const { isExist, error } = checkContextExist(name, true);
3380
+ if (!isExist) {
3381
+ return error;
3382
+ }
3383
+ const { key, success, fail, complete } = options || {};
3384
+ const handle = new MethodHandler({ name, success, fail, complete });
3261
3385
  return new Promise((resolve, reject) => {
3262
- try {
3263
- validateParams('removeStorage', options, storageSchema);
3264
- }
3265
- catch (error) {
3266
- const res = { errMsg: error.message };
3267
- return callAsyncFail(reject, res, options);
3268
- }
3269
- const { key } = options;
3270
- preferencesPromise.then((preferences) => __awaiter(this, void 0, void 0, function* () {
3271
- yield preferences.delete(key);
3272
- yield preferences.flush();
3273
- const res = { errMsg: 'removeStorage:ok' };
3274
- callAsyncSuccess(resolve, res, options);
3275
- }));
3276
- });
3277
- }
3278
- function clearStorage(options) {
3279
- return new Promise(resolve => {
3280
- preferencesPromise.then((preferences) => __awaiter(this, void 0, void 0, function* () {
3281
- yield preferences.clear();
3282
- yield preferences.flush();
3283
- const res = { errMsg: 'clearStorage:ok' };
3284
- callAsyncSuccess(resolve, res, options);
3285
- }));
3386
+ kvStorePromise.then(() => {
3387
+ try {
3388
+ validateParams(name, options, storageSchema);
3389
+ }
3390
+ catch (error) {
3391
+ const res = { errMsg: error.message };
3392
+ return handle.fail(res, { resolve, reject });
3393
+ }
3394
+ kvStore = kvStore;
3395
+ kvStore.delete(key, (err) => {
3396
+ if (err) {
3397
+ handle.fail({ errMsg: `Failed to delete data. Code:${err.code},message:${err.message}` }, { resolve, reject });
3398
+ return;
3399
+ }
3400
+ handle.success({}, { resolve, reject });
3401
+ });
3402
+ });
3286
3403
  });
3287
3404
  }
3288
3405
  const getStorageInfoSync = temporarilyNotSupport('getStorageInfoSync');
3289
3406
  const getStorageInfo = temporarilyNotSupport('getStorageInfo');
3290
- const getStorageSync = temporarilyNotSupport('getStorageSync', 'getStorage');
3291
- const setStorageSync = temporarilyNotSupport('setStorageSync', 'setStorage');
3292
- const clearStorageSync = temporarilyNotSupport('clearStorageSync', 'clearStorage');
3293
- const removeStorageSync = temporarilyNotSupport('removeStorageSync', 'removeStorage');
3294
3407
  const createBufferURL = /* @__PURE__ */ temporarilyNotSupport('createBufferURL');
3295
3408
  const revokeBufferURL = /* @__PURE__ */ temporarilyNotSupport('revokeBufferURL');
3296
3409
  const batchSetStorageSync = /* @__PURE__ */ temporarilyNotSupport('batchSetStorageSync');
3297
3410
  const batchSetStorage = /* @__PURE__ */ temporarilyNotSupport('batchSetStorage');
3298
3411
  const batchGetStorageSync = /* @__PURE__ */ temporarilyNotSupport('batchGetStorageSync');
3299
3412
  const batchGetStorage = /* @__PURE__ */ temporarilyNotSupport('batchGetStorage');
3413
+ const clearStorage = temporarilyNotSupport('clearStorage');
3414
+ const getStorageSync = temporarilyNotSupport('getStorageSync', 'getStorage');
3415
+ const setStorageSync = temporarilyNotSupport('setStorageSync', 'setStorage');
3416
+ const clearStorageSync = temporarilyNotSupport('clearStorageSync', 'clearStorage');
3417
+ const removeStorageSync = temporarilyNotSupport('removeStorageSync', 'removeStorage');
3300
3418
 
3301
3419
  class Animation {
3302
3420
  constructor({ duration = 400, delay = 0, timingFunction = 'linear', transformOrigin = '50% 50% 0', unit = 'px' } = {}) {
@@ -3329,6 +3447,9 @@ class Animation {
3329
3447
  transformOrigin,
3330
3448
  rule: Object.assign({}, this.rule)
3331
3449
  });
3450
+ if (this.rule.transform) {
3451
+ this.rule.transform = Object.assign({}, this.rule.transform);
3452
+ }
3332
3453
  return this;
3333
3454
  }
3334
3455
  matrix(a, b, c, d, tx, ty) {
@@ -3340,75 +3461,120 @@ class Animation {
3340
3461
  return this;
3341
3462
  }
3342
3463
  rotate(angle) {
3343
- this.rule.rotate = { x: 0, y: 0, z: 1, angle };
3464
+ if (!this.rule.transform) {
3465
+ this.rule.transform = {};
3466
+ }
3467
+ this.rule.transform.Rotate = { x: 0, y: 0, z: 1, angle };
3344
3468
  return this;
3345
3469
  }
3346
3470
  rotate3d(x, y, z, angle) {
3347
- this.rule.rotate = { x, y, z, angle };
3471
+ if (!this.rule.transform) {
3472
+ this.rule.transform = {};
3473
+ }
3474
+ this.rule.transform.Rotate = { x, y, z, angle };
3348
3475
  return this;
3349
3476
  }
3350
3477
  rotateX(angle) {
3351
- this.rule.rotate = { x: 1, y: 0, z: 0, angle };
3478
+ if (!this.rule.transform) {
3479
+ this.rule.transform = {};
3480
+ }
3481
+ this.rule.transform.Rotate = { x: 1, y: 0, z: 0, angle };
3352
3482
  return this;
3353
3483
  }
3354
3484
  rotateY(angle) {
3355
- this.rule.rotate = { x: 0, y: 1, z: 0, angle };
3485
+ if (!this.rule.transform) {
3486
+ this.rule.transform = {};
3487
+ }
3488
+ this.rule.transform.Rotate = { x: 0, y: 1, z: 0, angle };
3356
3489
  return this;
3357
3490
  }
3358
3491
  rotateZ(angle) {
3359
- this.rule.rotate = { x: 0, y: 0, z: 1, angle };
3492
+ if (!this.rule.transform) {
3493
+ this.rule.transform = {};
3494
+ }
3495
+ this.rule.transform.Rotate = { x: 0, y: 0, z: 1, angle };
3360
3496
  return this;
3361
3497
  }
3362
3498
  scale(sx, sy) {
3363
- this.rule.scale = { x: sx, y: sy };
3499
+ if (!this.rule.transform) {
3500
+ this.rule.transform = {};
3501
+ }
3502
+ this.rule.transform.Scale = { x: sx, y: isUndefined(sy) ? sx : sy };
3364
3503
  return this;
3365
3504
  }
3366
3505
  scale3d(sx, sy, sz) {
3367
- this.rule.scale = { x: sx, y: sy, z: sz };
3506
+ if (!this.rule.transform) {
3507
+ this.rule.transform = {};
3508
+ }
3509
+ this.rule.transform.Scale = { x: sx, y: sy, z: sz };
3368
3510
  return this;
3369
3511
  }
3370
3512
  scaleX(scale) {
3371
- this.rule.scale = { x: scale };
3513
+ if (!this.rule.transform) {
3514
+ this.rule.transform = {};
3515
+ }
3516
+ this.rule.transform.Scale = { x: scale };
3372
3517
  return this;
3373
3518
  }
3374
3519
  scaleY(scale) {
3375
- this.rule.scale = { y: scale };
3520
+ if (!this.rule.transform) {
3521
+ this.rule.transform = {};
3522
+ }
3523
+ this.rule.transform.Scale = { y: scale };
3376
3524
  return this;
3377
3525
  }
3378
3526
  scaleZ(scale) {
3379
- this.rule.scale = { z: scale };
3527
+ if (!this.rule.transform) {
3528
+ this.rule.transform = {};
3529
+ }
3530
+ this.rule.transform.Scale = { z: scale };
3380
3531
  return this;
3381
3532
  }
3382
3533
  skew(ax, ay) {
3383
- this.rule.skew = { x: ax, y: ay };
3534
+ temporarilyNotSupport('animation.skew:' + `${ax}, ${ay}`)(ax, ay);
3384
3535
  return this;
3385
3536
  }
3386
3537
  skewX(angle) {
3387
- this.rule.skew = { x: angle };
3538
+ temporarilyNotSupport('animation.skewX:' + angle)(angle);
3388
3539
  return this;
3389
3540
  }
3390
3541
  skewY(angle) {
3391
- this.rule.skew = { y: angle };
3542
+ temporarilyNotSupport('animation.skewY:' + angle)(angle);
3392
3543
  return this;
3393
3544
  }
3394
3545
  translate(tx, ty) {
3395
- this.rule.translate = { x: tx, y: ty };
3546
+ if (!this.rule.transform) {
3547
+ this.rule.transform = {};
3548
+ }
3549
+ this.rule.transform.Translate = { x: tx, y: ty };
3396
3550
  return this;
3397
3551
  }
3398
3552
  translate3d(tx, ty, tz) {
3399
- this.rule.translate = { x: tx, y: ty, z: tz };
3553
+ if (!this.rule.transform) {
3554
+ this.rule.transform = {};
3555
+ }
3556
+ this.rule.transform.Translate = { x: tx, y: ty, z: tz };
3400
3557
  return this;
3401
3558
  }
3402
3559
  translateX(translation) {
3403
- this.rule.translate = { x: translation };
3560
+ if (!this.rule.transform) {
3561
+ this.rule.transform = {};
3562
+ }
3563
+ this.rule.transform.Translate = { x: translation };
3404
3564
  return this;
3405
3565
  }
3406
3566
  translateY(translation) {
3407
- this.rule.translate = { y: translation };
3567
+ if (!this.rule.transform) {
3568
+ this.rule.transform = {};
3569
+ }
3570
+ this.rule.transform.Translate = { y: translation };
3408
3571
  return this;
3409
3572
  }
3410
3573
  translateZ(translation) {
3411
- this.rule.translate = { z: translation };
3574
+ if (!this.rule.transform) {
3575
+ this.rule.transform = {};
3576
+ }
3577
+ this.rule.transform.Translate = { z: translation };
3412
3578
  return this;
3413
3579
  }
3414
3580
  opacity(value) {
@@ -3420,15 +3586,15 @@ class Animation {
3420
3586
  return this;
3421
3587
  }
3422
3588
  width(value) {
3423
- this.rule.size = Object.assign(Object.assign({}, this.rule.size), { width: value });
3589
+ this.rule.width = value;
3424
3590
  return this;
3425
3591
  }
3426
3592
  height(value) {
3427
- this.rule.size = Object.assign(Object.assign({}, this.rule.size), { height: value });
3593
+ this.rule.height = value;
3428
3594
  return this;
3429
3595
  }
3430
3596
  left(value) {
3431
- temporarilyNotSupport('animation.left:' + value)(value);
3597
+ this.rule.left = value;
3432
3598
  return this;
3433
3599
  }
3434
3600
  right(value) {
@@ -3436,7 +3602,7 @@ class Animation {
3436
3602
  return this;
3437
3603
  }
3438
3604
  top(value) {
3439
- temporarilyNotSupport('animation.top:' + value)(value);
3605
+ this.rule.top = value;
3440
3606
  return this;
3441
3607
  }
3442
3608
  bottom(value) {
@@ -3455,7 +3621,8 @@ function setBackgroundColor(options) {
3455
3621
  const handle = new MethodHandler({ name: 'setBackgroundColor', success, fail, complete });
3456
3622
  return new Promise((resolve, reject) => {
3457
3623
  eventCenter.trigger('__taroPageStyle', {
3458
- backgroundColor: options.backgroundColor || options.backgroundColorTop || options.backgroundColorBottom,
3624
+ backgroundColor: options.backgroundColorBottom || options.backgroundColor,
3625
+ backgroundColorContext: options.backgroundColorTop || options.backgroundColor
3459
3626
  });
3460
3627
  return handle.success({}, { resolve, reject });
3461
3628
  });
@@ -3494,10 +3661,11 @@ function showToast(options) {
3494
3661
  const res = { errMsg: error.message };
3495
3662
  return callAsyncFail(reject, res, options);
3496
3663
  }
3497
- prompt.showToast({
3664
+ promptAction.showToast({
3498
3665
  message: options.title,
3499
3666
  duration: options.duration,
3500
- bottom: options.bottom
3667
+ bottom: options.bottom,
3668
+ showMode: 1 // 设置弹窗显示模式,显示在应用之上。
3501
3669
  });
3502
3670
  callAsyncSuccess(resolve, resCallback('showToast'), options);
3503
3671
  });
@@ -3527,25 +3695,24 @@ function showModal(options) {
3527
3695
  color: confirmColor
3528
3696
  });
3529
3697
  }
3530
- return new Promise(resolve => {
3698
+ return new Promise((resolve, reject) => {
3531
3699
  const modalOptions = {
3532
3700
  title,
3533
3701
  message: content,
3534
3702
  buttons: buttons,
3535
- success: (data) => {
3536
- if (data.index === 1 || !showCancel) {
3537
- callAsyncSuccess(resolve, Object.assign(Object.assign({}, resCallback('showModal')), { confirm: true, cancel: false, content: null }), options);
3538
- }
3539
- else {
3540
- callAsyncSuccess(resolve, Object.assign(Object.assign({}, resCallback('showModal')), { confirm: false, cancel: true }), options);
3541
- }
3542
- },
3543
- // 鸿蒙没有失败方法,只有取消
3544
- cancel: (_) => {
3703
+ };
3704
+ promptAction.showDialog(modalOptions, (error, data) => {
3705
+ if (error) {
3706
+ const res = { errMsg: error };
3707
+ callAsyncFail(reject, res, options);
3708
+ }
3709
+ if (data.index === 0 && showCancel) {
3545
3710
  callAsyncSuccess(resolve, Object.assign(Object.assign({}, resCallback('showModal')), { confirm: false, cancel: true }), options);
3546
3711
  }
3547
- };
3548
- prompt.showDialog(modalOptions);
3712
+ else {
3713
+ callAsyncSuccess(resolve, Object.assign(Object.assign({}, resCallback('showModal')), { confirm: true, cancel: false, content: null }), options);
3714
+ }
3715
+ });
3549
3716
  });
3550
3717
  }
3551
3718
  const showActionSheetSchema = {
@@ -3576,28 +3743,18 @@ function showActionSheet(options) {
3576
3743
  });
3577
3744
  const actionSheetOptions = {
3578
3745
  title,
3579
- buttons,
3580
- success: (data) => {
3581
- callAsyncSuccess(resolve, Object.assign(Object.assign({}, data), resCallback('showActionSheet')), options);
3582
- },
3583
- // 取消方法,并非失败
3584
- fail: (data) => {
3585
- callAsyncFail(reject, Object.assign(Object.assign({}, data), { errMsg: data.errMsg.replace('showActionMenu', 'showActionSheet') }), options);
3586
- }
3746
+ buttons
3587
3747
  };
3588
- prompt.showActionMenu(actionSheetOptions);
3589
- });
3590
- }
3591
- function hideToast(options) {
3592
- return new Promise(resolve => {
3593
- prompt.showToast({
3594
- message: '关闭中',
3595
- duration: 10,
3596
- bottom: '9999px'
3748
+ promptAction.showActionMenu(actionSheetOptions, (error, data) => {
3749
+ var _a;
3750
+ if (error) {
3751
+ callAsyncFail(reject, Object.assign(Object.assign({}, data), { errMsg: (_a = data.errMsg) === null || _a === void 0 ? void 0 : _a.replace('showActionMenu', 'showActionSheet') }), options);
3752
+ }
3753
+ callAsyncSuccess(resolve, Object.assign(Object.assign({}, data), resCallback('showActionSheet')), options);
3597
3754
  });
3598
- callAsyncSuccess(resolve, resCallback('hideToast'), options);
3599
3755
  });
3600
3756
  }
3757
+ const hideToast = /* @__PURE__ */ temporarilyNotSupport('hideToast');
3601
3758
  const showLoading = temporarilyNotSupport('showLoading');
3602
3759
  const hideLoading = temporarilyNotSupport('hideLoading');
3603
3760
  const enableAlertBeforeUnload = /* @__PURE__ */ temporarilyNotSupport('enableAlertBeforeUnload');
@@ -3618,7 +3775,7 @@ const setNavigationBarTitle = function (options) {
3618
3775
  };
3619
3776
  const setNavigationBarColor = function (options) {
3620
3777
  const { success, fail, complete } = options || {};
3621
- const handle = new MethodHandler({ name: 'setNavigationBarTitle', success, fail, complete });
3778
+ const handle = new MethodHandler({ name: 'setNavigationBarColor', success, fail, complete });
3622
3779
  return new Promise((resolve, reject) => {
3623
3780
  eventCenter.trigger('__taroNavigationStyle', {
3624
3781
  animation: options.animation,
@@ -3660,10 +3817,13 @@ const hideHomeButton = function (options) {
3660
3817
  };
3661
3818
 
3662
3819
  const startPullDownRefresh = function (options) {
3663
- return new Promise(resolve => {
3820
+ return new Promise((resolve, reject) => {
3664
3821
  var _a;
3665
3822
  const taro = Current.taro;
3666
3823
  const page = taro.getCurrentInstance().page;
3824
+ if (!page) {
3825
+ return callAsyncFail(reject, { errMsg: 'stopPullDownRefresh:fail' }, options);
3826
+ }
3667
3827
  if (page.isRefreshing instanceof Array) {
3668
3828
  const index = page.tabBarCurrentIndex || 0;
3669
3829
  page.isRefreshing[index] = true;
@@ -3677,10 +3837,13 @@ const startPullDownRefresh = function (options) {
3677
3837
  });
3678
3838
  };
3679
3839
  const stopPullDownRefresh = function (options) {
3680
- return new Promise(resolve => {
3840
+ return new Promise((resolve, reject) => {
3681
3841
  var _a;
3682
3842
  const taro = Current.taro;
3683
3843
  const page = taro.getCurrentInstance().page;
3844
+ if (!page) {
3845
+ return callAsyncFail(reject, { errMsg: 'stopPullDownRefresh:fail' }, options);
3846
+ }
3684
3847
  if (page.isRefreshing instanceof Array) {
3685
3848
  const index = page.tabBarCurrentIndex || 0;
3686
3849
  page.isRefreshing[index] = false;
@@ -3713,8 +3876,8 @@ const pageScrollTo = (options) => {
3713
3876
  const taro = Current.taro;
3714
3877
  const page = taro.getCurrentInstance().page;
3715
3878
  let scrollValue = -1;
3716
- let scroller = page.scroller;
3717
- const currentPageNode = getPageScrollerOrNode(page.node, page);
3879
+ let scroller = getPageScrollerOrNode(page === null || page === void 0 ? void 0 : page.scroller, page);
3880
+ const currentPageNode = getPageScrollerOrNode(page === null || page === void 0 ? void 0 : page.node, page);
3718
3881
  if (scrollTop || typeof scrollTop === 'number') {
3719
3882
  scrollValue = scrollTop;
3720
3883
  }
@@ -3736,15 +3899,15 @@ const pageScrollTo = (options) => {
3736
3899
  scroller = getPageScrollerOrNode(scroller, page);
3737
3900
  const { yOffset } = scroller.currentOffset();
3738
3901
  if (areaInfo) {
3739
- scrollValue = areaInfo.globalPosition.y + yOffset + pxTransformHelper(offsetTop, 'px', true);
3902
+ scrollValue = areaInfo.globalPosition.y + yOffset + pxTransformHelper$1(offsetTop, 'px', true);
3740
3903
  }
3741
3904
  }
3742
- const { xOffset } = scroller.currentOffset();
3743
- if (scrollValue === -1) {
3905
+ if (!scroller || scrollValue === -1) {
3744
3906
  return handle.fail({
3745
3907
  errMsg: '请检查传入的 scrollTop 或 selector 是否合法'
3746
3908
  }, { resolve, reject });
3747
3909
  }
3910
+ const { xOffset } = scroller.currentOffset();
3748
3911
  try {
3749
3912
  scroller.scrollTo({
3750
3913
  xOffset,
@@ -3776,7 +3939,7 @@ const toggleTabBar = function (type) {
3776
3939
  var _a, _b;
3777
3940
  const taro = Current.taro;
3778
3941
  const page = taro.getCurrentInstance().page;
3779
- const currentData = ((_a = page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || page.tabBar;
3942
+ const currentData = ((_a = page === null || page === void 0 ? void 0 : page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || (page === null || page === void 0 ? void 0 : page.tabBar);
3780
3943
  const res = { errMsg: `${type}TabBar:ok` };
3781
3944
  const error = { errMsg: `${type}TabBar:fail not TabBar page` };
3782
3945
  if (!currentData) {
@@ -3801,7 +3964,7 @@ const setTabBarStyle = function (options = {}) {
3801
3964
  var _a, _b;
3802
3965
  const taro = Current.taro;
3803
3966
  const page = taro.getCurrentInstance().page;
3804
- const currentData = ((_a = page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || page.tabBar;
3967
+ const currentData = ((_a = page === null || page === void 0 ? void 0 : page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || (page === null || page === void 0 ? void 0 : page.tabBar);
3805
3968
  const res = { errMsg: 'setTabBarStyle:ok' };
3806
3969
  const error = { errMsg: 'setTabBarStyle:fail not TabBar page' };
3807
3970
  if (!currentData) {
@@ -3828,7 +3991,7 @@ const setTabBarItem = function (options) {
3828
3991
  var _a, _b;
3829
3992
  const taro = Current.taro;
3830
3993
  const page = taro.getCurrentInstance().page;
3831
- const currentData = ((_a = page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || page.tabBar;
3994
+ const currentData = ((_a = page === null || page === void 0 ? void 0 : page._data) === null || _a === void 0 ? void 0 : _a.taroTabBar) || (page === null || page === void 0 ? void 0 : page.tabBar);
3832
3995
  const res = { errMsg: 'setTabBarItem:ok' };
3833
3996
  const error = { errMsg: 'setTabBarItem:fail not TabBar page' };
3834
3997
  if (!currentData) {
@@ -3921,19 +4084,16 @@ class IntersectionObserver {
3921
4084
  };
3922
4085
  const taro = Current.taro;
3923
4086
  const page = taro.getCurrentInstance().page;
3924
- const currentPage = getPageScrollerOrNode(page.node, page);
3925
- this._component = component || currentPage;
4087
+ this._component = component || getPageScrollerOrNode(page === null || page === void 0 ? void 0 : page.node, page);
3926
4088
  Object.assign(this._options, options);
3927
4089
  }
3928
4090
  disconnect() {
3929
- var _a;
3930
- if (this._observerNodes) {
4091
+ if (this._observerNodes && this._component) {
3931
4092
  if (this._observerNodes instanceof Array) {
3932
4093
  this._observerNodes.forEach((n) => {
3933
- var _a;
3934
4094
  disconnectEvent(n, VISIBLE_CHANGE_EVENT_NAME);
3935
4095
  // @ts-ignore
3936
- (_a = n._nodeInfo) === null || _a === void 0 ? void 0 : _a.thresholds = null;
4096
+ n._nodeInfo.thresholds = null;
3937
4097
  });
3938
4098
  }
3939
4099
  else {
@@ -3941,35 +4101,40 @@ class IntersectionObserver {
3941
4101
  // @ts-ignore
3942
4102
  if (this._observerNodes._nodeInfo) {
3943
4103
  // @ts-ignore
3944
- (_a = this._observerNodes._nodeInfo) === null || _a === void 0 ? void 0 : _a.thresholds = null;
4104
+ this._observerNodes._nodeInfo.thresholds = null;
3945
4105
  }
3946
4106
  }
3947
4107
  }
3948
4108
  }
3949
4109
  observe(targetSelector, callback) {
3950
- var _a;
4110
+ if (!this._component)
4111
+ return;
3951
4112
  const { observeAll, thresholds } = this._options;
3952
4113
  const node = findChildNodeWithDFS(this._component, targetSelector, observeAll);
3953
4114
  this._observerNodes = node;
3954
4115
  if (node) {
3955
4116
  if (node instanceof Array) {
3956
4117
  node.forEach(n => {
3957
- var _a;
3958
4118
  // @ts-ignore
3959
- (_a = n._nodeInfo) === null || _a === void 0 ? void 0 : _a.thresholds = thresholds;
4119
+ n._nodeInfo.thresholds = thresholds;
3960
4120
  setNodeEventCallbackAndTriggerComponentUpdate(n, VISIBLE_CHANGE_EVENT_NAME, (isVisible, currentRatio) => {
3961
- callback(this.handleResult(isVisible, currentRatio));
4121
+ callback(this.handleResult(isVisible, currentRatio, n));
3962
4122
  });
3963
4123
  });
3964
4124
  }
3965
4125
  else {
3966
4126
  // @ts-ignore
3967
- (_a = node._nodeInfo) === null || _a === void 0 ? void 0 : _a.thresholds = thresholds;
4127
+ node._nodeInfo.thresholds = thresholds;
3968
4128
  setNodeEventCallbackAndTriggerComponentUpdate(node, VISIBLE_CHANGE_EVENT_NAME, (isVisible, currentRatio) => {
3969
- callback(this.handleResult(isVisible, currentRatio));
4129
+ callback(this.handleResult(isVisible, currentRatio, node));
3970
4130
  });
3971
4131
  }
3972
4132
  }
4133
+ else {
4134
+ callback({
4135
+ errMsg: 'IntersectionObserver.observe:fail cannot find the node for selector.'
4136
+ });
4137
+ }
3973
4138
  }
3974
4139
  relativeTo() {
3975
4140
  temporarilyNotSupport('relativeTo')();
@@ -3980,8 +4145,10 @@ class IntersectionObserver {
3980
4145
  return this;
3981
4146
  }
3982
4147
  // @ts-ignore
3983
- handleResult(isVisible, currentRatio) {
4148
+ handleResult(isVisible, currentRatio, node) {
3984
4149
  const result = {
4150
+ id: node.id,
4151
+ dataset: node.dataset,
3985
4152
  intersectionRatio: currentRatio,
3986
4153
  // TODO 未做,等待能拿到element的info信息
3987
4154
  boundingClientRect: {
@@ -4189,32 +4356,45 @@ function filter(fields, dom) {
4189
4356
  }
4190
4357
  function querySelector(selector, selectAll) {
4191
4358
  if (typeof selector === 'string') {
4192
- return parseHandler(selector, selectAll);
4359
+ return selector.split(',').reduce((prev, current) => {
4360
+ const item = current.trim();
4361
+ return prev.concat(parseHandler(item, selectAll));
4362
+ }, []);
4193
4363
  }
4194
- return null;
4364
+ return [];
4195
4365
  }
4196
4366
  function queryBat(queue, cb) {
4197
4367
  const result = [];
4198
4368
  const taro = Current.taro;
4199
4369
  const page = taro.getCurrentInstance().page;
4200
- const element = getPageScrollerOrNode(page.node, page);
4201
- if (element == null)
4370
+ const element = getPageScrollerOrNode(page === null || page === void 0 ? void 0 : page.node, page);
4371
+ if (!element)
4202
4372
  return null;
4203
4373
  arr = [];
4204
4374
  traversalDFSDom(element);
4205
- queue.forEach(item => {
4375
+ queue.forEach((item) => {
4206
4376
  const { selector, single, fields } = item;
4207
- const nodeList = querySelector(selector, !single);
4208
- result.push(nodeList.map(dom => {
4377
+ if (single) {
4378
+ const dom = querySelector(selector, !single)[0];
4209
4379
  // eslint-disable-next-line no-async-promise-executor
4210
- return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
4380
+ result.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
4211
4381
  yield setNodeEventCallbackAndTriggerComponentUpdate(dom, AREA_CHANGE_EVENT_NAME, null, true);
4212
4382
  resolve(filter(fields, dom));
4383
+ })));
4384
+ }
4385
+ else {
4386
+ const nodeList = querySelector(selector, !single);
4387
+ result.push(nodeList.map(dom => {
4388
+ // eslint-disable-next-line no-async-promise-executor
4389
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
4390
+ yield setNodeEventCallbackAndTriggerComponentUpdate(dom, AREA_CHANGE_EVENT_NAME, null, true);
4391
+ resolve(filter(fields, dom));
4392
+ }));
4213
4393
  }));
4214
- }));
4394
+ }
4215
4395
  });
4216
4396
  Promise.all(result.map(item => {
4217
- return Promise.all(item);
4397
+ return item instanceof Array ? Promise.all(item) : item;
4218
4398
  })).then(data => {
4219
4399
  cb(data);
4220
4400
  });
@@ -4707,7 +4887,7 @@ const defaultBaseFontSize = 20;
4707
4887
  const defaultUnitPrecision = 5;
4708
4888
  const defaultTargetUnit = 'vp';
4709
4889
  function getApp$1() {
4710
- return Current.app;
4890
+ return Current.app || {};
4711
4891
  }
4712
4892
  function initPxTransform({ designWidth = defaultDesignWidth, deviceRatio = defaultDesignRatio, baseFontSize = defaultBaseFontSize, unitPrecision = defaultUnitPrecision, targetUnit = defaultTargetUnit }) {
4713
4893
  const taro = Current.taro;
@@ -4721,19 +4901,56 @@ function initPxTransform({ designWidth = defaultDesignWidth, deviceRatio = defau
4721
4901
  config.unitPrecision = unitPrecision;
4722
4902
  }
4723
4903
  }
4724
- _display.getDefaultDisplaySync();
4904
+ const display = _display.getDefaultDisplaySync();
4905
+ let displayWidth = display.width;
4906
+ let ratioCache = false;
4907
+ let designWidthFunc;
4908
+ let designWidth = defaultDesignWidth;
4909
+ function getRatio(value) {
4910
+ var _a;
4911
+ // Note: 提前调用 display 可能无法获取正确值
4912
+ if (ratioCache === false || displayWidth !== display.width) {
4913
+ const config = ((_a = Current.taro) === null || _a === void 0 ? void 0 : _a.config) || {};
4914
+ if (!isFunction(designWidthFunc)) {
4915
+ designWidthFunc = isFunction(config.designWidth)
4916
+ ? config.designWidth
4917
+ : () => config.designWidth;
4918
+ designWidth = designWidthFunc(value) || defaultDesignWidth;
4919
+ }
4920
+ displayWidth = display.width;
4921
+ ratioCache = Math.min(display.width, display.height) / designWidth;
4922
+ }
4923
+ return ratioCache;
4924
+ }
4925
+ // Note: 设置为 style 单位时会自动完成设计稿转换,设计开发者调用 API 时也许抹平差异,例如 pageScrollTo[option.offsetTop]
4926
+ function pxTransformHelper(size, unit, isNumber = false) {
4927
+ var _a;
4928
+ const config = ((_a = Current.taro) === null || _a === void 0 ? void 0 : _a.config) || {};
4929
+ const targetUnit = unit || config.targetUnit || defaultTargetUnit;
4930
+ if (targetUnit === 'PX') {
4931
+ return px2vp(size * display.scaledDensity) + 'vp';
4932
+ }
4933
+ const ratio = getRatio(size);
4934
+ let val = size * ratio;
4935
+ switch (targetUnit) {
4936
+ case 'vp':
4937
+ // Note: 在应用创建前调用无效
4938
+ val = px2vp(val);
4939
+ break;
4940
+ }
4941
+ return isNumber ? val : val + targetUnit;
4942
+ }
4725
4943
  function pxTransform(size) {
4726
4944
  var _a;
4727
4945
  const config = ((_a = Current.taro) === null || _a === void 0 ? void 0 : _a.config) || {};
4728
4946
  const targetUnit = config.targetUnit || defaultTargetUnit;
4729
- let val = size;
4947
+ const val = size;
4730
4948
  switch (targetUnit) {
4731
4949
  case 'vp':
4732
- val = px2vp(size);
4733
- break;
4950
+ return pxTransformHelper(size, 'px');
4734
4951
  // NOTE: 鸿蒙环境下 style 会自动完成设计稿转换,无需在方法内二次调整
4735
4952
  }
4736
- return val + config.targetUnit;
4953
+ return val + targetUnit;
4737
4954
  }
4738
4955
  function canIUseWebp() {
4739
4956
  return true;