Feat: 首页内容框架
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Constants for breakpoint.
|
||||
*/
|
||||
export class BreakpointConstants {
|
||||
/**
|
||||
* Breakpoints that represent small device types.
|
||||
*/
|
||||
static readonly BREAKPOINT_SM: string = 'sm';
|
||||
/**
|
||||
* Breakpoints that represent middle device types.
|
||||
*/
|
||||
static readonly BREAKPOINT_MD: string = 'md';
|
||||
/**
|
||||
* Breakpoints that represent large device types.
|
||||
*/
|
||||
static readonly BREAKPOINT_LG: string = 'lg';
|
||||
/**
|
||||
* Grid row column list.
|
||||
*/
|
||||
static readonly GRID_ROW_COLUMNS: number[] = [12, 15, 4];
|
||||
/**
|
||||
* Grid column span list.
|
||||
*/
|
||||
static readonly GRID_COLUMN_SPANS: number[] = [12, 6, 7, 5, 3, 4, 2];
|
||||
/**
|
||||
* Breakpoint ranges.
|
||||
*/
|
||||
static readonly BREAKPOINT_RANGES: number[] = [320, 600, 840];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Common constants for common component.
|
||||
*/
|
||||
export class CommonConstants {
|
||||
static readonly HARMONY_HEI_TI_FONT_FAMILY = 'HarmonyHeiTi';
|
||||
static readonly FULL_PERCENT: string = '100%';
|
||||
static readonly WINDOW_UTIL: string = 'windowUtil';
|
||||
/**
|
||||
* Font weight 500.
|
||||
*/
|
||||
static readonly FONT_WEIGHT_500: number = 500;
|
||||
/**
|
||||
* Device types.
|
||||
*/
|
||||
static readonly DEVICE_TYPES: string[] = ['2in1', 'tablet', 'phone'];
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 LoadingStatus {
|
||||
OFF = 'off',
|
||||
LOADING = 'loading',
|
||||
SUCCESS = 'success',
|
||||
FAILED = 'failed'
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { BreakpointConstants } from './BreakpointConstants';
|
||||
import { CommonConstants } from './CommonConstants';
|
||||
|
||||
@Component
|
||||
export struct ModuleTitleComponent {
|
||||
@StorageLink('currentWidthBreakpoint') currentWidthBreakpoint: string = BreakpointConstants.BREAKPOINT_LG;
|
||||
public title: string = '';
|
||||
public moduleRedirectContent: string = '';
|
||||
@Consume('appPathStack') appPathStack: NavPathStack;
|
||||
|
||||
jump(): void {
|
||||
this.appPathStack.pushPathByName('EmptyPagePathStack', null);
|
||||
}
|
||||
|
||||
build() {
|
||||
if (this.title.length) {
|
||||
Row() {
|
||||
Text(this.title)
|
||||
.fontSize($r('app.integer.subtitle_text_L'))
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.fontColor($r('app.color.font_primary'))
|
||||
|
||||
Text(this.moduleRedirectContent)
|
||||
.fontColor($r('app.color.font_secondary'))
|
||||
.fontSize($r('app.integer.body_text_S'))
|
||||
.fontWeight(FontWeight.Medium)
|
||||
.onClick(() => {
|
||||
this.jump()
|
||||
})
|
||||
|
||||
}
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.height("44vp")
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.borderRadius($r('sys.float.corner_radius_level8'))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { BreakpointConstants } from './BreakpointConstants';
|
||||
import { CommonConstants } from './CommonConstants';
|
||||
|
||||
@Component
|
||||
export struct ModuleTitleComponentWithIcon {
|
||||
@StorageLink('currentWidthBreakpoint') currentWidthBreakpoint: string = BreakpointConstants.BREAKPOINT_LG;
|
||||
public moduleIcon: Resource = $r("app.media.icon");
|
||||
public title: string = '';
|
||||
public moduleRedirectContent: string = '';
|
||||
@Consume('appPathStack') appPathStack: NavPathStack;
|
||||
|
||||
jump(): void {
|
||||
this.appPathStack.pushPathByName('EmptyPagePathStack', null);
|
||||
}
|
||||
|
||||
build() {
|
||||
Row() {
|
||||
Row() {
|
||||
Image(this.moduleIcon)
|
||||
.height('20vp')
|
||||
.width('20vp')
|
||||
.margin({
|
||||
right: "4vp"
|
||||
})
|
||||
Text(this.title)
|
||||
.fontSize("16fp")
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT_500)
|
||||
.fontColor($r('sys.color.font_primary'))
|
||||
}
|
||||
|
||||
Text(this.moduleRedirectContent)
|
||||
.fontColor(Color.Gray)
|
||||
.fontSize('12fp')
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT_500)
|
||||
.onClick(() => {
|
||||
this.jump()
|
||||
})
|
||||
.margin({
|
||||
right: "4vp"
|
||||
})
|
||||
}
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.padding({ left: 6, right: 6 })
|
||||
.height("30vp")
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.borderRadius($r('sys.float.corner_radius_level6'))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
|
||||
import { hilog } from '@kit.PerformanceAnalysisKit';
|
||||
import { display, window } from '@kit.ArkUI';
|
||||
import { WindowUtil } from '../util/WindowUtil';
|
||||
|
||||
export default class EntryAbility extends UIAbility {
|
||||
private windowObj?: window.Window;
|
||||
|
||||
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
|
||||
}
|
||||
|
||||
onDestroy(): void {
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
|
||||
}
|
||||
|
||||
onWindowStageCreate(windowStage: window.WindowStage): void {
|
||||
// Main window is created, set main page for this ability
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
|
||||
|
||||
windowStage.getMainWindow().then((data: window.Window) => {
|
||||
this.windowObj = data;
|
||||
this.updateWidthBp();
|
||||
this.updateHeightBp();
|
||||
this.windowObj.on('windowSizeChange', (windowSize: window.Size) => {
|
||||
this.updateWidthBp();
|
||||
this.updateHeightBp();
|
||||
})
|
||||
})
|
||||
|
||||
let windowUtil: WindowUtil | undefined = WindowUtil.getInstance();
|
||||
if (windowUtil !== undefined) {
|
||||
windowUtil.setWindowStage(windowStage);
|
||||
windowUtil.setMainWindowPortrait();
|
||||
}
|
||||
windowStage.loadContent('pages/Index', (err) => {
|
||||
if (err.code) {
|
||||
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
|
||||
return;
|
||||
}
|
||||
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
|
||||
});
|
||||
}
|
||||
|
||||
private updateWidthBp(): void {
|
||||
if (this.windowObj === undefined) {
|
||||
return;
|
||||
}
|
||||
let mainWindow: window.WindowProperties = this.windowObj.getWindowProperties();
|
||||
let windowWidth: number = mainWindow.windowRect.width;
|
||||
let windowWidthVp = windowWidth / display.getDefaultDisplaySync().densityPixels;
|
||||
let widthBp: string = '';
|
||||
if (windowWidthVp < 320) {
|
||||
widthBp = 'xs';
|
||||
} else if (windowWidthVp >= 320 && windowWidthVp < 600) {
|
||||
widthBp = 'sm';
|
||||
} else if (windowWidthVp >= 600 && windowWidthVp < 840) {
|
||||
widthBp = 'md';
|
||||
} else if (windowWidthVp >= 840 && windowWidthVp < 1440) {
|
||||
widthBp = 'lg';
|
||||
} else {
|
||||
widthBp = 'xl';
|
||||
}
|
||||
AppStorage.setOrCreate('currentWidthBreakpoint', widthBp);
|
||||
}
|
||||
|
||||
private updateHeightBp(): void {
|
||||
if (this.windowObj === undefined) {
|
||||
return;
|
||||
}
|
||||
let mainWindow: window.WindowProperties = this.windowObj.getWindowProperties();
|
||||
let windowHeight: number = mainWindow.windowRect.height;
|
||||
let windowWidth: number = mainWindow.windowRect.width;
|
||||
let heightBp: string = '';
|
||||
let aspectRatio: number = windowHeight / windowWidth;
|
||||
if (aspectRatio < 0.8) {
|
||||
heightBp = 'sm';
|
||||
} else if (aspectRatio >= 0.8 && aspectRatio < 1.2) {
|
||||
heightBp = 'md';
|
||||
} else {
|
||||
heightBp = 'lg';
|
||||
}
|
||||
AppStorage.setOrCreate('currentHeightBreakpoint', heightBp);
|
||||
}
|
||||
|
||||
onWindowStageDestroy(): void {
|
||||
// Main window is destroyed, release UI related resources
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
|
||||
}
|
||||
|
||||
onForeground(): void {
|
||||
// Ability has brought to foreground
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
|
||||
}
|
||||
|
||||
onBackground(): void {
|
||||
// Ability has back to background
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { BreakpointConstants } from "../common/BreakpointConstants";
|
||||
|
||||
export class BreakpointType<T> {
|
||||
sm: T;
|
||||
md: T;
|
||||
lg: T;
|
||||
|
||||
constructor(sm: T, md: T, lg: T) {
|
||||
this.sm = sm;
|
||||
this.md = md;
|
||||
this.lg = lg;
|
||||
}
|
||||
|
||||
getValue(currentWidthBreakpoint: string): T {
|
||||
if (currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_MD) {
|
||||
return this.md;
|
||||
}
|
||||
if (currentWidthBreakpoint === BreakpointConstants.BREAKPOINT_LG) {
|
||||
return this.lg;
|
||||
} else {
|
||||
return this.sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 Logger from './Logger';
|
||||
import { ObservedArray } from './ObservedArray';
|
||||
|
||||
const TAG = '[BasicDataSource]';
|
||||
|
||||
class BasicDataSource<T> implements IDataSource {
|
||||
private listeners: DataChangeListener[] = [];
|
||||
|
||||
public totalCount(): number {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public getData(index: number): T | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
registerDataChangeListener(listener: DataChangeListener): void {
|
||||
if (this.listeners.indexOf(listener) < 0) {
|
||||
Logger.info(TAG, 'add listener');
|
||||
this.listeners.push(listener);
|
||||
}
|
||||
}
|
||||
|
||||
unregisterDataChangeListener(listener: DataChangeListener): void {
|
||||
const pos = this.listeners.indexOf(listener);
|
||||
if (pos >= 0) {
|
||||
Logger.info(TAG, 'remove listener');
|
||||
this.listeners.splice(pos, 1);
|
||||
}
|
||||
}
|
||||
|
||||
notifyDataReload(): void {
|
||||
this.listeners.forEach(listener => {
|
||||
listener.onDataReloaded();
|
||||
})
|
||||
}
|
||||
|
||||
notifyDataAdd(index: number): void {
|
||||
this.listeners.forEach(listener => {
|
||||
listener.onDataAdd(index);
|
||||
})
|
||||
}
|
||||
|
||||
notifyDataChange(index: number): void {
|
||||
this.listeners.forEach(listener => {
|
||||
listener.onDataChange(index);
|
||||
})
|
||||
}
|
||||
|
||||
notifyDataDelete(index: number): void {
|
||||
this.listeners.forEach(listener => {
|
||||
listener.onDataDelete(index);
|
||||
})
|
||||
}
|
||||
|
||||
notifyDataMove(from: number, to: number): void {
|
||||
this.listeners.forEach(listener => {
|
||||
listener.onDataMove(from, to);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@Observed
|
||||
export default class LazyDataSource<T> extends BasicDataSource<T> {
|
||||
dataArray: T[] = [];
|
||||
|
||||
public totalCount(): number {
|
||||
return this.dataArray.length;
|
||||
}
|
||||
|
||||
public getData(index: number): T {
|
||||
return this.dataArray[index];
|
||||
}
|
||||
|
||||
public addData(index: number, data: T): void {
|
||||
this.dataArray.splice(index, 0, data);
|
||||
this.notifyDataAdd(index);
|
||||
}
|
||||
|
||||
public pushData(data: T): void {
|
||||
this.dataArray.push(data);
|
||||
this.notifyDataAdd(this.dataArray.length - 1);
|
||||
}
|
||||
|
||||
public pushArrayData(newData: ObservedArray<T>): void {
|
||||
this.clear();
|
||||
this.dataArray.push(...newData);
|
||||
this.notifyDataReload();
|
||||
}
|
||||
|
||||
public appendArrayData(addData: ObservedArray<T>): void {
|
||||
this.dataArray.push(...addData);
|
||||
this.notifyDataReload();
|
||||
}
|
||||
|
||||
public deleteData(index: number): void {
|
||||
this.dataArray.splice(index, 1);
|
||||
this.notifyDataDelete(index);
|
||||
}
|
||||
|
||||
public getDataList(): ObservedArray<T> {
|
||||
return this.dataArray;
|
||||
}
|
||||
|
||||
public clear(): void {
|
||||
this.dataArray.splice(0, this.dataArray?.length);
|
||||
}
|
||||
|
||||
public isEmpty(): boolean {
|
||||
return this.dataArray.length === 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { hilog } from '@kit.PerformanceAnalysisKit';
|
||||
|
||||
class Logger {
|
||||
private domain: number;
|
||||
private prefix: string;
|
||||
private format: string = "%{public}s, %{public}s";
|
||||
|
||||
constructor(prefix: string) {
|
||||
this.prefix = prefix;
|
||||
this.domain = 0xFF00;
|
||||
}
|
||||
|
||||
debug(...args: Object[]): void {
|
||||
hilog.debug(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
info(...args: Object[]): void {
|
||||
hilog.info(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
warn(...args: Object[]): void {
|
||||
hilog.warn(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
error(...args: Object[]): void {
|
||||
hilog.error(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
}
|
||||
|
||||
export default new Logger('[HMOSWorld]');
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Wraps an array as an observed object
|
||||
*/
|
||||
@Observed
|
||||
export class ObservedArray<T> extends Array<T> {
|
||||
constructor(args?: T[]) {
|
||||
if (args instanceof Array) {
|
||||
super(...args);
|
||||
} else {
|
||||
super();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { BuilderNode, FrameNode, NodeController, Size } from '@kit.ArkUI';
|
||||
import { webview } from '@kit.ArkWeb';
|
||||
import { CommonConstants } from '../common/CommonConstants';
|
||||
import Logger from './Logger';
|
||||
|
||||
let nodeMap: Map<string, MyNodeController | undefined> = new Map();
|
||||
let controllerMap: Map<string, WebviewController | undefined> = new Map();
|
||||
let onPageEndMap: Map<string, Function | undefined> = new Map();
|
||||
let onProgressChangeMap: Map<string, Function | undefined> = new Map();
|
||||
let onResourceLoadMap: Map<string, Function | undefined> = new Map();
|
||||
let context: UIContext;
|
||||
|
||||
class Data {
|
||||
public url: string;
|
||||
public controller: WebviewController;
|
||||
public onPageEndAction?: Function;
|
||||
public onProgressChangeAction?: Function;
|
||||
public onResourceLoadAction?: Function;
|
||||
|
||||
constructor(url: string, controller: WebviewController) {
|
||||
this.url = url;
|
||||
this.controller = controller;
|
||||
}
|
||||
}
|
||||
|
||||
// Developer-defined template
|
||||
@Builder
|
||||
function webBuilder(data: Data) {
|
||||
Web({ src: data.url.split('~')[0], controller: data.controller })
|
||||
.domStorageAccess(true)
|
||||
.zoomAccess(true)
|
||||
.fileAccess(true)
|
||||
.mixedMode(MixedMode.All)
|
||||
.cacheMode(CacheMode.Default)
|
||||
.verticalScrollBarAccess(false)
|
||||
.javaScriptAccess(true)
|
||||
.pinchSmooth(true)
|
||||
.onFirstContentfulPaint(() => {
|
||||
nodeMap.set('hmos_' + data.url, undefined);
|
||||
})
|
||||
.onPageEnd(() => {
|
||||
onPageEndMap.get(data.url)?.();
|
||||
})
|
||||
.onProgressChange((event) => {
|
||||
Logger.info('newProgress:' + event?.newProgress);
|
||||
if (event?.newProgress === 100) {
|
||||
onProgressChangeMap.get(data.url)?.();
|
||||
}
|
||||
Logger.info('onProgressChange weburl: ' + data.url);
|
||||
})
|
||||
.onResourceLoad((event) => {
|
||||
Logger.info('onResourceLoad:' + event?.url);
|
||||
onResourceLoadMap.get(data.url)?.(event.url);
|
||||
})
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.height(CommonConstants.FULL_PERCENT)
|
||||
}
|
||||
|
||||
let wrap = wrapBuilder<Data[]>(webBuilder);
|
||||
|
||||
/**
|
||||
* Controls and feeds back the behavior of the node on the corresponding NodeContainer.
|
||||
* It must be used together with NodeContainer.
|
||||
*/
|
||||
export class MyNodeController extends NodeController {
|
||||
private rootNode: BuilderNode<Data[]> | null | undefined = null;
|
||||
private isRemove: boolean = false;
|
||||
|
||||
// Used to construct the number of nodes and return the node mount in the corresponding NodeContainer.
|
||||
// This API is called when the corresponding NodeContainer is created or by using the rebuild method.
|
||||
makeNode(uiContext: UIContext): FrameNode | null {
|
||||
Logger.info('uiContext is undifined : ' + (uiContext === undefined));
|
||||
if (this.isRemove) {
|
||||
return null;
|
||||
}
|
||||
if (this.rootNode != undefined) {
|
||||
return this.rootNode.getFrameNode();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
disposeNode() {
|
||||
this.rootNode?.dispose();
|
||||
}
|
||||
|
||||
aboutToResize(size: Size) {
|
||||
Logger.info('aboutToResize width : ' + size.width + ' height : ' + size.height);
|
||||
}
|
||||
|
||||
aboutToAppear() {
|
||||
if (this.rootNode == undefined) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
aboutToDisappear() {
|
||||
Logger.info('aboutToDisappear');
|
||||
}
|
||||
|
||||
|
||||
initWeb(url: string, uiContext: UIContext, control: WebviewController, onPageEndAction?: Function) {
|
||||
if (this.rootNode != null) {
|
||||
return;
|
||||
}
|
||||
this.rootNode = new BuilderNode(uiContext);
|
||||
this.rootNode.dispose()
|
||||
this.rootNode.build(wrap, { url: url, controller: control });
|
||||
}
|
||||
}
|
||||
|
||||
export function createNWeb(url: string, uiContext?: UIContext) {
|
||||
if (nodeMap.has(url)) {
|
||||
return;
|
||||
}
|
||||
if (!context && uiContext) {
|
||||
context = uiContext;
|
||||
}
|
||||
let baseNode = new MyNodeController();
|
||||
let controller = new webview.WebviewController();
|
||||
baseNode.initWeb(url, context, controller);
|
||||
controllerMap.set(url, controller)
|
||||
nodeMap.set(url, baseNode);
|
||||
}
|
||||
|
||||
export const getNWeb = (url: string): MyNodeController | undefined => {
|
||||
return nodeMap.get(url);
|
||||
}
|
||||
|
||||
// Destruct the created node.
|
||||
export const deleteNode = (url: string) => {
|
||||
let nodeController = nodeMap.get(url);
|
||||
nodeController?.disposeNode();
|
||||
nodeMap.delete(url);
|
||||
controllerMap.delete(url);
|
||||
onPageEndMap.delete(url);
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { deviceInfo } from '@kit.BasicServicesKit';
|
||||
import { window } from '@kit.ArkUI';
|
||||
import Logger from './Logger';
|
||||
import { CommonConstants } from '../common/CommonConstants';
|
||||
|
||||
@Observed
|
||||
export class WindowUtil {
|
||||
private windowStage?: window.WindowStage;
|
||||
private mainWindowClass?: window.Window;
|
||||
|
||||
static getInstance(): WindowUtil | undefined {
|
||||
if (!AppStorage.get<WindowUtil>(CommonConstants.WINDOW_UTIL)) {
|
||||
AppStorage.setOrCreate(CommonConstants.WINDOW_UTIL, new WindowUtil());
|
||||
} else {
|
||||
Logger.info(`AppStorage does not have windowUtil`);
|
||||
}
|
||||
return AppStorage.get<WindowUtil>(CommonConstants.WINDOW_UTIL);
|
||||
}
|
||||
|
||||
setWindowStage(windowStage: window.WindowStage): void {
|
||||
this.windowStage = windowStage;
|
||||
}
|
||||
|
||||
setMainWindowPortrait(): void {
|
||||
if (this.windowStage === undefined) {
|
||||
Logger.error(`WindowStage is undefined`);
|
||||
return;
|
||||
}
|
||||
this.windowStage.getMainWindow((err, windowClass: window.Window) => {
|
||||
this.mainWindowClass = windowClass;
|
||||
if (err.code) {
|
||||
Logger.error(`Failed to obtain the main window. Code:${err.code}, message:${err.message}`);
|
||||
return;
|
||||
}
|
||||
if (deviceInfo.deviceType !== CommonConstants.DEVICE_TYPES[0] && deviceInfo.deviceType !==
|
||||
CommonConstants.DEVICE_TYPES[1]) {
|
||||
this.mainWindowClass.setPreferredOrientation(window.Orientation.PORTRAIT);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setMainWindowOrientation(orientation: window.Orientation): void {
|
||||
if (this.mainWindowClass === undefined) {
|
||||
Logger.error(`MainWindowClass is undefined`);
|
||||
return;
|
||||
}
|
||||
this.mainWindowClass.setPreferredOrientation(orientation);
|
||||
}
|
||||
|
||||
disableWindowSystemBar(): void {
|
||||
if (this.mainWindowClass === undefined) {
|
||||
Logger.error(`MainWindowClass is undefined`);
|
||||
return;
|
||||
}
|
||||
this.mainWindowClass.setWindowSystemBarEnable([]);
|
||||
}
|
||||
|
||||
enableWindowSystemBar(): void {
|
||||
if (this.mainWindowClass === undefined) {
|
||||
Logger.error(`MainWindowClass is undefined`);
|
||||
return;
|
||||
}
|
||||
this.mainWindowClass.setWindowSystemBarEnable(['status', 'navigation']);
|
||||
}
|
||||
|
||||
setFullScreen(): void {
|
||||
if (this.mainWindowClass === undefined) {
|
||||
Logger.error(`MainWindowClass is undefined`);
|
||||
return;
|
||||
}
|
||||
this.mainWindowClass.setWindowLayoutFullScreen(true);
|
||||
}
|
||||
|
||||
getMainWindow(): window.Window | undefined {
|
||||
return this.mainWindowClass;
|
||||
}
|
||||
|
||||
offWindowSizeChange(): void {
|
||||
if (this.mainWindowClass === undefined) {
|
||||
Logger.error(`MainWindowClass is undefined`);
|
||||
return;
|
||||
}
|
||||
this.mainWindowClass?.off('windowSizeChange');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { CommonConstants } from '../common/CommonConstants';
|
||||
|
||||
|
||||
@Component
|
||||
export struct EmptyPagePathStack {
|
||||
@Consume('appPathStack') appPathStack: NavPathStack;
|
||||
|
||||
build() {
|
||||
NavDestination() {
|
||||
Column() {
|
||||
TopNavigationView({
|
||||
title: "详情页",
|
||||
onBackClick: () => {
|
||||
this.appPathStack.pop();
|
||||
}
|
||||
})
|
||||
Image($r("app.media.realImageGen_travel_0"))
|
||||
}
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.height(CommonConstants.FULL_PERCENT)
|
||||
}
|
||||
.hideTitleBar(true)
|
||||
}
|
||||
}
|
||||
|
||||
@Builder
|
||||
export function EmptyPagePathStackBuilder() {
|
||||
EmptyPagePathStack()
|
||||
}
|
||||
|
||||
@Component
|
||||
struct TopNavigationView {
|
||||
title?: ResourceStr;
|
||||
onBackClick?: Function;
|
||||
|
||||
build() {
|
||||
Row() {
|
||||
if (this.onBackClick) {
|
||||
Image($r('app.media.ic_back'))
|
||||
.width("40vp")
|
||||
.height("40vp")
|
||||
.margin({ right: "16vp" })
|
||||
.onClick(() => this.onBackClick?.())
|
||||
}
|
||||
|
||||
Text(this.title)
|
||||
.fontSize("20fp")
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.textAlign(TextAlign.Start)
|
||||
.layoutWeight(1)
|
||||
}
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.height("56vp")
|
||||
.padding({
|
||||
left: "24vp",
|
||||
right: "24vp"
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { CommonConstants } from '../common/CommonConstants'
|
||||
|
||||
@Builder
|
||||
export function LoadingFailedView(handleReload?: () => void) {
|
||||
Row() {
|
||||
Column() {
|
||||
Image($r('app.media.ic_failure'))
|
||||
.width("120vp")
|
||||
.height("120vp")
|
||||
Text("Failed to load the network")
|
||||
.fontColor($r('sys.color.mask_secondary'))
|
||||
.fontFamily(CommonConstants.HARMONY_HEI_TI_FONT_FAMILY)
|
||||
.fontSize("14fp")
|
||||
.margin({ top: "8vp" })
|
||||
Row() {
|
||||
Text("Reload")
|
||||
.fontColor("#FF3E50")
|
||||
.fontFamily(CommonConstants.HARMONY_HEI_TI_FONT_FAMILY)
|
||||
.fontSize("12fp")
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.textAlign(TextAlign.Center)
|
||||
}
|
||||
.height("32vp")
|
||||
.width("80vp")
|
||||
.margin({ top: "8vp" })
|
||||
.borderRadius($r('sys.float.corner_radius_level6'))
|
||||
.onClick(() => handleReload?.())
|
||||
}
|
||||
}
|
||||
.justifyContent(FlexAlign.Center)
|
||||
.layoutWeight(1)
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2023 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 { CommonConstants } from '../common/CommonConstants'
|
||||
|
||||
@Component
|
||||
export struct LoadingView {
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
LoadingProgress()
|
||||
}
|
||||
.margin({ top: "260vp" })
|
||||
.width("72vp")
|
||||
.height("72vp")
|
||||
}
|
||||
.height(CommonConstants.FULL_PERCENT)
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
@Component
|
||||
export struct Module0 {
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
Text('健康')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
.margin(30)
|
||||
Blank()
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
|
||||
Grid() {
|
||||
GridItem() {
|
||||
}
|
||||
.padding({
|
||||
top: 5,
|
||||
left: 3,
|
||||
bottom: 5,
|
||||
right: 3
|
||||
})
|
||||
}
|
||||
.backgroundColor('#FFFFFF')
|
||||
.width('95%')
|
||||
.borderRadius(20)
|
||||
.margin({ bottom: 10 })
|
||||
.clip(true)
|
||||
.maxCount(1)
|
||||
.alignSelf(ItemAlign.Center)
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.backgroundColor('#FFFFFF')
|
||||
.margin({ bottom: 10 })
|
||||
.clip(true)
|
||||
.constraintSize({ minHeight: ' 15.07%' })
|
||||
.backgroundColor('#FFFFFF')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
@Component
|
||||
export struct Module1 {
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
Column() {
|
||||
Text('卡路里')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('117')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('/500千卡')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
.layoutWeight(1)
|
||||
|
||||
Blank()
|
||||
Column() {
|
||||
Text('步数')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('1889')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('/8000步')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
.layoutWeight(1)
|
||||
|
||||
Blank()
|
||||
Column() {
|
||||
Text('中高强度')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('13')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('/30分钟')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
.layoutWeight(1)
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.padding({ top: '10.0px', bottom: '10.0px' })
|
||||
|
||||
Row() {
|
||||
Column() {
|
||||
Text('活动次数 4 次')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
.layoutWeight(1)
|
||||
|
||||
Blank()
|
||||
Column() {
|
||||
Text('睡眠')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('8时27分')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('12月23日 睡眠质量良好')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('有待提高')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
.layoutWeight(1)
|
||||
}
|
||||
.width('100%')
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.padding({ top: '10.0px', bottom: '10.0px' })
|
||||
|
||||
Grid() {
|
||||
GridItem() {
|
||||
Column() {
|
||||
Text('心率')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('96次/分')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('12月23日 16:29')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
}
|
||||
.padding({
|
||||
top: 5,
|
||||
left: 3,
|
||||
bottom: 5,
|
||||
right: 3
|
||||
})
|
||||
|
||||
GridItem() {
|
||||
Column() {
|
||||
Text('血氧饱和度')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('97%')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('12月23日 16:29')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
}
|
||||
.padding({
|
||||
top: 5,
|
||||
left: 3,
|
||||
bottom: 5,
|
||||
right: 3
|
||||
})
|
||||
|
||||
GridItem() {
|
||||
Column() {
|
||||
Text('体重')
|
||||
.maxFontSize(14)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('58.50KG')
|
||||
.maxFontSize(20)
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
Text('9月11日 16:12')
|
||||
.maxFontSize(12)
|
||||
.fontColor('#888888')
|
||||
.margin(2)
|
||||
.minFontSize(8)
|
||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||
.maxLines(1)
|
||||
}
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ left: '10.0px', right: '10.0px' })
|
||||
}
|
||||
.padding({
|
||||
top: 5,
|
||||
left: 3,
|
||||
bottom: 5,
|
||||
right: 3
|
||||
})
|
||||
}
|
||||
.borderRadius(20)
|
||||
.backgroundColor('#ffffff')
|
||||
.width('95%')
|
||||
.margin({ bottom: 10 })
|
||||
.clip(true)
|
||||
.columnsTemplate(('1fr ').repeat(2))
|
||||
.maxCount(3)
|
||||
.alignSelf(ItemAlign.Center)
|
||||
}
|
||||
.width('95%')
|
||||
.borderRadius(20)
|
||||
.backgroundColor('#ffffff')
|
||||
.alignItems(HorizontalAlign.Center)
|
||||
.padding({ top: '10.0px', bottom: '10.0px' })
|
||||
.margin({ bottom: 10 })
|
||||
.clip(true)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2024 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2024 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 '@kit.ArkUI';
|
||||
import { CommonConstants } from '../common/CommonConstants';
|
||||
|
||||
@Builder
|
||||
export function SearchModuleWithButtonPageBuilder() {
|
||||
SearchModuleWithButtonPage()
|
||||
}
|
||||
|
||||
@Component
|
||||
export default struct SearchModuleWithButtonPage {
|
||||
private pageInfos: NavPathStack = new NavPathStack();
|
||||
|
||||
private onArrowClicked(): void {
|
||||
this.pageInfos.pop(false);
|
||||
}
|
||||
|
||||
build() {
|
||||
NavDestination() {
|
||||
Row() {
|
||||
Image($r('app.media.icon'))
|
||||
.width(40)
|
||||
.height(40)
|
||||
.onClick(() => {
|
||||
this.onArrowClicked();
|
||||
})
|
||||
Search({ placeholder: '搜索交通/酒店/景点等' })
|
||||
.searchButton('搜索')
|
||||
.enableKeyboardOnFocus(false)
|
||||
.placeholderColor(Color.Black)
|
||||
.placeholderFont({
|
||||
family: "HarmonyHeiTi",
|
||||
size: 16,
|
||||
weight: 400
|
||||
})
|
||||
.borderColor($r('sys.color.font_primary'))
|
||||
.searchIcon({ color: Color.Black })
|
||||
.backgroundColor(Color.White)
|
||||
.defaultFocus(true)
|
||||
.focusOnTouch(true)
|
||||
.fontColor(Color.Black)
|
||||
.width('85%')
|
||||
.padding({
|
||||
left: "24vp",
|
||||
right: "24vp"
|
||||
})
|
||||
}
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.height(50)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.margin({ bottom: '10vp' })
|
||||
}
|
||||
.transition(TransitionEffect.OPACITY)
|
||||
.hideTitleBar(true)
|
||||
.backgroundColor('#F1F3F5')
|
||||
.onReady((context: NavDestinationContext) => {
|
||||
this.pageInfos = context.pathStack;
|
||||
})
|
||||
.onBackPressed(() => {
|
||||
animateTo({
|
||||
curve: curves.interpolatingSpring(0, 1, 342, 38),
|
||||
}, () => {
|
||||
this.pageInfos.pop(false);
|
||||
})
|
||||
return true;
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (c) 2024 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 { CommonConstants } from '../common/CommonConstants';
|
||||
|
||||
|
||||
@Component
|
||||
export struct SecondPageSearch {
|
||||
@Consume('appPathStack') appPathStack: NavPathStack;
|
||||
@State searchValue: string = '';
|
||||
|
||||
jump(): void {
|
||||
this.appPathStack.pushPathByName('EmptyPagePathStack', null);
|
||||
}
|
||||
|
||||
build() {
|
||||
NavDestination() {
|
||||
Column() {
|
||||
SearchBar({
|
||||
searchValue: this.searchValue,
|
||||
onBack: () => {
|
||||
this.appPathStack.clear();
|
||||
return false;
|
||||
}
|
||||
})
|
||||
}
|
||||
.backgroundColor($r('sys.color.ohos_id_color_sub_background'))
|
||||
.height(CommonConstants.FULL_PERCENT)
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
}
|
||||
.hideTitleBar(true)
|
||||
.onBackPressed(() => {
|
||||
this.appPathStack.clear();
|
||||
return true;
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@Builder
|
||||
export function SearchPageBuilder() {
|
||||
SecondPageSearch()
|
||||
}
|
||||
|
||||
@Component
|
||||
struct SearchBar {
|
||||
@Consume('appPathStack') appPathStack: NavPathStack;
|
||||
@Link searchValue: string;
|
||||
onBack: () => void = () => {
|
||||
};
|
||||
|
||||
build() {
|
||||
Row() {
|
||||
Image($r('app.media.ic_back'))
|
||||
.size({ width: "24vp", height: "24vp" })
|
||||
.width("40vp")
|
||||
.height("40vp")
|
||||
.margin({ right: "8vp" })
|
||||
.onClick(() => this.onBack())
|
||||
|
||||
SearchInput({
|
||||
searchValue: this.searchValue
|
||||
})
|
||||
}
|
||||
.width(CommonConstants.FULL_PERCENT)
|
||||
.padding({
|
||||
top: "8vp",
|
||||
bottom: "8vp",
|
||||
left: "24vp",
|
||||
right: "24vp"
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@Component
|
||||
struct SearchInput {
|
||||
@Link searchValue: string;
|
||||
|
||||
aboutToAppear(): void {
|
||||
}
|
||||
|
||||
aboutToDisappear(): void {
|
||||
}
|
||||
|
||||
build() {
|
||||
Search({
|
||||
placeholder: "Search",
|
||||
value: this.searchValue
|
||||
})
|
||||
.enableKeyboardOnFocus(true)
|
||||
.textFont({ size: "16fp" })
|
||||
.placeholderFont({ size: "16fp" })
|
||||
.height("40vp")
|
||||
.layoutWeight(1)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
@Entry
|
||||
@Component
|
||||
struct Hello {
|
||||
@State message: string = 'Hello World';
|
||||
|
||||
build() {
|
||||
Row() {
|
||||
Column() {
|
||||
Text(this.message)
|
||||
.fontSize($r('app.float.page_text_font_size'))
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.onClick(() => {
|
||||
this.message = 'Welcome';
|
||||
})
|
||||
Button() {
|
||||
Text('Next')
|
||||
.fontSize(30)
|
||||
.fontWeight(FontWeight.Bold)
|
||||
}
|
||||
.type(ButtonType.Capsule)
|
||||
.margin({
|
||||
top: 20
|
||||
})
|
||||
.backgroundColor('#0D9FFB')
|
||||
.width('40%')
|
||||
.height('5%')
|
||||
.onClick(() => {
|
||||
console.log("用户操作:点击按钮")
|
||||
let uiContext: UIContext = this.getUIContext();
|
||||
let router = uiContext.getRouter();
|
||||
router.pushUrl({
|
||||
url: 'pages/Second'
|
||||
}).then(() => {
|
||||
console.log('系统提示:跳转成功')
|
||||
})
|
||||
})
|
||||
}
|
||||
.width('100%')
|
||||
}
|
||||
.height('100%')
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,24 @@
|
||||
import { Module0 } from '../home/view/Module0';
|
||||
import { Module1 } from '../home/view/Module1';
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct Index {
|
||||
@State message: string = 'Hello World';
|
||||
private scroller: Scroller = new Scroller();
|
||||
|
||||
build() {
|
||||
Row() {
|
||||
Scroll(this.scroller) {
|
||||
Column() {
|
||||
Text(this.message)
|
||||
.fontSize($r('app.float.page_text_font_size'))
|
||||
.fontWeight(FontWeight.Bold)
|
||||
.onClick(() => {
|
||||
this.message = 'Welcome';
|
||||
})
|
||||
Button() {
|
||||
Text('Next')
|
||||
.fontSize(30)
|
||||
.fontWeight(FontWeight.Bold)
|
||||
}
|
||||
.type(ButtonType.Capsule)
|
||||
.margin({
|
||||
top: 20
|
||||
})
|
||||
.backgroundColor('#0D9FFB')
|
||||
.width('40%')
|
||||
.height('5%')
|
||||
.onClick(() => {
|
||||
console.log("用户操作:点击按钮")
|
||||
let uiContext: UIContext = this.getUIContext();
|
||||
let router = uiContext.getRouter();
|
||||
router.pushUrl({
|
||||
url: 'pages/Second'
|
||||
}).then(() => {
|
||||
console.log('系统提示:跳转成功')
|
||||
})
|
||||
})
|
||||
Module0()
|
||||
Module1()
|
||||
}
|
||||
.width('100%')
|
||||
}
|
||||
.scrollable(ScrollDirection.Vertical)
|
||||
.scrollBar(BarState.Off)
|
||||
.width('100%')
|
||||
.height('100%')
|
||||
.align(Alignment.Top)
|
||||
.backgroundColor($r('app.color.page_bg_color'))
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,48 @@
|
||||
{
|
||||
"color": [
|
||||
{
|
||||
"name": "start_window_background",
|
||||
"value": "#FFFFFFFF"
|
||||
}
|
||||
]
|
||||
"color" : [ {
|
||||
"name" : "start_window_background",
|
||||
"value" : "#FFFFFFFF"
|
||||
}, {
|
||||
"name" : "app_icon_color",
|
||||
"value" : "#BDBDBD"
|
||||
}, {
|
||||
"name" : "app_icon_pressed_color",
|
||||
"value" : "#9E9E9E"
|
||||
}, {
|
||||
"name" : "page_bg_color",
|
||||
"value" : "#F5F5F5"
|
||||
}, {
|
||||
"name" : "page_title_font_color",
|
||||
"value" : "#616161"
|
||||
}, {
|
||||
"name" : "module_bg_color",
|
||||
"value" : "#EEEEEE"
|
||||
}, {
|
||||
"name" : "module_title_font_color",
|
||||
"value" : "#757575"
|
||||
}, {
|
||||
"name" : "module_icon_color",
|
||||
"value" : "#9E9E9E"
|
||||
}, {
|
||||
"name" : "module_item_bg_color",
|
||||
"value" : "#F2F2F2"
|
||||
}, {
|
||||
"name" : "content_main_title_font_color",
|
||||
"value" : "#616161"
|
||||
}, {
|
||||
"name" : "content_sub_title_font_color",
|
||||
"value" : "#757575"
|
||||
}, {
|
||||
"name" : "content_label_font_color",
|
||||
"value" : "#9E9E9E"
|
||||
}, {
|
||||
"name" : "content_font_color",
|
||||
"value" : "#000000"
|
||||
}, {
|
||||
"name" : "button_bg_color",
|
||||
"value" : "#757575"
|
||||
}, {
|
||||
"name" : "button_font_color",
|
||||
"value" : "#FFFFFF"
|
||||
} ]
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"color" : [ {
|
||||
"name" : "brand_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "warning_dark",
|
||||
"value" : "#ffd94838"
|
||||
}, {
|
||||
"name" : "alert_dark",
|
||||
"value" : "#ffdb6b42"
|
||||
}, {
|
||||
"name" : "confirm_dark",
|
||||
"value" : "#ff5ba854"
|
||||
}, {
|
||||
"name" : "font_primary_dark",
|
||||
"value" : "#e5ffffff"
|
||||
}, {
|
||||
"name" : "font_secondary_dark",
|
||||
"value" : "#99ffffff"
|
||||
}, {
|
||||
"name" : "font_tertiary_dark",
|
||||
"value" : "#66ffffff"
|
||||
}, {
|
||||
"name" : "font_fourth_dark",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "font_emphasize_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "font_on_primary_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "font_on_secondary_dark",
|
||||
"value" : "#99000000"
|
||||
}, {
|
||||
"name" : "font_on_tertiary_dark",
|
||||
"value" : "#66000000"
|
||||
}, {
|
||||
"name" : "font_on_fourth_dark",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "icon_primary_dark",
|
||||
"value" : "#e5ffffff"
|
||||
}, {
|
||||
"name" : "icon_secondary_dark",
|
||||
"value" : "#99ffffff"
|
||||
}, {
|
||||
"name" : "icon_tertiary_dark",
|
||||
"value" : "#66ffffff"
|
||||
}, {
|
||||
"name" : "icon_fourth_dark",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "icon_emphasize_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "icon_sub_emphasize_dark",
|
||||
"value" : "#66317af7"
|
||||
}, {
|
||||
"name" : "icon_on_primary_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "icon_on_secondary_dark",
|
||||
"value" : "#99000000"
|
||||
}, {
|
||||
"name" : "icon_on_tertiary_dark",
|
||||
"value" : "#66000000"
|
||||
}, {
|
||||
"name" : "icon_on_fourth_dark",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "background_primary_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "background_secondary_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "background_tertiary_dark",
|
||||
"value" : "#ff202224"
|
||||
}, {
|
||||
"name" : "background_fourth_dark",
|
||||
"value" : "#ff2e3033"
|
||||
}, {
|
||||
"name" : "background_emphasize_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "comp_foreground_primary_dark",
|
||||
"value" : "#ffe5e5e5"
|
||||
}, {
|
||||
"name" : "comp_background_primary_dark",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_background_primary_trans_dark",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "comp_background_primary_contrary_dark",
|
||||
"value" : "#ffe5e5e5"
|
||||
}, {
|
||||
"name" : "comp_background_gray_dark",
|
||||
"value" : "#ffe5e5ea"
|
||||
}, {
|
||||
"name" : "comp_background_secondary_dark",
|
||||
"value" : "#19ffffff"
|
||||
}, {
|
||||
"name" : "comp_background_tertiary_dark",
|
||||
"value" : "#0cffffff"
|
||||
}, {
|
||||
"name" : "comp_background_emphasize_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "comp_background_neutral_dark",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_emphasize_secondary_dark",
|
||||
"value" : "#33317af7"
|
||||
}, {
|
||||
"name" : "comp_emphasize_tertiary_dark",
|
||||
"value" : "#19317af7"
|
||||
}, {
|
||||
"name" : "comp_divider_dark",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "comp_common_contrary_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "comp_background_focus_dark",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "comp_focused_primary_dark",
|
||||
"value" : "#e5ffffff"
|
||||
}, {
|
||||
"name" : "comp_focused_secondary_dark",
|
||||
"value" : "#99ffffff"
|
||||
}, {
|
||||
"name" : "comp_focused_tertiary_dark",
|
||||
"value" : "#66ffffff"
|
||||
}, {
|
||||
"name" : "interactive_hover_dark",
|
||||
"value" : "#0cffffff"
|
||||
}, {
|
||||
"name" : "interactive_pressed_dark",
|
||||
"value" : "#19ffffff"
|
||||
}, {
|
||||
"name" : "interactive_focus_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "interactive_active_dark",
|
||||
"value" : "#ff317af7"
|
||||
}, {
|
||||
"name" : "interactive_select_dark",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "interactive_click_dark",
|
||||
"value" : "#19ffffff"
|
||||
} ]
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"color" : [ {
|
||||
"name" : "brand",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "warning",
|
||||
"value" : "#ffe84026"
|
||||
}, {
|
||||
"name" : "alert",
|
||||
"value" : "#ffed6f21"
|
||||
}, {
|
||||
"name" : "confirm",
|
||||
"value" : "#ff64bb5c"
|
||||
}, {
|
||||
"name" : "font_primary",
|
||||
"value" : "#e5000000"
|
||||
}, {
|
||||
"name" : "font_secondary",
|
||||
"value" : "#99000000"
|
||||
}, {
|
||||
"name" : "font_tertiary",
|
||||
"value" : "#66000000"
|
||||
}, {
|
||||
"name" : "font_fourth",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "font_emphasize",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "font_on_primary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "font_on_secondary",
|
||||
"value" : "#99ffffff"
|
||||
}, {
|
||||
"name" : "font_on_tertiary",
|
||||
"value" : "#66ffffff"
|
||||
}, {
|
||||
"name" : "font_on_fourth",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "icon_primary",
|
||||
"value" : "#e5000000"
|
||||
}, {
|
||||
"name" : "icon_secondary",
|
||||
"value" : "#99000000"
|
||||
}, {
|
||||
"name" : "icon_tertiary",
|
||||
"value" : "#66000000"
|
||||
}, {
|
||||
"name" : "icon_fourth",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "icon_emphasize",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "icon_sub_emphasize",
|
||||
"value" : "#660a59f7"
|
||||
}, {
|
||||
"name" : "icon_on_primary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "icon_on_secondary",
|
||||
"value" : "#99ffffff"
|
||||
}, {
|
||||
"name" : "icon_on_tertiary",
|
||||
"value" : "#66ffffff"
|
||||
}, {
|
||||
"name" : "icon_on_fourth",
|
||||
"value" : "#33ffffff"
|
||||
}, {
|
||||
"name" : "background_primary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "background_secondary",
|
||||
"value" : "#fff1f3f5"
|
||||
}, {
|
||||
"name" : "background_tertiary",
|
||||
"value" : "#ffe5e5ea"
|
||||
}, {
|
||||
"name" : "background_fourth",
|
||||
"value" : "#ffd1d1d6"
|
||||
}, {
|
||||
"name" : "background_emphasize",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "comp_foreground_primary",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "comp_background_primary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_background_primary_trans",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_background_primary_contrary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_background_gray",
|
||||
"value" : "#fff1f3f5"
|
||||
}, {
|
||||
"name" : "comp_background_secondary",
|
||||
"value" : "#19000000"
|
||||
}, {
|
||||
"name" : "comp_background_tertiary",
|
||||
"value" : "#0c000000"
|
||||
}, {
|
||||
"name" : "comp_background_emphasize",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "comp_background_neutral",
|
||||
"value" : "#ff000000"
|
||||
}, {
|
||||
"name" : "comp_emphasize_secondary",
|
||||
"value" : "#330a59f7"
|
||||
}, {
|
||||
"name" : "comp_emphasize_tertiary",
|
||||
"value" : "#190a59f7"
|
||||
}, {
|
||||
"name" : "comp_divider",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "comp_common_contrary",
|
||||
"value" : "#ffffffff"
|
||||
}, {
|
||||
"name" : "comp_background_focus",
|
||||
"value" : "#fff1f3f5"
|
||||
}, {
|
||||
"name" : "comp_focused_primary",
|
||||
"value" : "#e5000000"
|
||||
}, {
|
||||
"name" : "comp_focused_secondary",
|
||||
"value" : "#99000000"
|
||||
}, {
|
||||
"name" : "comp_focused_tertiary",
|
||||
"value" : "#66000000"
|
||||
}, {
|
||||
"name" : "interactive_hover",
|
||||
"value" : "#0c000000"
|
||||
}, {
|
||||
"name" : "interactive_pressed",
|
||||
"value" : "#19000000"
|
||||
}, {
|
||||
"name" : "interactive_focus",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "interactive_active",
|
||||
"value" : "#ff0a59f7"
|
||||
}, {
|
||||
"name" : "interactive_select",
|
||||
"value" : "#33000000"
|
||||
}, {
|
||||
"name" : "interactive_click",
|
||||
"value" : "#19000000"
|
||||
} ]
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"float": [
|
||||
{
|
||||
"name": "page_text_font_size",
|
||||
"value": "50fp"
|
||||
}
|
||||
]
|
||||
"float" : [ {
|
||||
"name" : "font_size",
|
||||
"value" : "14fp"
|
||||
}, {
|
||||
"name" : "page_text_font_size",
|
||||
"value" : "50fp"
|
||||
} ]
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"integer" : [ {
|
||||
"name" : "display_text_L",
|
||||
"value" : 56,
|
||||
"comment" : "Light"
|
||||
}, {
|
||||
"name" : "display_text_M",
|
||||
"value" : 48,
|
||||
"comment" : "Light"
|
||||
}, {
|
||||
"name" : "display_text_S",
|
||||
"value" : 38,
|
||||
"comment" : "Light"
|
||||
}, {
|
||||
"name" : "title_text_L",
|
||||
"value" : 30,
|
||||
"comment" : "Bold"
|
||||
}, {
|
||||
"name" : "title_text_M",
|
||||
"value" : 24,
|
||||
"comment" : "Bold"
|
||||
}, {
|
||||
"name" : "title_text_S",
|
||||
"value" : 20,
|
||||
"comment" : "Bold"
|
||||
}, {
|
||||
"name" : "subtitle_text_L",
|
||||
"value" : 18,
|
||||
"comment" : "Medium"
|
||||
}, {
|
||||
"name" : "subtitle_text_M",
|
||||
"value" : 16,
|
||||
"comment" : "Medium"
|
||||
}, {
|
||||
"name" : "subtitle_text_S",
|
||||
"value" : 14,
|
||||
"comment" : "Medium"
|
||||
}, {
|
||||
"name" : "body_text_L",
|
||||
"value" : 16,
|
||||
"comment" : "Regular"
|
||||
}, {
|
||||
"name" : "body_text_M",
|
||||
"value" : 14,
|
||||
"comment" : "Regular"
|
||||
}, {
|
||||
"name" : "body_text_S",
|
||||
"value" : 12,
|
||||
"comment" : "Regular"
|
||||
}, {
|
||||
"name" : "caption_text_L",
|
||||
"value" : 12,
|
||||
"comment" : "Medium"
|
||||
}, {
|
||||
"name" : "caption_text_M",
|
||||
"value" : 10,
|
||||
"comment" : "Medium"
|
||||
}, {
|
||||
"name" : "caption_text_S",
|
||||
"value" : 8,
|
||||
"comment" : "Medium"
|
||||
} ]
|
||||
}
|
||||
@@ -1,16 +1,36 @@
|
||||
{
|
||||
"string": [
|
||||
{
|
||||
"name": "module_desc",
|
||||
"value": "module description"
|
||||
},
|
||||
{
|
||||
"name": "EntryAbility_desc",
|
||||
"value": "description"
|
||||
},
|
||||
{
|
||||
"name": "EntryAbility_label",
|
||||
"value": "label"
|
||||
}
|
||||
]
|
||||
"string" : [ {
|
||||
"name" : "module_desc",
|
||||
"value" : "module description"
|
||||
}, {
|
||||
"name" : "EntryAbility_desc",
|
||||
"value" : "description"
|
||||
}, {
|
||||
"name" : "EntryAbility_label",
|
||||
"value" : "label"
|
||||
}, {
|
||||
"name" : "defaultForm_label",
|
||||
"value" : "form_label"
|
||||
}, {
|
||||
"name" : "defaultForm_desc",
|
||||
"value" : "form_description"
|
||||
}, {
|
||||
"name" : "EntryFormAbility_desc",
|
||||
"value" : "form_description"
|
||||
}, {
|
||||
"name" : "EntryFormAbility_label",
|
||||
"value" : "form_label"
|
||||
}, {
|
||||
"name" : "widget_desc",
|
||||
"value" : "This is a service widget."
|
||||
}, {
|
||||
"name" : "widget_display_name",
|
||||
"value" : "widget"
|
||||
}, {
|
||||
"name" : "widget1_desc",
|
||||
"value" : "This is a service widget."
|
||||
}, {
|
||||
"name" : "widget1_display_name",
|
||||
"value" : "widget1"
|
||||
} ]
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,14 @@
|
||||
<svg width="24.000000" height="24.000000" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<desc>
|
||||
Created with Pixso.
|
||||
</desc>
|
||||
<defs>
|
||||
<clipPath id="clip25_1724">
|
||||
<rect width="24.000000" height="24.000000" fill="white" fill-opacity="0"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#clip25_1724)">
|
||||
<g opacity="0.000000"/>
|
||||
<path d="M8.08 12L15.05 5.03C15.19 4.88 15.25 4.69 15.25 4.5C15.25 4.29 15.19 4.12 15.05 3.95C14.9 3.81 14.72 3.73 14.52 3.73C14.31 3.73 14.13 3.81 13.99 3.95L7 10.94C6.72 11.23 6.57 11.58 6.57 12C6.57 12.41 6.72 12.76 7 13.06L13.97 19.99C14.09 20.13 14.26 20.2 14.47 20.2C14.7 20.2 14.88 20.13 15.02 19.99C15.16 19.85 15.24 19.67 15.24 19.45C15.24 19.25 15.16 19.08 15.02 18.94L8.08 12Z" fill="#000000" fill-opacity="0.898039" fill-rule="nonzero"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 858 B |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="24px" version="1.1" viewbox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>ic_watermark_menu_sport</title>
|
||||
<defs>
|
||||
<path d="M12.9693925,5.52413677 C13.765194,5.1891759 14.1301029,5.05003528 15.5067595,5.76581241 C15.9390517,5.99036609 16.370944,6.31961963 16.4731185,6.50815813 C16.8826164,7.26487055 16.8174326,7.87220853 16.0370273,9.11404349 C15.0726678,10.6501008 13.8659688,12.612633 13.8659688,12.612633 C13.8659688,12.612633 14.5832552,13.2710421 15.37091,13.9915001 L15.7909228,14.3754386 C16.1171823,14.673468 16.4360166,14.9641744 16.7022613,15.2059229 C17.4498749,15.8854881 17.3405021,17.0531278 17.3405021,17.0531278 L17.3405021,17.0531278 L17.7288053,21.07994 C17.7412022,21.1350452 17.75,21.1911344 17.75,21.2497821 C17.75,21.6640551 17.4088851,22 16.98819,22 C16.6642708,22 16.3893394,21.7996533 16.2789669,21.5190104 C16.1931883,21.336376 16.182591,21.1289443 16.182591,21.1289443 L16.182591,21.1289443 L15.6229306,16.9092639 C15.6229306,16.9092639 12.6266779,14.9855021 11.1720408,14.0347407 C10.4854121,13.5830749 10.1518952,13.152664 10.7009583,11.9643598 C10.7779391,11.7978633 10.8609184,11.6217235 10.9396987,11.4587696 L10.9396987,11.4587696 L12.0708166,12.8236072 C12.1262028,12.8907175 12.2081823,12.9259454 12.2901619,12.9259454 C12.3527463,12.9259454 12.4161305,12.9056746 12.4687173,12.8631649 C12.590287,12.7661404 12.6080826,12.590591 12.5091073,12.4715244 L12.5091073,12.4715244 L9.13834806,8.40476089 C9.13194965,8.39669192 9.122552,8.39295264 9.11495389,8.38606449 C8.92480132,7.967265 8.82562606,7.2396796 10.0301256,6.73015334 C10.8843126,6.36842709 12.133201,5.87681002 12.9693925,5.52413677 Z M9.84819624,14.1230559 L11.6118039,15.3035096 C11.6118039,15.3035096 10.1897653,16.8917237 9.75765519,17.3737854 C9.26745114,17.971781 9.06713391,18.1687889 8.21204553,17.845688 C7.81647659,17.696118 7.0932237,17.4331905 6.34296301,17.1561329 L5.84208766,16.9704235 C5.59294901,16.8776111 5.34823359,16.7856787 5.11907756,16.6983014 C5.02717645,16.6660312 4.94440716,16.6335617 4.86630092,16.6002955 C4.51676582,16.5395398 4.25,16.2293868 4.25,15.8536974 C4.25,15.4345825 4.58127146,15.0945497 4.99006627,15.0945497 C5.09187639,15.0945497 5.18882915,15.1160632 5.27703868,15.1539111 L5.27703868,15.1539111 L8.36689794,16.2222156 L9.84819624,14.1230559 Z M15.9299905,9.9669666 L17.5340827,11.80159 C17.5658551,11.8401198 17.75,12.1237183 17.4950609,12.3857776 C17.2169736,12.6716317 16.925165,12.4461982 16.925165,12.4461982 L16.925165,12.4461982 L15.2418008,11.123118 L15.9299905,9.9669666 Z M12.5600946,7.7047281 L10.8775142,8.21996168 L11.8034833,9.66293061 C12.169392,8.73913135 12.2681674,8.40141522 12.5600946,7.7047281 L12.5600946,7.7047281 Z M16.371621,2 C17.2708142,2 18,2.74739489 18,3.67008496 C18,4.59237663 17.2708142,5.33997072 16.371621,5.33997072 C15.4716507,5.33997072 14.7422706,4.59237663 14.7422706,3.67008496 C14.7422706,2.74739489 15.4716507,2 16.371621,2 Z" id="path-1"></path>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd" id="ic_watermark_menu_sport" stroke="none" stroke-width="1">
|
||||
<mask fill="white" id="mask-2">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use fill="#000" id="menu_sport" xlink:href="#path-1"></use>
|
||||
<g fill="#000" fill-rule="nonzero" id="编组" mask="url(#mask-2)">
|
||||
<g id="Rectangle-13-Copy">
|
||||
<rect height="24" width="24" x="0" y="0"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" version="1.1" viewBox="8 8 24 24">
|
||||
<g fill="none" fill-rule="evenodd" stroke="none" stroke-width="40">
|
||||
|
||||
<g transform="translate(7 7)">
|
||||
<rect width="40" height="40" x="0" y="0" transform="matrix(1 0 0 -1 0 26)"/>
|
||||
<g transform="translate(2.167 4.333)">
|
||||
<path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.708" d="M1.92438658e-15,5.71670974 L0.360273856,5.29469064 C5.21816466,-0.395765879 13.7692897,-1.07069374 19.4597462,3.78719707 C20.0158058,4.2619 20.5325247,4.78083806 21.0048402,5.3389268 L21.3245614,5.71670974 L21.3245614,5.71670974"/>
|
||||
<path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.708" d="M4.33528125,9.97974325 L4.35835174,9.95268396 C7.32672371,6.47109254 12.5554522,6.05504597 16.0370436,9.02341795 C16.3799363,9.31576501 16.6984049,9.63560113 16.9892802,9.97974325 L16.9892802,9.97974325 L16.9892802,9.97974325"/>
|
||||
<rect width="4.015" height="5.174" x="8.581" y="12.848" fill="#000" fill-opacity=".6" rx="2.008"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,9 @@
|
||||
<svg height="40" version="1.1" viewBox="8 8 24 24" width="40" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fill-rule="evenodd" stroke="none" stroke-width="40">
|
||||
|
||||
<g fill="#000" fill-rule="nonzero" transform="translate(7.75 12)">
|
||||
<path d="M16.7318976,-3.00204306e-13 C19.8030587,-3.00204306e-13 22.2250312,2.39839741 22.25,5.39639417 L22.25,5.39639417 L22.25,5.87107699 L22.25,5.87107699 L22.2250312,6.09592675 C22.2250312,6.14589336 22.2000624,6.19585997 22.2000624,6.24582659 C22.2000624,6.3207765 22.1750936,6.37074312 22.1750936,6.44569304 C22.1750936,6.49565965 22.1501248,6.54562626 22.1501248,6.59559287 C22.1501248,6.64555949 22.1501248,6.72050941 22.1251561,6.77047602 C22.1251561,6.82044263 22.1251561,6.87040924 22.1001873,6.92037586 C22.0752185,6.97034247 22.0752185,7.04529239 22.0502497,7.095259 L22.0502497,7.095259 L22.0003121,7.24515884 C21.9753433,7.32010876 21.9753433,7.37007537 21.9503745,7.42004198 C21.9503745,7.4949919 21.9254057,7.54495851 21.900437,7.59492513 C21.900437,7.64489174 21.8754682,7.69485835 21.8504994,7.74482497 C21.8255306,7.79479158 21.8005618,7.8697415 21.775593,7.91970811 C21.7506242,7.96967472 21.7256554,8.01964134 21.7006866,8.06960795 C21.6757179,8.11957456 21.6507491,8.19452448 21.6257803,8.24449109 C21.6008115,8.29445771 21.5758427,8.34442432 21.5508739,8.39439093 C21.5009363,8.44435754 21.4759675,8.51930746 21.4509988,8.56927407 C21.42603,8.59425738 21.4010612,8.64422399 21.3760924,8.69419061 C21.3511236,8.76914053 21.301186,8.81910714 21.2762172,8.89405706 C21.2512484,8.94402367 21.2262797,8.96900698 21.2013109,9.01897359 C21.1513733,9.09392351 21.1264045,9.14389012 21.0764669,9.21884004 C21.0514981,9.24382335 21.0514981,9.26880665 21.0265293,9.29378996 C20.7768414,9.69352286 20.5021848,10.0682725 20.2025593,10.4680054 C19.2827378,11.6644686 16.9651529,13.8851415 13.2498048,17.1300242 C12.6840846,17.6241086 11.840139,17.6236021 11.2750122,17.128839 L11.2750122,17.128839 L10.8985042,16.7983549 C7.4353467,13.7506134 5.13047192,11.4966108 3.98387983,10.036347 L6.71606445,10.0366771 L6.76643426,10.0349906 C7.03343814,10.0170771 7.27235033,9.85766648 7.39051514,9.61472628 L7.39051514,9.61472628 L8.49491211,7.34402187 L11.2739266,12.1267965 L11.2999086,12.1684711 C11.5970979,12.6134 12.262568,12.6129549 12.5553569,12.1523564 L12.5553569,12.1523564 L13.9001621,10.0365219 L16.2508545,10.0366771 L16.2949227,10.0354039 C16.6886245,10.0125923 17.0008545,9.68609731 17.0008545,9.28667709 C17.0008545,8.87246353 16.6650681,8.53667709 16.2508545,8.53667709 L16.2508545,8.53667709 L13.4882812,8.53667709 L13.4372319,8.53841208 C13.2003398,8.55454196 12.9837932,8.68225213 12.8553365,8.88433283 L12.8553365,8.88433283 L11.9511621,10.3065219 L9.08476483,5.37322765 L9.05932969,5.33234115 C8.74253658,4.85607061 8.01729977,4.89672856 7.76182861,5.42196291 L7.76182861,5.42196291 L6.24666211,8.53652187 L3.00588156,8.5368279 C2.98214933,8.49638443 2.96563771,8.45241667 2.94912609,8.41937424 C2.9241573,8.39439093 2.89918851,8.34442432 2.87421973,8.29445771 C2.84925094,8.24449109 2.82428215,8.16954117 2.79931336,8.11957456 C2.79931336,8.06960795 2.77434457,8.01964134 2.74937578,7.96967472 C2.72440699,7.91970811 2.6994382,7.84475819 2.67446941,7.79479158 L2.67446941,7.79479158 L2.62453184,7.64489174 C2.62453184,7.56994182 2.59956305,7.51997521 2.57459426,7.4700086 C2.54962547,7.42004198 2.54962547,7.39505868 2.52465668,7.32010876 C2.49968789,7.24515884 2.49968789,7.19519223 2.44975031,7.19519223 C2.42478152,7.12024231 2.42478152,7.07027569 2.39981273,7.02030908 C2.39981273,6.97034247 2.37484395,6.92037586 2.37484395,6.87040924 C2.37484395,6.82044263 2.34987516,6.74549271 2.34987516,6.6955261 C2.34987516,6.64555949 2.32490637,6.59559287 2.32490637,6.54562626 C2.32490637,6.47067634 2.29993758,6.42070973 2.29993758,6.34575981 C2.27496879,6.2957932 2.27496879,6.24582659 2.27496879,6.19585997 C2.25,6.12091005 2.25,6.04596013 2.25,5.97101022 L2.25,5.49632739 C2.25,2.39839741 4.67197253,-3.00204306e-13 7.74313358,-3.00204306e-13 C9.49094881,-3.00204306e-13 11.1388889,0.824449109 12.2375156,2.07361443 C13.3361423,0.799465803 14.9840824,-3.00204306e-13 16.7318976,-3.00204306e-13 Z"></path>
|
||||
<path d="M7.76182861,5.42196291 C8.01729977,4.89672856 8.74253658,4.85607061 9.05932969,5.33234115 L9.08476483,5.37322765 L11.9511621,10.3065219 L12.8553365,8.88433283 C12.9837932,8.68225213 13.2003398,8.55454196 13.4372319,8.53841208 L13.4882812,8.53667709 L16.2508545,8.53667709 C16.6650681,8.53667709 17.0008545,8.87246353 17.0008545,9.28667709 C17.0008545,9.68609731 16.6886245,10.0125923 16.2949227,10.0354039 L16.2508545,10.0366771 L13.9001621,10.0365219 L12.5553569,12.1523564 C12.262568,12.6129549 11.5970979,12.6134 11.2999086,12.1684711 L11.2739266,12.1267965 L8.49491211,7.34402187 L7.39051514,9.61472628 C7.27235033,9.85766648 7.03343814,10.0170771 6.76643426,10.0349906 L6.71606445,10.0366771 L0.75,10.0366771 C0.335786438,10.0366771 -5.5067062e-14,9.70089066 -5.5067062e-14,9.28667709 C-5.5067062e-14,8.88725687 0.312229991,8.56076187 0.705931803,8.53795027 L0.75,8.53667709 L6.24666211,8.53652187 L7.76182861,5.42196291 Z" fill-opacity=".6"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Public/ic_public_home_filled</title>
|
||||
<defs>
|
||||
<path d="M12.5548977,4.55117487 L12.6529233,4.62758192 L12.6883166,4.65995815 L21,12.5839983 L21,19.25 C21,20.8476809 19.75108,22.1536609 18.1762728,22.2449073 L18,22.25 L6,22.25 C4.40231912,22.25 3.09633912,21.00108 3.00509269,19.4262728 L3,19.25 L3,12.5839983 L11.3117958,4.65995815 C11.6576006,4.33188693 12.1809818,4.29723756 12.5548977,4.55117487 Z M12,13.5 C10.4023191,13.5 9.09633912,14.74892 9.00509269,16.3237272 L9,16.5 L9,20.25 L15,20.25 L15,16.5 C15,14.8431458 13.6568542,13.5 12,13.5 Z M9.39893803,2.34618127 C10.9454248,1.02063659 13.259436,1.06634502 14.75299,2.48330658 L14.75299,2.48330658 L22.4382087,9.7744115 L22.5181827,9.85955793 C22.8392264,10.243763 22.8283766,10.8160918 22.475412,11.1881356 C22.0952963,11.5887982 21.4623504,11.6054546 21.0616879,11.2253389 L21.0616879,11.2253389 L13.3764692,3.93423398 L13.2633454,3.83462897 C12.4905831,3.20379726 11.3583509,3.23699892 10.6234274,3.93423398 L10.6234274,3.93423398 L2.93820874,11.2253389 L2.84897391,11.3007239 C2.44841532,11.6011159 1.87744922,11.5601794 1.52448461,11.1881356 C1.14436887,10.7874731 1.16102534,10.1545272 1.56168788,9.7744115 L1.56168788,9.7744115 L9.24690658,2.48330658 Z" id="path-1"></path>
|
||||
</defs>
|
||||
<g id="Public/ic_public_home_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<use id="形状结合" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 502 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"src": [
|
||||
"pages/Index",
|
||||
"pages/Second"
|
||||
"src" : [ "pages/Index",
|
||||
"pages/Hello",
|
||||
"pages/Text"
|
||||
]
|
||||
}
|
||||