From a1c02c54ee383fcf1bc84b61bd67cf7f9474216f Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 18:08:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?recyclerview-animators=E9=80=82=E9=85=8DOHP?= =?UTF-8?q?M=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- .gitignore | 18 ++---- AppScope/app.json5 | 2 +- build-profile.json5 | 17 +++-- entry/.gitignore | 5 +- entry/build-profile.json5 | 2 +- entry/hvigorfile.ts | 8 ++- entry/{package.json => oh-package.json5} | 4 +- .../src/main/ets/entryability/EntryAbility.ts | 6 +- entry/src/main/module.json5 | 4 +- .../ohosTest/ets/TestAbility/TestAbility.ets | 6 +- entry/src/ohosTest/ets/test/Ability.test.ets | 12 ++-- entry/src/ohosTest/module.json5 | 4 +- hvigor/hvigor-config.json5 | 18 ++++++ hvigor/hvigor-wrapper.js | 1 + hvigorfile.ts | 8 ++- hvigorw | 48 ++++++++++++++ hvigorw.bat | 64 +++++++++++++++++++ package.json => oh-package.json5 | 15 ++--- recyclerview_animators/.gitignore | 5 +- recyclerview_animators/consumer-rules.txt | 0 recyclerview_animators/hvigorfile.ts | 8 ++- recyclerview_animators/obfuscation-rules.txt | 18 ++++++ .../{package.json => oh-package.json5} | 6 +- 23 files changed, 226 insertions(+), 53 deletions(-) rename entry/{package.json => oh-package.json5} (93%) create mode 100644 hvigor/hvigor-config.json5 create mode 100644 hvigor/hvigor-wrapper.js create mode 100644 hvigorw create mode 100644 hvigorw.bat rename package.json => oh-package.json5 (56%) create mode 100644 recyclerview_animators/consumer-rules.txt create mode 100644 recyclerview_animators/obfuscation-rules.txt rename recyclerview_animators/{package.json => oh-package.json5} (86%) diff --git a/.gitignore b/.gitignore index 1f9c89d..23b1633 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,12 @@ /node_modules -**/local.properties +/local.properties /.idea **/build -*.iml -.gradle/ -.idea/ -.DS_Store -/build -/captures -.externalNativeBuild -/entry/.preview -/entry/node_modules +/.hvigor .cxx -.hvigor +/.clangd +/.clang-format +/.clang-tidy **/package-lock.json +**/oh-package-lock.json5 +**/oh_modules \ No newline at end of file diff --git a/AppScope/app.json5 b/AppScope/app.json5 index ccaeee9..97bb805 100644 --- a/AppScope/app.json5 +++ b/AppScope/app.json5 @@ -1,6 +1,6 @@ { "app": { - "bundleName": "cn.openharmony.recyclerview", + "bundleName": "cn.openharmony.recyclerviewanimators", "vendor": "example", "versionCode": 1000000, "versionName": "1.0.0", diff --git a/build-profile.json5 b/build-profile.json5 index a2df217..9eb68e6 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -1,13 +1,22 @@ { "app": { - "signingConfigs": [ - ], - "compileSdkVersion": 9, - "compatibleSdkVersion": 9, + "signingConfigs": [], "products": [ { "name": "default", "signingConfig": "default", + "compileSdkVersion": 10, + "compatibleSdkVersion": 10, + "targetSdkVersion": 10, + "runtimeOS": "OpenHarmony" + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" } ] }, diff --git a/entry/.gitignore b/entry/.gitignore index 4f9a973..e2713a2 100644 --- a/entry/.gitignore +++ b/entry/.gitignore @@ -1,3 +1,6 @@ /node_modules +/oh_modules /.preview -/build \ No newline at end of file +/build +/.cxx +/.test \ No newline at end of file diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 index f8f0340..75c41e9 100644 --- a/entry/build-profile.json5 +++ b/entry/build-profile.json5 @@ -1,5 +1,5 @@ { - "apiType": 'stageMode', + "apiType": "stageMode", "buildOption": { }, "targets": [ diff --git a/entry/hvigorfile.ts b/entry/hvigorfile.ts index 80e4ec5..c6edcd9 100644 --- a/entry/hvigorfile.ts +++ b/entry/hvigorfile.ts @@ -1,2 +1,6 @@ -// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. -export { hapTasks } from '@ohos/hvigor-ohos-plugin'; +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/entry/package.json b/entry/oh-package.json5 similarity index 93% rename from entry/package.json rename to entry/oh-package.json5 index 616cf20..8124860 100644 --- a/entry/package.json +++ b/entry/oh-package.json5 @@ -9,8 +9,8 @@ }, "description": "example description", "repository": {}, - "version": "1.1.1", + "version": "2.0.0", "dependencies": { "@ohos/recyclerview-animators": "file:../recyclerview_animators" } -} +} \ No newline at end of file diff --git a/entry/src/main/ets/entryability/EntryAbility.ts b/entry/src/main/ets/entryability/EntryAbility.ts index 06d557b..cd5283d 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ts +++ b/entry/src/main/ets/entryability/EntryAbility.ts @@ -14,12 +14,14 @@ * limitations under the License. */ -import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import hilog from '@ohos.hilog'; +import UIAbility from '@ohos.app.ability.UIAbility'; +import Want from '@ohos.app.ability.Want'; import window from '@ohos.window'; export default class EntryAbility extends UIAbility { - onCreate(want, launchParam) { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); } diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 index f635347..6f0c4dc 100644 --- a/entry/src/main/module.json5 +++ b/entry/src/main/module.json5 @@ -20,13 +20,13 @@ "abilities": [ { "name": "EntryAbility", - "srcEntrance": "./ets/entryability/EntryAbility.ts", + "srcEntry": "./ets/entryability/EntryAbility.ts", "description": "$string:EntryAbility_desc", "icon": "$media:icon", "label": "$string:EntryAbility_label", "startWindowIcon": "$media:icon", "startWindowBackground": "$color:start_window_background", - "visible": true, + "exported": true, "skills": [ { "entities": [ diff --git a/entry/src/ohosTest/ets/TestAbility/TestAbility.ets b/entry/src/ohosTest/ets/TestAbility/TestAbility.ets index d79f7ec..21e150a 100644 --- a/entry/src/ohosTest/ets/TestAbility/TestAbility.ets +++ b/entry/src/ohosTest/ets/TestAbility/TestAbility.ets @@ -22,13 +22,13 @@ import testsuite from '../test/List.test'; import window from '@ohos.window'; export default class TestAbility extends UIAbility { - onCreate(want, launchParam) { + onCreate(want: ESObject, launchParam: ESObject) { hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); hilog.info(0x0000, 'testTag', '%{public}s', 'want param:' + JSON.stringify(want) ?? ''); hilog.info(0x0000, 'testTag', '%{public}s', 'launchParam:'+ JSON.stringify(launchParam) ?? ''); - var abilityDelegator: any + let abilityDelegator: ESObject abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() - var abilityDelegatorArguments: any + let abilityDelegatorArguments: ESObject abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) diff --git a/entry/src/ohosTest/ets/test/Ability.test.ets b/entry/src/ohosTest/ets/test/Ability.test.ets index 5c22875..02585ce 100644 --- a/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/entry/src/ohosTest/ets/test/Ability.test.ets @@ -18,27 +18,27 @@ import hilog from '@ohos.hilog'; import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' export default function abilityTest() { - describe('ActsAbilityTest', function () { + describe('ActsAbilityTest', ()=> { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll(()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach(()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach(()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll(()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('assertContain',0, function () { + it('assertContain',0, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); let a = 'abc' diff --git a/entry/src/ohosTest/module.json5 b/entry/src/ohosTest/module.json5 index 476d153..4fc9701 100644 --- a/entry/src/ohosTest/module.json5 +++ b/entry/src/ohosTest/module.json5 @@ -14,11 +14,11 @@ "abilities": [ { "name": "TestAbility", - "srcEntrance": "./ets/testability/TestAbility.ets", + "srcEntry": "./ets/testability/TestAbility.ets", "description": "$string:TestAbility_desc", "icon": "$media:icon", "label": "$string:TestAbility_label", - "visible": true, + "exported": true, "startWindowIcon": "$media:icon", "startWindowBackground": "$color:start_window_background", "skills": [ diff --git a/hvigor/hvigor-config.json5 b/hvigor/hvigor-config.json5 new file mode 100644 index 0000000..277e9a1 --- /dev/null +++ b/hvigor/hvigor-config.json5 @@ -0,0 +1,18 @@ +{ + "hvigorVersion": "3.0.2", + "dependencies": { + "@ohos/hvigor-ohos-plugin": "3.0.2" + }, + "execution": { + // "daemon": true, /* Enable daemon compilation. Default: true */ + // "incremental": true, /* Enable incremental compilation. Default: true */ + // "parallel": true, /* Enable parallel compilation. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Default: false */ + } +} diff --git a/hvigor/hvigor-wrapper.js b/hvigor/hvigor-wrapper.js new file mode 100644 index 0000000..2be61f6 --- /dev/null +++ b/hvigor/hvigor-wrapper.js @@ -0,0 +1 @@ +"use strict";var u=require("path"),D=require("os"),e=require("fs"),t=require("child_process"),r=require("crypto"),n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i={},C={},F=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(C,"__esModule",{value:!0}),C.maxPathLength=C.isMac=C.isLinux=C.isWindows=void 0;const E=F(D),A="Windows_NT",o="Darwin";function a(){return E.default.type()===A}function c(){return E.default.type()===o}C.isWindows=a,C.isLinux=function(){return"Linux"===E.default.type()},C.isMac=c,C.maxPathLength=function(){return c()?1016:a()?259:4095},function(e){var t=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),r=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),i=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&t(D,u,e);return r(D,u),D};Object.defineProperty(e,"__esModule",{value:!0}),e.WORK_SPACE=e.HVIGOR_PROJECT_WRAPPER_HOME=e.HVIGOR_PROJECT_ROOT_DIR=e.HVIGOR_PROJECT_CACHES_HOME=e.HVIGOR_PNPM_STORE_PATH=e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=e.PROJECT_CACHES=e.HVIGOR_WRAPPER_TOOLS_HOME=e.HVIGOR_USER_HOME=e.DEFAULT_PACKAGE_JSON=e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME=e.PNPM=e.HVIGOR=e.NPM_TOOL=e.PNPM_TOOL=e.HVIGOR_ENGINE_PACKAGE_NAME=void 0;const F=i(D),E=i(u),A=C;e.HVIGOR_ENGINE_PACKAGE_NAME="@ohos/hvigor",e.PNPM_TOOL=(0,A.isWindows)()?"pnpm.cmd":"pnpm",e.NPM_TOOL=(0,A.isWindows)()?"npm.cmd":"npm",e.HVIGOR="hvigor",e.PNPM="pnpm",e.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME="hvigor-config.json5",e.DEFAULT_PACKAGE_JSON="package.json",e.HVIGOR_USER_HOME=E.resolve(F.homedir(),".hvigor"),e.HVIGOR_WRAPPER_TOOLS_HOME=E.resolve(e.HVIGOR_USER_HOME,"wrapper","tools"),e.PROJECT_CACHES="project_caches",e.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH=E.resolve(e.HVIGOR_WRAPPER_TOOLS_HOME,"node_modules",".bin",e.PNPM_TOOL),e.HVIGOR_PNPM_STORE_PATH=E.resolve(e.HVIGOR_USER_HOME,"caches"),e.HVIGOR_PROJECT_CACHES_HOME=E.resolve(e.HVIGOR_USER_HOME,e.PROJECT_CACHES),e.HVIGOR_PROJECT_ROOT_DIR=process.cwd(),e.HVIGOR_PROJECT_WRAPPER_HOME=E.resolve(e.HVIGOR_PROJECT_ROOT_DIR,e.HVIGOR),e.WORK_SPACE="workspace"}(i);var s={},l={};Object.defineProperty(l,"__esModule",{value:!0}),l.logInfoPrintConsole=l.logErrorAndExit=void 0,l.logErrorAndExit=function(u){u instanceof Error?console.error(u.message):console.error(u),process.exit(-1)},l.logInfoPrintConsole=function(u){console.log(u)};var B=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),d=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),f=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&B(D,u,e);return d(D,u),D};Object.defineProperty(s,"__esModule",{value:!0});var _=s.executeBuild=void 0;const p=f(e),O=f(u),h=l;_=s.executeBuild=function(u){const D=O.resolve(u,"node_modules","@ohos","hvigor","bin","hvigor.js");try{const u=p.realpathSync(D);require(u)}catch(e){(0,h.logErrorAndExit)(`Error: ENOENT: no such file ${D},delete ${u} and retry.`)}};var P={},v={},g={},m={};Object.defineProperty(m,"__esModule",{value:!0}),m.Unicode=void 0;class R{}m.Unicode=R,R.SPACE_SEPARATOR=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,R.ID_START=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,R.ID_CONTINUE=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/,Object.defineProperty(g,"__esModule",{value:!0}),g.JudgeUtil=void 0;const y=m;g.JudgeUtil=class{static isIgnoreChar(u){return"string"==typeof u&&("\t"===u||"\v"===u||"\f"===u||" "===u||" "===u||"\ufeff"===u||"\n"===u||"\r"===u||"\u2028"===u||"\u2029"===u)}static isSpaceSeparator(u){return"string"==typeof u&&y.Unicode.SPACE_SEPARATOR.test(u)}static isIdStartChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||y.Unicode.ID_START.test(u))}static isIdContinueChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||y.Unicode.ID_CONTINUE.test(u))}static isDigitWithoutZero(u){return/[1-9]/.test(u)}static isDigit(u){return"string"==typeof u&&/[0-9]/.test(u)}static isHexDigit(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};var I=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(v,"__esModule",{value:!0}),v.parseJsonText=v.parseJsonFile=void 0;const N=I(e),b=I(D),S=I(u),w=g;var H;!function(u){u[u.Char=0]="Char",u[u.EOF=1]="EOF",u[u.Identifier=2]="Identifier"}(H||(H={}));let x,M,T,V,G,j,J="start",U=[],W=0,L=1,$=0,k=!1,K="default",z="'",q=1;function Z(u,D=!1){M=String(u),J="start",U=[],W=0,L=1,$=0,V=void 0,k=D;do{x=X(),ru[J]()}while("eof"!==x.type);return V}function X(){for(K="default",G="",z="'",q=1;;){j=Q();const u=uu[K]();if(u)return u}}function Q(){if(M[W])return String.fromCodePoint(M.codePointAt(W))}function Y(){const u=Q();return"\n"===u?(L++,$=0):u?$+=u.length:$++,u&&(W+=u.length),u}v.parseJsonFile=function(u,D=!1,e="utf-8"){const t=N.default.readFileSync(S.default.resolve(u),{encoding:e});try{return Z(t,D)}catch(D){if(D instanceof SyntaxError){const e=D.message.split("at");if(2===e.length)throw new Error(`${e[0].trim()}${b.default.EOL}\t at ${u}:${e[1].trim()}`)}throw new Error(`${u} is not in valid JSON/JSON5 format.`)}},v.parseJsonText=Z;const uu={default(){switch(j){case"/":return Y(),void(K="comment");case void 0:return Y(),Du("eof")}if(!w.JudgeUtil.isIgnoreChar(j)&&!w.JudgeUtil.isSpaceSeparator(j))return uu[J]();Y()},start(){K="value"},beforePropertyName(){switch(j){case"$":case"_":return G=Y(),void(K="identifierName");case"\\":return Y(),void(K="identifierNameStartEscape");case"}":return Du("punctuator",Y());case'"':case"'":return z=j,Y(),void(K="string")}if(w.JudgeUtil.isIdStartChar(j))return G+=Y(),void(K="identifierName");throw Fu(H.Char,Y())},afterPropertyName(){if(":"===j)return Du("punctuator",Y());throw Fu(H.Char,Y())},beforePropertyValue(){K="value"},afterPropertyValue(){switch(j){case",":case"}":return Du("punctuator",Y())}throw Fu(H.Char,Y())},beforeArrayValue(){if("]"===j)return Du("punctuator",Y());K="value"},afterArrayValue(){switch(j){case",":case"]":return Du("punctuator",Y())}throw Fu(H.Char,Y())},end(){throw Fu(H.Char,Y())},comment(){switch(j){case"*":return Y(),void(K="multiLineComment");case"/":return Y(),void(K="singleLineComment")}throw Fu(H.Char,Y())},multiLineComment(){switch(j){case"*":return Y(),void(K="multiLineCommentAsterisk");case void 0:throw Fu(H.Char,Y())}Y()},multiLineCommentAsterisk(){switch(j){case"*":return void Y();case"/":return Y(),void(K="default");case void 0:throw Fu(H.Char,Y())}Y(),K="multiLineComment"},singleLineComment(){switch(j){case"\n":case"\r":case"\u2028":case"\u2029":return Y(),void(K="default");case void 0:return Y(),Du("eof")}Y()},value(){switch(j){case"{":case"[":return Du("punctuator",Y());case"n":return Y(),eu("ull"),Du("null",null);case"t":return Y(),eu("rue"),Du("boolean",!0);case"f":return Y(),eu("alse"),Du("boolean",!1);case"-":case"+":return"-"===Y()&&(q=-1),void(K="numerical");case".":case"0":case"I":case"N":return void(K="numerical");case'"':case"'":return z=j,Y(),G="",void(K="string")}if(void 0===j||!w.JudgeUtil.isDigitWithoutZero(j))throw Fu(H.Char,Y());K="numerical"},numerical(){switch(j){case".":return G=Y(),void(K="decimalPointLeading");case"0":return G=Y(),void(K="zero");case"I":return Y(),eu("nfinity"),Du("numeric",q*(1/0));case"N":return Y(),eu("aN"),Du("numeric",NaN)}if(void 0!==j&&w.JudgeUtil.isDigitWithoutZero(j))return G=Y(),void(K="decimalInteger");throw Fu(H.Char,Y())},zero(){switch(j){case".":case"e":case"E":return void(K="decimal");case"x":case"X":return G+=Y(),void(K="hexadecimal")}return Du("numeric",0)},decimalInteger(){switch(j){case".":case"e":case"E":return void(K="decimal")}if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},decimal(){switch(j){case".":G+=Y(),K="decimalFraction";break;case"e":case"E":G+=Y(),K="decimalExponent"}},decimalPointLeading(){if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalFraction");throw Fu(H.Char,Y())},decimalFraction(){switch(j){case"e":case"E":return G+=Y(),void(K="decimalExponent")}if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},decimalExponent(){switch(j){case"+":case"-":return G+=Y(),void(K="decimalExponentSign")}if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalExponentInteger");throw Fu(H.Char,Y())},decimalExponentSign(){if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalExponentInteger");throw Fu(H.Char,Y())},decimalExponentInteger(){if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},hexadecimal(){if(w.JudgeUtil.isHexDigit(j))return G+=Y(),void(K="hexadecimalInteger");throw Fu(H.Char,Y())},hexadecimalInteger(){if(!w.JudgeUtil.isHexDigit(j))return Du("numeric",q*Number(G));G+=Y()},identifierNameStartEscape(){if("u"!==j)throw Fu(H.Char,Y());Y();const u=tu();switch(u){case"$":case"_":break;default:if(!w.JudgeUtil.isIdStartChar(u))throw Fu(H.Identifier)}G+=u,K="identifierName"},identifierName(){switch(j){case"$":case"_":case"‌":case"‍":return void(G+=Y());case"\\":return Y(),void(K="identifierNameEscape")}if(!w.JudgeUtil.isIdContinueChar(j))return Du("identifier",G);G+=Y()},identifierNameEscape(){if("u"!==j)throw Fu(H.Char,Y());Y();const u=tu();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!w.JudgeUtil.isIdContinueChar(u))throw Fu(H.Identifier)}G+=u,K="identifierName"},string(){switch(j){case"\\":return Y(),void(G+=function(){const u=Q(),D=function(){switch(Q()){case"b":return Y(),"\b";case"f":return Y(),"\f";case"n":return Y(),"\n";case"r":return Y(),"\r";case"t":return Y(),"\t";case"v":return Y(),"\v"}return}();if(D)return D;switch(u){case"0":if(Y(),w.JudgeUtil.isDigit(Q()))throw Fu(H.Char,Y());return"\0";case"x":return Y(),function(){let u="",D=Q();if(!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());if(u+=Y(),D=Q(),!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());return u+=Y(),String.fromCodePoint(parseInt(u,16))}();case"u":return Y(),tu();case"\n":case"\u2028":case"\u2029":return Y(),"";case"\r":return Y(),"\n"===Q()&&Y(),""}if(void 0===u||w.JudgeUtil.isDigitWithoutZero(u))throw Fu(H.Char,Y());return Y()}());case'"':case"'":if(j===z){const u=Du("string",G);return Y(),u}return void(G+=Y());case"\n":case"\r":case void 0:throw Fu(H.Char,Y());case"\u2028":case"\u2029":!function(u){console.warn(`JSON5: '${Cu(u)}' in strings is not valid ECMAScript; consider escaping.`)}(j)}G+=Y()}};function Du(u,D){return{type:u,value:D,line:L,column:$}}function eu(u){for(const D of u){if(Q()!==D)throw Fu(H.Char,Y());Y()}}function tu(){let u="",D=4;for(;D-- >0;){const D=Q();if(!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());u+=Y()}return String.fromCodePoint(parseInt(u,16))}const ru={start(){if("eof"===x.type)throw Fu(H.EOF);nu()},beforePropertyName(){switch(x.type){case"identifier":case"string":return T=x.value,void(J="afterPropertyName");case"punctuator":return void iu();case"eof":throw Fu(H.EOF)}},afterPropertyName(){if("eof"===x.type)throw Fu(H.EOF);J="beforePropertyValue"},beforePropertyValue(){if("eof"===x.type)throw Fu(H.EOF);nu()},afterPropertyValue(){if("eof"===x.type)throw Fu(H.EOF);switch(x.value){case",":return void(J="beforePropertyName");case"}":iu()}},beforeArrayValue(){if("eof"===x.type)throw Fu(H.EOF);"punctuator"!==x.type||"]"!==x.value?nu():iu()},afterArrayValue(){if("eof"===x.type)throw Fu(H.EOF);switch(x.value){case",":return void(J="beforeArrayValue");case"]":iu()}},end(){}};function nu(){const u=function(){let u;switch(x.type){case"punctuator":switch(x.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=x.value}return u}();if(k&&"object"==typeof u&&(u._line=L,u._column=$),void 0===V)V=u;else{const D=U[U.length-1];Array.isArray(D)?k&&"object"!=typeof u?D.push({value:u,_line:L,_column:$}):D.push(u):D[T]=k&&"object"!=typeof u?{value:u,_line:L,_column:$}:u}!function(u){if(u&&"object"==typeof u)U.push(u),J=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{const u=U[U.length-1];J=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}}(u)}function iu(){U.pop();const u=U[U.length-1];J=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}function Cu(u){const D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){const D=u.charCodeAt(0).toString(16);return`\\x${`00${D}`.substring(D.length)}`}return u}function Fu(u,D){let e="";switch(u){case H.Char:e=void 0===D?`JSON5: invalid end of input at ${L}:${$}`:`JSON5: invalid character '${Cu(D)}' at ${L}:${$}`;break;case H.EOF:e=`JSON5: invalid end of input at ${L}:${$}`;break;case H.Identifier:$-=5,e=`JSON5: invalid identifier character at ${L}:${$}`}const t=new Eu(e);return t.lineNumber=L,t.columnNumber=$,t}class Eu extends SyntaxError{}var Au={},ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),au=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),cu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&ou(D,u,e);return au(D,u),D},su=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(Au,"__esModule",{value:!0}),Au.isFileExists=Au.offlinePluginConversion=Au.executeCommand=Au.getNpmPath=Au.hasNpmPackInPaths=void 0;const lu=t,Bu=su(e),du=cu(u),fu=i,_u=l;Au.hasNpmPackInPaths=function(u,D){try{return require.resolve(u,{paths:[...D]}),!0}catch(u){return!1}},Au.getNpmPath=function(){const u=process.execPath;return du.join(du.dirname(u),fu.NPM_TOOL)},Au.executeCommand=function(u,D,e){0!==(0,lu.spawnSync)(u,D,e).status&&(0,_u.logErrorAndExit)(`Error: ${u} ${D} execute failed.See above for details.`)},Au.offlinePluginConversion=function(u,D){return D.startsWith("file:")||D.endsWith(".tgz")?du.resolve(u,fu.HVIGOR,D.replace("file:","")):D},Au.isFileExists=function(u){return Bu.default.existsSync(u)&&Bu.default.statSync(u).isFile()};var pu={};!function(u){var D=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(u,"__esModule",{value:!0}),u.hashFile=u.hash=u.createHash=void 0;const t=D(r),i=D(e);u.createHash=(u="MD5")=>t.default.createHash(u);u.hash=(D,e)=>(0,u.createHash)(e).update(D).digest("hex");u.hashFile=(D,e)=>{if(i.default.existsSync(D))return(0,u.hash)(i.default.readFileSync(D,"utf-8"),e)}}(pu);var Ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),hu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),Pu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&Ou(D,u,e);return hu(D,u),D},vu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(P,"__esModule",{value:!0});var gu=P.initProjectWorkSpace=void 0;const mu=Pu(e),Ru=Pu(u),yu=i,Iu=v,Nu=l,bu=Au,Su=vu(D),wu=pu;let Hu,xu,Mu;function Tu(u,D,e){return void 0!==e.dependencies&&(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,D.dependencies[u])===Ru.normalize(e.dependencies[u])}function Vu(){const u=Ru.join(Mu,yu.WORK_SPACE);if((0,Nu.logInfoPrintConsole)("Hvigor cleaning..."),!mu.existsSync(u))return;const D=mu.readdirSync(u);if(!D||0===D.length)return;const e=Ru.resolve(Mu,"node_modules","@ohos","hvigor","bin","hvigor.js");mu.existsSync(e)&&(0,bu.executeCommand)(process.argv[0],[e,"--stop-daemon"],{});try{D.forEach((D=>{mu.rmSync(Ru.resolve(u,D),{recursive:!0})}))}catch(D){(0,Nu.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${u}.`)}}gu=P.initProjectWorkSpace=function(){if(Hu=function(){const u=Ru.resolve(yu.HVIGOR_PROJECT_WRAPPER_HOME,yu.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);mu.existsSync(u)||(0,Nu.logErrorAndExit)(`Error: Hvigor config file ${u} does not exist.`);return(0,Iu.parseJsonFile)(u)}(),Mu=function(u){let D,e=u.hvigorVersion;e.endsWith(".tgz")&&(e=function(u){let D=Ru.normalize(u);const e=D.lastIndexOf(Ru.sep);-1!==e&&(D=D.substring(e+1));D=D.replace(".tgz","");let t=0;for(let u=0;u="0"&&D.charAt(u)<="9"){t=u;break}return D=D.substring(t),D}(e));D=e>"2.5.0"?function(u){let D=`${yu.HVIGOR_ENGINE_PACKAGE_NAME}@${u.hvigorVersion}`;const e=u.dependencies;if(e){Object.getOwnPropertyNames(e).sort().forEach((u=>{D+=`,${u}@${e[u]}`}))}return(0,wu.hash)(D)}(u):(0,wu.hash)(process.cwd());return Ru.resolve(Su.default.homedir(),".hvigor","project_caches",D)}(Hu),xu=function(){const u=Ru.resolve(Mu,yu.WORK_SPACE,yu.DEFAULT_PACKAGE_JSON);return mu.existsSync(u)?(0,Iu.parseJsonFile)(u):{dependencies:{}}}(),!(0,bu.hasNpmPackInPaths)(yu.HVIGOR_ENGINE_PACKAGE_NAME,[Ru.join(Mu,yu.WORK_SPACE)])||(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion)!==xu.dependencies[yu.HVIGOR_ENGINE_PACKAGE_NAME]||!function(){function u(u){const D=null==u?void 0:u.dependencies;return void 0===D?0:Object.getOwnPropertyNames(D).length}const D=u(Hu),e=u(xu);if(D+1!==e)return!1;for(const u in null==Hu?void 0:Hu.dependencies)if(!(0,bu.hasNpmPackInPaths)(u,[Ru.join(Mu,yu.WORK_SPACE)])||!Tu(u,Hu,xu))return!1;return!0}()){Vu();try{!function(){(0,Nu.logInfoPrintConsole)("Hvigor installing...");for(const u in Hu.dependencies)Hu.dependencies[u]&&(Hu.dependencies[u]=(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.dependencies[u]));const u={dependencies:{...Hu.dependencies}};u.dependencies[yu.HVIGOR_ENGINE_PACKAGE_NAME]=(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion);const D=Ru.join(Mu,yu.WORK_SPACE);try{mu.mkdirSync(D,{recursive:!0});const e=Ru.resolve(D,yu.DEFAULT_PACKAGE_JSON);mu.writeFileSync(e,JSON.stringify(u))}catch(u){(0,Nu.logErrorAndExit)(u)}(function(){const u=["config","set","store-dir",yu.HVIGOR_PNPM_STORE_PATH],D={cwd:Ru.join(Mu,yu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,bu.executeCommand)(yu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)})(),function(){const u=["install"],D={cwd:Ru.join(Mu,yu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,bu.executeCommand)(yu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)}(),(0,Nu.logInfoPrintConsole)("Hvigor install success.")}()}catch(u){Vu()}}return Mu};var Gu={};!function(r){var C=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),F=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),E=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&C(D,u,e);return F(D,u),D},A=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(r,"__esModule",{value:!0}),r.executeInstallPnpm=r.isPnpmInstalled=r.environmentHandler=r.checkNpmConifg=r.PNPM_VERSION=void 0;const o=t,a=E(e),c=A(D),s=E(u),B=i,d=l,f=Au;r.PNPM_VERSION="7.30.0",r.checkNpmConifg=function(){const u=s.resolve(B.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),D=s.resolve(c.default.homedir(),".npmrc");if((0,f.isFileExists)(u)||(0,f.isFileExists)(D))return;const e=(0,f.getNpmPath)(),t=(0,o.spawnSync)(e,["config","get","prefix"],{cwd:B.HVIGOR_PROJECT_ROOT_DIR});if(0!==t.status||!t.stdout)return void(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const r=s.resolve(`${t.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,f.isFileExists)(r)||(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},r.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},r.isPnpmInstalled=function(){return!!a.existsSync(B.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,f.hasNpmPackInPaths)("pnpm",[B.HVIGOR_WRAPPER_TOOLS_HOME])},r.executeInstallPnpm=function(){(0,d.logInfoPrintConsole)(`Installing pnpm@${r.PNPM_VERSION}...`);const u=(0,f.getNpmPath)();!function(){const u=s.resolve(B.HVIGOR_WRAPPER_TOOLS_HOME,B.DEFAULT_PACKAGE_JSON);try{a.existsSync(B.HVIGOR_WRAPPER_TOOLS_HOME)||a.mkdirSync(B.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const D={dependencies:{}};D.dependencies[B.PNPM]=r.PNPM_VERSION,a.writeFileSync(u,JSON.stringify(D))}catch(D){(0,d.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${u} failed.`)}}(),(0,f.executeCommand)(u,["install","pnpm"],{cwd:B.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,d.logInfoPrintConsole)("Pnpm install success.")}}(Gu),function(){Gu.checkNpmConifg(),Gu.environmentHandler(),Gu.isPnpmInstalled()||Gu.executeInstallPnpm();const D=gu();_(u.join(D,i.WORK_SPACE))}(); \ No newline at end of file diff --git a/hvigorfile.ts b/hvigorfile.ts index 6478186..f3cb9f1 100644 --- a/hvigorfile.ts +++ b/hvigorfile.ts @@ -1,2 +1,6 @@ -// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. -export { appTasks } from '@ohos/hvigor-ohos-plugin'; \ No newline at end of file +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/hvigorw b/hvigorw new file mode 100644 index 0000000..ff6a29a --- /dev/null +++ b/hvigorw @@ -0,0 +1,48 @@ +#!/bin/bash + +# ---------------------------------------------------------------------------- +# Hvigor startup script, version 1.0.0 +# +# Required ENV vars: +# ------------------ +# NODE_HOME - location of a Node home dir +# or +# Add /usr/local/nodejs/bin to the PATH environment variable +# ---------------------------------------------------------------------------- + +HVIGOR_APP_HOME="`pwd -P`" +HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js +warn() { + echo "" + echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +error() { + echo "" + echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +fail() { + error "$@" + exit 1 +} + +# Determine node to start hvigor wrapper script +if [ -n "${NODE_HOME}" ];then + EXECUTABLE_NODE="${NODE_HOME}/bin/node" + if [ ! -x "$EXECUTABLE_NODE" ];then + fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed" + fi +else + EXECUTABLE_NODE="node" + which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path" +fi + +# Check hvigor wrapper script +if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then + fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}" +fi + +# start hvigor-wrapper script +exec "${EXECUTABLE_NODE}" \ + "${HVIGOR_WRAPPER_SCRIPT}" "$@" diff --git a/hvigorw.bat b/hvigorw.bat new file mode 100644 index 0000000..d570007 --- /dev/null +++ b/hvigorw.bat @@ -0,0 +1,64 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Hvigor startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js +set NODE_EXE=node.exe + +goto start + +:start +@rem Find node.exe +if defined NODE_HOME goto findNodeFromNodeHome + +%NODE_EXE% --version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:findNodeFromNodeHome +set NODE_HOME=%NODE_HOME:"=% +set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE% + +if exist "%NODE_EXE_PATH%" goto execute +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:execute +@rem Execute hvigor +"%NODE_EXE%" "%WRAPPER_MODULE_PATH%" %* + +if "%ERRORLEVEL%" == "0" goto hvigorwEnd + +:fail +exit /b 1 + +:hvigorwEnd +if "%OS%" == "Windows_NT" endlocal + +:end diff --git a/package.json b/oh-package.json5 similarity index 56% rename from package.json rename to oh-package.json5 index 69058f8..2094d00 100644 --- a/package.json +++ b/oh-package.json5 @@ -1,6 +1,9 @@ { "license": "Apache-2.0", - "devDependencies": {}, + "devDependencies": { + "@ohos/hypium": "1.0.6" + }, + "author": "", "name": "recyclerview_animators", "ohos": { "org": "huawei", @@ -9,10 +12,6 @@ }, "description": "example description", "repository": {}, - "version": "1.1.1", - "dependencies": { - "@ohos/hypium": "1.0.5", - "@ohos/hvigor-ohos-plugin": "1.4.0", - "@ohos/hvigor": "1.4.0" - } -} + "version": "2.0.0", + "dependencies": {} +} \ No newline at end of file diff --git a/recyclerview_animators/.gitignore b/recyclerview_animators/.gitignore index 4f9a973..e2713a2 100644 --- a/recyclerview_animators/.gitignore +++ b/recyclerview_animators/.gitignore @@ -1,3 +1,6 @@ /node_modules +/oh_modules /.preview -/build \ No newline at end of file +/build +/.cxx +/.test \ No newline at end of file diff --git a/recyclerview_animators/consumer-rules.txt b/recyclerview_animators/consumer-rules.txt new file mode 100644 index 0000000..e69de29 diff --git a/recyclerview_animators/hvigorfile.ts b/recyclerview_animators/hvigorfile.ts index 47e6e1f..4218707 100644 --- a/recyclerview_animators/hvigorfile.ts +++ b/recyclerview_animators/hvigorfile.ts @@ -1,2 +1,6 @@ -// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. -export { harTasks } from '@ohos/hvigor-ohos-plugin'; \ No newline at end of file +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/recyclerview_animators/obfuscation-rules.txt b/recyclerview_animators/obfuscation-rules.txt new file mode 100644 index 0000000..985b2ae --- /dev/null +++ b/recyclerview_animators/obfuscation-rules.txt @@ -0,0 +1,18 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope \ No newline at end of file diff --git a/recyclerview_animators/package.json b/recyclerview_animators/oh-package.json5 similarity index 86% rename from recyclerview_animators/package.json rename to recyclerview_animators/oh-package.json5 index a55fd28..8098423 100644 --- a/recyclerview_animators/package.json +++ b/recyclerview_animators/oh-package.json5 @@ -10,17 +10,17 @@ "ohos": { "org": "opensource" }, - "main": "index.ets", + "main": "Index.ets", "type": "module", "repository": "https://gitee.com/openharmony-sig/recyclerview-animators", - "version": "1.1.1", + "version": "2.0.0", "tags": [ "UI", "Animation", "HarmonyOS" ], "dependencies": {}, - "license": "Apache-2.0", + "license": "Apache License 2.0", "devDependencies": {}, "name": "@ohos/recyclerview-animators" } -- Gitee From 97c0e46aefc787dac62fe237068f2900b67db7e6 Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 18:15:35 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=20recyclerview=5Fanimators=E5=BA=93?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=82=E9=85=8DArkTs=E6=96=B0=E8=AF=AD?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- .../{index.ets => Index.ets} | 0 .../src/main/ets/components/RecyclerView.ets | 99 +++++++++---------- .../AlphaInAnimationAdapter.ets | 29 ++---- .../ScaleInAnimationAdapter.ets | 35 +++---- .../SlideInBottomAnimationAdapter.ets | 31 +++--- .../SlideInLeftAnimationAdapter.ets | 34 +++---- .../SlideInRightAnimationAdapter.ets | 31 +++--- .../itemAnimator/FadeInAnimator.ets | 40 ++++---- .../itemAnimator/FadeInDownAnimator.ets | 42 ++++---- .../itemAnimator/FadeInLeftAnimator.ets | 43 ++++---- .../itemAnimator/FadeInRightAnimator.ets | 43 ++++---- .../itemAnimator/FadeInUpAnimator.ets | 45 ++++----- .../itemAnimator/LandingAnimator.ets | 36 ++++--- .../itemAnimator/OvershootInLeftAnimator.ets | 40 ++++---- .../itemAnimator/OvershootInRightAnimator.ets | 40 ++++---- .../itemAnimator/ScaleInAnimator.ets | 38 ++++--- .../itemAnimator/ScaleInBottomAnimator.ets | 38 ++++--- .../itemAnimator/ScaleInLeftAnimator.ets | 40 ++++---- .../itemAnimator/ScaleInRightAnimator.ets | 38 ++++--- .../itemAnimator/ScaleInTopAnimator.ets | 38 ++++--- .../itemAnimator/SlideInDownAnimator.ets | 38 ++++--- .../itemAnimator/SlideInLeftAnimator.ets | 38 ++++--- .../itemAnimator/SlideInRightAnimator.ets | 38 ++++--- .../itemAnimator/SlideInUpAnimator.ets | 36 ++++--- 24 files changed, 418 insertions(+), 512 deletions(-) rename recyclerview_animators/{index.ets => Index.ets} (100%) diff --git a/recyclerview_animators/index.ets b/recyclerview_animators/Index.ets similarity index 100% rename from recyclerview_animators/index.ets rename to recyclerview_animators/Index.ets diff --git a/recyclerview_animators/src/main/ets/components/RecyclerView.ets b/recyclerview_animators/src/main/ets/components/RecyclerView.ets index 64fe22a..fce5272 100644 --- a/recyclerview_animators/src/main/ets/components/RecyclerView.ets +++ b/recyclerview_animators/src/main/ets/components/RecyclerView.ets @@ -40,7 +40,7 @@ import {SlideInBottomAnimationAdapter} from './adapterAnimator/SlideInBottomAnim @Component struct RecyclerView { array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() columnsNum: number = 1 @@ -50,8 +50,7 @@ struct RecyclerView { AlphaInAnimationAdapter({ array: this.array, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -59,8 +58,7 @@ struct RecyclerView { ScaleInAnimationAdapter({ array: this.array, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -68,8 +66,7 @@ struct RecyclerView { SlideInBottomAnimationAdapter({ array: this.array, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -77,8 +74,7 @@ struct RecyclerView { SlideInLeftAnimationAdapter({ array: this.array, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -86,8 +82,7 @@ struct RecyclerView { SlideInRightAnimationAdapter({ array: this.array, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -98,8 +93,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -108,8 +102,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -118,8 +111,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -128,8 +120,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -138,8 +129,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -148,8 +138,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -158,8 +147,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -168,8 +156,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -178,9 +165,8 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { - this.child(itemData) + child: (itemData: ESObject) => { + this.child(itemData); } }) } else if (this.controller.itemAnimation == RecyclerView.ItemAnimationType.ScaleInTop) { @@ -188,8 +174,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -198,8 +183,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -208,8 +192,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -218,8 +201,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -228,8 +210,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -238,8 +219,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -248,8 +228,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -258,8 +237,7 @@ struct RecyclerView { array: this.array, controller: this.controller, columnsNum: this.columnsNum, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.child(itemData) } }) @@ -301,16 +279,16 @@ namespace RecyclerView { } export class Controller { - addValueCallback: (index: number, value: any) => void - deleteValueCallback: (index: number) => void + addValueCallback: (index: number, value: ESObject) => void = () => {}; + deleteValueCallback: (index: number) => void = () => {}; duration: number = 500 itemAnimation = RecyclerView.ItemAnimationType.FadeIn - adapterAnimation = null + adapterAnimation: ESObject = null isFirstOnly: boolean = false mWidth: number = 480 mHeight: number = 855 - public addValue(index: number, value: any) { + public addValue(index: number, value: ESObject) { this.addValueCallback(index, value) } @@ -344,5 +322,24 @@ namespace RecyclerView { return this } } -} + export class ArrayType { + isNewValue: boolean; + value: ESObject; + + constructor(isNewValue: boolean, value: ESObject) { + this.isNewValue = isNewValue; + this.value = value; + } + } + + export class AnimationAdapterTypeData { + animationAdapterKey: number; + value: ESObject; + + constructor(animationAdapterKey: number, value: ESObject) { + this.animationAdapterKey = animationAdapterKey; + this.value = value; + } + } +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/adapterAnimator/AlphaInAnimationAdapter.ets b/recyclerview_animators/src/main/ets/components/adapterAnimator/AlphaInAnimationAdapter.ets index 4f78f25..d0f0881 100644 --- a/recyclerview_animators/src/main/ets/components/adapterAnimator/AlphaInAnimationAdapter.ets +++ b/recyclerview_animators/src/main/ets/components/adapterAnimator/AlphaInAnimationAdapter.ets @@ -19,19 +19,16 @@ import RecyclerView from '../RecyclerView' @Component export struct AlphaInAnimationAdapter { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private list: Array = [] - @State private animateList: Array = [] + @State private list: Array = [] + @State private animateList: Array = [] @State private start: number = 0 @State private end: number = 0 aboutToAppear() { - this.array.forEach(item => { - let temp = { - alpha: 0, - value: item - } + this.array.forEach((item: string) => { + let temp = new RecyclerView.AnimationAdapterTypeData(0, item); this.list.push(temp) this.animateList.push(temp) }) @@ -39,7 +36,7 @@ export struct AlphaInAnimationAdapter { build() { List() { - ForEach(this.list, (item, index) => { + ForEach(this.list, (item: ESObject, index: number) => { ListItem() { this.child(item.value) } @@ -58,23 +55,17 @@ export struct AlphaInAnimationAdapter { .onScrollIndex((start, end) => { this.start = start this.end = end - this.animateList.forEach((item, index) => { + this.animateList.forEach((item: ESObject, index: number) => { if (index >= start && index <= end) { - let temp = { - alpha: 1, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(1, item.value); this.animateList.splice(index, 1, temp) } else { if (this.controller.isFirstOnly) { - let temp = { - alpha: 0, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(0, item.value); this.animateList.splice(index, 1, temp) } } }) }) } -} +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/adapterAnimator/ScaleInAnimationAdapter.ets b/recyclerview_animators/src/main/ets/components/adapterAnimator/ScaleInAnimationAdapter.ets index c365eb0..c21f2a2 100644 --- a/recyclerview_animators/src/main/ets/components/adapterAnimator/ScaleInAnimationAdapter.ets +++ b/recyclerview_animators/src/main/ets/components/adapterAnimator/ScaleInAnimationAdapter.ets @@ -19,19 +19,16 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInAnimationAdapter { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private list: Array = [] - @State private animateList: Array = [] + @State private list: Array = [] + @State private animateList: Array = [] @State private start: number = 0 @State private end: number = 0 aboutToAppear() { - this.array.forEach(item => { - let temp = { - landing: 0, - value: item - } + this.array.forEach((item: string) => { + let temp = new RecyclerView.AnimationAdapterTypeData(0, item); this.list.push(temp) this.animateList.push(temp) }) @@ -39,16 +36,16 @@ export struct ScaleInAnimationAdapter { build() { List() { - ForEach(this.list, (item, index) => { + ForEach(this.list, (item: ESObject, index: number) => { ListItem() { this.child(item.value) } .width('100%') .scale( { - x: this.animateList[index].landing, - y: this.animateList[index].landing, - z: this.animateList[index].landing + x: this.animateList[index].animationAdapterKey, + y: this.animateList[index].animationAdapterKey, + z: this.animateList[index].animationAdapterKey } ) .animation({ @@ -64,23 +61,17 @@ export struct ScaleInAnimationAdapter { .onScrollIndex((start, end) => { this.start = start this.end = end - this.animateList.forEach((item, index) => { + this.animateList.forEach((item: ESObject, index: number) => { if (index >= start && index <= end) { - let temp = { - landing: 1, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(1,item.value); this.animateList.splice(index, 1, temp) } else { if (this.controller.isFirstOnly) { - let temp = { - landing: 0, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(0, item); this.animateList.splice(index, 1, temp) } } }) }) } -} +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInBottomAnimationAdapter.ets b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInBottomAnimationAdapter.ets index 5d734a1..ea9135a 100644 --- a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInBottomAnimationAdapter.ets +++ b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInBottomAnimationAdapter.ets @@ -19,19 +19,16 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInBottomAnimationAdapter { @State array: Array = [] - @BuilderParam child: (itemData) => { }; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private list: Array = [] - @State private animateList: Array = [] + @State private list: Array = [] + @State private animateList: Array = [] @State private start: number = 0 @State private end: number = 0 aboutToAppear() { - this.array.forEach(item => { - let temp = { - y: this.controller.mHeight, - value: item - } + this.array.forEach((item: string) => { + let temp = new RecyclerView.AnimationAdapterTypeData(this.controller.mHeight, item); this.list.push(temp) this.animateList.push(temp) }) @@ -39,13 +36,13 @@ export struct SlideInBottomAnimationAdapter { build() { List() { - ForEach(this.list, (item, index) => { + ForEach(this.list, (item: ESObject, index: number) => { ListItem() { this.child(item.value) } .width('100%') .translate({ - y: this.animateList[index].y + y: this.animateList[index].animationAdapterKey }) .animation({ duration: this.controller.duration, // 动画时长 @@ -60,23 +57,17 @@ export struct SlideInBottomAnimationAdapter { .onScrollIndex((start, end) => { this.start = start this.end = end - this.animateList.forEach((item, index) => { + this.animateList.forEach((item: ESObject, index: number) => { if (index >= start && index <= end) { - let temp = { - y: 0, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(0, item.value); this.animateList.splice(index, 1, temp) } else { if (this.controller.isFirstOnly) { - let temp = { - y: this.controller.mHeight, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(this.controller.mHeight, item.value); this.animateList.splice(index, 1, temp) } } }) }) } -} +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInLeftAnimationAdapter.ets b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInLeftAnimationAdapter.ets index 30ab611..1d5982b 100644 --- a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInLeftAnimationAdapter.ets +++ b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInLeftAnimationAdapter.ets @@ -19,19 +19,16 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInLeftAnimationAdapter { @State array: Array = [] - @BuilderParam child: (itemData) => { }; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private list: Array = [] - @State private animateList: Array = [] + @State private list: Array = [] + @State private animateList: Array = [] @State private start: number = 0 @State private end: number = 0 aboutToAppear() { - this.array.forEach(item => { - let temp = { - x: -this.controller.mWidth, - value: item - } + this.array.forEach((item: string) => { + let temp = new RecyclerView.AnimationAdapterTypeData(-this.controller.mWidth, item); this.list.push(temp) this.animateList.push(temp) }) @@ -39,13 +36,13 @@ export struct SlideInLeftAnimationAdapter { build() { List() { - ForEach(this.list, (item, index) => { + ForEach(this.list, (item: ESObject, index: number) => { ListItem() { this.child(item.value) } .width('100%') .translate({ - x: this.animateList[index].x + x: this.animateList[index].animationAdapterKey }) .animation({ duration: this.controller.duration, // 动画时长 @@ -57,26 +54,21 @@ export struct SlideInLeftAnimationAdapter { }) } .width('100%') - .onScrollIndex((start, end) => { + .onScrollIndex((start: number, end: number) => { this.start = start this.end = end - this.animateList.forEach((item, index) => { + this.animateList.forEach((item: ESObject, index: number) => { if (index >= start && index <= end) { - let temp = { - x: 0, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(0, item.value); this.animateList.splice(index, 1, temp) } else { if (this.controller.isFirstOnly) { - let temp = { - x: -this.controller.mWidth, - value: item.value - } + let temp: RecyclerView.AnimationAdapterTypeData = + new RecyclerView.AnimationAdapterTypeData(-this.controller.mWidth, item.value); this.animateList.splice(index, 1, temp) } } }) }) } -} +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInRightAnimationAdapter.ets b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInRightAnimationAdapter.ets index 6adf375..e8c8d47 100644 --- a/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInRightAnimationAdapter.ets +++ b/recyclerview_animators/src/main/ets/components/adapterAnimator/SlideInRightAnimationAdapter.ets @@ -19,19 +19,16 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInRightAnimationAdapter { @State array: Array = [] - @BuilderParam child: (itemData) => { }; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private list: Array = [] - @State private animateList: Array = [] + @State private list: Array = [] + @State private animateList: Array = [] @State private start: number = 0 @State private end: number = 0 aboutToAppear() { - this.array.forEach(item => { - let temp = { - x: this.controller.mWidth, - value: item - } + this.array.forEach((item: string) => { + let temp = new RecyclerView.AnimationAdapterTypeData(this.controller.mWidth, item); this.list.push(temp) this.animateList.push(temp) }) @@ -39,13 +36,13 @@ export struct SlideInRightAnimationAdapter { build() { List() { - ForEach(this.list, (item, index) => { + ForEach(this.list, (item: ESObject, index: number) => { ListItem() { this.child(item.value) } .width('100%') .translate({ - x: this.animateList[index].x + x: this.animateList[index].animationAdapterKey }) .animation({ duration: this.controller.duration, // 动画时长 @@ -60,23 +57,17 @@ export struct SlideInRightAnimationAdapter { .onScrollIndex((start, end) => { this.start = start this.end = end - this.animateList.forEach((item, index) => { + this.animateList.forEach((item: ESObject, index: number) => { if (index >= start && index <= end) { - let temp = { - x: 0, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(0, item.value); this.animateList.splice(index, 1, temp) } else { if (this.controller.isFirstOnly) { - let temp = { - x: this.controller.mWidth, - value: item.value - } + let temp = new RecyclerView.AnimationAdapterTypeData(this.controller.mWidth, item); this.animateList.splice(index, 1, temp) } } }) }) } -} +} \ No newline at end of file diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInAnimator.ets index 269d96a..6350e38 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct FadeInAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -29,45 +29,41 @@ export struct FadeInAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + }; + + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + }; this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + let newArr = new RecyclerView.ArrayType(false,item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 this.myArr.splice(index, 0, newArr) setTimeout(() => { - let newArr = { - isNewValue: true, - value: value, - } + let newArr = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = this.controller.duration this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +72,7 @@ export struct FadeInAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,10 +81,10 @@ export struct FadeInAnimator { currentData.isNewValue = true this.trans = 0 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration) @@ -96,7 +92,7 @@ export struct FadeInAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInDownAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInDownAnimator.ets index e5234d9..03d74ce 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInDownAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInDownAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct FadeInDownAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,47 +30,43 @@ export struct FadeInDownAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + let newArr = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 this.offsetY = -30 this.myArr.splice(index, 0, newArr) setTimeout(() => { - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.offsetY = 0 this.duration = this.controller.duration this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,20 +75,20 @@ export struct FadeInDownAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.trans = 0 this.offsetY = -30 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration) @@ -100,7 +96,7 @@ export struct FadeInDownAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInLeftAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInLeftAnimator.ets index 4328721..c45a227 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInLeftAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInLeftAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct FadeInLeftAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,47 +30,42 @@ export struct FadeInLeftAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 this.offsetX = -50 this.myArr.splice(index, 0, newArr) setTimeout(() => { - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.offsetX = 0 this.duration = this.controller.duration this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: ESObject) => { item.isNewValue = false }) this.isClick = true @@ -79,20 +74,20 @@ export struct FadeInLeftAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.trans = 0 this.offsetX = -50 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration) @@ -100,7 +95,7 @@ export struct FadeInLeftAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInRightAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInRightAnimator.ets index db4fde6..7ed054e 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInRightAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInRightAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct FadeInRightAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,47 +30,42 @@ export struct FadeInRightAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 this.offsetX = 50 this.myArr.splice(index, 0, newArr) setTimeout(() => { - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.offsetX = 0 this.duration = this.controller.duration this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,20 +74,20 @@ export struct FadeInRightAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.trans = 0 this.offsetX = 50 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration) @@ -100,7 +95,7 @@ export struct FadeInRightAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInUpAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInUpAnimator.ets index c8bde95..dff4d66 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInUpAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/FadeInUpAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct FadeInUpAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; - @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @BuilderParam child: (itemData: ESObject) => void; + @State controller: RecyclerView.Controller = new RecyclerView.Controller(); + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,47 +30,42 @@ export struct FadeInUpAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject)=>{ + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index : number)=>{ + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 this.offsetY = 30 this.myArr.splice(index, 0, newArr) setTimeout(() => { - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.offsetY = 0 this.duration = this.controller.duration this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,20 +74,20 @@ export struct FadeInUpAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.trans = 0 this.offsetY = 30 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration) @@ -100,7 +95,7 @@ export struct FadeInUpAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/LandingAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/LandingAnimator.ets index e4cbf94..34da84d 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/LandingAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/LandingAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct LandingAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,28 @@ export struct LandingAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 @@ -67,7 +65,7 @@ export struct LandingAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +74,7 @@ export struct LandingAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,17 +83,17 @@ export struct LandingAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 1.5 this.trans = 0 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.landing = 1 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -103,7 +101,7 @@ export struct LandingAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInLeftAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInLeftAnimator.ets index a2bae54..13a695c 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInLeftAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInLeftAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct OvershootInLeftAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,30 +31,28 @@ export struct OvershootInLeftAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) - - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } + + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -75,7 +73,7 @@ export struct OvershootInLeftAnimator { }, this.controller.duration + 50) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -84,7 +82,7 @@ export struct OvershootInLeftAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -93,19 +91,19 @@ export struct OvershootInLeftAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.x = '-100%' this.y = '0%' this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.x = '0%' this.y = '0%' + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -113,7 +111,7 @@ export struct OvershootInLeftAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInRightAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInRightAnimator.ets index 0a1a698..cb8935f 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInRightAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/OvershootInRightAnimator.ets @@ -19,11 +19,11 @@ import RecyclerView from '../RecyclerView' @Component export struct OvershootInRightAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() columnsNum: number = 1 private colNumStr: string = '' - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,31 +31,29 @@ export struct OvershootInRightAnimator { @State private y: string = '0%' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) - - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } + + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -76,7 +74,7 @@ export struct OvershootInRightAnimator { }, this.controller.duration + 50) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -85,7 +83,7 @@ export struct OvershootInRightAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -94,19 +92,19 @@ export struct OvershootInRightAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.x = '100%' this.y = '0%' this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.x = '0%' this.y = '0%' + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -114,7 +112,7 @@ export struct OvershootInRightAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInAnimator.ets index 2c00457..2a502ab 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,28 @@ export struct ScaleInAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -67,7 +65,7 @@ export struct ScaleInAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +74,7 @@ export struct ScaleInAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,17 +83,17 @@ export struct ScaleInAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 0 this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.landing = 1 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -103,7 +101,7 @@ export struct ScaleInAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType, index) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInBottomAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInBottomAnimator.ets index 10b8352..c17b0f9 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInBottomAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInBottomAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInBottomAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,28 @@ export struct ScaleInBottomAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -67,7 +65,7 @@ export struct ScaleInBottomAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +74,7 @@ export struct ScaleInBottomAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,17 +83,17 @@ export struct ScaleInBottomAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 0 this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.landing = 1 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -103,7 +101,7 @@ export struct ScaleInBottomAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInLeftAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInLeftAnimator.ets index 14af456..cc62f58 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInLeftAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInLeftAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInLeftAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,29 @@ export struct ScaleInLeftAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + + this.controller.deleteValueCallback = (index: number) =>{ + this.deleteValue(index); + } this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + let newArr = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -67,7 +66,7 @@ export struct ScaleInLeftAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +75,7 @@ export struct ScaleInLeftAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,25 +84,24 @@ export struct ScaleInLeftAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 0 this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) - setTimeout(() => { this.duration = 0 this.landing = 1 - this.myArr.splice(index, 1) this.isClick = true + this.myArr.splice(index, 1, currentData) + this.myArr.splice(index, 1) }, this.controller.duration + 100) } build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInRightAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInRightAnimator.ets index 3f32128..444c95c 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInRightAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInRightAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInRightAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,28 @@ export struct ScaleInRightAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -67,7 +65,7 @@ export struct ScaleInRightAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +74,7 @@ export struct ScaleInRightAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,17 +83,17 @@ export struct ScaleInRightAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 0 this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.landing = 1 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -103,7 +101,7 @@ export struct ScaleInRightAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInTopAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInTopAnimator.ets index 023b07d..b05dd36 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInTopAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/ScaleInTopAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct ScaleInTopAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -30,30 +30,28 @@ export struct ScaleInTopAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -67,7 +65,7 @@ export struct ScaleInTopAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -76,7 +74,7 @@ export struct ScaleInTopAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -85,17 +83,17 @@ export struct ScaleInTopAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.landing = 0 this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.landing = 1 + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -103,7 +101,7 @@ export struct ScaleInTopAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInDownAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInDownAnimator.ets index f37a605..7455d92 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInDownAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInDownAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInDownAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,30 +31,28 @@ export struct SlideInDownAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 0 this.duration = 0 @@ -70,7 +68,7 @@ export struct SlideInDownAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,7 +77,7 @@ export struct SlideInDownAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -88,7 +86,7 @@ export struct SlideInDownAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.x = '0%' @@ -101,10 +99,10 @@ export struct SlideInDownAnimator { this.y = '-100%' this.duration = this.controller.duration this.trans = 0 - this.myArr.splice(index, 1, currentData) }, 200) setTimeout(() => { + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 200) @@ -112,7 +110,7 @@ export struct SlideInDownAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInLeftAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInLeftAnimator.ets index 31aa876..26253e4 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInLeftAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInLeftAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInLeftAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,30 +31,28 @@ export struct SlideInLeftAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -70,7 +68,7 @@ export struct SlideInLeftAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,7 +77,7 @@ export struct SlideInLeftAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -88,19 +86,19 @@ export struct SlideInLeftAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.x = '-100%' this.y = '0%' this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.x = '0%' this.y = '0%' + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -108,7 +106,7 @@ export struct SlideInLeftAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInRightAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInRightAnimator.ets index 6c44e0e..cc3d661 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInRightAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInRightAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInRightAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,30 +31,28 @@ export struct SlideInRightAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } - this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + this.array.forEach((item: string) => { + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -70,7 +68,7 @@ export struct SlideInRightAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,7 +77,7 @@ export struct SlideInRightAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -88,19 +86,19 @@ export struct SlideInRightAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: ESObject = this.myArr[index] currentData.isNewValue = true this.x = '100%' this.y = '0%' this.trans = 1 this.duration = this.controller.duration - this.myArr.splice(index, 1, currentData) setTimeout(() => { this.duration = 0 this.x = '0%' this.y = '0%' + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 100) @@ -108,7 +106,7 @@ export struct SlideInRightAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } diff --git a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInUpAnimator.ets b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInUpAnimator.ets index 074eab8..2ddb710 100644 --- a/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInUpAnimator.ets +++ b/recyclerview_animators/src/main/ets/components/itemAnimator/SlideInUpAnimator.ets @@ -19,9 +19,9 @@ import RecyclerView from '../RecyclerView' @Component export struct SlideInUpAnimator { @State array: Array = [] - @BuilderParam child: (itemData) => {}; + @BuilderParam child: (itemData: ESObject) => void; @State controller: RecyclerView.Controller = new RecyclerView.Controller() - @State private myArr: Array = [] + @State private myArr: Array = [] @State private duration: number = 0 private isClick: boolean = true @State private trans: number = 0 @@ -31,30 +31,28 @@ export struct SlideInUpAnimator { private colNumStr: string = '' aboutToAppear() { - this.controller.addValueCallback = this.addValue.bind(this) - this.controller.deleteValueCallback = this.deleteValue.bind(this) + this.controller.addValueCallback = (index: number, value: ESObject) => { + this.addValue(index, value); + } + this.controller.deleteValueCallback = (index: number) => { + this.deleteValue(index); + } this.array.forEach(item => { - let newArr = { - isNewValue: false, - value: item, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(false, item); this.myArr.push(newArr) }) - for (var i = 0; i < this.columnsNum; i++) { + for (let i = 0; i < this.columnsNum; i++) { this.colNumStr += '1fr ' } } - private addValue(index: number, value: any) { + private addValue(index: number, value: ESObject) { if (!this.isClick) { return } this.isClick = false - let newArr = { - isNewValue: true, - value: value, - } + let newArr: RecyclerView.ArrayType = new RecyclerView.ArrayType(true, value); this.trans = 1 this.duration = 0 @@ -70,7 +68,7 @@ export struct SlideInUpAnimator { this.myArr.splice(index, 1, newArr) setTimeout(() => { - this.myArr.forEach(item => { + this.myArr.forEach((item: RecyclerView.ArrayType) => { item.isNewValue = false }) this.isClick = true @@ -79,7 +77,7 @@ export struct SlideInUpAnimator { }, 200) } - deleteValue(index) { + deleteValue(index: number) { if (!this.isClick) { return } @@ -88,7 +86,7 @@ export struct SlideInUpAnimator { } this.isClick = false - let currentData = this.myArr[index] + let currentData: RecyclerView.ArrayType = this.myArr[index] currentData.isNewValue = true this.x = '0%' @@ -101,10 +99,10 @@ export struct SlideInUpAnimator { this.y = '100%' this.duration = this.controller.duration this.trans = 0 - this.myArr.splice(index, 1, currentData) }, 200) setTimeout(() => { + this.myArr.splice(index, 1, currentData) this.myArr.splice(index, 1) this.isClick = true }, this.controller.duration + 200) @@ -112,7 +110,7 @@ export struct SlideInUpAnimator { build() { Grid() { - ForEach(this.myArr, (item, index) => { + ForEach(this.myArr, (item: RecyclerView.ArrayType) => { GridItem() { this.child(item.value) } -- Gitee From 8b8d95816cbf602db28fbe578fb092aa4765077f Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 19:32:36 +0800 Subject: [PATCH 3/7] =?UTF-8?q?Sample=E9=80=82=E9=85=8DArkTs=E6=96=B0?= =?UTF-8?q?=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- .../main/ets/pages/index_adapter_animator.ets | 31 +++++--- .../main/ets/pages/index_item_animator.ets | 75 ++++++++++++------- .../main/resources/base/element/string.json | 4 + .../main/resources/en_US/element/string.json | 4 + .../main/resources/zh_CN/element/string.json | 4 + 5 files changed, 82 insertions(+), 36 deletions(-) diff --git a/entry/src/main/ets/pages/index_adapter_animator.ets b/entry/src/main/ets/pages/index_adapter_animator.ets index 00ace17..5315c1b 100644 --- a/entry/src/main/ets/pages/index_adapter_animator.ets +++ b/entry/src/main/ets/pages/index_adapter_animator.ets @@ -24,14 +24,14 @@ struct Index_adapter_animator { "LINE", "Haskell", "C++", "Java", "Go", "Swift", "Objective-c", "Ruby", "PHP", "Bash", "ksh", "C", "Groovy", "Kotlin", "Chip", "Japan", "U.S.A", "San Francisco", "Paris", "Tokyo", "Silicon Valley", "London", "Spain", "China", "Taiwan", "Asia", "New York", "France", "Kyoto", - "Android", "Google", "iPhone", "iPad", "iPod", "Wasabeef"] - private animTypes = [ - { value: 'AlphaIn', enumType: RecyclerView.AdapterAnimationType.AlphaIn }, - { value: 'ScaleIn', enumType: RecyclerView.AdapterAnimationType.ScaleIn }, - { value: 'SlideInBottom', enumType: RecyclerView.AdapterAnimationType.SlideInBottom }, - { value: 'SlideInLeft', enumType: RecyclerView.AdapterAnimationType.SlideInLeft }, - { value: 'SlideInRight', enumType: RecyclerView.AdapterAnimationType.SlideInRight } - ] + "Android", "Google", "iPhone", "iPad", "iPod", "Wasabeef"]; + private animTypes: AnimType[] = [ + new AnimType('AlphaIn', RecyclerView.AdapterAnimationType.AlphaIn), + new AnimType('ScaleIn', RecyclerView.AdapterAnimationType.ScaleIn), + new AnimType('SlideInBottom', RecyclerView.AdapterAnimationType.SlideInBottom), + new AnimType('SlideInLeft', RecyclerView.AdapterAnimationType.SlideInLeft), + new AnimType('SlideInRight', RecyclerView.AdapterAnimationType.SlideInRight) + ]; @State controller: RecyclerView.Controller = new RecyclerView.Controller() @State selectIndex: number = 0 @@ -47,8 +47,7 @@ struct Index_adapter_animator { RecyclerView({ array: this.listDatas, controller: this.controller, - // @ts-ignore - child: (itemData) => { + child: (itemData: ESObject) => { this.SpecificChild(itemData) } }) @@ -76,7 +75,7 @@ struct Index_adapter_animator { .height('100%') } - @Builder SpecificChild(itemData) { + @Builder SpecificChild(itemData: ESObject) { Column() { Image($r("app.media.sample13")) .width('100%') @@ -87,4 +86,14 @@ struct Index_adapter_animator { .width('100%') }.margin(10) } +} + +class AnimType { + value: string; + enumType: RecyclerView.AdapterAnimationType; + + constructor(value: string, enumType: RecyclerView.AdapterAnimationType) { + this.value = value; + this.enumType = enumType; + } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/index_item_animator.ets b/entry/src/main/ets/pages/index_item_animator.ets index da34299..1a245f3 100644 --- a/entry/src/main/ets/pages/index_item_animator.ets +++ b/entry/src/main/ets/pages/index_item_animator.ets @@ -16,6 +16,7 @@ import { RecyclerView } from "@ohos/recyclerview-animators" import router from '@ohos.router'; +import promptAction from '@ohos.promptAction' @Entry @Component @@ -25,27 +26,32 @@ struct Index_item_animator { "LINE", "Haskell", "C++", "Java", "Go", "Swift", "Objective-c", "Ruby", "PHP", "Bash", "ksh", "C", "Groovy", "Kotlin", "Chip", "Japan", "U.S.A", "San Francisco", "Paris", "Tokyo", "Silicon Valley", "London", "Spain", "China", "Taiwan", "Asia", "New York", "France", "Kyoto", - "Android", "Google", "iPhone", "iPad", "iPod", "Wasabeef"] - private animTypes = [ - { value: 'FadeIn', enumType: RecyclerView.ItemAnimationType.FadeIn }, - { value: 'FadeInDown', enumType: RecyclerView.ItemAnimationType.FadeInDown }, - { value: 'FadeInUp', enumType: RecyclerView.ItemAnimationType.FadeInUp }, - { value: 'FadeInLeft', enumType: RecyclerView.ItemAnimationType.FadeInLeft }, - { value: 'FadeInRight', enumType: RecyclerView.ItemAnimationType.FadeInRight }, - { value: 'Landing', enumType: RecyclerView.ItemAnimationType.Landing }, - { value: 'ScaleIn', enumType: RecyclerView.ItemAnimationType.ScaleIn }, - { value: 'ScaleInTop', enumType: RecyclerView.ItemAnimationType.ScaleInTop }, - { value: 'ScaleInBottom', enumType: RecyclerView.ItemAnimationType.ScaleInBottom }, - { value: 'ScaleInLeft', enumType: RecyclerView.ItemAnimationType.ScaleInLeft }, - { value: 'ScaleInRight', enumType: RecyclerView.ItemAnimationType.ScaleInRight }, - { value: 'SlideInLeft', enumType: RecyclerView.ItemAnimationType.SlideInLeft }, - { value: 'SlideInRight', enumType: RecyclerView.ItemAnimationType.SlideInRight }, - { value: 'SlideInDown', enumType: RecyclerView.ItemAnimationType.SlideInDown }, - { value: 'SlideInUp', enumType: RecyclerView.ItemAnimationType.SlideInUp }, - { value: 'OvershootInRight', enumType: RecyclerView.ItemAnimationType.OvershootInRight }, - { value: 'OvershootInLeft', enumType: RecyclerView.ItemAnimationType.OvershootInLeft }] + "Android", "Google", "iPhone", "iPad", "iPod", "Wasabeef"]; + private animTypes: AnimType[] = [ + new AnimType('FadeIn', RecyclerView.ItemAnimationType.FadeIn), + new AnimType('FadeInDown', RecyclerView.ItemAnimationType.FadeInDown), + new AnimType('FadeInUp', RecyclerView.ItemAnimationType.FadeInUp), + new AnimType('FadeInLeft', RecyclerView.ItemAnimationType.FadeInLeft), + new AnimType('FadeInRight', RecyclerView.ItemAnimationType.FadeInRight), + new AnimType('Landing', RecyclerView.ItemAnimationType.Landing), + new AnimType('ScaleIn', RecyclerView.ItemAnimationType.ScaleIn), + new AnimType('ScaleInTop', RecyclerView.ItemAnimationType.ScaleInTop), + new AnimType('ScaleInBottom', RecyclerView.ItemAnimationType.ScaleInBottom), + new AnimType('ScaleInLeft', RecyclerView.ItemAnimationType.ScaleInLeft), + new AnimType('ScaleInRight', RecyclerView.ItemAnimationType.ScaleInRight), + new AnimType('SlideInLeft', RecyclerView.ItemAnimationType.SlideInLeft), + new AnimType('SlideInRight', RecyclerView.ItemAnimationType.SlideInRight), + new AnimType('SlideInDown', RecyclerView.ItemAnimationType.SlideInDown), + new AnimType('SlideInUp', RecyclerView.ItemAnimationType.SlideInUp), + new AnimType('OvershootInRight', RecyclerView.ItemAnimationType.OvershootInRight), + new AnimType('OvershootInLeft', RecyclerView.ItemAnimationType.OvershootInLeft) + ]; + @State controller: RecyclerView.Controller = new RecyclerView.Controller() @State selectIndex: number = 0 + @State listDataTailFlag: number = this.listDatas.length - 1; + @State addFlag: number = 0; + aboutToAppear() { this.controller.setItemAnimation(RecyclerView.ItemAnimationType.FadeIn) @@ -59,9 +65,8 @@ struct Index_item_animator { RecyclerView({ array: this.listDatas, controller: this.controller, - columnsNum: router.getParams()['isOn'] == true ? 2 : 1, - // @ts-ignore - child: (itemData) => { + columnsNum: (router.getParams() as Record)['isOn'] as boolean == true ? 2 : 1, + child: (itemData: ESObject) => { this.SpecificChild(itemData) } }) @@ -88,13 +93,23 @@ struct Index_item_animator { .fontSize(18) .padding(8) .onClick(event => { - this.controller.addValue(2, 'newly added item') + this.controller.addValue(0, 'add the [ ' + (this.addFlag += 1) + ' ] item'); + this.listDataTailFlag += 1; }) Text('DEL') .fontSize(18) .padding(8) .onClick(event => { - this.controller.deleteValue(1) + const deleteIndex: number = 0; + if (this.listDataTailFlag >= deleteIndex) { + this.controller.deleteValue(0); + this.listDataTailFlag -= 1; + } else { + promptAction.showToast({ + message: $r("app.string.message_toast"), + duration: 500 + }) + } }) } .width('30%') @@ -105,7 +120,7 @@ struct Index_item_animator { } } - @Builder SpecificChild(itemData) { + @Builder SpecificChild(itemData: ESObject) { Column() { Image($r("app.media.sample13")) .width('100%') @@ -117,3 +132,13 @@ struct Index_item_animator { }.margin(10) } } + +class AnimType { + value: string; + enumType: ESObject; + + constructor(value: string, enumType: ESObject) { + this.value = value; + this.enumType = enumType; + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 4a6cdae..937367f 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -11,6 +11,10 @@ { "name": "EntryAbility_label", "value": "RecyclerviewAnimators" + }, + { + "name": "message_toast", + "value": "Please click ADD and then DEL" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/en_US/element/string.json b/entry/src/main/resources/en_US/element/string.json index 4a6cdae..937367f 100644 --- a/entry/src/main/resources/en_US/element/string.json +++ b/entry/src/main/resources/en_US/element/string.json @@ -11,6 +11,10 @@ { "name": "EntryAbility_label", "value": "RecyclerviewAnimators" + }, + { + "name": "message_toast", + "value": "Please click ADD and then DEL" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/zh_CN/element/string.json b/entry/src/main/resources/zh_CN/element/string.json index 776829d..81a6f38 100644 --- a/entry/src/main/resources/zh_CN/element/string.json +++ b/entry/src/main/resources/zh_CN/element/string.json @@ -11,6 +11,10 @@ { "name": "EntryAbility_label", "value": "RecyclerviewAnimators" + }, + { + "name": "message_toast", + "value": "请点击ADD后再DEL" } ] } \ No newline at end of file -- Gitee From 29e143dd6c035e5bb85c3ce7cfb3a72068c4fddc Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 19:42:44 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0CHANGELOG.md=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e39066d..c586a66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v2.0.0 + +1. 适配DevEco Studio版本: 4.0 Beta2(4.0.3.600), openHarmony SDK版本:API10 Release(4.0.10.11) +2. ArkTs新语法适配 + ## v1.1.1 - 适配DevEco Studio 版本:3.1 Beta1(3.1.0.200),OpenHarmony SDK:API9(3.2.10.6) -- Gitee From 75a057edded4a50a65cef351d4b2a98063f4d2f5 Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 19:43:48 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0README.OpenSource?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- README.OpenSource | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.OpenSource b/README.OpenSource index 43cd361..34bf9bb 100644 --- a/README.OpenSource +++ b/README.OpenSource @@ -4,7 +4,7 @@ "License": "Apache-2.0 License", "License File": " LICENSE ", "Version Number": "4.0.2", - "Owner" : "wasabeef" + "Owner" : "xiafeng@huawei.com" "Upstream URL": "https://github.com/wasabeef/recyclerview-animators", "Description": "RecyclerView Animators is an Android library that allows developers to easily create RecyclerView with animations." } -- Gitee From 06d8150c247123691bcdd71157bc6a60695df0d2 Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 19:45:07 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0README.md=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3926c21..1f351a1 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ ## 下载安装 ```shell -npm install @ohos/recyclerview-animators --save +ohpm install @ohos/recyclerview-animators ``` -OpenHarmony npm环境配置等更多内容,请参考 [如何安装OpenHarmony npm包](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_npm_usage.md) 。 +OpenHarmony ohpm 环境配置等更多内容,请参考[如何安装OpenHarmony ohpm 包 ](https://gitee.com/openharmony-tpc/docs/blob/master/OpenHarmony_har_usage.md) ## 使用说明 1. 引入组件库 @@ -67,7 +67,8 @@ build() { 在下述版本验证通过: -- DevEco Studio 版本:3.1 Beta1(3.1.0.200),OpenHarmony SDK:API9(3.2.10.6) +- DevEco Studio 版本: 4.0 Beta2(4.0.3.600) +- OpenHarmony SDK版本: API10(4.0.10.11) ## 目录结构 ```` @@ -81,7 +82,7 @@ build() { |----adapterAnimator #动画效果适配 |----itemAnimator #元素动画效果实现 |----RecyclerView.ets #核心类 -| |---- index.ets # 对外接口 +| |---- Index.ets # 对外接口 | |---- README.md # 安装使用方法 ```` -- Gitee From dc39ad87e8ac5ade8e5aa548a06f5ee5148aae52 Mon Sep 17 00:00:00 2001 From: zhang_hanyong Date: Thu, 2 Nov 2023 19:49:41 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0OAT.xml=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hanyong --- OAT.xml | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/OAT.xml b/OAT.xml index dcc3ae9..c7c939e 100644 --- a/OAT.xml +++ b/OAT.xml @@ -17,6 +17,18 @@ desc="版权免责声明文件,无需修改" name="NOTICE" type="filename"/> + + + + + + + + + + + + + - \ No newline at end of file + -- Gitee