@mpxjs/webpack-plugin 2.10.6-beta.6 → 2.10.6-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +5 -2
- package/lib/runtime/components/react/context.ts +8 -3
- package/lib/runtime/components/react/dist/AsyncSuspense.d.ts +16 -0
- package/lib/runtime/components/react/dist/context.d.ts +74 -0
- package/lib/runtime/components/react/dist/event.config.d.ts +7 -0
- package/lib/runtime/components/react/dist/getInnerListeners.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-button.d.ts +68 -0
- package/lib/runtime/components/react/dist/mpx-canvas/Bus.d.ts +23 -0
- package/lib/runtime/components/react/dist/mpx-canvas/CanvasGradient.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-canvas/CanvasRenderingContext2D.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-canvas/Image.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-canvas/ImageData.d.ts +8 -0
- package/lib/runtime/components/react/dist/mpx-canvas/constructorsRegistry.d.ts +10 -0
- package/lib/runtime/components/react/dist/mpx-canvas/html.d.ts +2 -0
- package/lib/runtime/components/react/dist/mpx-canvas/index.d.ts +32 -0
- package/lib/runtime/components/react/dist/mpx-canvas/utils.d.ts +52 -0
- package/lib/runtime/components/react/dist/mpx-checkbox-group.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-checkbox.d.ts +32 -0
- package/lib/runtime/components/react/dist/mpx-form.d.ts +27 -0
- package/lib/runtime/components/react/dist/mpx-icon/index.d.ts +18 -0
- package/lib/runtime/components/react/dist/mpx-image.d.ts +21 -0
- package/lib/runtime/components/react/dist/mpx-inline-text.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-input.d.ts +49 -0
- package/lib/runtime/components/react/dist/mpx-input.jsx +30 -9
- package/lib/runtime/components/react/dist/mpx-keyboard-avoiding-view.d.ts +13 -0
- package/lib/runtime/components/react/dist/mpx-keyboard-avoiding-view.jsx +63 -28
- package/lib/runtime/components/react/dist/mpx-label.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-movable-area.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-movable-view.d.ts +61 -0
- package/lib/runtime/components/react/dist/mpx-navigator.d.ts +9 -0
- package/lib/runtime/components/react/dist/mpx-picker/date.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/dateData.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-picker/index.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/multiSelector.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/region.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/regionData.d.ts +2 -0
- package/lib/runtime/components/react/dist/mpx-picker/selector.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/time.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/type.d.ts +106 -0
- package/lib/runtime/components/react/dist/mpx-picker-view/index.d.ts +31 -0
- package/lib/runtime/components/react/dist/mpx-picker-view/pickerVIewContext.d.ts +8 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/index.d.ts +22 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewColumnItem.d.ts +14 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewFaces.d.ts +16 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewIndicator.d.ts +12 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewMask.d.ts +11 -0
- package/lib/runtime/components/react/dist/mpx-popup/index.d.ts +22 -0
- package/lib/runtime/components/react/dist/mpx-popup/popupBase.d.ts +16 -0
- package/lib/runtime/components/react/dist/mpx-portal/index.d.ts +15 -0
- package/lib/runtime/components/react/dist/mpx-portal/portal-host.d.ts +29 -0
- package/lib/runtime/components/react/dist/mpx-portal/portal-manager.d.ts +9 -0
- package/lib/runtime/components/react/dist/mpx-radio-group.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-radio.d.ts +26 -0
- package/lib/runtime/components/react/dist/mpx-rich-text/html.d.ts +1 -0
- package/lib/runtime/components/react/dist/mpx-rich-text/index.d.ts +24 -0
- package/lib/runtime/components/react/dist/mpx-root-portal.d.ts +14 -0
- package/lib/runtime/components/react/dist/mpx-scroll-view.d.ts +53 -0
- package/lib/runtime/components/react/dist/mpx-simple-text.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-simple-view.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-sticky-header.d.ts +17 -0
- package/lib/runtime/components/react/dist/mpx-sticky-section.d.ts +15 -0
- package/lib/runtime/components/react/dist/mpx-swiper-item.d.ts +18 -0
- package/lib/runtime/components/react/dist/mpx-swiper.d.ts +53 -0
- package/lib/runtime/components/react/dist/mpx-switch.d.ts +26 -0
- package/lib/runtime/components/react/dist/mpx-text.d.ts +21 -0
- package/lib/runtime/components/react/dist/mpx-textarea.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-video.d.ts +101 -0
- package/lib/runtime/components/react/dist/mpx-view.d.ts +34 -0
- package/lib/runtime/components/react/dist/mpx-web-view.d.ts +22 -0
- package/lib/runtime/components/react/dist/nav.d.ts +11 -0
- package/lib/runtime/components/react/dist/nav.jsx +189 -0
- package/lib/runtime/components/react/dist/parser.d.ts +39 -0
- package/lib/runtime/components/react/dist/useAnimationHooks.d.ts +32 -0
- package/lib/runtime/components/react/dist/useNodesRef.d.ts +11 -0
- package/lib/runtime/components/react/dist/utils.d.ts +121 -0
- package/lib/runtime/components/react/mpx-input.tsx +36 -16
- package/lib/runtime/components/react/mpx-keyboard-avoiding-view.tsx +68 -28
- package/lib/runtime/components/react/nav.tsx +219 -0
- package/lib/runtime/components/react/types/common.d.ts +19 -0
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -1413,9 +1413,12 @@ class MpxWebpackPlugin {
|
|
|
1413
1413
|
// 删除root query
|
|
1414
1414
|
if (queryObj.root) request = addQuery(request, {}, false, ['root'])
|
|
1415
1415
|
// wx、ali和web平台支持require.async,其余平台使用CommonJsAsyncDependency进行模拟抹平
|
|
1416
|
-
if (mpx.
|
|
1416
|
+
if (isWeb(mpx.mode) || isReact(mpx.mode)) {
|
|
1417
|
+
// web 和 react 平台支持分包名转换,如果转换tarRoot为空,则降级到主包
|
|
1418
|
+
tarRoot = transAsyncSubNameRules(mpx.asyncSubpackageNameMap, tarRoot)
|
|
1419
|
+
}
|
|
1420
|
+
if (mpx.supportRequireAsync && tarRoot) {
|
|
1417
1421
|
if (isWeb(mpx.mode) || isReact(mpx.mode)) {
|
|
1418
|
-
tarRoot = transAsyncSubNameRules(mpx.asyncSubpackageNameMap, tarRoot)
|
|
1419
1422
|
const depBlock = new AsyncDependenciesBlock(
|
|
1420
1423
|
{
|
|
1421
1424
|
name: tarRoot + '/index'
|
|
@@ -6,9 +6,14 @@ export type LabelContextValue = MutableRefObject<{
|
|
|
6
6
|
triggerChange: (evt: NativeSyntheticEvent<TouchEvent>) => void
|
|
7
7
|
}>
|
|
8
8
|
|
|
9
|
-
export type KeyboardAvoidContextValue = MutableRefObject<
|
|
10
|
-
|
|
11
|
-
>
|
|
9
|
+
export type KeyboardAvoidContextValue = MutableRefObject<{
|
|
10
|
+
cursorSpacing: number
|
|
11
|
+
ref: MutableRefObject<any>
|
|
12
|
+
adjustPosition: boolean
|
|
13
|
+
keyboardHeight?: number
|
|
14
|
+
onKeyboardShow?: () => void
|
|
15
|
+
blurCallbacks: (() => void)[]
|
|
16
|
+
} | null>
|
|
12
17
|
|
|
13
18
|
export interface GroupValue {
|
|
14
19
|
[key: string]: { checked: boolean; setValue: Dispatch<SetStateAction<boolean>> }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
interface AsyncModule {
|
|
3
|
+
__esModule: boolean;
|
|
4
|
+
default: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
interface AsyncSuspenseProps {
|
|
7
|
+
type: 'component' | 'page';
|
|
8
|
+
chunkName: string;
|
|
9
|
+
moduleId: string;
|
|
10
|
+
innerProps: any;
|
|
11
|
+
loading: ComponentType<unknown>;
|
|
12
|
+
fallback: ComponentType<unknown>;
|
|
13
|
+
getChildren: () => Promise<AsyncModule>;
|
|
14
|
+
}
|
|
15
|
+
declare const AsyncSuspense: React.FC<AsyncSuspenseProps>;
|
|
16
|
+
export default AsyncSuspense;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Dispatch, MutableRefObject, SetStateAction } from 'react';
|
|
2
|
+
import { NativeSyntheticEvent, Animated } from 'react-native';
|
|
3
|
+
export type LabelContextValue = MutableRefObject<{
|
|
4
|
+
triggerChange: (evt: NativeSyntheticEvent<TouchEvent>) => void;
|
|
5
|
+
}>;
|
|
6
|
+
export type KeyboardAvoidContextValue = MutableRefObject<{
|
|
7
|
+
cursorSpacing: number;
|
|
8
|
+
ref: MutableRefObject<any>;
|
|
9
|
+
adjustPosition: boolean;
|
|
10
|
+
keyboardHeight?: number;
|
|
11
|
+
onKeyboardShow?: () => void;
|
|
12
|
+
blurCallbacks: (() => void)[];
|
|
13
|
+
} | null>;
|
|
14
|
+
export interface GroupValue {
|
|
15
|
+
[key: string]: {
|
|
16
|
+
checked: boolean;
|
|
17
|
+
setValue: Dispatch<SetStateAction<boolean>>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface GroupContextValue {
|
|
21
|
+
groupValue: GroupValue;
|
|
22
|
+
notifyChange: (evt: NativeSyntheticEvent<TouchEvent>) => void;
|
|
23
|
+
}
|
|
24
|
+
export interface FormFieldValue {
|
|
25
|
+
getValue: () => any;
|
|
26
|
+
resetValue: ({ newVal, type }: {
|
|
27
|
+
newVal?: any;
|
|
28
|
+
type?: string;
|
|
29
|
+
}) => void;
|
|
30
|
+
}
|
|
31
|
+
export interface FormContextValue {
|
|
32
|
+
formValuesMap: Map<string, FormFieldValue>;
|
|
33
|
+
submit: () => void;
|
|
34
|
+
reset: () => void;
|
|
35
|
+
}
|
|
36
|
+
export interface IntersectionObserver {
|
|
37
|
+
[key: number]: {
|
|
38
|
+
throttleMeasure: () => void;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface PortalContextValue {
|
|
42
|
+
mount: (children: React.ReactNode, key?: number | null, id?: number | null) => number | undefined;
|
|
43
|
+
update: (key: number, children: React.ReactNode) => void;
|
|
44
|
+
unmount: (key: number) => void;
|
|
45
|
+
}
|
|
46
|
+
export interface ScrollViewContextValue {
|
|
47
|
+
gestureRef: React.RefObject<any> | null;
|
|
48
|
+
scrollOffset: Animated.Value;
|
|
49
|
+
}
|
|
50
|
+
export interface RouteContextValue {
|
|
51
|
+
pageId: number;
|
|
52
|
+
navigation: Record<string, any>;
|
|
53
|
+
}
|
|
54
|
+
export interface StickyContextValue {
|
|
55
|
+
registerStickyHeader: Function;
|
|
56
|
+
unregisterStickyHeader: Function;
|
|
57
|
+
}
|
|
58
|
+
export declare const MovableAreaContext: import("react").Context<{
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
}>;
|
|
62
|
+
export declare const FormContext: import("react").Context<FormContextValue | null>;
|
|
63
|
+
export declare const CheckboxGroupContext: import("react").Context<GroupContextValue | null>;
|
|
64
|
+
export declare const RadioGroupContext: import("react").Context<GroupContextValue | null>;
|
|
65
|
+
export declare const LabelContext: import("react").Context<LabelContextValue | null>;
|
|
66
|
+
export declare const PickerContext: import("react").Context<null>;
|
|
67
|
+
export declare const VarContext: import("react").Context<{}>;
|
|
68
|
+
export declare const IntersectionObserverContext: import("react").Context<IntersectionObserver | null>;
|
|
69
|
+
export declare const RouteContext: import("react").Context<RouteContextValue | null>;
|
|
70
|
+
export declare const SwiperContext: import("react").Context<{}>;
|
|
71
|
+
export declare const KeyboardAvoidContext: import("react").Context<KeyboardAvoidContextValue | null>;
|
|
72
|
+
export declare const ScrollViewContext: import("react").Context<ScrollViewContextValue>;
|
|
73
|
+
export declare const PortalContext: import("react").Context<PortalContextValue>;
|
|
74
|
+
export declare const StickyContext: import("react").Context<StickyContextValue>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Props, RawConfig, RemoveProps, LayoutRef, ExtendedNativeTouchEvent } from './types/getInnerListeners';
|
|
2
|
+
export declare const getCustomEvent: (type: string | undefined, oe: any, { detail, layoutRef }: {
|
|
3
|
+
detail?: Record<string, unknown> | undefined;
|
|
4
|
+
layoutRef?: LayoutRef | undefined;
|
|
5
|
+
}, props?: Props) => any;
|
|
6
|
+
declare const useInnerProps: (props?: Props, userRemoveProps?: RemoveProps, rawConfig?: RawConfig) => Record<string, (e: ExtendedNativeTouchEvent) => void> & Omit<Props, string>;
|
|
7
|
+
export default useInnerProps;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✔ size
|
|
3
|
+
* ✔ type
|
|
4
|
+
* ✔ plain
|
|
5
|
+
* ✔ disabled
|
|
6
|
+
* ✔ loading
|
|
7
|
+
* ✔ form-type
|
|
8
|
+
* - open-type: Partially. Only support `share`、`getUserInfo`
|
|
9
|
+
* ✔ hover-class: Convert hoverClass to hoverStyle.
|
|
10
|
+
* ✔ hover-style
|
|
11
|
+
* ✘ hover-stop-propagation
|
|
12
|
+
* ✔ hover-start-time
|
|
13
|
+
* ✔ hover-stay-time
|
|
14
|
+
* ✘ lang
|
|
15
|
+
* ✘ session-from
|
|
16
|
+
* ✘ send-message-title
|
|
17
|
+
* ✘ send-message-path
|
|
18
|
+
* ✘ send-message-img
|
|
19
|
+
* ✘ app-parameter
|
|
20
|
+
* ✘ show-message-card
|
|
21
|
+
* ✘ phone-number-no-quota-toast
|
|
22
|
+
* ✘ bindgetuserinfo
|
|
23
|
+
* ✘ bindcontact
|
|
24
|
+
* ✘ createliveactivity
|
|
25
|
+
* ✘ bindgetphonenumber
|
|
26
|
+
* ✘ bindgetphonenumber
|
|
27
|
+
* ✘ bindgetrealtimephonenumber
|
|
28
|
+
* ✘ binderror
|
|
29
|
+
* ✘ bindopensetting
|
|
30
|
+
* ✘ bindlaunchapp
|
|
31
|
+
* ✘ bindlaunchapp
|
|
32
|
+
* ✘ bindchooseavatar
|
|
33
|
+
* ✘ bindchooseavatar
|
|
34
|
+
* ✘ bindagreeprivacyauthorization
|
|
35
|
+
* ✔ bindtap
|
|
36
|
+
*/
|
|
37
|
+
import { ReactNode } from 'react';
|
|
38
|
+
import { View, ViewStyle, TextStyle, NativeSyntheticEvent } from 'react-native';
|
|
39
|
+
import { HandlerRef } from './useNodesRef';
|
|
40
|
+
import type { ExtendedViewStyle } from './types/common';
|
|
41
|
+
export type Type = 'default' | 'primary' | 'warn';
|
|
42
|
+
export type OpenType = 'share' | 'getUserInfo';
|
|
43
|
+
export type OpenTypeEvent = 'onShareAppMessage' | 'onUserInfo';
|
|
44
|
+
export interface ButtonProps {
|
|
45
|
+
size?: string;
|
|
46
|
+
type?: Type;
|
|
47
|
+
plain?: boolean;
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
'hover-class'?: string;
|
|
51
|
+
'hover-style'?: ExtendedViewStyle;
|
|
52
|
+
'hover-start-time'?: number;
|
|
53
|
+
'hover-stay-time'?: number;
|
|
54
|
+
'open-type'?: OpenType;
|
|
55
|
+
'form-type'?: 'submit' | 'reset';
|
|
56
|
+
'enable-offset'?: boolean;
|
|
57
|
+
'enable-var'?: boolean;
|
|
58
|
+
'external-var-context'?: Record<string, any>;
|
|
59
|
+
'parent-font-size'?: number;
|
|
60
|
+
'parent-width'?: number;
|
|
61
|
+
'parent-height'?: number;
|
|
62
|
+
style?: ViewStyle & TextStyle & Record<string, any>;
|
|
63
|
+
children: ReactNode;
|
|
64
|
+
bindgetuserinfo?: (userInfo: any) => void;
|
|
65
|
+
bindtap?: (evt: NativeSyntheticEvent<TouchEvent> | unknown) => void;
|
|
66
|
+
}
|
|
67
|
+
declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HandlerRef<View, ButtonProps>>>;
|
|
68
|
+
export default Button;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
interface Message {
|
|
3
|
+
id?: string;
|
|
4
|
+
type: string;
|
|
5
|
+
payload?: any;
|
|
6
|
+
}
|
|
7
|
+
export default class Bus {
|
|
8
|
+
_paused: Boolean;
|
|
9
|
+
_messageListeners: {
|
|
10
|
+
[key: string]: (message: Message) => void;
|
|
11
|
+
};
|
|
12
|
+
_queue: Message[];
|
|
13
|
+
_send: (message: Message | Message[]) => void;
|
|
14
|
+
_timeoutId: NodeJS.Timeout | null;
|
|
15
|
+
constructor(send: (message: Message | Message[]) => void);
|
|
16
|
+
post(message: Message): Promise<any>;
|
|
17
|
+
handle(message: Message): void;
|
|
18
|
+
pause(): void;
|
|
19
|
+
resume(): void;
|
|
20
|
+
startBatching(): void;
|
|
21
|
+
clearBatchingTimeout(): void;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { WebviewMessage, WEBVIEW_TARGET, CanvasInstance } from './utils';
|
|
2
|
+
export declare class Image {
|
|
3
|
+
[WEBVIEW_TARGET]: string;
|
|
4
|
+
canvas: any;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
private _loadListener;
|
|
8
|
+
private _errorListener;
|
|
9
|
+
private _onload;
|
|
10
|
+
private _onerror;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
constructor(canvas: CanvasInstance, width?: number, height?: number, noOnConstruction?: boolean);
|
|
13
|
+
postMessage(message: WebviewMessage): any;
|
|
14
|
+
addEventListener(type: 'load' | 'error', callbackFn: Function): any;
|
|
15
|
+
set onload(callback: ((...args: any[]) => void));
|
|
16
|
+
get onload(): ((...args: any[]) => void);
|
|
17
|
+
set onerror(callback: ((...args: any[]) => void));
|
|
18
|
+
get onerror(): ((...args: any[]) => void);
|
|
19
|
+
}
|
|
20
|
+
export declare function createImage(canvas: CanvasInstance, width?: number, height?: number): Image;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebviewMessage, CanvasInstance } from './utils';
|
|
2
|
+
export default class ImageData {
|
|
3
|
+
canvas: CanvasInstance;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
constructor(canvas: CanvasInstance, dataArray: number[], width: number, height: number, noOnConstruction?: boolean);
|
|
6
|
+
postMessage: (message: WebviewMessage) => Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createImageData(canvas: CanvasInstance, dataArray: number[], width: number, height: number): ImageData;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WebviewConstructor } from './utils';
|
|
2
|
+
export declare enum ConstructorType {
|
|
3
|
+
Image = "Image",
|
|
4
|
+
CanvasGradient = "CanvasGradient",
|
|
5
|
+
ImageData = "ImageData"
|
|
6
|
+
}
|
|
7
|
+
export declare function useConstructorsRegistry(): {
|
|
8
|
+
register: (registerWebviewConstructor: Function) => void;
|
|
9
|
+
getConstructor: (type: ConstructorType) => WebviewConstructor | undefined;
|
|
10
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: "<html><head>\n <meta content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scaleable=no\" name=\"viewport\">\n <style>\n html {\n -ms-content-zooming: none;\n -ms-touch-action: pan-x pan-y;\n }\n body {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n }\n * {\n user-select: none;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n }\n </style>\n </head>\n <body>\n <script>\n var scale = function (ratio) {\n return function (item) {\n if (typeof item === \"number\") {\n return item * ratio;\n }\n return item;\n };\n};\nfunction autoScaleCanvas(canvas) {\n var ctx = canvas.getContext(\"2d\");\n var ratio = window.devicePixelRatio || 1;\n if (ratio !== 1) {\n canvas.width *= ratio;\n canvas.height *= ratio;\n ctx.scale(ratio, ratio);\n ctx.isPointInPath = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return CanvasRenderingContext2D.prototype.isPointInPath.apply(ctx, args.map(scale(ratio)));\n };\n }\n return canvas;\n}\nwindow.autoScaleCanvas = autoScaleCanvas;\n</script>\n<script>\n\nvar WEBVIEW_TARGET = '@@WEBVIEW_TARGET';\n\nvar ID = function () {\n return Math.random().toString(32).slice(2);\n};\n\nvar flattenObjectCopyValue = function (flatObj, srcObj, key) {\n var value = srcObj[key];\n if (typeof value === 'function') {\n return;\n }\n if (typeof value === 'object' && value instanceof Node) {\n return;\n }\n flatObj[key] = flattenObject(value);\n};\n\nvar flattenObject = function (object) {\n if (typeof object !== 'object' || object === null) {\n return object;\n }\n // Handle TypedArray\n if (object instanceof Uint8ClampedArray) {\n return Array.from(object);\n }\n var flatObject = {};\n for (var key in object) {\n flattenObjectCopyValue(flatObject, object, key);\n }\n for (var key in Object.getOwnPropertyNames(object)) {\n flattenObjectCopyValue(flatObject, object, key);\n }\n return flatObject;\n};\n\nvar AutoScaledCanvas = function (element) {\n this.element = element;\n};\n\nAutoScaledCanvas.prototype.toDataURL = function () {\n return this.element.toDataURL.apply(this.element, arguments);\n};\n\nAutoScaledCanvas.prototype.autoScale = function () {\n if (this.savedHeight !== undefined) {\n this.element.height = this.savedHeight;\n }\n if (this.savedWidth !== undefined) {\n this.element.width = this.savedWidth;\n }\n window.autoScaleCanvas(this.element);\n};\n\nObject.defineProperty(AutoScaledCanvas.prototype, 'width', {\n get: function () {\n return this.element.width;\n },\n set: function (value) {\n this.savedWidth = value;\n this.autoScale();\n return value;\n },\n});\n\nObject.defineProperty(AutoScaledCanvas.prototype, 'height', {\n get: function () {\n return this.element.height;\n },\n set: function (value) {\n this.savedHeight = value;\n this.autoScale();\n return value;\n },\n});\nvar toMessage = function (result) {\n if (result instanceof Blob) {\n return {\n type: 'blob',\n payload: btoa(result),\n meta: {},\n };\n }\n if (result instanceof Object) {\n if (!result[WEBVIEW_TARGET]) {\n var id = ID();\n result[WEBVIEW_TARGET] = id;\n targets[id] = result;\n }\n return {\n type: 'json',\n payload: flattenObject(result),\n args: toArgs(flattenObject(result)),\n meta: {\n target: result[WEBVIEW_TARGET],\n constructor: result.__constructorName__ || result.constructor.name,\n },\n };\n }\n return {\n type: 'json',\n payload: typeof result === 'string' ? result : JSON.stringify(result),\n meta: {},\n };\n};\nvar toArgs = function (result) {\n var args = [];\n for (var key in result) {\n if (result[key] !== undefined && key !== '@@WEBVIEW_TARGET') {\n args.push(result[key]);\n }\n }\n return args;\n};\n\nvar createObjectsFromArgs = function (args) {\n for (var index = 0; index < args.length; index += 1) {\n var currentArg = args[index];\n if (currentArg && currentArg.className !== undefined) {\n var className = currentArg.className, classArgs = currentArg.classArgs;\n // new ImageData,第一个参数需要是 Uint8ClampedArray\n var object = new (Function.prototype.bind.apply(constructors[className], [null].concat(classArgs)))();\n args[index] = object;\n }\n }\n return args;\n};\n\nvar canvas = document.createElement('canvas');\ncanvas.style.width = '100%';\ncanvas.style.height = '100%';\nvar autoScaledCanvas = new AutoScaledCanvas(canvas);\n\nvar targets = {\n canvas: autoScaledCanvas,\n context2D: canvas.getContext('2d'),\n};\n\nvar constructors = {\n CanvasGradient: CanvasGradient,\n Image: Image,\n ImageData: ImageData,\n Uint8ClampedArray: Uint8ClampedArray,\n};\n\nImage.bind =\n Image.bind ||\n function () {\n return Image;\n };\n\nImageData.bind =\n ImageData.bind ||\n function () {\n return ImageData;\n };\nUint8ClampedArray.bind =\n Uint8ClampedArray.bind ||\n function () {\n return Uint8ClampedArray;\n };\n\nvar populateRefs = function (arg) {\n if (arg && arg.__ref__) {\n return targets[arg.__ref__];\n }\n return arg;\n};\ndocument.body.appendChild(canvas);\n\nvar mergeObjects = function (target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nfunction handleMessage(message) {\n var id = message.id,\n type = message.type,\n payload = message.payload;\n\n switch (type) {\n case 'exec': {\n var target = payload.target,\n method = payload.method,\n args = payload.args;\n var result = targets[target][method].apply(targets[target], args.map(populateRefs));\n var msg = toMessage(result);\n\n if (typeof result === 'object' && !msg.meta.constructor) {\n for (var constructorName in constructors) {\n if (result instanceof constructors[constructorName]) {\n msg.meta.constructor = constructorName;\n }\n }\n }\n window.ReactNativeWebView.postMessage(JSON.stringify(mergeObjects({ id: id }, msg)));\n break;\n }\n case 'set': {\n var target = payload.target,\n key = payload.key,\n value = payload.value;\n targets[target][key] = populateRefs(value);\n break;\n }\n case 'construct': {\n var constructor = payload.constructor,\n target = payload.id,\n args = payload.args || [];\n var newArgs = createObjectsFromArgs(args);\n var object;\n try {\n object = new (Function.prototype.bind.apply(constructors[constructor], [null].concat(newArgs)))();\n }\n catch (error) {\n throw new Error('Error while constructing '.concat(constructor, ' ').concat(error.message));\n }\n object.__constructorName__ = constructor;\n var msg = toMessage({});\n targets[target] = object;\n window.ReactNativeWebView.postMessage(JSON.stringify(mergeObjects({ id: id }, msg)));\n break;\n }\n case 'listen': {\n var types = payload.types,\n target = payload.target;\n for (var i = 0; i < types.length; i++) {\n var eventType = types[i];\n targets[target].addEventListener(eventType, function (e) {\n const message = toMessage({\n type: 'event',\n payload: {\n type: e.type,\n target: mergeObjects(flattenObject(targets[target]), {\n [WEBVIEW_TARGET]: target,\n }),\n },\n });\n window.ReactNativeWebView.postMessage(\n JSON.stringify(mergeObjects({ id: id }, message))\n );\n });\n }\n break;\n}\n }\n}\nvar handleError = function (err, message) {\n window.ReactNativeWebView.postMessage(JSON.stringify({\n id: message.id,\n type: 'error',\n payload: {\n message: err.message,\n stack: err.stack,\n },\n }));\n document.removeEventListener('message', handleIncomingMessage);\n};\n\nfunction handleIncomingMessage(data) {\n if (Array.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n try {\n handleMessage(data[i]);\n } catch (err) {\n handleError(err, data[i]);\n }\n }\n } else {\n try {\n handleMessage(data);\n } catch (err) {\n handleError(err, data);\n }\n }\n}\n\nwindow.mpxWebviewMessageCallback = handleIncomingMessage\n</script>\n \n\n</body></html>";
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✘ type
|
|
3
|
+
* ✘ canvas-id
|
|
4
|
+
* ✘ disable-scroll
|
|
5
|
+
* ✔ bindtouchstart
|
|
6
|
+
* ✔ bindtouchmove
|
|
7
|
+
* ✔ bindtouchend
|
|
8
|
+
* ✔ bindtouchcancel
|
|
9
|
+
* ✔ bindlongtap
|
|
10
|
+
* ✔ binderror
|
|
11
|
+
*/
|
|
12
|
+
import { TouchEvent } from 'react';
|
|
13
|
+
import { View, NativeSyntheticEvent } from 'react-native';
|
|
14
|
+
import { HandlerRef } from '../useNodesRef';
|
|
15
|
+
import './CanvasGradient';
|
|
16
|
+
interface CanvasProps {
|
|
17
|
+
style?: Record<string, any>;
|
|
18
|
+
originWhitelist?: Array<string>;
|
|
19
|
+
'enable-var'?: boolean;
|
|
20
|
+
'parent-font-size'?: number;
|
|
21
|
+
'parent-width'?: number;
|
|
22
|
+
'parent-height'?: number;
|
|
23
|
+
'external-var-context'?: Record<string, any>;
|
|
24
|
+
bindtouchstart?: (event: NativeSyntheticEvent<TouchEvent>) => void;
|
|
25
|
+
bindtouchmove?: (event: NativeSyntheticEvent<TouchEvent>) => void;
|
|
26
|
+
bindtouchend?: (event: NativeSyntheticEvent<TouchEvent>) => void;
|
|
27
|
+
bindtouchcancel?: (event: NativeSyntheticEvent<TouchEvent>) => void;
|
|
28
|
+
bindlongtap?: (event: NativeSyntheticEvent<TouchEvent>) => void;
|
|
29
|
+
binderror?: (event: NativeSyntheticEvent<ErrorEvent>) => void;
|
|
30
|
+
}
|
|
31
|
+
declare const _Canvas: import("react").ForwardRefExoticComponent<CanvasProps & import("react").RefAttributes<HandlerRef<CanvasProps & View, CanvasProps>>>;
|
|
32
|
+
export default _Canvas;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { WebView } from 'react-native-webview';
|
|
3
|
+
import Bus from './Bus';
|
|
4
|
+
export declare const WEBVIEW_TARGET = "@@WEBVIEW_TARGET";
|
|
5
|
+
export declare const constructors: Record<string, any>;
|
|
6
|
+
export declare const ID: () => string;
|
|
7
|
+
export interface Instance {
|
|
8
|
+
postMessage: (...args: any[]) => void;
|
|
9
|
+
[WEBVIEW_TARGET]?: string;
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
export interface WebviewConstructor {
|
|
13
|
+
new (...args: any[]): Instance;
|
|
14
|
+
constructLocally?: (...args: unknown[]) => Instance;
|
|
15
|
+
}
|
|
16
|
+
export interface WebviewMessage {
|
|
17
|
+
type: 'set' | 'exec' | 'listen' | 'event' | 'construct';
|
|
18
|
+
payload: {
|
|
19
|
+
target?: string | {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
};
|
|
22
|
+
key?: string;
|
|
23
|
+
value?: any;
|
|
24
|
+
method?: string;
|
|
25
|
+
args?: any[];
|
|
26
|
+
types?: string[];
|
|
27
|
+
type?: string;
|
|
28
|
+
constructor?: string | Function;
|
|
29
|
+
id?: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface CanvasInstance {
|
|
33
|
+
webview: WebView | null;
|
|
34
|
+
bus: Bus | null;
|
|
35
|
+
context2D: CanvasRenderingContext2D;
|
|
36
|
+
getContext: (contextType: string) => CanvasRenderingContext2D | null;
|
|
37
|
+
createImage: (width?: number, height?: number) => any;
|
|
38
|
+
postMessage: (message: WebviewMessage) => Promise<any>;
|
|
39
|
+
listeners: Array<(payload: any) => void>;
|
|
40
|
+
addMessageListener: (listener: (payload: any) => void) => () => void;
|
|
41
|
+
removeMessageListener: (listener: (payload: any) => void) => void;
|
|
42
|
+
createImageData: (dataArray: number[], width?: number, height?: number) => any;
|
|
43
|
+
}
|
|
44
|
+
export declare const registerWebviewTarget: (instance: Instance, targetName: string) => void;
|
|
45
|
+
export declare const registerWebviewProperties: (instance: Instance, properties: Record<string, any>) => void;
|
|
46
|
+
export declare const registerWebviewMethods: (instance: Instance, methods: string[]) => void;
|
|
47
|
+
export declare const registerWebviewConstructor: (constructor: WebviewConstructor, constructorName: string) => void;
|
|
48
|
+
export declare const useWebviewBinding: ({ targetName, properties, methods }: {
|
|
49
|
+
targetName: string;
|
|
50
|
+
properties?: Record<string, any> | undefined;
|
|
51
|
+
methods?: string[] | undefined;
|
|
52
|
+
}) => import("react").MutableRefObject<{}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✔ bindchange
|
|
3
|
+
*/
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
import { View, NativeSyntheticEvent, ViewStyle } from 'react-native';
|
|
6
|
+
import { HandlerRef } from './useNodesRef';
|
|
7
|
+
export interface CheckboxGroupProps {
|
|
8
|
+
name: string;
|
|
9
|
+
style?: ViewStyle & Record<string, any>;
|
|
10
|
+
'enable-offset'?: boolean;
|
|
11
|
+
'enable-var'?: boolean;
|
|
12
|
+
'external-var-context'?: Record<string, any>;
|
|
13
|
+
'parent-font-size'?: number;
|
|
14
|
+
'parent-width'?: number;
|
|
15
|
+
'parent-height'?: number;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
bindchange?: (evt: NativeSyntheticEvent<TouchEvent> | unknown) => void;
|
|
18
|
+
}
|
|
19
|
+
declare const CheckboxGroup: import("react").ForwardRefExoticComponent<CheckboxGroupProps & import("react").RefAttributes<HandlerRef<View, CheckboxGroupProps>>>;
|
|
20
|
+
export default CheckboxGroup;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✔ value
|
|
3
|
+
* ✔ disabled
|
|
4
|
+
* ✔ checked
|
|
5
|
+
* ✔ color
|
|
6
|
+
*/
|
|
7
|
+
import { ReactNode } from 'react';
|
|
8
|
+
import { View, ViewStyle, NativeSyntheticEvent } from 'react-native';
|
|
9
|
+
import { HandlerRef } from './useNodesRef';
|
|
10
|
+
interface Selection {
|
|
11
|
+
value?: string;
|
|
12
|
+
checked?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface CheckboxProps extends Selection {
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
color?: string;
|
|
17
|
+
style?: ViewStyle & Record<string, any>;
|
|
18
|
+
groupValue?: Array<string>;
|
|
19
|
+
'enable-offset'?: boolean;
|
|
20
|
+
'enable-var'?: boolean;
|
|
21
|
+
'external-var-context'?: Record<string, any>;
|
|
22
|
+
'parent-font-size'?: number;
|
|
23
|
+
'parent-width'?: number;
|
|
24
|
+
'parent-height'?: number;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
bindtap?: (evt: NativeSyntheticEvent<TouchEvent> | unknown) => void;
|
|
27
|
+
_onChange?: (evt: NativeSyntheticEvent<TouchEvent> | unknown, { checked }: {
|
|
28
|
+
checked: boolean;
|
|
29
|
+
}) => void;
|
|
30
|
+
}
|
|
31
|
+
declare const Checkbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HandlerRef<View, CheckboxProps>>>;
|
|
32
|
+
export default Checkbox;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✘ report-submit
|
|
3
|
+
* ✘ report-submit-timeout
|
|
4
|
+
* ✔ bindsubmit
|
|
5
|
+
* ✔ bindreset
|
|
6
|
+
*/
|
|
7
|
+
import { View } from 'react-native';
|
|
8
|
+
import { ReactNode } from 'react';
|
|
9
|
+
import { HandlerRef } from './useNodesRef';
|
|
10
|
+
interface FormProps {
|
|
11
|
+
style?: Record<string, any>;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
'enable-offset'?: boolean;
|
|
14
|
+
'enable-var'?: boolean;
|
|
15
|
+
'external-var-context'?: Record<string, any>;
|
|
16
|
+
'parent-font-size'?: number;
|
|
17
|
+
'parent-width'?: number;
|
|
18
|
+
'parent-height'?: number;
|
|
19
|
+
bindsubmit?: (evt: {
|
|
20
|
+
detail: {
|
|
21
|
+
value: any;
|
|
22
|
+
};
|
|
23
|
+
}) => void;
|
|
24
|
+
bindreset?: () => void;
|
|
25
|
+
}
|
|
26
|
+
declare const _Form: import("react").ForwardRefExoticComponent<FormProps & import("react").RefAttributes<HandlerRef<View, FormProps>>>;
|
|
27
|
+
export default _Form;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Text, TextStyle } from 'react-native';
|
|
3
|
+
import { HandlerRef } from '../useNodesRef';
|
|
4
|
+
export type IconType = 'success' | 'success_no_circle' | 'info' | 'warn' | 'waiting' | 'cancel' | 'download' | 'search' | 'clear';
|
|
5
|
+
export interface IconProps {
|
|
6
|
+
type: IconType;
|
|
7
|
+
size?: number;
|
|
8
|
+
color?: string;
|
|
9
|
+
style?: TextStyle & Record<string, any>;
|
|
10
|
+
'enable-offset'?: boolean;
|
|
11
|
+
'enable-var'?: boolean;
|
|
12
|
+
'external-var-context'?: Record<string, any>;
|
|
13
|
+
'parent-font-size'?: number;
|
|
14
|
+
'parent-width'?: number;
|
|
15
|
+
'parent-height'?: number;
|
|
16
|
+
}
|
|
17
|
+
declare const Icon: import("react").ForwardRefExoticComponent<IconProps & import("react").RefAttributes<HandlerRef<Text, IconProps>>>;
|
|
18
|
+
export default Icon;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Image as RNImage, ImageStyle, NativeSyntheticEvent, ImageErrorEventData, ImageLoadEventData } from 'react-native';
|
|
3
|
+
import { HandlerRef } from './useNodesRef';
|
|
4
|
+
export type Mode = 'scaleToFill' | 'aspectFit' | 'aspectFill' | 'widthFix' | 'heightFix' | 'top' | 'bottom' | 'center' | 'left' | 'right' | 'top left' | 'top right' | 'bottom left' | 'bottom right';
|
|
5
|
+
export interface ImageProps {
|
|
6
|
+
src?: string;
|
|
7
|
+
mode?: Mode;
|
|
8
|
+
svg?: boolean;
|
|
9
|
+
style?: ImageStyle & Record<string, any>;
|
|
10
|
+
'enable-offset'?: boolean;
|
|
11
|
+
'enable-var'?: boolean;
|
|
12
|
+
'external-var-context'?: Record<string, any>;
|
|
13
|
+
'parent-font-size'?: number;
|
|
14
|
+
'parent-width'?: number;
|
|
15
|
+
'parent-height'?: number;
|
|
16
|
+
'enable-fast-image'?: boolean;
|
|
17
|
+
bindload?: (evt: NativeSyntheticEvent<ImageLoadEventData> | unknown) => void;
|
|
18
|
+
binderror?: (evt: NativeSyntheticEvent<ImageErrorEventData> | unknown) => void;
|
|
19
|
+
}
|
|
20
|
+
declare const Image: import("react").ForwardRefExoticComponent<ImageProps & import("react").RefAttributes<HandlerRef<RNImage, ImageProps>>>;
|
|
21
|
+
export default Image;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { TextInput, TextStyle, ViewStyle, NativeSyntheticEvent, TextInputTextInputEventData, TextInputKeyPressEventData, TextInputContentSizeChangeEventData, FlexStyle, TextInputSelectionChangeEventData, TextInputFocusEventData, TextInputSubmitEditingEventData } from 'react-native';
|
|
3
|
+
import { HandlerRef } from './useNodesRef';
|
|
4
|
+
type InputStyle = Omit<TextStyle & ViewStyle & Pick<FlexStyle, 'minHeight'>, 'borderLeftWidth' | 'borderTopWidth' | 'borderRightWidth' | 'borderBottomWidth' | 'borderTopLeftRadius' | 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius'>;
|
|
5
|
+
type Type = 'text' | 'number' | 'idcard' | 'digit';
|
|
6
|
+
type ConfirmType = 'done' | 'send' | 'search' | 'next' | 'go' | 'return';
|
|
7
|
+
export interface InputProps {
|
|
8
|
+
name?: string;
|
|
9
|
+
style?: InputStyle & Record<string, any>;
|
|
10
|
+
value?: string | number;
|
|
11
|
+
type?: Type;
|
|
12
|
+
password?: boolean;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
'cursor-spacing'?: number;
|
|
16
|
+
maxlength?: number;
|
|
17
|
+
'auto-focus'?: boolean;
|
|
18
|
+
focus?: boolean;
|
|
19
|
+
'confirm-type'?: ConfirmType;
|
|
20
|
+
'confirm-hold'?: boolean;
|
|
21
|
+
cursor?: number;
|
|
22
|
+
'cursor-color'?: string;
|
|
23
|
+
'selection-start'?: number;
|
|
24
|
+
'selection-end'?: number;
|
|
25
|
+
'placeholder-style'?: {
|
|
26
|
+
color?: string;
|
|
27
|
+
};
|
|
28
|
+
'enable-offset'?: boolean;
|
|
29
|
+
'enable-var'?: boolean;
|
|
30
|
+
'external-var-context'?: Record<string, any>;
|
|
31
|
+
'parent-font-size'?: number;
|
|
32
|
+
'parent-width'?: number;
|
|
33
|
+
'parent-height'?: number;
|
|
34
|
+
'adjust-position': boolean;
|
|
35
|
+
bindinput?: (evt: NativeSyntheticEvent<TextInputTextInputEventData> | unknown) => void;
|
|
36
|
+
bindfocus?: (evt: NativeSyntheticEvent<TextInputFocusEventData> | unknown) => void;
|
|
37
|
+
bindblur?: (evt: NativeSyntheticEvent<TextInputFocusEventData> | unknown) => void;
|
|
38
|
+
bindconfirm?: (evt: NativeSyntheticEvent<TextInputSubmitEditingEventData | TextInputKeyPressEventData> | unknown) => void;
|
|
39
|
+
bindselectionchange?: (evt: NativeSyntheticEvent<TextInputSelectionChangeEventData> | unknown) => void;
|
|
40
|
+
}
|
|
41
|
+
export interface PrivateInputProps {
|
|
42
|
+
allowFontScaling?: boolean;
|
|
43
|
+
multiline?: boolean;
|
|
44
|
+
'auto-height'?: boolean;
|
|
45
|
+
bindlinechange?: (evt: NativeSyntheticEvent<TextInputContentSizeChangeEventData> | unknown) => void;
|
|
46
|
+
}
|
|
47
|
+
type FinalInputProps = InputProps & PrivateInputProps;
|
|
48
|
+
declare const Input: import("react").ForwardRefExoticComponent<InputProps & PrivateInputProps & import("react").RefAttributes<HandlerRef<TextInput, FinalInputProps>>>;
|
|
49
|
+
export default Input;
|
|
@@ -144,8 +144,8 @@ const Input = forwardRef((props, ref) => {
|
|
|
144
144
|
}
|
|
145
145
|
};
|
|
146
146
|
const setKeyboardAvoidContext = () => {
|
|
147
|
-
if (
|
|
148
|
-
keyboardAvoid.current = { cursorSpacing, ref: nodeRef };
|
|
147
|
+
if (keyboardAvoid) {
|
|
148
|
+
keyboardAvoid.current = { cursorSpacing, ref: nodeRef, adjustPosition, blurCallbacks: [] };
|
|
149
149
|
}
|
|
150
150
|
};
|
|
151
151
|
const onTouchStart = () => {
|
|
@@ -156,15 +156,35 @@ const Input = forwardRef((props, ref) => {
|
|
|
156
156
|
evt.nativeEvent.origin = 'input';
|
|
157
157
|
};
|
|
158
158
|
const onFocus = (evt) => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
159
|
+
if (!keyboardAvoid?.current) {
|
|
160
|
+
setKeyboardAvoidContext();
|
|
161
|
+
}
|
|
162
|
+
if (bindfocus && keyboardAvoid?.current) {
|
|
163
|
+
const focusAction = () => {
|
|
164
|
+
bindfocus(getCustomEvent('focus', evt, {
|
|
165
|
+
detail: {
|
|
166
|
+
value: tmpValue.current || '',
|
|
167
|
+
height: keyboardAvoid.current?.keyboardHeight
|
|
168
|
+
},
|
|
169
|
+
layoutRef
|
|
170
|
+
}, props));
|
|
171
|
+
if (keyboardAvoid.current?.onKeyboardShow) {
|
|
172
|
+
keyboardAvoid.current.onKeyboardShow = undefined;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
if (keyboardAvoid.current.keyboardHeight) {
|
|
176
|
+
// iOS: keyboard 获取高度时机 keyboardWillShow 在 input focus 之前,可以立即执行
|
|
177
|
+
focusAction();
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Android,Harmony: keyboard 获取高度时机 keyboardDidShow 在 input focus 之后,需要延迟回调
|
|
181
|
+
evt.persist();
|
|
182
|
+
keyboardAvoid.current.onKeyboardShow = focusAction;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
166
185
|
};
|
|
167
186
|
const onBlur = (evt) => {
|
|
187
|
+
keyboardAvoid?.current?.blurCallbacks.forEach(fn => fn());
|
|
168
188
|
bindblur && bindblur(getCustomEvent('blur', evt, {
|
|
169
189
|
detail: {
|
|
170
190
|
value: tmpValue.current || '',
|
|
@@ -268,6 +288,7 @@ const Input = forwardRef((props, ref) => {
|
|
|
268
288
|
multiline: !!multiline,
|
|
269
289
|
onTouchStart,
|
|
270
290
|
onTouchEnd,
|
|
291
|
+
onTouchMove: onTouchEnd,
|
|
271
292
|
onFocus,
|
|
272
293
|
onBlur,
|
|
273
294
|
onChange,
|