diff --git a/ETSUI/eTSDrawingAndAnimation/.gitignore b/ETSUI/eTSDrawingAndAnimation/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..91d237bb144c7fb1777e50271857ef0f593286fc --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/local.properties +/.idea +**/build +/.hvigor \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/AppScope/app.json5 b/ETSUI/eTSDrawingAndAnimation/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..8b884d0be07d41a71e634ad2ae291bf9fd1de38e --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/AppScope/app.json5 @@ -0,0 +1,11 @@ +{ + "app": { + "bundleName": "ohos.samples.myapplication", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name", + "distributedNotificationEnabled": true + } +} diff --git a/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/element/string.json b/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..1080233f01384411ec684b58955cb8808746fdd3 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MyApplication" + } + ] +} diff --git a/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/media/app_icon.png b/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/AppScope/resources/base/media/app_icon.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/README_zh.md b/ETSUI/eTSDrawingAndAnimation/README_zh.md index 9a14d7d58b889ab95910719b9a9b02ff12339a63..00ee169691061effcbf1aff2a1ed9f83eb1f1bee 100644 --- a/ETSUI/eTSDrawingAndAnimation/README_zh.md +++ b/ETSUI/eTSDrawingAndAnimation/README_zh.md @@ -1,15 +1,21 @@ -# 绘图和动画 +# 饮食记录实例应用 ### 简介 -本示例实现健康饮食应用的动效部分,包含: +这是一个饮食记录健康的应用,可以记录每一餐吃的食物种类和重量,集成到卡片,并获取相应的热量值和营养元素重量值,通过柱状图的形式表现出来。效果图如下: -1. Logo绘制:使用绘制组件Shape和Path绘制健康饮食应用的Logo; -2. 闪屏和页面转场动效:显式动画animateTo实现闪屏动画,添加食物分类列表页面到食物详情页的共享元素转场动画。 + 食物记录界面DietRecord.ets页面使用swiper组件实现自定义滑动,切换子组件的显示能力。 + + ![](screenshots/device/foodRecordSwiper1.png.png)![](screenshots/device/foodRecordSwiper2.png.png) -详情参考《ArkUI-声明式范式开发指南》第五章。 ### 使用说明 -1. 启动应用,播放闪屏动画后,进入首页; -2. 点击食物单元,食物图片共享元素转场到下一个页面。 +1. 启动应用,播放闪屏动画后,进入首页 + +2. 应用包含“首页”和 “记录”两个主页面,使用Tabs组件实现模块的切换,其中首页是用来Grid均分功能,实现了食物的均分排列。记录界面使用了swiper组件实现了热量柱状图和营养元素柱状图的滑动切换。 + +3. 首页的每一个食物,可通过点击图片进入相应的食物详情FoodDetail.ets页面; + +4. 食物详情FoodDetail.ets页面记录了每一种食物的单位重量热量值和营养元素含量,并且食物详情界面使用了Dialog弹窗组件,实现了食物的添加,并把数据传递给食物记录界面; + ### 约束与限制 1. 本示例仅支持在大型系统上运行。 @@ -18,5 +24,4 @@ 3. 验证本示例的HarmonyOS版本:2.0.0 Devloper Beta3。 -4. 本示例需要使用 DevEco Studio 3.0 Beta3 (Build Version:3.0.0.533,built on September 26,2021) 才可编译。 diff --git a/ETSUI/eTSDrawingAndAnimation/build-profile.json5 b/ETSUI/eTSDrawingAndAnimation/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..9f86d90f9431bf1fe47902dcf8e995dabe9f278b --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/build-profile.json5 @@ -0,0 +1,40 @@ +{ + "app": { + "signingConfigs": [ + { + "name": "default", + "material": { + "certpath": "C:\\Users\\aoliuh\\.ohos\\config\\openharmony\\auto_ohos_default_ohos.samples.myapplication.cer", + "storePassword": "0000001BE8B3B78ED0D2C2C88C3A998F3D6A71AD52B9854F24258BE5ED850DD382598D962497A3ECAD3A0C", + "keyAlias": "debugKey", + "keyPassword": "0000001B8CD37BD741D25CF69C505242D66E129D9970268BEACC9F968647B8A9D0644F0A5ABB244A355749", + "profile": "C:\\Users\\aoliuh\\.ohos\\config\\openharmony\\auto_ohos_default_ohos.samples.myapplication.p7b", + "signAlg": "SHA256withECDSA", + "storeFile": "C:\\Users\\aoliuh\\.ohos\\config\\openharmony\\auto_ohos_default_ohos.samples.myapplication.p12" + } + } + ], + "compileSdkVersion": 9, + "compatibleSdkVersion": 9, + "products": [ + { + "name": "default", + "signingConfig": "default", + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/build.gradle b/ETSUI/eTSDrawingAndAnimation/build.gradle deleted file mode 100644 index d675b48000c68cd35cc61fb17874d845dbb17e64..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/build.gradle +++ /dev/null @@ -1,33 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -apply plugin: 'com.huawei.ohos.app' - -//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 -ohos { - compileSdkVersion 7 -} - -buildscript { - repositories { - maven { - url 'https://repo.huaweicloud.com/repository/maven/' - } - maven { - url 'https://developer.huawei.com/repo/' - } - } - dependencies { - classpath 'com.huawei.ohos:hap:3.0.3.4' - classpath 'com.huawei.ohos:decctest:1.2.6.0' - } -} - -allprojects { - repositories { - maven { - url 'https://repo.huaweicloud.com/repository/maven/' - } - maven { - url 'https://developer.huawei.com/repo/' - } - } -} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/.gitignore b/ETSUI/eTSDrawingAndAnimation/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5a6ba80fa3d9498a23ae8ae7d9518f8743fa8a96 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.preview +/build +/.cxx \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/build-profile.json5 b/ETSUI/eTSDrawingAndAnimation/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f8f03407f77914b43168aeca6bb0929efd6700b4 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/build-profile.json5 @@ -0,0 +1,13 @@ +{ + "apiType": 'stageMode', + "buildOption": { + }, + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/build.gradle b/ETSUI/eTSDrawingAndAnimation/entry/build.gradle deleted file mode 100644 index 31f12661b0e257a5d1dd57f654d308b3bcbc8620..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'com.huawei.ohos.hap' -apply plugin: 'com.huawei.ohos.decctest' -//For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 -ohos { - compileSdkVersion 7 - defaultConfig { - compatibleSdkVersion 7 - } - buildTypes { - release { - proguardOpt { - proguardEnabled false - rulesFiles 'proguard-rules.pro' - } - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) - testImplementation 'junit:junit:4.13.1' - ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.200' -} -decc { - supportType = ['html','xml'] -} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/hvigorfile.js b/ETSUI/eTSDrawingAndAnimation/entry/hvigorfile.js new file mode 100644 index 0000000000000000000000000000000000000000..d7720ee6a7aad5c617d1fd2f6fc8c87067bfa32c --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/hvigorfile.js @@ -0,0 +1,2 @@ +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +module.exports = require('@ohos/hvigor-ohos-plugin').hapTasks diff --git a/ETSUI/eTSDrawingAndAnimation/entry/package-lock.json b/ETSUI/eTSDrawingAndAnimation/entry/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..15bc7145be1490029883067847743ea7134cf545 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "entry", + "version": "1.0.0", + "lockfileVersion": 1 +} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/package.json b/ETSUI/eTSDrawingAndAnimation/entry/package.json new file mode 100644 index 0000000000000000000000000000000000000000..992c771b9e6be8904ce4204f075df58a9b0902cc --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/package.json @@ -0,0 +1,14 @@ +{ + "license":"ISC", + "devDependencies":{}, + "name":"entry", + "ohos":{ + "org":"huawei", + "directoryLevel":"module", + "buildTool":"hvigor" + }, + "description":"example description", + "repository":{}, + "version":"1.0.0", + "dependencies":{} +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/config.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/config.json deleted file mode 100644 index e2f75cea5348c5b3689faa46faff2c0845b25edf..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/config.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "app": { - "bundleName": "ohos.samples.etsdrawingandanimation", - "vendor": "example", - "version": { - "code": 1000000, - "name": "1.0.0" - } - }, - "deviceConfig": {}, - "module": { - "package": "ohos.samples.etsdrawingandanimation", - "name": ".MyApplication", - "mainAbility": "ohos.samples.etsdrawingandanimation.MainAbility", - "deviceType": [ - "phone" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "entry", - "moduleType": "entry", - "installationFree": false - }, - "abilities": [ - { - "skills": [ - { - "entities": [ - "entity.system.home" - ], - "actions": [ - "action.system.home" - ] - } - ], - "visible": true, - "name": "ohos.samples.etsdrawingandanimation.MainAbility", - "icon": "$media:Logo", - "description": "$string:mainability_description", - "label": "$string:entry_MainAbility", - "type": "page", - "launchType": "standard" - } - ], - "js": [ - { - "mode": { - "syntax": "ets", - "type": "pageAbility" - }, - "pages": [ - "pages/Logo", - "pages/FoodCategoryList", - "pages/FoodDetail" - ], - "name": "default", - "window": { - "designWidth": 720, - "autoDesignWidth": false - } - } - ] - } -} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodData.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/Application/MyAbilityStage.ts similarity index 43% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodData.ets rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/Application/MyAbilityStage.ts index 3507f35acc12ccf9db1cde864dcfbf8eb4fc15c2..396606ff7396988f0849e54a294700ad86e22678 100644 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodData.ets +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/Application/MyAbilityStage.ts @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,35 +13,10 @@ * limitations under the License. */ -export enum Category { - Fruit, - Vegetable, - Nut, - Seafood, - Dessert -} +import AbilityStage from "@ohos.application.AbilityStage" -let NextId = 0; -export class FoodData { - id: string; - name: string; - image: Resource - category: Category; - calories: number; - protein: number; - fat: number; - carbohydrates: number; - vitaminC: number; - - constructor(name: string, image: Resource, category: Category, calories: number, protein: number, fat: number, carbohydrates: number, vitaminC: number) { - this.id = `${ NextId++ }`; - this.name = name; - this.image = image; - this.category = category; - this.calories = calories; - this.protein = protein; - this.fat = fat; - this.carbohydrates = carbohydrates; - this.vitaminC = vitaminC; - } +export default class MyAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] MyAbilityStage onCreate") + } } \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/MainAbility/MainAbility.ts b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/MainAbility/MainAbility.ts new file mode 100644 index 0000000000000000000000000000000000000000..44cfb9c2f43082e4ac28832d6679e108c1e37aca --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/MainAbility/MainAbility.ts @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Ability from '@ohos.application.Ability' + +const TAG: string = 'MainAbility' + +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log(TAG, "MainAbility onCreate") + globalThis.abilityWant = want + } + + onDestroy() { + console.log(TAG, "MainAbility onDestroy") + } + + onWindowStageCreate(windowStage) { + console.log(TAG, "MainAbility onWindowStageCreate") + + let strKcal = this.context.resourceManager.getStringSync($r("app.string.unit_calories").id) + AppStorage.SetOrCreate('strKcal', strKcal) + + let strWeight = this.context.resourceManager.getStringSync($r("app.string.unit_weight").id) + AppStorage.SetOrCreate('strWeight', strWeight) + + let strGram = this.context.resourceManager.getStringSync($r("app.string.unit_gram").id) + AppStorage.SetOrCreate('strGram', strGram) + + let strMilligram = this.context.resourceManager.getStringSync($r("app.string.unit_milligram").id) + AppStorage.SetOrCreate('strMilligram', strMilligram) + + let categoryList: Resource[] = [$r('app.string.food_type_fruit'), $r('app.string.food_type_vegetable'), $r('app.string.food_type_nut'), $r('app.string.food_type_seafood'), $r('app.string.food_type_dessert')] + let strCategoryList = [] + categoryList.forEach(item => { + let strCategory = this.context.resourceManager.getStringSync(item.id) + strCategoryList.push(strCategory) + }) + AppStorage.SetOrCreate>('strMealTimeList', strCategoryList) + + let mealTimeList: Resource[] = [$r("app.string.meal_time_break"), $r('app.string.meal_time_lunch'), $r('app.string.meal_time_dinner'), $r('app.string.meal_time_supper'), $r('app.string.food_type_dessert')] + let strMealTimeList = [] + mealTimeList.forEach(item => { + let strMealTime = this.context.resourceManager.getStringSync(item.id) + strMealTimeList.push(strMealTime) + }) + AppStorage.SetOrCreate>('strMealTimeList', strMealTimeList) + + windowStage.loadContent("pages/Home", (err, data) => { + if (err.code) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)) + return + } + console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)) + }) + } + + onWindowStageDestroy() { + console.log(TAG, "MainAbility onWindowStageDestroy") + } + + onForeground() { + console.log(TAG, "MainAbility onForeground") + } + + onBackground() { + console.log(TAG, "MainAbility onBackground") + } +} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/BreakpointSystem.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/BreakpointSystem.ets new file mode 100644 index 0000000000000000000000000000000000000000..78df5cf0496f6af21a608fd6c2c288414193bd7c --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/BreakpointSystem.ets @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import mediaQuery from '@ohos.mediaquery' + +export class BreakPointType { + sm: T + md: T + lg: T + + constructor(sm: T, md: T, lg: T) { + this.sm = sm + this.md = md + this.lg = lg + } + + GetValue(currentBreakPoint: string) { + if (currentBreakPoint === 'sm') { + return this.sm + } else if (currentBreakPoint === 'md') { + return this.md + } else if (currentBreakPoint === 'lg') { + return this.lg + } else { + return undefined + } + } +} + +export class BreakpointSystem { + private currentBreakpoint: string = 'md' + private smListener: any + private mdListener: any + private lgListener: any + + private updateCurrentBreakpoint(breakpoint: string) { + console.log('currentBreakpoint:' + this.currentBreakpoint) + if (this.currentBreakpoint !== breakpoint) { + this.currentBreakpoint = breakpoint + AppStorage.Set('currentBreakpoint', this.currentBreakpoint) + } + } + + public register() { + this.smListener = mediaQuery.matchMediaSync("(800 { + if (mediaQueryResult.matches) { + this.updateCurrentBreakpoint('sm') + } + }) + this.mdListener = mediaQuery.matchMediaSync("(1200 { + if (mediaQueryResult.matches) { + this.updateCurrentBreakpoint('md') + } + }) + this.lgListener = mediaQuery.matchMediaSync("(2500 { + if (mediaQueryResult.matches) { + this.updateCurrentBreakpoint('lg') + } + }) + } + + public unregister() { + this.smListener.off('change', this.smListener) + this.mdListener.off('change', this.mdListener) + this.lgListener.off('change', this.lgListener) + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/app.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/Constants.ets similarity index 74% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/app.ets rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/Constants.ets index 2a3b6238737330f469fc124b0669aacd9a376056..2094ee332ad1ff6967b72a6220d3d74b5d56790f 100644 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/app.ets +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/common/Constants.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,11 +13,6 @@ * limitations under the License. */ -export default { - onCreate() { - console.info('Application onCreate') - }, - onDestroy() { - console.info('Application onDestroy') - }, -} +export let APP_THEME_COLOR: string = '#73CD57' + +export let CIRCLE_RADIUS: number = 80 diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodDataModels.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodDataModels.ets deleted file mode 100644 index fd6fa8304ea7b7d9ed7c26fb95d0101b801b4338..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/model/FoodDataModels.ets +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { FoodData, Category } from './FoodData' - -const FoodComposition: any[] = [ - { 'name': 'Tomato', 'image': $r('app.media.Tomato'), 'category': Category.Vegetable, 'calories': 17, 'protein': 0.9, 'fat': 0.2, 'carbohydrates': 3.9, 'vitaminC': 17.8 }, - { 'name': 'Walnut', 'image': $r('app.media.Walnut'), 'category': Category.Nut, 'calories': 654 , 'protein': 15, 'fat': 65, 'carbohydrates': 14, 'vitaminC': 1.3 }, - { 'name': 'Cucumber', 'image': $r('app.media.Cucumber'), 'category': Category.Vegetable, 'calories': 30, 'protein': 3, 'fat': 0, 'carbohydrates': 1.9, 'vitaminC': 2.1 }, - { 'name': 'Blueberry', 'image': $r('app.media.Blueberry'), 'category': Category.Fruit, 'calories': 57, 'protein': 0.7, 'fat': 0.3, 'carbohydrates': 14, 'vitaminC': 9.7 }, - { 'name': 'Crab', 'image': $r('app.media.Crab'), 'category': Category.Seafood, 'calories': 97, 'protein': 19, 'fat': 1.5, 'carbohydrates': 0, 'vitaminC': 7.6 }, - { 'name': 'IceCream', 'image': $r('app.media.IceCream'), 'category': Category.Dessert, 'calories': 207, 'protein': 3.5, 'fat': 11, 'carbohydrates': 24, 'vitaminC': 0.6 }, - { 'name': 'Onion', 'image': $r('app.media.Onion'), 'category': Category.Vegetable, 'calories': 39, 'protein': 1.1, 'fat': 0.1, 'carbohydrates': 9, 'vitaminC': 7.4 }, - { 'name': 'Mushroom', 'image': $r('app.media.Mushroom'), 'category': Category.Vegetable, 'calories': 22, 'protein': 3.1, 'fat': 0.3, 'carbohydrates': 3.3, 'vitaminC': 2.1 }, - { 'name': 'Kiwi', 'image': $r('app.media.Kiwi'), 'category': Category.Fruit, 'calories': 60 , 'protein': 1.1, 'fat': 0.5, 'carbohydrates': 15, 'vitaminC': 20.5 }, - { 'name': 'Pitaya', 'image': $r('app.media.Pitaya'), 'category': Category.Fruit, 'calories': 60, 'protein': 1.2, 'fat': 0, 'carbohydrates': 10, 'vitaminC': 60.9 }, - { 'name': 'Avocado', 'image': $r('app.media.Avocado'), 'category': Category.Fruit, 'calories': 160, 'protein': 2, 'fat': 15, 'carbohydrates': 9, 'vitaminC': 10 }, - { 'name': 'Strawberry', 'image': $r('app.media.Strawberry'), 'category': Category.Fruit, 'calories': 32, 'protein': 0.7, 'fat': 0.3, 'carbohydrates': 8, 'vitaminC': 58.8 } -] - -export function initializeOnStartup(): Array { - let FoodDataArray: Array = [] - FoodComposition.forEach(item => { - FoodDataArray.push(new FoodData(item.name, item.image, item.category, item.calories, item.protein, item.fat, item.carbohydrates, item.vitaminC)); - }) - return FoodDataArray; -} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodDetail.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodDetail.ets deleted file mode 100644 index 09519bad99f0e4f21b3d53621e2f3f5c2493c3b5..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodDetail.ets +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Curves from '@ohos.curves' -import router from '@system.router' -import { FoodData, Category } from '../model/FoodData' - -@Component -struct PageTitle { - build() { - Flex({ alignItems: ItemAlign.Start }) { - Image($r('app.media.Back')) - .width(21.8) - .height(19.6) - Text('Food Detail') - .fontSize(21.8) - .margin({ left: 17.4 }) - } - .height(61) - .backgroundColor('#FFedf2f5') - .padding({ top: 13, bottom: 15, left: 28.3 }) - .onClick(() => { - router.back() - }) - } -} - -@Component -struct FoodImageDisplay { - private foodItem: FoodData - build() { - Stack({ alignContent: Alignment.BottomStart }) { - Image(this.foodItem.image) - .objectFit(ImageFit.Contain) - .sharedTransition(this.foodItem.id, { duration: 1000, curve: Curves.cubicBezier(0.2, 0.2, 0.1, 1.0), delay: 100}) - Text(this.foodItem.name) - .fontSize(26) - .fontWeight(500) - .margin({ left: 26, bottom: 17.4 }) - } - .backgroundColor('#FFedf2f5') - .height(357) - } -} - -@Component -struct ContentTable { - private foodItem: FoodData - @Builder IngredientItem(title:string, colorValue: string, name: string, value: string) { - Flex() { - Text(title) - .fontSize(17.4) - .fontWeight(FontWeight.Bold) - .layoutWeight(1) - Flex({ alignItems: ItemAlign.Center }) { - Circle({ width: 6, height: 6 }) - .margin({ right: 12 }) - .fill(colorValue) - Text(name) - .fontSize(17.4) - .flexGrow(1) - Text(value) - .fontSize(17.4) - } - .layoutWeight(2) - } - } - - build() { - Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) { - this.IngredientItem('Calories', '#FFf54040', 'Calories', this.foodItem.calories + 'kcal') - this.IngredientItem('Nutrition', '#FFcccccc', 'Protein', this.foodItem.protein + 'g') - this.IngredientItem(' ', '#FFf5d640', 'Fat', this.foodItem.fat + 'g') - this.IngredientItem(' ', '#FF9e9eff', 'Carbohydrates', this.foodItem.carbohydrates + 'g') - this.IngredientItem(' ', '#FF53f540', 'VitaminC', this.foodItem.vitaminC + 'mg') - } - .padding({ top: 20, right: 20, left: 20 }) - .height(250) - } -} - -@Entry -@Component -struct FoodDetail { - private foodItem: FoodData = router.getParams().foodId - build() { - Column() { - Stack({ alignContent: Alignment.TopStart }) { - FoodImageDisplay({ foodItem: this.foodItem }) - PageTitle() - } - ContentTable({ foodItem: this.foodItem }) - } - .alignItems(HorizontalAlign.Center) - } -} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/mock/MockData.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/mock/MockData.ets new file mode 100644 index 0000000000000000000000000000000000000000..03c481ff556f4a36d248b355569e1930257a26ac --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/mock/MockData.ets @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { FoodInfo, Category, OneMealStatisticsInfo, MealFoodInfo, DietRecord } from '../model/DataModels' +import router from '@ohos.router' + +const DEBUG = true +const strMealTimeList = AppStorage.Get>('strMealTimeList') +const FoodComposition: any[] = [ + { + 'id': '1', + 'name': 'Tomato', + 'image': $r('app.media.Tomato'), + 'category': strMealTimeList[1], + 'calories': 15, + 'protein': 0.9, + 'fat': 0.2, + 'carbohydrates': 3.3, + 'vitaminC': 14.0 + }, + { + 'id': '2', + 'name': 'Walnut', + 'image': $r('app.media.Walnut'), + 'category': strMealTimeList[2], + 'calories': 646, + 'protein': 14.9, + 'fat': 58.8, + 'carbohydrates': 19.1, + 'vitaminC': 1.0 + }, + { + 'id': '3', + 'name': 'Cucumber', + 'image': $r('app.media.Cucumber'), + 'category': strMealTimeList[1], + 'calories': 16, + 'protein': 0.8, + 'fat': 0.2, + 'carbohydrates': 2.9, + 'vitaminC': 9.0 + }, + { + 'id': '4', + 'name': 'Blueberry', + 'image': $r('app.media.Blueberry'), + 'category': strMealTimeList[0], + 'calories': 57, + 'protein': 0.7, + 'fat': 0.3, + 'carbohydrates': 14.5, + 'vitaminC': 9.7 + }, + { + 'id': '5', + 'name': 'Crab', + 'image': $r('app.media.Crab'), + 'category': strMealTimeList[3], + 'calories': 97, + 'protein': 19, + 'fat': 1.5, + 'carbohydrates': 0, + 'vitaminC': 7.6 + }, + { + 'id': '6', + 'name': 'IceCream', + 'image': $r('app.media.IceCream'), + 'category': strMealTimeList[4], + 'calories': 150, + 'protein': 3.5, + 'fat': 11, + 'carbohydrates': 24, + 'vitaminC': 0.6 + }, + { + 'id': '7', + 'name': 'Onion', + 'image': $r('app.media.Onion'), + 'category': strMealTimeList[1], + 'calories': 40, + 'protein': 1.1, + 'fat': 0.2, + 'carbohydrates': 9, + 'vitaminC': 8.0 + }, + { + 'id': '8', + 'name': 'Mushroom', + 'image': $r('app.media.Mushroom'), + 'category': strMealTimeList[1], + 'calories': 20, + 'protein': 3.1, + 'fat': 0.3, + 'carbohydrates': 3.3, + 'vitaminC': 206 + }, + { + 'id': '9', + 'name': 'Kiwi', + 'image': $r('app.media.Kiwi'), + 'category': strMealTimeList[0], + 'calories': 61, + 'protein': 0.8, + 'fat': 0.6, + 'carbohydrates': 14.5, + 'vitaminC': 62 + }, + { + 'id': '10', + 'name': 'Pitaya', + 'image': $r('app.media.Pitaya'), + 'category': strMealTimeList[0], + 'calories': 55, + 'protein': 1.1, + 'fat': 0.2, + 'carbohydrates': 13.3, + 'vitaminC': 3.0 + }, + { + 'id': '11', + 'name': 'Avocado', + 'image': $r('app.media.Avocado'), + 'category': strMealTimeList[0], + 'calories': 171, + 'protein': 2.0, + 'fat': 15.3, + 'carbohydrates': 7.4, + 'vitaminC': 8.0 + }, + { + 'id': '12', + 'name': 'Strawberry', + 'image': $r('app.media.Strawberry'), + 'category': strMealTimeList[0], + 'calories': 32, + 'protein': 1.0, + 'fat': 0.2, + 'carbohydrates': 7.1, + 'vitaminC': 47.0 + }, + { + 'id': '0', + 'name': '', + 'image': '', + 'category': '', + 'calories': 0, + 'protein': 0, + 'fat': 0, + 'carbohydrates': 0, + 'vitaminC': 0 + } +] + +export function getDietRecords(): Array { + let records = AppStorage.Get>('dietRecords') + + if (DEBUG && records === undefined) { + return [ + { "id": "0", "name": "", "mealTime": "Breakfast", weight: 0 }, + { "id": "0", "name": "", "mealTime": "Lunch", weight: 0 }, + { "id": "0", "name": "", "mealTime": "Dinner", weight: 0 }, + { "id": "0", "name": "", "mealTime": "Supper", weight: 0 }, + { "id": "2", "name": "Walnut", "mealTime": "Lunch", weight: 200 }, + { "id": "3", "name": "Cucumber", "mealTime": "Dinner", weight: 200 }, + { "id": "11", "name": "Avocado", "mealTime": "Lunch", weight: 200 }, + { "id": "12", "name": "Strawberry", "mealTime": "Dinner", weight: 200 } + ] + } else { + return records + } +} + +export function updateDietWeight(recordId: string, weight: number) { + let dietRecords = getDietRecords() + let index = dietRecords.findIndex((record) => { + return record.id === recordId + }) + dietRecords[index].weight = weight + AppStorage.SetOrCreate>('dietRecords', dietRecords) +} + +export function statistics(): Array { + console.log('statistics') + let dietRecords = getDietRecords() + const mealMap = new Map() + dietRecords.forEach((item, index) => { + let oneMealStatisticsInfo: OneMealStatisticsInfo = mealMap.get(item.mealTime) + if (oneMealStatisticsInfo === undefined) { + oneMealStatisticsInfo = new OneMealStatisticsInfo(item.mealTime) + } + var foodInfo = FoodComposition.find((food) => { + return food.name === item.name + }) + var calories = foodInfo.calories * item.weight + var protein = foodInfo.protein * item.weight + var fat = foodInfo.fat * item.weight + var carbohydrates = foodInfo.carbohydrates * item.weight + oneMealStatisticsInfo.mealFoods.push(new MealFoodInfo(item.id, foodInfo.name, foodInfo.image, calories, protein, fat, carbohydrates, item.weight)) + oneMealStatisticsInfo.totalFat += fat + oneMealStatisticsInfo.totalCalories += calories + oneMealStatisticsInfo.totalCarbohydrates += carbohydrates + oneMealStatisticsInfo.totalProtein += protein + mealMap.set(item.mealTime, oneMealStatisticsInfo) + }) + + return Array.from(mealMap.values()) +} + +export function initializeOnStartup(): Array { + let FoodDataArray: Array = [] + FoodComposition.forEach(item => { + FoodDataArray.push(new FoodInfo(item.name, item.image, item.category, item.calories, item.protein, item.fat, item.carbohydrates, item.vitaminC)); + }) + return FoodDataArray; +} + +export function getSortedFoodData(): Array { + var letter_reg = /^[A-Z]$/ + var list = new Array() + for (var i = 0;i < FoodComposition.length; i++) { + + list['#'] = new Array() + + var letter = FoodComposition[i].name.substr(0, 1).toUpperCase() + + if (!letter_reg.test(letter)) { + letter = '#' + } + + if (!(letter in list)) { + list[letter] = new Array() + } + + var item = FoodComposition[i] + list[letter].push(new FoodInfo(item.name, item.image, item.category, item.calories, item.protein, item.fat, item.carbohydrates, item.vitaminC)) + } + + var result = new Array() + for (var key in list) { + result.push({ + letter: key, + list: list[key] + }) + } + result.sort(function (x, y) { + return x.letter.charCodeAt(0) - y.letter.charCodeAt(0) + }) + + var last_arr = result[0] + result.splice(0, 1) + result.push(last_arr) + + var resultList = [] + for (var i = 0; i < result.length; i++) { + resultList.push(result[i].letter) + resultList = resultList.concat(result[i].list) + } + console.log('liuao11111' + JSON.stringify(resultList)) + return resultList +} + +export function getFoodInfo(): FoodInfo { + if (DEBUG) { + return new FoodInfo('Tomato', $r("app.media.Tomato"), Category.vegetable, 17, 0.9, 0.2, 3.9, 17.8) + } else { + router.getParams()['foodId'] + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/model/DataModels.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/model/DataModels.ets new file mode 100644 index 0000000000000000000000000000000000000000..b4c1c0d8c631cefeb2b276d22ceb5c2fb5ccca5b --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/model/DataModels.ets @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export enum Category { + fruit = 'Fruit', + vegetable = 'Vegetable', + nut = 'Nut', + seafood = 'Seafood', + dessert = 'Dessert' +} + +export class CategoryInfo { + Fruit: string | Resource + Vegetable: string | Resource + Nut: string | Resource + Seafood: string | Resource + Dessert: string | Resource + + constructor(Fruit: string | Resource, Vegetable: string | Resource, Nut: string | Resource, Seafood: string | Resource, Dessert: string | Resource) { + this.Fruit = Fruit + this.Vegetable = Vegetable + this.Nut = Nut + this.Seafood = Seafood + this.Dessert = Dessert + } +} + +let NextId = 0 + +@Observed +export class FoodInfo { + id: string + name: string | Resource + image: Resource + category: Category + calories: number + protein: number + fat: number + carbohydrates: number + vitaminC: number + intakeValue: number + + constructor(name: string | Resource, image: Resource, category: Category, calories: number, protein: number, fat: number, carbohydrates: number, vitaminC: number) { + this.id = `${NextId++}` + this.name = name + this.image = image + this.category = category + this.calories = calories + this.protein = protein + this.fat = fat + this.carbohydrates = carbohydrates + this.vitaminC = vitaminC + this.intakeValue = 0 + } +} + +export class DietRecord { + id: string + name: string | Resource + mealTime: string | Resource + weight: number + + constructor(id: string, name: string | Resource, mealTime: string | Resource, weight: number) { + this.id = id + this.name = name + this.mealTime = mealTime + this.weight = weight + } +} + +@Observed +export class OneMealStatisticsInfo { + mealTime: string | Resource + mealFoods: Array = [] + totalCalories: number = 0 + totalFat: number = 0 + totalCarbohydrates: number = 0 + totalProtein: number = 0 + + constructor(mealTime: string | Resource) { + this.mealTime = mealTime + } +} + +export class MealFoodInfo { + recordId: string + name: string | Resource + image: Resource + calories: number + protein: number + fat: number + carbohydrates: number + weight: number + + constructor(recordId: string, name: string | Resource, image: Resource, calories: number, protein: number, fat: number, carbohydrates: number, weight: number) { + this.recordId = recordId + this.name = name + this.image = image + this.calories = calories + this.protein = protein + this.fat = fat + this.carbohydrates = carbohydrates + this.weight = weight + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/CustomCounter.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/CustomCounter.ets new file mode 100644 index 0000000000000000000000000000000000000000..e9effcc6b2886e8c74e04c76daa687527d7705f8 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/CustomCounter.ets @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@Preview +@Component +struct DecIcon { + private click: () => void = undefined + + build() { + Stack() { + Line() + .startPoint([0, 0]) + .endPoint([12, 0]) + .stroke(Color.White) + .strokeWidth(2) + .strokeLineCap(LineCapStyle.Round) + } + .borderRadius(10) + .backgroundColor('#35BD6A') + .width(20) + .height(20) + .opacity(0.4) + .onClick(() => { + this.click() + }) + } +} + +@Preview +@Component +struct IncIcon { + private readonly click: () => void = undefined + + build() { + Stack() { + Line() + .startPoint([0, 0]) + .endPoint([0, 12]) + .stroke(Color.White) + .strokeWidth(2) + .strokeLineCap(LineCapStyle.Round) + } + .borderRadius(10) + .backgroundColor('#35BD6A') + .width(20) + .height(20) + .onClick(() => { + this.click() + }) + } +} + +@Component +export struct CustomCounter { + @Prop value: string + private onDec: () => void = undefined + private onInc: () => void = undefined + + build() { + Row() { + DecIcon({ click: this.onDec }) + Text(this.value).margin({ left: 11, right: 11 }) + IncIcon({ click: this.onInc }) + } + } +} + +@Preview +@Entry +@Component +struct PreviewCustomCounter { + @State weight: number = 50 + + build() { + Row() { + CustomCounter({ + value: this.weight + 'g', + onDec: () => { + this.weight -= 50 + }, + onInc: () => { + this.weight += 50 + } + }) + } + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/DietRecord.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/DietRecord.ets new file mode 100644 index 0000000000000000000000000000000000000000..35cb2a612d18faabe9595873c146c5b969f365d9 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/DietRecord.ets @@ -0,0 +1,382 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { OneMealStatisticsInfo, MealFoodInfo } from '../model/DataModels' +import { statistics, updateDietWeight } from '../mock/MockData' +import { BreakPointType } from '../common/BreakpointSystem' +import { CustomCounter } from './CustomCounter' + +class ElementsItem { + public elements: string | Resource + public weight: number + public color: string + public heat: string | Resource + + constructor(elements: string | Resource, weight: number, color: string, heat: string | Resource) { + this.elements = elements + this.weight = weight + this.color = color + this.heat = heat + } +} + +function GetColor(value: number): string { + if (value / 1000 > 100) { + return '#FD9A42' + } else { + return '#73CD57' + } +} + +@Component +struct Histogram { + @Consume("dietData") dietData: Array + private title: string | Resource + private legend: ElementsItem[] + @BuilderParam content: any + @BuilderParam legendComponent: any + private mealTime: Resource[] = [$r("app.string.meal_time_break"), $r("app.string.meal_time_lunch"), $r("app.string.meal_time_dinner"), $r("app.string.meal_time_supper")] + + build() { + Column() { + Row() { + Text(this.title) + .textAlign(TextAlign.Start) + .fontSize(24) + .fontColor('#000000') + .fontFamily('HarmonyHeTi-Medium') + } + .width('100%') + .height(46) + + Stack({ alignContent: Alignment.Bottom }) { + Column() { + ForEach(new Array(6), (item) => { + Divider() + .strokeWidth(1) + .color('#D8d8d8') + }) + } + .height('100%') + .margin({ top: 10 }) + .justifyContent(FlexAlign.SpaceBetween) + + Column() { + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) { + ForEach(this.dietData, (item, index) => { + Column() { + this.content(item) + Text(item.mealTime).fontSize(14) + .fontColor('#7E7E7E') + .fontFamily('HarmonyHeTi') + .margin({ top: 10 }) + } + .justifyContent(FlexAlign.End) + .height('100%') + }) + } + } + .height(216) + } + .height(190) + + Row() { + ForEach(this.legend, item => { + Row() { + Rect({ width: 9, height: 9, radius: 9 }).fill(item.color).margin({ right: 18 }) + this.legendComponent(item) + } + }) + } + .justifyContent(FlexAlign.SpaceEvenly) + .width('100%') + .margin({ top: 50 }) + } + .height('100%') + .padding({ left: 32, right: 32 }) + .borderRadius(12) + .backgroundColor('#FFFFFF') + } +} + +@Component +struct NutritionHistogramContent { + @Consume("dietData") dietData: Array + private legend: ElementsItem[] = [ + new ElementsItem($r("app.string.diet_record_fat"), 50, '#FFD339', ''), + new ElementsItem($r("app.string.diet_record_protein"), 50, '#FD9A42', ''), + new ElementsItem($r("app.string.diet_record_carbohydrates"), 50, '#73CD57', '') + ] + + @Builder legendComponent(item) { + Column() { + Text(item.elements).fontSize(12).fontColor('#18181A').fontFamily('HarmonyHeTi') + Text(item.weight + 'g').fontSize(12).fontColor('#7E7E7E').fontFamily('HarmonyHeTi') + } + } + + @Builder content(item) { + Circle({ width: item.totalFat == 0 ? 0 : 14, height: item.totalFat == 0 ? 0 : 14 }) + .fill('#FD9A42') + .margin({ bottom: -7 }) + Rect({ width: 14, height: item.totalFat / 200 }).fill('#FD9A42').margin({ bottom: -7 }) + Circle({ width: item.totalProtein == 0 ? 0 : 14, height: item.totalProtein == 0 ? 0 : 14 }) + .fill('#FBD44E') + .margin({ bottom: -7 }) + Rect({ width: 14, height: item.totalProtein / 200 }) + .fill('#FBD44E') + .margin({ bottom: item.totalCarbohydrates == 0 ? 7 : -7 }) + Circle({ width: item.totalCarbohydrates == 0 ? 0 : 14, height: item.totalCarbohydrates == 0 ? 0 : 14 }) + .fill('#73CD57') + .margin({ bottom: -7 }) + Rect({ width: 14, height: item.totalCarbohydrates / 200 }).fill('#73CD57').margin({ bottom: -10 }) + } + + build() { + Row() { + Histogram({ + title: $r("app.string.nutrition_element"), + content: this.content, + legend: this.legend, + legendComponent: this.legendComponent + }) + } + } +} + +@Component +struct HeatHistogramContent { + private legend: ElementsItem[] = [ + new ElementsItem('', 50, '#FD9A42', $r("app.string.high_calorie")), + new ElementsItem('', 50, '#73CD57', $r("app.string.medium_low_calories")), + ] + + @Builder legendComponent(item) { + Column() { + Text(item.heat).fontSize(12).fontColor('#18181A').fontFamily('HarmonyHeTi') + } + } + + @Builder content(item) { + Circle({ width: item.totalCalories == 0 ? 0 : 14, height: item.totalCalories == 0 ? 0 : 14 }) + .fill(GetColor(item.totalCalories)) + .margin({ bottom: -7 }) + Rect({ width: 14, height: item.totalCalories / 1000 }).fill(GetColor(item.totalCalories)).margin({ bottom: -10 }) + } + + build() { + Row() { + Histogram({ + title: $r("app.string.diet_record_calorie"), + content: this.content, + legend: this.legend, + legendComponent: this.legendComponent + }) + } + } +} + +@Component +struct MealFoodDetail { + @Consume("dataChange") notifyDataChange: number + @State shown: boolean = true + @State translateX: number = 0 + private mealFoodInfo: MealFoodInfo + private panTranslateX: number = 300 + + build() { + if (this.shown) { + if (this.mealFoodInfo.weight != 0) { + Row() { + Row() { + Image(this.mealFoodInfo.image) + .width(50) + .height(50) + + Column() { + Text(this.mealFoodInfo.name) + .fontSize(16) + .fontColor('#444444') + .fontFamily('HarmonyHeTi') + .margin({ bottom: 4 }) + Text(this.mealFoodInfo.calories / 100 + 'kcal') + .fontSize(11) + .fontColor('#A3A3A3') + .fontFamily('HarmonyHeTi') + }.alignItems(HorizontalAlign.Start) + + Blank() + CustomCounter({ + value: this.mealFoodInfo.weight + 'g', + onDec: () => { + if (this.mealFoodInfo.weight > 0) { + this.mealFoodInfo.weight -= 50 + updateDietWeight(this.mealFoodInfo.recordId, this.mealFoodInfo.weight) + this.notifyDataChange++ + } + }, + onInc: () => { + this.mealFoodInfo.weight += 50 + updateDietWeight(this.mealFoodInfo.recordId, this.mealFoodInfo.weight) + this.notifyDataChange++ + } + }) + } + .width('100%') + + Image($r("app.media.ic_public_delete")) + .backgroundColor('#E84026') + .objectFit(ImageFit.ScaleDown) + .borderRadius(20) + .margin({ left: 50 }) + .size({ width: 40, height: 40 }) + .onClick(() => { + animateTo({ duration: 400 }, () => { + this.shown = false + }) + }) + } + .transition({ type: TransitionType.Delete, translate: { x: -350, y: 0 }, opacity: 0 }) + .translate({ x: this.translateX }) + .width('100%') + .height(70) + .gesture( + PanGesture() + .onActionStart(() => { + }) + .onActionEnd(() => { + + }) + .onActionUpdate((event: GestureEvent) => { + console.log('x:' + event.offsetX) + if (event.offsetX < 0) { + if (event.offsetX < -100) { + this.translateX = (event.offsetX * Math.exp(-1.848)) - 100 + } else { + this.translateX = event.offsetX + } + } + }) + ) + } + } + } +} + + +@Component +struct MealCard { + @ObjectLink mealInfo: OneMealStatisticsInfo + + build() { + Column() { + if (this.mealInfo.mealFoods.length > 1) { + Text(this.mealInfo.mealTime) + .fontSize(24) + .fontColor('#000000') + .fontFamily('HarmonyHeTi-Medium') + .height(56) + .width('100%') + .backgroundColor('#FFFFFF') + .padding({ left: 16, right: 16 }) + + ForEach(this.mealInfo.mealFoods, (mealItem) => { + MealFoodDetail({ mealFoodInfo: mealItem }) + }) + } + + } + .backgroundColor('#FFFFFF') + .borderRadius(12) + .padding({ left: 16, right: 16 }) + .margin(12) + } +} + +@Component +struct DietDetails { + @Consume("dietData") dietData: Array + @StorageProp('currentBreakpoint') currentBreakpoint: string = 'md' + + build() { + Scroll() { + Column() { + Swiper() { + HeatHistogramContent() + NutritionHistogramContent() + } + .displayCount(new BreakPointType(1, 2, 2).GetValue(this.currentBreakpoint)) + .itemSpace(12) + .height(400) + .width('100%') + .indicatorStyle({ selectedColor: '#35BD6A' }) + .indicator(new BreakPointType(true, false, false).GetValue(this.currentBreakpoint)) + + ForEach(this.dietData, (item) => { + MealCard({ mealInfo: item }) + }) + } + } + .backgroundColor('#EDF2F5') + } +} + +@Component +struct NoRecord { + build() { + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) { + + Text('Record') + .fontSize(26) + .padding({ left: 26, top: 12 }) + Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { + Image($r("app.media.NoRecord")) + .height(130) + .width(130) + Text('No record, please return index page to add.') + .fontSize(15) + .fontColor('rgba(0, 0,0,0.4)') + } + .width('100%') + } + .width('100%') + } +} + +@Entry +@Component +export struct Records { + @Provide("dietData") dietStatisticsData: Array = [] + @Provide("dataChange") @Watch('onDataChange') listenDataChange: number = 0 + + onDataChange() { + console.log('onDataChange') + this.dietStatisticsData = statistics() + } + + aboutToAppear() { + this.dietStatisticsData = statistics() + } + + build() { + Column() { + if (this.dietStatisticsData.length === 0) { + NoRecord() + } else { + DietDetails() + } + } + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/FoodDetail.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/FoodDetail.ets new file mode 100644 index 0000000000000000000000000000000000000000..2d2ba7de6d93c9fecb5af281da66c7c52d9e9c6a --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/FoodDetail.ets @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@ohos.router' +import { APP_THEME_COLOR, CIRCLE_RADIUS } from '../common/Constants' +import { BreakPointType } from '../common/BreakpointSystem' +import { FoodInfo, Category, DietRecord } from '../model/DataModels' +import curves from '@ohos.curves' + +@Styles function cardStyle () { + .height('100%') + .padding({ top: 20, right: 20, left: 20 }) + .backgroundColor(Color.White) + .borderRadius(12) +} + +@Component +struct PageTitle { + private foodName: Resource = $r("app.string.title_food_detail") + + build() { + Row() { + Image($r('app.media.Back')) + .width(20) + .height(20) + .onClick(() => { + router.back() + }) + Text(this.foodName) + .fontSize(22) + .margin({ left: 20 }) + } + .padding(12) + .width('100%') + } +} + +@Component +struct FoodImageDisplay { + private foodItem: FoodInfo + + build() { + Stack({ alignContent: Alignment.BottomStart }) { + Image(this.foodItem.image) + .objectFit(ImageFit.Contain) + Text(this.foodItem.name) + .fontSize(26) + .fontWeight(FontWeight.Bold) + .margin({ left: 26, bottom: 18 }) + } + .height(358) + } +} + +@Component +struct CaloriesProgress { + private foodItem: FoodInfo + private averageCalories: number = 0 + private totalCalories: number = 0 + private highCalories: boolean = false + + aboutToAppear() { + switch (this.foodItem.category) { + case Category.vegetable: + this.averageCalories = 26 + break + case Category.fruit: + this.averageCalories = 60 + break + case Category.nut: + this.averageCalories = 606 + break + case Category.seafood: + this.averageCalories = 56 + break + case Category.dessert: + this.averageCalories = 365 + break + } + this.totalCalories = this.averageCalories * 2 + this.highCalories = this.foodItem.calories < this.averageCalories + } + + build() { + Column() { + Row() { + Text($r("app.string.diet_record_calorie")) + .fontSize(26) + Blank() + Text($r("app.string.unit_weight")) + .fontSize(13) + .fontColor('rgba(0,0,0,0.6)') + } + .width("100%") + + Row() { + Text(this.foodItem.calories.toString()) + .fontColor(this.highCalories ? "#ee584c" : "#73cd57") + .fontSize(65) + Text($r("app.string.unit_calories")) + .fontSize(20) + .margin({ bottom: 10 }) + } + .margin({ top: 25, bottom: 15 }) + .alignItems(VerticalAlign.Bottom) + + Text(this.highCalories ? $r("app.string.high_calorie_food") : $r("app.string.low_calorie_food")) + .fontSize(13) + .fontColor("#313131") + + Progress({ value: this.foodItem.calories, total: this.totalCalories, style: ProgressStyle.Linear }) + .style({ strokeWidth: 24 }) + .color(this.highCalories ? Color.Orange : Color.Green) + .margin({ top: 15 }) + } + .cardStyle() + } +} + +class NutritionElement { + element: string | Resource + weight: number + percent: number + beginAngle: number + endAngle: number + color: string + + constructor(element: string | Resource, weight: number, color: string) { + this.element = element + this.weight = weight + this.color = color + } +} + +@Component +struct NutritionPieChart { + private foodItem: FoodInfo + private nutritionElements: NutritionElement[] + private settings: RenderingContextSettings = new RenderingContextSettings(true) + private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) + private strGram: string = AppStorage.Get('strGram') + + build() { + Column() { + Row() { + Text($r("app.string.nutrition_element")) + .fontSize(26) + Blank() + Text($r("app.string.unit_weight")) + .fontSize(13) + .fontColor('rgba(0,0,0,0.6)') + } + .width("100%") + + Canvas(this.context) + .height(CIRCLE_RADIUS * 2) + .aspectRatio(1) + .margin({ top: 30, bottom: 32 }) + .onReady(() => { + this.nutritionElements.forEach((item) => { + this.context.beginPath() + this.context.moveTo(CIRCLE_RADIUS, CIRCLE_RADIUS) + this.context.arc(CIRCLE_RADIUS, CIRCLE_RADIUS, CIRCLE_RADIUS, item.beginAngle, item.endAngle) + this.context.fillStyle = item.color + this.context.fill() + }) + }) + + Row() { + ForEach(this.nutritionElements, item => { + Row({ space: 4 }) { + Circle({ width: 8, height: 8 }).fill(item.color) + Text(item.element).fontSize(12) + Text(item.weight + this.strGram).fontSize(12) + } + }) + } + .width('100%') + .justifyContent(FlexAlign.SpaceAround) + } + .cardStyle() + } +} + +@Component +struct NutritionPercent { + private foodItem: FoodInfo + private nutritionElements: NutritionElement[] + private strGram: string = AppStorage.Get('strGram') + + build() { + Column() { + Row() { + Text($r("app.string.nutrition_element")) + .fontSize(26) + Blank() + Text($r("app.string.unit_weight")) + .fontSize(13) + .fontColor('rgba(0,0,0,0.6)') + } + .width("100%") + .height(26) + + Row() { + ForEach(this.nutritionElements, item => { + Column() { + Stack({ alignContent: Alignment.Center }) { + Progress({ value: item.percent, type: ProgressType.Ring }) + .style({ strokeWidth: 10 }) + .color(item.color) + .margin(4) + Text(item.percent + '%').fontSize(17) + } + + Text(item.element) + .fontSize(10) + .margin({ top: 24 }) + Text(item.weight.toString() + this.strGram) + .fontSize(13) + .fontColor('rgba(0,0,0,0.6)') + }.layoutWeight(1) + + }) + } + .width('100%') + .margin({ top: 68 }) + } + .cardStyle() + } +} + +@Component +struct NutritionData { + private foodItem: FoodInfo + private values: number[] = [] + private totalValue: number = 0 + + aboutToAppear() { + this.values.push(this.foodItem.carbohydrates) + this.values.push(this.foodItem.fat) + this.values.push(this.foodItem.protein) + this.totalValue = this.foodItem.carbohydrates + this.foodItem.fat + this.foodItem.protein + } + + @Builder Lable(title: string, colorValue: string) { + Row() { + Circle({ width: 6, height: 6 }).fill(colorValue).margin({ right: 10 }) + Text(title) + } + .margin({ top: 15 }) + } + + build() { + Column() { + Row() { + Text($r("app.string.nutrition_element")) + .fontSize(26) + Blank() + Text($r("app.string.unit_weight")) + .fontSize(13) + .fontColor('rgba(0,0,0,0.6)') + } + .width("100%") + .height(30) + + Row() { + Row() { + DataPanel({ values: this.values, max: this.totalValue }) + .closeEffect(true) + .width(150) + .height(150) + } + .margin({ right: 10 }) + + Column() { + this.Lable("carbohydrates", "#FFA500") + this.Lable("Protein", "#FF8C00") + this.Lable("carbohydrates", "#FF0000") + } + .margin({ top: 30, left: 30 }) + } + .margin({ top: 24 }) + } + .backgroundColor(Color.White) + .padding({ top: 20, right: 20, left: 20 }) + } +} + +@Component +struct ContentTable { + private foodItem: FoodInfo + private strKcal: string = AppStorage.Get('strKcal') + private strGram: string = AppStorage.Get('strGram') + private strMilligram: string = AppStorage.Get('strMilligram') + + @Builder IngredientItem(title: Resource | string, colorValue: string, name: Resource | string, value: string) { + Flex() { + Text(title) + .fontSize(18) + .fontWeight(FontWeight.Bold) + .layoutWeight(1) + Flex({ alignItems: ItemAlign.Center }) { + Circle({ width: 6, height: 6 }) + .margin({ right: 12 }) + .fill(colorValue) + Text(name) + .fontSize(18) + .flexGrow(1) + Text(value) + .fontSize(18) + } + .layoutWeight(2) + } + .margin({ bottom: 20 }) + } + + build() { + Column() { + this.IngredientItem($r("app.string.diet_record_calorie"), '#FFf54040', $r("app.string.diet_record_calorie"), this.foodItem.calories.toString() + this.strKcal) + Column() { + this.IngredientItem($r("app.string.diet_record_nutrition"), '#FFcccccc', $r("app.string.diet_record_nutrition"), this.foodItem.protein + this.strGram) + this.IngredientItem(' ', '#FFf5d640', $r("app.string.diet_record_fat"), this.foodItem.fat + this.strGram) + this.IngredientItem(' ', '#FF9e9eff', $r("app.string.diet_record_carbohydrates"), this.foodItem.carbohydrates + this.strGram) + this.IngredientItem(' ', '#FF53f540', $r("app.string.diet_record_vitaminC"), this.foodItem.vitaminC + this.strMilligram) + } + .justifyContent(FlexAlign.Start) + .margin({ top: 20 }) + } + .cardStyle() + } +} + +@CustomDialog +struct Record { + private foodItem: FoodInfo + private controller: CustomDialogController + private select: number = 1 + private strMealTimeList: string[] = AppStorage.Get>('strMealTimeList') + private mileType: string[] = [this.strMealTimeList[0], this.strMealTimeList[1], this.strMealTimeList[2], this.strMealTimeList[3]] + private foodWeight: string[] = ['25', '50', '100', '150', '200', '250', '300', '350', '400', '450', '500'] + private mealTime: string = '' + private mealWeight: number = 0 + private strKcal: string = AppStorage.Get('strKcal') + + build() { + Column() { + Row({ space: 6 }) { + Column() { + Text(this.foodItem.name) + .fontSize(30) + .maxLines(1) + Text(this.foodItem.calories.toString() + this.strKcal) + .fontSize(16) + .fontColor('rgba(0,0,0,0.4)') + .margin({ top: 2 }) + } + .layoutWeight(1) + .justifyContent(FlexAlign.Center) + + TextPicker({ range: this.mileType, selected: this.select }) + .layoutWeight(1) + .linearGradient({ + angle: 0, + direction: GradientDirection.Top, + colors: [[0xfdfdfd, 0.0], [0xe0e0e0, 0.5], [0xfdfdfd, 1]], + }) + .onChange((value: string) => { + this.mealTime = value + }) + + TextPicker({ range: this.foodWeight, selected: this.select }) + .layoutWeight(1) + .linearGradient({ + angle: 0, + direction: GradientDirection.Top, + colors: [[0xfdfdfd, 0.0], [0xe0e0e0, 0.5], [0xfdfdfd, 1]], + }) + .onChange((value: string) => { + this.mealWeight = Number(value) + }) + } + .height(128) + + Button($r("app.string.button_food_detail_complete"), { type: ButtonType.Capsule, stateEffect: true }) + .height(43) + .width('100%') + .margin({ top: 33, left: 72, right: 72 }) + .backgroundColor(APP_THEME_COLOR) + .onClick(() => { + let dietRecordData = new DietRecord(this.foodItem.id, this.foodItem.name, this.mealTime, this.mealWeight) + let dietRecordsList = AppStorage.Get>('dietRecords') + if (dietRecordsList == undefined) { + dietRecordsList = [] + } + dietRecordsList.push(dietRecordData) + AppStorage.SetOrCreate>('dietRecords', dietRecordsList) + this.controller.close() + }) + } + .cardStyle() + .height(254) + .width('90%') + } +} + +@Entry +@Component +struct FoodDetail { + @StorageProp('currentBreakpoint') currentBreakpoint: string = 'md' + private foodItem: any = router.getParams()['foodId'] + private nutritionElements: NutritionElement[] + dialogController: CustomDialogController = new CustomDialogController({ + builder: Record({ foodItem: this.foodItem }), + autoCancel: true, + alignment: DialogAlignment.Bottom, + offset: { dx: 0, dy: -20 }, + customStyle: true + }) + @State imageScale: number = 1 + @State imageBgColorA: number = 0 + + aboutToAppear() { + let total = this.foodItem.protein + this.foodItem.fat + this.foodItem.carbohydrates + this.nutritionElements = [ + new NutritionElement($r("app.string.diet_record_protein"), this.foodItem.protein, '#ff9421'), + new NutritionElement($r("app.string.diet_record_fat"), this.foodItem.fat, '#ffd100'), + new NutritionElement($r("app.string.diet_record_carbohydrates"), this.foodItem.carbohydrates, '#4cd041') + ] + let lastEndAngle = -0.5 * Math.PI + this.nutritionElements.forEach((value) => { + let percent = value.weight / total + value.percent = Math.round(percent * 100) + value.beginAngle = lastEndAngle + value.endAngle = (percent * 2 * Math.PI) + lastEndAngle + lastEndAngle = value.endAngle + return value + }) + } + + build() { + Scroll() { + Column() { + PageTitle() + Stack({ alignContent: Alignment.BottomStart }) { + Image(this.foodItem.image) + .sharedTransition(this.foodItem.id, { + duration: 1000, + curve: curves.cubicBezier(0.2, 0.2, 0.1, 1.0), + delay: 100 + }) + .backgroundColor(`rgba(255,255,255,${this.imageBgColorA})`) + .objectFit(ImageFit.Contain) + Text(this.foodItem.name) + .fontSize(26) + .fontWeight(FontWeight.Bold) + .margin({ left: 26, bottom: 18 }) + } + .height(this.currentBreakpoint == 'lg' ? 166 : 310) + + Swiper() { + ContentTable({ foodItem: this.foodItem }) + CaloriesProgress({ foodItem: this.foodItem }) + NutritionPercent({ foodItem: this.foodItem, nutritionElements: this.nutritionElements }) + NutritionPieChart({ foodItem: this.foodItem, nutritionElements: this.nutritionElements }) + } + .indicator(new BreakPointType(true, false, false).GetValue(this.currentBreakpoint)) + .displayCount(new BreakPointType(1, 2, 3).GetValue(this.currentBreakpoint)) + .clip(new Rect().width("100%").height("100%").radiusWidth(15).radiusHeight(15)) + .itemSpace(20) + .height(330) + .indicatorStyle({ selectedColor: '#35BD6A' }) + .margin({ top: 10, right: 10, left: 10 }) + + Button($r("app.string.button_food_detail_record"), { type: ButtonType.Capsule, stateEffect: true }) + .height(42) + .width('80%') + .margin({ top: 30 }) + .backgroundColor(APP_THEME_COLOR) + .onClick(() => { + this.dialogController.open() + }) + } + .height("100%") + .backgroundColor('#FFedf2f5') + .alignItems(HorizontalAlign.Center) + } + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodCategoryList.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Home.ets similarity index 30% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodCategoryList.ets rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Home.ets index 9392b8d22f490366a811b45c6b8086fad1d90d1b..ebaefd505758d8f259fdfac23bfe3e09f44e8505 100644 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/FoodCategoryList.ets +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Home.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,14 +13,18 @@ * limitations under the License. */ -import Curves from '@ohos.curves' -import router from '@system.router' -import { Category, FoodData } from '../model/FoodData' -import { initializeOnStartup } from '../model/FoodDataModels' +import router from '@ohos.router' +import curves from '@ohos.curves' +import { APP_THEME_COLOR } from '../common/Constants' +import { BreakpointSystem, BreakPointType } from '../common/BreakpointSystem' +import { FoodInfo } from '../model/DataModels' +import { initializeOnStartup, getSortedFoodData } from '../mock/MockData' +import { Records } from './DietRecord' @Component struct FoodListItem { - private foodItem: FoodData + private foodItem: FoodInfo + build() { Navigator({ target: 'pages/FoodDetail' }) { Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { @@ -30,15 +34,20 @@ struct FoodListItem { .autoResize(false) .height(40) .width(40) - .sharedTransition(this.foodItem.id, { duration: 1000, curve: Curves.cubicBezier(0.2, 0.2, 0.1, 1.0), delay: 100}) - + .sharedTransition(this.foodItem.id, { + duration: 1000, + curve: curves.cubicBezier(0.2, 0.2, 0.1, 1.0), + delay: 100 + }) } .backgroundColor('#FFf1f3f5') .margin({ right: 16 }) + .borderRadius(6) + Text(this.foodItem.name) .fontSize(14) .flexGrow(1) - Text(this.foodItem.calories + ' kcal') + Text(this.foodItem.calories + 'kcal') .fontSize(14) } .height(64) @@ -48,86 +57,101 @@ struct FoodListItem { } } - @Component -struct FoodList { - private foodItems: FoodData[] +struct ListModeFoods { + private foodItems: FoodInfo[] = getSortedFoodData() + build() { Column() { Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { - Text('Food List') + Text($r("app.string.all_food_list")) .fontSize(20) .margin({ left: 20 }) } - .height('7%') - .backgroundColor('#FFf1f3f5') + .height(56) + .backgroundColor('#FF1f3f5') + List() { - ForEach(this.foodItems, item => { + ForEach(this.foodItems, (item) => { ListItem() { - FoodListItem({ foodItem: item }) + if (item.id !== undefined) { + FoodListItem({ foodItem: item }) + } else { + Text(item) + .fontSize(14) + .height(48) + .margin({ left: 24 }) + } } - }, item => item.id.toString()) - }.height('93%') + }) + } + .layoutWeight(1) } } } @Component struct FoodGridItem { - private foodItem: FoodData + private foodItem: FoodInfo + build() { Column() { - Row() { + if (this.foodItem.name != '') { Image(this.foodItem.image) .objectFit(ImageFit.Contain) + .backgroundColor('#f1f3f5') .height(152) - .width('100%') - .sharedTransition(this.foodItem.id, { duration: 1000, curve: Curves.cubicBezier(0.2, 0.2, 0.1, 1.0), delay: 100}) - }.backgroundColor('#FFf1f3f5') - Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { - Text(this.foodItem.name) - .fontSize(14) - .flexGrow(1) - .padding({ left: 8 }) - Text(this.foodItem.calories + 'kcal') - .fontSize(14) - .margin({ right: 6 }) + .sharedTransition(this.foodItem.id, { + duration: 1000, + curve: curves.cubicBezier(0.2, 0.2, 0.1, 1.0), + delay: 100 + }) + Row() { + Text(this.foodItem.name) + .fontSize(14) + Blank() + Text(this.foodItem.calories + 'kcal') + .fontSize(14) + .fontColor(0x99000000) + } + .padding({ left: 12, right: 12 }) + .width('100%') + .height(32) + .backgroundColor('#E5E5E5') } - .height(32) - .width('100%') - .backgroundColor('#FFe5e5e5') } .height(184) - .width('100%') + .clip(new Rect({ width: '100%', height: '100%', radius: 12 })) .onClick(() => { - router.push({ uri: 'pages/FoodDetail', params: { foodId: this.foodItem } }) + router.push({ url: 'pages/FoodDetail', params: { foodId: this.foodItem } }) }) } } @Component struct FoodGrid { - private foodItems: FoodData[] + @StorageProp('currentBreakpoint') currentBreakpoint: string = 'md' + private foodItems: FoodInfo[] private gridRowTemplate: string = '' private heightValue: number aboutToAppear() { - var rows = Math.round(this.foodItems.length / 2); - this.gridRowTemplate = '1fr '.repeat(rows); - this.heightValue = rows * 192 - 8; + var rows = Math.round(this.foodItems.length / 2) + this.gridRowTemplate = '1fr '.repeat(rows) + this.heightValue = rows * 192 - 8 } build() { Scroll() { Grid() { - ForEach(this.foodItems, (item: FoodData) => { + ForEach(this.foodItems, (item: FoodInfo) => { GridItem() { FoodGridItem({ foodItem: item }) } - }, (item: FoodData) => item.id.toString()) + }, (item: FoodInfo) => item.id.toString()) } .rowsTemplate(this.gridRowTemplate) - .columnsTemplate('1fr 1fr') + .columnsTemplate(new BreakPointType('1fr 1fr', '1fr 1fr 1fr', '1fr 1fr 1fr 1fr').GetValue(this.currentBreakpoint)) .columnsGap(8) .rowsGap(8) .height(this.heightValue) @@ -138,63 +162,125 @@ struct FoodGrid { } @Component -struct FoodCategory { - private foodItems: FoodData[] - build() { - Stack() { - Tabs() { - TabContent() { - FoodGrid({ foodItems: this.foodItems }) - }.tabBar('All') - - TabContent() { - FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === Category.Vegetable)) }) - }.tabBar('Vegetable') - - TabContent() { - FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === Category.Fruit)) }) - }.tabBar('Fruit') +struct CategoryModeFoods { + private foodItems: FoodInfo[] = initializeOnStartup() + private strMealTimeList = AppStorage.Get>('strMealTimeList') + @State currentIndex: number = 0 - TabContent() { - FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === Category.Nut)) }) - }.tabBar('Nut') + @Builder TabBuilder(value: string, index: number) { + Row() { + Text(value) + .fontColor(this.currentIndex === index ? 'rgba(0,0,0,0.9)' : 'rgba(0,0,0,0.6)') + .fontSize(this.currentIndex === index ? 24 : 18) + .margin({ top: 2 }) + } + .height(56) + } - TabContent() { - FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === Category.Seafood)) }) - }.tabBar('Seafood') + build() { + Tabs() { + TabContent() { + FoodGrid({ foodItems: this.foodItems }) + }.tabBar(this.TabBuilder('All', 0)) + ForEach(this.strMealTimeList, (foodCategory, index) => { TabContent() { - FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === Category.Dessert)) }) - }.tabBar('Dessert') - } - .barWidth(280) - .barMode(BarMode.Scrollable) + FoodGrid({ foodItems: this.foodItems.filter(item => (item.category === foodCategory)) }) + }.tabBar(this.TabBuilder(foodCategory, index + 1)) + }) } + .barMode(BarMode.Scrollable) + .onChange((index) => { + this.currentIndex = index + }) } } -@Entry @Component -struct FoodCategoryList { - private foodItems: FoodData[] = initializeOnStartup() - @State private showList: boolean = false +struct FoodDetail { + @State isCategoryMode: boolean = true build() { Column() { Stack({ alignContent: Alignment.TopEnd }) { - if (this.showList) { - FoodList({ foodItems: this.foodItems }) + if (this.isCategoryMode) { + CategoryModeFoods() } else { - FoodCategory({ foodItems: this.foodItems }) + ListModeFoods() } - Image($r('app.media.Switch')) - .height(24) - .width(24) - .margin({ top: 15, right: 10 }) - .onClick(() => { - this.showList = !this.showList - }) + Row() { + Image($r("app.media.Switch")) + .height(24) + .width(24) + .margin({ left: 24, right: 24 }) + } + .height(56) + .backgroundColor(this.isCategoryMode ? Color.White : '#f1f3f5') + .onClick(() => { + this.isCategoryMode = !this.isCategoryMode + }) } - }.height('100%') + } } } + +@Entry +@Component +struct Home { + @State currentIndex: number = 0 + @State pageOpacity: number = 0 + + private GetTabBarColor(index: number) { + return this.currentIndex == index ? APP_THEME_COLOR : '#999999' + } + + @Builder BottomBarItemBuilder(name: Resource, icon: Resource, index: number) { + Flex({ + direction: new BreakPointType(FlexDirection.Column, FlexDirection.Row, FlexDirection.Column).GetValue(this.currentBreakpoint), + justifyContent: FlexAlign.Center, + alignItems: ItemAlign.Center + }) { + Image(icon) + .height(24) + .width(24) + .fillColor(this.GetTabBarColor(index)) + Text(name) + .margin(new BreakPointType({ top: 4 }, { left: 8 }, { top: 4 }).GetValue(this.currentBreakpoint)) + .fontSize(11) + .fontColor(this.GetTabBarColor(index)) + } + .width('100%') + .height('100%') + } + + @StorageProp('currentBreakpoint') currentBreakpoint: string = 'md' + private breakpointSystem: BreakpointSystem = new BreakpointSystem() + + aboutToAppear() { + this.breakpointSystem.register() + } + + aboutToDisappear() { + this.breakpointSystem.unregister() + } + + build() { + Tabs({ + barPosition: new BreakPointType(BarPosition.End, BarPosition.End, BarPosition.Start).GetValue(this.currentBreakpoint) + }) { + TabContent() { + FoodDetail() + }.tabBar(this.BottomBarItemBuilder($r("app.string.tab_bar_home"), $r("app.media.ic_bottom_home"), 0)) + + TabContent() { + Records() + }.tabBar(this.BottomBarItemBuilder($r("app.string.tab_bar_record"), $r("app.media.ic_bottom_record"), 1)) + } + .vertical(new BreakPointType(false, false, true).GetValue(this.currentBreakpoint)) + .barWidth(new BreakPointType('100%', '100%', '56vp').GetValue(this.currentBreakpoint)) + .barHeight(new BreakPointType('56vp', '56vp', '60%').GetValue(this.currentBreakpoint)) + .onChange((index) => { + this.currentIndex = index + }) + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/Logo.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Logo.ets similarity index 94% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/Logo.ets rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Logo.ets index 271b186a8512b4ab9505d87d63bbb85adf0aa5d8..97f7521ad7eb7534b17a787326df1ea8944346c5 100644 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/default/pages/Logo.ets +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/ets/pages/Logo.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -53,10 +53,10 @@ struct Logo { duration: 1000, curve: this.curve1, delay: 100, - onFinish: () =>{ + onFinish: () => { setTimeout(() => { - router.replace({ uri: 'pages/FoodCategoryList' }) - }, 1000); + router.replace({ uri: 'pages/Home' }) + }, 1000) } }, () => { this.opacityValue = 1 diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MainAbility.java b/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MainAbility.java deleted file mode 100644 index 6c2c489563b2eedd91008231732ad2e7d6e8a96c..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MainAbility.java +++ /dev/null @@ -1,16 +0,0 @@ -package ohos.samples.etsdrawingandanimation; - -import ohos.ace.ability.AceAbility; -import ohos.aafwk.content.Intent; - -public class MainAbility extends AceAbility { - @Override - public void onStart(Intent intent) { - super.onStart(intent); - } - - @Override - public void onStop() { - super.onStop(); - } -} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MyApplication.java b/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MyApplication.java deleted file mode 100644 index 32cd05f5f652c5ad963684c28670a1ca421abc57..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/java/ohos/samples/etsdrawingandanimation/MyApplication.java +++ /dev/null @@ -1,10 +0,0 @@ -package ohos.samples.etsdrawingandanimation; - -import ohos.aafwk.ability.AbilityPackage; - -public class MyApplication extends AbilityPackage { - @Override - public void onInitialize() { - super.onInitialize(); - } -} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/module.json5 b/ETSUI/eTSDrawingAndAnimation/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..fea5678b5adf579a4d7af87cd6beac10e9f329a6 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/module.json5 @@ -0,0 +1,39 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntrance": "./ets/Application/MyAbilityStage.ts", + "description": "$string:entry_desc", + "mainElement": "MainAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "MainAbility", + "srcEntrance": "./ets/MainAbility/MainAbility.ts", + "description": "$string:MainAbility_desc", + "icon": "$media:icon", + "label": "$string:MainAbility_label", + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:white", + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/color.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..1bbc9aa9617e97c45440e1d3d66afc1154837012 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "white", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/string.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/string.json index 3440475e7cbd0420317843d6131c278bd48a8ece..91ccb778b9f4264b25a5489a75c53515ebaf05e8 100644 --- a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/string.json +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/element/string.json @@ -1,12 +1,16 @@ { "string": [ { - "name": "entry_MainAbility", + "name": "entry_desc", "value": "Healthy Diet" }, { - "name": "mainability_description", + "name": "MainAbility_desc", "value": "ETS_Empty Ability" + }, + { + "name": "MainAbility_label", + "value": "label" } ] } \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Avocado.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Avocado.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Avocado.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Avocado.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Back.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Back.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Back.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Back.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Blueberry.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Blueberry.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Blueberry.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Blueberry.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Crab.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Crab.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Crab.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Crab.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Cucumber.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Cucumber.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Cucumber.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Cucumber.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/IceCream.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/IceCream.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/IceCream.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/IceCream.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Index.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Index.png new file mode 100644 index 0000000000000000000000000000000000000000..5c57223a5862f70e9d2ad17e1890fd1093c92097 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Index.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/IndexGray.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/IndexGray.png new file mode 100644 index 0000000000000000000000000000000000000000..942ecebf349f33b47cdc3eb12848f6cc3d4699f1 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/IndexGray.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Kiwi.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Kiwi.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Kiwi.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Kiwi.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Mushroom.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Mushroom.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Mushroom.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Mushroom.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/NoRecord.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/NoRecord.png new file mode 100644 index 0000000000000000000000000000000000000000..724b2e1a37f43c954e599e64d34e61e3826b8e5e Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/NoRecord.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Onion.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Onion.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Onion.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Onion.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Pitaya.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Pitaya.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Pitaya.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Pitaya.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Statistics.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..28099adabd59be84757231da8c47daf7bfc11a04 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Statistics.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/StatisticsGray.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/StatisticsGray.png new file mode 100644 index 0000000000000000000000000000000000000000..018f9c3177561e7aa7795e0e6975a2c30054c3cf Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/StatisticsGray.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Strawberry.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Strawberry.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Strawberry.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Strawberry.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Switch.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Switch.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Switch.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Switch.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Tomato.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Tomato.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Tomato.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Tomato.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Walnut.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Walnut.png similarity index 100% rename from ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/phone/media/Walnut.png rename to ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/Walnut.png diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_home.svg b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_home.svg new file mode 100644 index 0000000000000000000000000000000000000000..c74324a979a1b8ab7237ca210338a679d91db169 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_home.svg @@ -0,0 +1 @@ + Public/ic_public_home_filled \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_record.svg b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_record.svg new file mode 100644 index 0000000000000000000000000000000000000000..b3041818d9f2c6b1d9a830d71c41b78e44e3a8b3 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_bottom_record.svg @@ -0,0 +1 @@ + Public/ic_public_notes_filled \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_public_delete.svg b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_public_delete.svg new file mode 100644 index 0000000000000000000000000000000000000000..5e69d92bec10119023e8d891648ecce85d6507be --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/ic_public_delete.svg @@ -0,0 +1,31 @@ + + + Public/ic_public_delete + + + + + + + + + + \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/icon.png b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/media/icon.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/profile/main_pages.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..145223bf15873398bcc10413ac0b9e3c839ad8b7 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,8 @@ +{ + "src": [ + "pages/Logo", + "pages/Home", + "pages/FoodDetail", + "pages/DietRecord" + ] +} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/en_GB/element/string.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/en_GB/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..9ffd51e775714949c063ac6cad49fb559c6af0df --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/en_GB/element/string.json @@ -0,0 +1,176 @@ +{ + "string": [ + { + "name": "tab_bar_home", + "value": "Home" + }, + { + "name": "tab_bar_record", + "value": "Records" + }, + { + "name": "diet_record_calorie", + "value": "Calories" + }, + { + "name": "diet_record_nutrition", + "value": "Nutrition" + }, + { + "name": "nutrition_element", + "value": "Nutrition Element" + }, + { + "name": "high_calorie", + "value": "High" + }, + { + "name": "medium_low_calories", + "value": "Medium-Low" + }, + { + "name": "low_calorie", + "value": "Low-Calories" + }, + { + "name": "low_calorie_food", + "value": "Low-Calories" + }, + { + "name": "high_calorie_food", + "value": "High-Calories" + }, + { + "name": "diet_record_fat", + "value": "Fat" + }, + { + "name": "diet_record_protein", + "value": "Protein" + }, + { + "name": "diet_record_vitaminC", + "value": "VitaminC" + }, + { + "name": "diet_record_carbohydrates", + "value": "Carbohydrates" + }, + { + "name": "title_food_detail", + "value": "Food Detail" + }, + { + "name": "button_food_detail_complete", + "value": "Complete" + }, + { + "name": "button_food_detail_record", + "value": "Record" + }, + { + "name": "all_food_list", + "value": "Food List" + }, + { + "name": "food_type_fruit", + "value": "Fruit" + }, + { + "name": "food_type_vegetable", + "value": "Vegetable" + }, + { + "name": "food_type_nut", + "value": "Nut" + }, + { + "name": "food_type_seafood", + "value": "Seafood" + }, + { + "name": "food_type_dessert", + "value": "Dessert" + }, + { + "name": "meal_time_break", + "value": "Breakfast" + }, + { + "name": "meal_time_lunch", + "value": "Lunch" + }, + { + "name": "meal_time_dinner", + "value": "Dinner" + }, + { + "name": "meal_time_supper", + "value": "Supper" + }, + { + "name": "food_name_tomato", + "value": "Tomato" + }, + { + "name": "food_name_walnut", + "value": "Walnut" + }, + { + "name": "food_name_cucumber", + "value": "Cucumber" + }, + { + "name": "food_name_blueberry", + "value": "Blueberry" + }, + { + "name": "food_name_crab", + "value": "Crab" + }, + { + "name": "food_name_ice_cream", + "value": "IceCream" + }, + { + "name": "food_name_onion", + "value": "Onion" + }, + { + "name": "food_name_mushroom", + "value": "Mushroom" + }, + { + "name": "food_name_kiwi", + "value": "Kiwi" + }, + { + "name": "food_name_pitaya", + "value": "Pitaya" + }, + { + "name": "food_name_avocado", + "value": "Avocado" + }, + { + "name": "food_name_strawberry", + "value": "Strawberry" + }, + { + "name": "unit_weight", + "value": "per 100g" + }, + { + "name": "unit_gram", + "value": "g" + }, + { + "name": "unit_milligram", + "value": "mg" + }, + { + "name": "unit_calories", + "value": "kcal" + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/zh_CN/element/string.json b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..6d7d5ae84744bc1ec08dd940b6829c62035a38fc --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,176 @@ + { + "string": [ + { + "name": "tab_bar_home", + "value": "主页" + }, + { + "name": "tab_bar_record", + "value": "记录" + }, + { + "name": "diet_record_calorie", + "value": "热量" + }, + { + "name": "diet_record_nutrition", + "value": "营养" + }, + { + "name": "nutrition_element", + "value": "营养元素" + }, + { + "name": "high_calorie", + "value": "高热量" + }, + { + "name": "medium_low_calories", + "value": "中低热量" + }, + { + "name": "low_calorie", + "value": "低热量" + }, + { + "name": "low_calorie_food", + "value": "低热量食物" + }, + { + "name": "high_calorie_food", + "value": "高热量食物" + }, + { + "name": "diet_record_fat", + "value": "脂肪" + }, + { + "name": "diet_record_protein", + "value": "蛋白质" + }, + { + "name": "diet_record_vitaminC", + "value": "维他命C" + }, + { + "name": "diet_record_carbohydrates", + "value": "碳水" + }, + { + "name": "title_food_detail", + "value": "食物详情" + }, + { + "name": "button_food_detail_complete", + "value": "完成" + }, + { + "name": "button_food_detail_record", + "value": "记录" + }, + { + "name": "all_food_list", + "value": "全部" + }, + { + "name": "food_type_fruit", + "value": "水果" + }, + { + "name": "food_type_vegetable", + "value": "蔬菜" + }, + { + "name": "food_type_nut", + "value": "坚果" + }, + { + "name": "food_type_seafood", + "value": "海鲜" + }, + { + "name": "food_type_dessert", + "value": "甜品" + }, + { + "name": "meal_time_break", + "value": "早餐" + }, + { + "name": "meal_time_lunch", + "value": "午餐" + }, + { + "name": "meal_time_dinner", + "value": "晚餐" + }, + { + "name": "meal_time_supper", + "value": "夜宵" + }, + { + "name": "food_name_tomato", + "value": "番茄" + }, + { + "name": "food_name_walnut", + "value": "核桃" + }, + { + "name": "food_name_cucumber", + "value": "黄瓜" + }, + { + "name": "food_name_blueberry", + "value": "蓝莓" + }, + { + "name": "food_name_crab", + "value": "螃蟹" + }, + { + "name": "food_name_ice_cream", + "value": "冰激凌" + }, + { + "name": "food_name_onion", + "value": "洋葱" + }, + { + "name": "food_name_mushroom", + "value": "蘑菇" + }, + { + "name": "food_name_kiwi", + "value": "猕猴桃" + }, + { + "name": "food_name_pitaya", + "value": "火龙果" + }, + { + "name": "food_name_avocado", + "value": "牛油果" + }, + { + "name": "food_name_strawberry", + "value": "草莓" + }, + { + "name": "unit_weight", + "value": "每100克" + }, + { + "name": "unit_gram", + "value": "克" + }, + { + "name": "unit_milligram", + "value": "毫克" + }, + { + "name": "unit_calories", + "value": "千卡" + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/Application/TestAbilityStage.ts b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/Application/TestAbilityStage.ts new file mode 100644 index 0000000000000000000000000000000000000000..2e8d46539605384ae2d7c63067495ceb3003c0d9 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/Application/TestAbilityStage.ts @@ -0,0 +1,7 @@ +import AbilityStage from "@ohos.application.AbilityStage" + +export default class TestAbilityStage extends AbilityStage { + onCreate() { + console.log("[Demo] TestAbilityStage onCreate") + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/TestAbility.ts b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/TestAbility.ts new file mode 100644 index 0000000000000000000000000000000000000000..301aaf6099dd794d856d2ab13bf3ef6f13e3ba78 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/TestAbility.ts @@ -0,0 +1,45 @@ +import Ability from '@ohos.application.Ability' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +import { Hypium } from '@ohos/hypium' +import testsuite from '../test/List.test' + +export default class TestAbility extends Ability { + onCreate(want, launchParam) { + console.log('TestAbility onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + + onDestroy() { + console.log('TestAbility onDestroy') + } + + onWindowStageCreate(windowStage) { + console.log('TestAbility onWindowStageCreate') + windowStage.loadContent("TestAbility/pages/index", (err, data) => { + if (err.code) { + console.error('Failed to load the content. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)) + }); + + globalThis.abilityContext = this.context; + } + + onWindowStageDestroy() { + console.log('TestAbility onWindowStageDestroy') + } + + onForeground() { + console.log('TestAbility onForeground') + } + + onBackground() { + console.log('TestAbility onBackground') + } +}; \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/pages/index.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/pages/index.ets new file mode 100644 index 0000000000000000000000000000000000000000..733600abc03d7e777ef1a55eaddd77f4d1d7d66d --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestAbility/pages/index.ets @@ -0,0 +1,34 @@ +import router from '@ohos.router'; + +@Entry +@Component +struct Index { + aboutToAppear() { + console.info('TestAbility index aboutToAppear') + } + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdbe7cf017a787a625bbf23cc62e825821b16d6b --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/TestRunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,64 @@ +import TestRunner from '@ohos.application.testRunner' +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +function translateParamsToString(parameters) { + const keySet = new Set([ + '-s class', '-s notClass', '-s suite', '-s it', + '-s level', '-s testType', '-s size', '-s timeout', + '-s dryRun' + ]) + let targetParams = ''; + for (const key in parameters) { + if (keySet.has(key)) { + targetParams = `${targetParams} ${key} ${parameters[key]}` + } + } + return targetParams.trim() +} + +async function onAbilityCreateCallback() { + console.log("onAbilityCreateCallback"); +} + +async function addAbilityMonitorCallback(err: any) { + console.info("addAbilityMonitorCallback : " + JSON.stringify(err)) +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + console.info("OpenHarmonyTestRunner OnPrepare ") + } + + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName + cmd += ' '+translateParamsToString(abilityDelegatorArguments.parameters) + var debug = abilityDelegatorArguments.parameters["-D"] + if (debug == 'true') + { + cmd += ' -D' + } + console.info('cmd : '+cmd) + abilityDelegator.executeShellCommand(cmd, + (err: any, d: any) => { + console.info('executeShellCommand : err : ' + JSON.stringify(err)); + console.info('executeShellCommand : data : ' + d.stdResult); + console.info('executeShellCommand : data : ' + d.exitCode); + }) + console.info('OpenHarmonyTestRunner onRun end') + } +}; \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/Ability.test.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..df49ed0fbb519c98ce90324b482aabaa8745cf6a --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,13 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' + +export default function abilityTest() { + describe('ActsAbilityTest', function () { + it('assertContain',0, function () { + console.info("it begin") + let a = 'abc' + let b = 'b' + expect(a).assertContain(b) + expect(a).assertEqual(a) + }) + }) +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/List.test.ets b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..d766fe249dfc3ada636f27e64d9b64451ce32c93 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test' + +export default function testsuite() { + abilityTest() +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/module.json5 b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..4567d5e8f8037de313a090573095f2c2e480eb6f --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "srcEntrance": "./ets/Application/TestAbilityStage.ts", + "description": "$string:entry_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "uiSyntax": "ets", + "abilities": [ + { + "name": "TestAbility", + "srcEntrance": "./ets/TestAbility/TestAbility.ts", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "visible": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:white", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/color.json b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..1bbc9aa9617e97c45440e1d3d66afc1154837012 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "white", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/string.json b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..36d4230c53e9f5a07ae343ad8dc9808341975e3b --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/media/icon.png b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/media/icon.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/profile/test_pages.json b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/profile/test_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..fcef82b4dfc18e28106ff9ecd1c8b48ec74d18a4 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/entry/src/ohosTest/resources/base/profile/test_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "TestAbility/pages/index" + ] +} diff --git a/ETSUI/eTSDrawingAndAnimation/hvigorfile.js b/ETSUI/eTSDrawingAndAnimation/hvigorfile.js new file mode 100644 index 0000000000000000000000000000000000000000..5f2735e3deeaf655828407544bbed9365c258278 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/hvigorfile.js @@ -0,0 +1,2 @@ +// Script for compiling build behavior. It is built in the build plug-in and cannot be modified currently. +module.exports = require('@ohos/hvigor-ohos-plugin').appTasks \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/package-lock.json b/ETSUI/eTSDrawingAndAnimation/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..cdd54312b9cc06a066744e7704075dd8d448cb3d --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/package-lock.json @@ -0,0 +1,1226 @@ +{ + "name": "myapplication", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ohos/hos-sdkmanager-common": { + "version": "1.0.4", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hos-sdkmanager-common/-/@ohos/hos-sdkmanager-common-1.0.4.tgz", + "integrity": "sha512-LWrfF8Js+u54BcEAdyjzsA81iGBA4LPvQdQ1ig/pX6mvTieUPSvtjtAzdI8nnGVmJRLrHwAMHEO/syd9d8UAFw==", + "requires": { + "@ohos/sdkmanager-common": "^1.1.8" + } + }, + "@ohos/hvigor": { + "version": "1.2.2", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor/-/@ohos/hvigor-1.2.2.tgz", + "integrity": "sha512-GfXCf7pDnyEcxWkG7Edd23XPxgym1vY37zdNt/Gj0pZmw0f+FrP+blfCzVWfYQYlI76krzd96+kvD4lgWkIPBQ==", + "requires": { + "@ohos/hvigor-base": "1.2.2", + "fs-extra": "10.0.1", + "interpret": "1.4.0", + "liftoff": "4.0.0", + "mute-stdout": "1.0.0", + "pretty-hrtime": "1.0.0", + "v8flags": "3.2.0", + "yargs": "7.1.2" + } + }, + "@ohos/hvigor-base": { + "version": "1.2.2", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-base/-/@ohos/hvigor-base-1.2.2.tgz", + "integrity": "sha512-omwL/qjTE7DTCQdHZnMKuAxKlH1JOgOxaVAae1ca8j/oPuNgY6Spn+mpYRDHIktvav6axMmHT9zV1hJykY4GEg==", + "requires": { + "fs-extra": "10.0.1", + "json5": "2.2.0", + "log4js": "6.4.1", + "once": "1.4.0", + "pretty-hrtime": "1.0.0" + } + }, + "@ohos/hvigor-ohos-plugin": { + "version": "1.2.2", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hvigor-ohos-plugin/-/@ohos/hvigor-ohos-plugin-1.2.2.tgz", + "integrity": "sha512-gir91UxlhMbf2E/NjTYWJGrsNGBKD/1YYbaEdmswD/qW18UDY7jyuqSVyV/gj0h9+iji+gd53rXWzpLLztG5lg==", + "requires": { + "@ohos/hos-sdkmanager-common": "1.0.4", + "@ohos/hvigor-base": "1.2.2", + "@ohos/sdkmanager-common": "1.1.8", + "adm-zip": "0.5.9", + "ajv": "8.10.0", + "execa": "5.1.1", + "fast-xml-parser": "4.0.3", + "fs-extra": "10.0.1", + "glob": "7.2.0", + "iconv-lite": "0.6.3", + "json5": "2.2.0", + "lodash": "4.17.21", + "pretty-hrtime": "1.0.3", + "resolve-package-path": "4.0.3" + }, + "dependencies": { + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + } + } + }, + "@ohos/hypium": { + "version": "1.0.2", + "resolved": "https://repo.harmonyos.com/npm/@ohos/hypium/-/@ohos/hypium-1.0.2.tgz", + "integrity": "sha512-HWW62q6hbd0PhvPTH96lo4j//owFwyCLj6Q2jmVLDW6mOt1dwJJwUQ7qUH+Cni/6MmcnyXKvt9I0moGAPK1aCw==" + }, + "@ohos/sdkmanager-common": { + "version": "1.1.8", + "resolved": "https://repo.harmonyos.com/npm/@ohos/sdkmanager-common/-/@ohos/sdkmanager-common-1.1.8.tgz", + "integrity": "sha512-mxq69+6Zg/ybeQGnOtkBzOTbNBkEdiYehRKWsAD/je53v1W+ahauLqe90pNZEiBuVYugzb6z2EaJtAXYZtE8gQ==" + }, + "adm-zip": { + "version": "0.5.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/adm-zip/-/adm-zip-0.5.9.tgz", + "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==" + }, + "ajv": { + "version": "8.10.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "date-format": { + "version": "4.0.13", + "resolved": "https://repo.huaweicloud.com/repository/npm/date-format/-/date-format-4.0.13.tgz", + "integrity": "sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-xml-parser": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/fast-xml-parser/-/fast-xml-parser-4.0.3.tgz", + "integrity": "sha512-xhQbg3a/EYNHwK0cxIG1nZmVkHX/0tWihamn5pU4Mhd9KEVE2ga8ZJiqEUgB2sApElvAATOdMTLjgqIpvYDUkQ==", + "requires": { + "strnum": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + } + }, + "flagged-respawn": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==" + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "requires": { + "for-in": "^1.0.1" + } + }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://repo.huaweicloud.com/repository/npm/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://repo.huaweicloud.com/repository/npm/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "liftoff": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/liftoff/-/liftoff-4.0.0.tgz", + "integrity": "sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==", + "requires": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "object.map": "^1.0.1", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://repo.huaweicloud.com/repository/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "log4js": { + "version": "6.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "requires": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://repo.huaweicloud.com/repository/npm/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stdout": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/mute-stdout/-/mute-stdout-1.0.0.tgz", + "integrity": "sha512-MaSQenn0f9oxIjtCufclpV00MuYTiHaXPbdcfPIM+quMqoa8cXywjHHx4LhhIAZlXqPWMdcUpYviajfmHtHRJw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pretty-hrtime": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz", + "integrity": "sha512-CU2l5CYUAptUYq/671ajexQfXuxJFwwg0n243Kdkx8bTjeenedsWgu8TGHPm03vLfNtk3aTXgySKPp3Usykudw==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "requires": { + "resolve": "^1.20.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-package-path": { + "version": "4.0.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/resolve-package-path/-/resolve-package-path-4.0.3.tgz", + "integrity": "sha512-SRpNAPW4kewOaNUt8VPqhJ0UMxawMwzJD8V7m1cJfdSTK9ieZwS6K7Dabsm4bmLFM96Z5Y/UznrpG5kt1im8yA==", + "requires": { + "path-root": "^0.1.1" + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://repo.huaweicloud.com/repository/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://repo.huaweicloud.com/repository/npm/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + }, + "streamroller": { + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/streamroller/-/streamroller-3.1.2.tgz", + "integrity": "sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==", + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } +} diff --git a/ETSUI/eTSDrawingAndAnimation/package.json b/ETSUI/eTSDrawingAndAnimation/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e2cded73b6411eb9e1eefd55ed08648b88480874 --- /dev/null +++ b/ETSUI/eTSDrawingAndAnimation/package.json @@ -0,0 +1,18 @@ +{ + "license":"ISC", + "devDependencies":{}, + "name":"myapplication", + "ohos":{ + "org":"huawei", + "directoryLevel":"project", + "buildTool":"hvigor" + }, + "description":"example description", + "repository":{}, + "version":"1.0.0", + "dependencies":{ + "@ohos/hypium":"1.0.2", + "@ohos/hvigor-ohos-plugin":"1.2.2", + "@ohos/hvigor":"1.2.2" + } +} \ No newline at end of file diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png deleted file mode 100644 index 57ee6f14bc67cbab046fe4c197f1f9d4ee50b55f..0000000000000000000000000000000000000000 Binary files a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png and /dev/null differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png.png new file mode 100644 index 0000000000000000000000000000000000000000..854179d8174f0b900e0d7cd742a3610e649920f8 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodCategory.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png deleted file mode 100644 index 1d5e88530d9a0fc53e5995182bfbd567d6a5cdda..0000000000000000000000000000000000000000 Binary files a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png and /dev/null differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png.png new file mode 100644 index 0000000000000000000000000000000000000000..fae80610442960e118e85ad768535123a49770bb Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/FoodDetail.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailDialog.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailDialog.png.png new file mode 100644 index 0000000000000000000000000000000000000000..e1fa8a3cd9b1baf9ce6985451cc3b3bd98eca001 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailDialog.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper1.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper1.png.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d86824fe8a7144442eecd809c26a5bdc1c21e2 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper1.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper2.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper2.png new file mode 100644 index 0000000000000000000000000000000000000000..f92da38355d289569cb18288936015f40a0f79f7 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodDetailSwiper2.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper1.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper1.png.png new file mode 100644 index 0000000000000000000000000000000000000000..8df8f623f0d20ff10c21f07cf0e54f9acdb7076c Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper1.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper2.png.png b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper2.png.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f0031fc263d346ef2d5cb5dc84ee6fc06efa34 Binary files /dev/null and b/ETSUI/eTSDrawingAndAnimation/screenshots/device/foodRecordSwiper2.png.png differ diff --git a/ETSUI/eTSDrawingAndAnimation/settings.gradle b/ETSUI/eTSDrawingAndAnimation/settings.gradle deleted file mode 100644 index 4773db73233a570c2d0c01a22e75321acfbf7a07..0000000000000000000000000000000000000000 --- a/ETSUI/eTSDrawingAndAnimation/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':entry'