@office-iss/react-native-win32 0.64.6 → 0.64.10
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/.flowconfig +5 -0
- package/CHANGELOG.json +61 -1
- package/CHANGELOG.md +36 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +333 -0
- package/Libraries/Components/View/ReactNativeViewViewConfig.win32.js +2 -0
- package/Libraries/Components/View/Tests/ViewWin32Test.js +49 -4
- package/Libraries/Components/View/View.win32.js +4 -4
- package/Libraries/Components/View/ViewPropTypes.win32.js +544 -0
- package/Libraries/Components/View/ViewWin32.Props.d.ts +6 -0
- package/Libraries/Components/View/ViewWin32.Props.js +1 -1
- package/Libraries/Pressability/HoverState.win32.js +60 -0
- package/Libraries/Pressability/Pressability.win32.js +944 -0
- package/Libraries/Types/CoreEventTypes.win32.js +193 -0
- package/overrides.json +42 -7
- package/package.json +1 -1
- package/src/Libraries/Components/View/Tests/ViewWin32Test.tsx +65 -1
- package/src/Libraries/Components/View/ViewWin32.Props.ts +8 -1
package/.flowconfig
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
<PROJECT_ROOT>/Libraries/Alert/Alert.js
|
|
13
13
|
<PROJECT_ROOT>/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js
|
|
14
14
|
<PROJECT_ROOT>/Libraries/Components/Picker/Picker.js
|
|
15
|
+
<PROJECT_ROOT>/Libraries/Components/Pressable/Pressable.js
|
|
15
16
|
<PROJECT_ROOT>/Libraries/Components/SafeAreaView/SafeAreaView.js
|
|
16
17
|
<PROJECT_ROOT>/Libraries/Components/TextInput/TextInput.js
|
|
17
18
|
<PROJECT_ROOT>/Libraries/Components/TextInput/TextInputState.js
|
|
@@ -19,11 +20,15 @@
|
|
|
19
20
|
<PROJECT_ROOT>/Libraries/Components/View/ReactNativeViewAttributes.js
|
|
20
21
|
<PROJECT_ROOT>/Libraries/Components/View/ReactNativeViewViewConfig.js
|
|
21
22
|
<PROJECT_ROOT>/Libraries/Components/View/View.js
|
|
23
|
+
<PROJECT_ROOT>/Libraries/Components/View/ViewPropTypes.js
|
|
22
24
|
<PROJECT_ROOT>/Libraries/Image/Image.js
|
|
23
25
|
<PROJECT_ROOT>/Libraries/Inspector/Inspector.js
|
|
24
26
|
<PROJECT_ROOT>/Libraries/Inspector/InspectorOverlay.js
|
|
25
27
|
<PROJECT_ROOT>/Libraries/Network/RCTNetworking.js
|
|
28
|
+
<PROJECT_ROOT>/Libraries/Pressability/Pressability.js
|
|
29
|
+
<PROJECT_ROOT>/Libraries/Pressability/HoverState.js
|
|
26
30
|
<PROJECT_ROOT>/Libraries/StyleSheet/StyleSheet.js
|
|
31
|
+
<PROJECT_ROOT>/Libraries/Types/CoreEventTypes.js
|
|
27
32
|
<PROJECT_ROOT>/Libraries/Utilities/DeviceInfo.js
|
|
28
33
|
<PROJECT_ROOT>/Libraries/Utilities/Dimensions.js
|
|
29
34
|
|
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,67 @@
|
|
|
2
2
|
"name": "@office-iss/react-native-win32",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "Mon,
|
|
5
|
+
"date": "Mon, 17 Jan 2022 16:09:50 GMT",
|
|
6
|
+
"tag": "@office-iss/react-native-win32_v0.64.10",
|
|
7
|
+
"version": "0.64.10",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Port windows pressable with extra desktop support to win32",
|
|
12
|
+
"author": "saadnajmi2@gmail.com",
|
|
13
|
+
"commit": "acfb47a7924f4d4e34e020838423bbbab026d670",
|
|
14
|
+
"package": "@office-iss/react-native-win32"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"date": "Mon, 15 Nov 2021 16:09:20 GMT",
|
|
21
|
+
"tag": "@office-iss/react-native-win32_v0.64.9",
|
|
22
|
+
"version": "0.64.9",
|
|
23
|
+
"comments": {
|
|
24
|
+
"patch": [
|
|
25
|
+
{
|
|
26
|
+
"comment": "Add enableFocusRing prop for View and test",
|
|
27
|
+
"author": "ruaraki@microsoft.com",
|
|
28
|
+
"commit": "ecbd53d9cd10b88691fc79eeaaf3be1b035f162f",
|
|
29
|
+
"package": "@office-iss/react-native-win32"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"date": "Mon, 25 Oct 2021 15:07:12 GMT",
|
|
36
|
+
"tag": "@office-iss/react-native-win32_v0.64.8",
|
|
37
|
+
"version": "0.64.8",
|
|
38
|
+
"comments": {
|
|
39
|
+
"patch": [
|
|
40
|
+
{
|
|
41
|
+
"comment": "Revert back to a warning for acceptsKeyboardFocus deprecation",
|
|
42
|
+
"author": "30809111+acoates-ms@users.noreply.github.com",
|
|
43
|
+
"commit": "e615b1c46b7396fe617dc3019091cc367bd145a8",
|
|
44
|
+
"package": "@office-iss/react-native-win32"
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"date": "Mon, 20 Sep 2021 15:06:37 GMT",
|
|
51
|
+
"tag": "@office-iss/react-native-win32_v0.64.7",
|
|
52
|
+
"version": "0.64.7",
|
|
53
|
+
"comments": {
|
|
54
|
+
"patch": [
|
|
55
|
+
{
|
|
56
|
+
"comment": "Adding accessibilityItemType to ViewWin32",
|
|
57
|
+
"author": "safreibe@microsoft.com",
|
|
58
|
+
"commit": "47ceaac64f88816796d67d08affb9beea67d6344",
|
|
59
|
+
"package": "@office-iss/react-native-win32"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"date": "Mon, 13 Sep 2021 15:06:21 GMT",
|
|
6
66
|
"tag": "@office-iss/react-native-win32_v0.64.6",
|
|
7
67
|
"version": "0.64.6",
|
|
8
68
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,49 @@
|
|
|
1
1
|
# Change Log - @office-iss/react-native-win32
|
|
2
2
|
|
|
3
|
-
This log was last generated on Mon,
|
|
3
|
+
This log was last generated on Mon, 17 Jan 2022 16:09:50 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
-
## 0.64.
|
|
7
|
+
## 0.64.10
|
|
8
8
|
|
|
9
|
-
Mon,
|
|
9
|
+
Mon, 17 Jan 2022 16:09:50 GMT
|
|
10
10
|
|
|
11
11
|
### Patches
|
|
12
12
|
|
|
13
|
-
-
|
|
13
|
+
- Port windows pressable with extra desktop support to win32 (saadnajmi2@gmail.com)
|
|
14
14
|
|
|
15
|
+
## 0.64.9
|
|
16
|
+
|
|
17
|
+
Mon, 15 Nov 2021 16:09:20 GMT
|
|
18
|
+
|
|
19
|
+
### Patches
|
|
20
|
+
|
|
21
|
+
- Add enableFocusRing prop for View and test (ruaraki@microsoft.com)
|
|
22
|
+
|
|
23
|
+
## 0.64.8
|
|
24
|
+
|
|
25
|
+
Mon, 25 Oct 2021 15:07:12 GMT
|
|
26
|
+
|
|
27
|
+
### Patches
|
|
28
|
+
|
|
29
|
+
- Revert back to a warning for acceptsKeyboardFocus deprecation (30809111+acoates-ms@users.noreply.github.com)
|
|
30
|
+
|
|
31
|
+
## 0.64.7
|
|
32
|
+
|
|
33
|
+
Mon, 20 Sep 2021 15:06:37 GMT
|
|
34
|
+
|
|
35
|
+
### Patches
|
|
36
|
+
|
|
37
|
+
- Adding accessibilityItemType to ViewWin32 (safreibe@microsoft.com)
|
|
38
|
+
|
|
39
|
+
## 0.64.6
|
|
40
|
+
|
|
41
|
+
Mon, 13 Sep 2021 15:06:21 GMT
|
|
42
|
+
|
|
43
|
+
### Patches
|
|
44
|
+
|
|
45
|
+
- Fix exception in View when props are undefined (30809111+acoates-ms@users.noreply.github.com)
|
|
46
|
+
|
|
15
47
|
## 0.64.5
|
|
16
48
|
|
|
17
49
|
Mon, 23 Aug 2021 15:10:07 GMT
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
import * as React from 'react';
|
|
14
|
+
import {useMemo, useState, useRef, useImperativeHandle} from 'react';
|
|
15
|
+
import useAndroidRippleForView, {
|
|
16
|
+
type RippleConfig,
|
|
17
|
+
} from './useAndroidRippleForView';
|
|
18
|
+
import type {
|
|
19
|
+
AccessibilityActionEvent,
|
|
20
|
+
AccessibilityActionInfo,
|
|
21
|
+
AccessibilityRole,
|
|
22
|
+
AccessibilityState,
|
|
23
|
+
AccessibilityValue,
|
|
24
|
+
} from '../View/ViewAccessibility';
|
|
25
|
+
import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
|
|
26
|
+
import usePressability from '../../Pressability/usePressability';
|
|
27
|
+
import {normalizeRect, type RectOrSize} from '../../StyleSheet/Rect';
|
|
28
|
+
import type {
|
|
29
|
+
LayoutEvent,
|
|
30
|
+
PressEvent,
|
|
31
|
+
// [Windows
|
|
32
|
+
MouseEvent,
|
|
33
|
+
BlurEvent,
|
|
34
|
+
FocusEvent, // Windows]
|
|
35
|
+
} from '../../Types/CoreEventTypes';
|
|
36
|
+
import View from '../View/View';
|
|
37
|
+
import TextInputState from '../TextInput/TextInputState';
|
|
38
|
+
|
|
39
|
+
type ViewStyleProp = $ElementType<React.ElementConfig<typeof View>, 'style'>;
|
|
40
|
+
|
|
41
|
+
export type StateCallbackType = $ReadOnly<{|
|
|
42
|
+
pressed: boolean,
|
|
43
|
+
|}>;
|
|
44
|
+
|
|
45
|
+
type Props = $ReadOnly<{|
|
|
46
|
+
/**
|
|
47
|
+
* Accessibility.
|
|
48
|
+
*/
|
|
49
|
+
accessibilityActions?: ?$ReadOnlyArray<AccessibilityActionInfo>,
|
|
50
|
+
accessibilityElementsHidden?: ?boolean,
|
|
51
|
+
accessibilityHint?: ?Stringish,
|
|
52
|
+
accessibilityIgnoresInvertColors?: ?boolean,
|
|
53
|
+
accessibilityLabel?: ?Stringish,
|
|
54
|
+
accessibilityLiveRegion?: ?('none' | 'polite' | 'assertive'),
|
|
55
|
+
accessibilityRole?: ?AccessibilityRole,
|
|
56
|
+
accessibilityState?: ?AccessibilityState,
|
|
57
|
+
accessibilityValue?: ?AccessibilityValue,
|
|
58
|
+
accessibilityViewIsModal?: ?boolean,
|
|
59
|
+
accessible?: ?boolean,
|
|
60
|
+
focusable?: ?boolean,
|
|
61
|
+
importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
|
|
62
|
+
onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Either children or a render prop that receives a boolean reflecting whether
|
|
66
|
+
* the component is currently pressed.
|
|
67
|
+
*/
|
|
68
|
+
children: React.Node | ((state: StateCallbackType) => React.Node),
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Duration to wait after hover in before calling `onHoverIn`.
|
|
72
|
+
*/
|
|
73
|
+
delayHoverIn?: ?number,
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Duration to wait after hover out before calling `onHoverOut`.
|
|
77
|
+
*/
|
|
78
|
+
delayHoverOut?: ?number,
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Duration (in milliseconds) from `onPressIn` before `onLongPress` is called.
|
|
82
|
+
*/
|
|
83
|
+
delayLongPress?: ?number,
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Whether the press behavior is disabled.
|
|
87
|
+
*/
|
|
88
|
+
disabled?: ?boolean,
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Additional distance outside of this view in which a press is detected.
|
|
92
|
+
*/
|
|
93
|
+
hitSlop?: ?RectOrSize,
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Additional distance outside of this view in which a touch is considered a
|
|
97
|
+
* press before `onPressOut` is triggered.
|
|
98
|
+
*/
|
|
99
|
+
pressRetentionOffset?: ?RectOrSize,
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Called when this view's layout changes.
|
|
103
|
+
*/
|
|
104
|
+
onLayout?: ?(event: LayoutEvent) => void,
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Called when the hover is activated to provide visual feedback.
|
|
108
|
+
*/
|
|
109
|
+
onHoverIn?: ?(event: MouseEvent) => mixed,
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Called when the hover is deactivated to undo visual feedback.
|
|
113
|
+
*/
|
|
114
|
+
onHoverOut?: ?(event: MouseEvent) => mixed,
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Called when a long-tap gesture is detected.
|
|
118
|
+
*/
|
|
119
|
+
onLongPress?: ?(event: PressEvent) => void,
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Called when a single tap gesture is detected.
|
|
123
|
+
*/
|
|
124
|
+
onPress?: ?(event: PressEvent) => void,
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Called when a touch is engaged before `onPress`.
|
|
128
|
+
*/
|
|
129
|
+
onPressIn?: ?(event: PressEvent) => void,
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Called when a touch is released before `onPress`.
|
|
133
|
+
*/
|
|
134
|
+
onPressOut?: ?(event: PressEvent) => void,
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Called after the element loses focus.
|
|
138
|
+
*/
|
|
139
|
+
onBlur?: ?(event: BlurEvent) => mixed,
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Called after the element is focused.
|
|
143
|
+
*/
|
|
144
|
+
onFocus?: ?(event: FocusEvent) => mixed,
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Either view styles or a function that receives a boolean reflecting whether
|
|
148
|
+
* the component is currently pressed and returns view styles.
|
|
149
|
+
*/
|
|
150
|
+
style?: ViewStyleProp | ((state: StateCallbackType) => ViewStyleProp),
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Identifier used to find this view in tests.
|
|
154
|
+
*/
|
|
155
|
+
testID?: ?string,
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* If true, doesn't play system sound on touch.
|
|
159
|
+
*/
|
|
160
|
+
android_disableSound?: ?boolean,
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Enables the Android ripple effect and configures its color.
|
|
164
|
+
*/
|
|
165
|
+
android_ripple?: ?RippleConfig,
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Used only for documentation or testing (e.g. snapshot testing).
|
|
169
|
+
*/
|
|
170
|
+
testOnly_pressed?: ?boolean,
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Duration to wait after press down before calling `onPressIn`.
|
|
174
|
+
*/
|
|
175
|
+
unstable_pressDelay?: ?number,
|
|
176
|
+
|}>;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Component used to build display components that should respond to whether the
|
|
180
|
+
* component is currently pressed or not.
|
|
181
|
+
*/
|
|
182
|
+
function Pressable(props: Props, forwardedRef): React.Node {
|
|
183
|
+
const {
|
|
184
|
+
accessible,
|
|
185
|
+
android_disableSound,
|
|
186
|
+
android_ripple,
|
|
187
|
+
children,
|
|
188
|
+
delayHoverIn,
|
|
189
|
+
delayHoverOut,
|
|
190
|
+
delayLongPress,
|
|
191
|
+
disabled,
|
|
192
|
+
focusable,
|
|
193
|
+
onHoverIn,
|
|
194
|
+
onHoverOut,
|
|
195
|
+
onLongPress,
|
|
196
|
+
onPress,
|
|
197
|
+
onPressIn,
|
|
198
|
+
onPressOut,
|
|
199
|
+
// [Windows
|
|
200
|
+
onBlur,
|
|
201
|
+
onFocus,
|
|
202
|
+
// Windows]
|
|
203
|
+
pressRetentionOffset,
|
|
204
|
+
style,
|
|
205
|
+
testOnly_pressed,
|
|
206
|
+
unstable_pressDelay,
|
|
207
|
+
...restProps
|
|
208
|
+
} = props;
|
|
209
|
+
|
|
210
|
+
const viewRef = useRef<React.ElementRef<typeof View> | null>(null);
|
|
211
|
+
useImperativeHandle(forwardedRef, () => viewRef.current);
|
|
212
|
+
|
|
213
|
+
// [Windows
|
|
214
|
+
const _onBlur = (event: BlurEvent) => {
|
|
215
|
+
TextInputState.blurInput(viewRef.current);
|
|
216
|
+
if (props.onBlur) {
|
|
217
|
+
props.onBlur(event);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const _onFocus = (event: FocusEvent) => {
|
|
222
|
+
TextInputState.focusInput(viewRef.current);
|
|
223
|
+
if (props.onFocus) {
|
|
224
|
+
props.onFocus(event);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
// Windows]
|
|
228
|
+
|
|
229
|
+
const android_rippleConfig = useAndroidRippleForView(android_ripple, viewRef);
|
|
230
|
+
|
|
231
|
+
const [pressed, setPressed] = usePressState(testOnly_pressed === true);
|
|
232
|
+
|
|
233
|
+
const hitSlop = normalizeRect(props.hitSlop);
|
|
234
|
+
|
|
235
|
+
const restPropsWithDefaults: React.ElementConfig<typeof View> = {
|
|
236
|
+
...restProps,
|
|
237
|
+
...android_rippleConfig?.viewProps,
|
|
238
|
+
accessible: accessible !== false,
|
|
239
|
+
focusable: focusable !== false,
|
|
240
|
+
hitSlop,
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
const config = useMemo(
|
|
244
|
+
() => ({
|
|
245
|
+
disabled,
|
|
246
|
+
hitSlop,
|
|
247
|
+
pressRectOffset: pressRetentionOffset,
|
|
248
|
+
android_disableSound,
|
|
249
|
+
delayHoverIn,
|
|
250
|
+
delayHoverOut,
|
|
251
|
+
delayLongPress,
|
|
252
|
+
delayPressIn: unstable_pressDelay,
|
|
253
|
+
onHoverIn,
|
|
254
|
+
onHoverOut,
|
|
255
|
+
onLongPress,
|
|
256
|
+
onPress,
|
|
257
|
+
onPressIn(event: PressEvent): void {
|
|
258
|
+
if (android_rippleConfig != null) {
|
|
259
|
+
android_rippleConfig.onPressIn(event);
|
|
260
|
+
}
|
|
261
|
+
setPressed(true);
|
|
262
|
+
if (onPressIn != null) {
|
|
263
|
+
onPressIn(event);
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
onPressMove: android_rippleConfig?.onPressMove,
|
|
267
|
+
onPressOut(event: PressEvent): void {
|
|
268
|
+
if (android_rippleConfig != null) {
|
|
269
|
+
android_rippleConfig.onPressOut(event);
|
|
270
|
+
}
|
|
271
|
+
setPressed(false);
|
|
272
|
+
if (onPressOut != null) {
|
|
273
|
+
onPressOut(event);
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
// [Windows
|
|
277
|
+
onBlur,
|
|
278
|
+
onFocus,
|
|
279
|
+
// Windows]
|
|
280
|
+
}),
|
|
281
|
+
[
|
|
282
|
+
android_disableSound,
|
|
283
|
+
android_rippleConfig,
|
|
284
|
+
delayHoverIn,
|
|
285
|
+
delayHoverOut,
|
|
286
|
+
delayLongPress,
|
|
287
|
+
disabled,
|
|
288
|
+
hitSlop,
|
|
289
|
+
onHoverIn,
|
|
290
|
+
onHoverOut,
|
|
291
|
+
onLongPress,
|
|
292
|
+
onPress,
|
|
293
|
+
onPressIn,
|
|
294
|
+
onPressOut,
|
|
295
|
+
// [Windows
|
|
296
|
+
onBlur,
|
|
297
|
+
onFocus,
|
|
298
|
+
// Windows]
|
|
299
|
+
pressRetentionOffset,
|
|
300
|
+
setPressed,
|
|
301
|
+
unstable_pressDelay,
|
|
302
|
+
],
|
|
303
|
+
);
|
|
304
|
+
const eventHandlers = usePressability(config);
|
|
305
|
+
|
|
306
|
+
return (
|
|
307
|
+
<View
|
|
308
|
+
{...restPropsWithDefaults}
|
|
309
|
+
{...eventHandlers}
|
|
310
|
+
// [Windows
|
|
311
|
+
onBlur={_onBlur}
|
|
312
|
+
onFocus={_onFocus}
|
|
313
|
+
// Windows]
|
|
314
|
+
ref={viewRef}
|
|
315
|
+
style={typeof style === 'function' ? style({pressed}) : style}>
|
|
316
|
+
{typeof children === 'function' ? children({pressed}) : children}
|
|
317
|
+
{__DEV__ ? <PressabilityDebugView color="red" hitSlop={hitSlop} /> : null}
|
|
318
|
+
</View>
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function usePressState(forcePressed: boolean): [boolean, (boolean) => void] {
|
|
323
|
+
const [pressed, setPressed] = useState(false);
|
|
324
|
+
return [pressed || forcePressed, setPressed];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const MemoedPressable = React.memo(React.forwardRef(Pressable));
|
|
328
|
+
MemoedPressable.displayName = 'Pressable';
|
|
329
|
+
|
|
330
|
+
export default (MemoedPressable: React.AbstractComponent<
|
|
331
|
+
Props,
|
|
332
|
+
React.ElementRef<typeof View>,
|
|
333
|
+
>);
|
|
@@ -68,11 +68,11 @@ var FocusMoverTestComponent = /** @class */ (function (_super) {
|
|
|
68
68
|
}
|
|
69
69
|
FocusMoverTestComponent.prototype.render = function () {
|
|
70
70
|
return (React.createElement(ViewWin32_1.ViewWin32, null,
|
|
71
|
-
React.createElement(ViewWin32_1.ViewWin32, { ref: this._labeledBy, accessibilityLabel: "separate label for test" }),
|
|
71
|
+
React.createElement(ViewWin32_1.ViewWin32, { ref: this._labeledBy, accessibilityLabel: "separate label for test", accessibilityItemType: "Comment" }),
|
|
72
72
|
React.createElement(ViewWin32_1.ViewWin32, { style: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', marginVertical: 5 } },
|
|
73
73
|
React.createElement(react_native_1.TouchableHighlight, { onPress: this._onPress },
|
|
74
74
|
React.createElement(ViewWin32_1.ViewWin32, { accessibilityLabeledBy: this._labeledBy, style: styles.blackbox })),
|
|
75
|
-
React.createElement(ViewWin32_1.ViewWin32, { ref: this._setRef, focusable: true, style: this.state.hasFocus ? { backgroundColor: '#aee8fcff' } : { backgroundColor: '#00000000' }, onFocus: this._onFocus, onBlur: this._onBlur },
|
|
75
|
+
React.createElement(ViewWin32_1.ViewWin32, { ref: this._setRef, focusable: true, style: this.state.hasFocus ? { backgroundColor: '#aee8fcff' } : { backgroundColor: '#00000000' }, onFocus: this._onFocus, onBlur: this._onBlur, enableFocusRing: false },
|
|
76
76
|
React.createElement(react_native_1.Text, null, this.state.hasFocus ? 'Focus: Yes' : 'Focus: No')))));
|
|
77
77
|
};
|
|
78
78
|
return FocusMoverTestComponent;
|
|
@@ -113,7 +113,7 @@ var KeyboardTestComponent = /** @class */ (function (_super) {
|
|
|
113
113
|
}
|
|
114
114
|
KeyboardTestComponent.prototype.render = function () {
|
|
115
115
|
return (React.createElement(ViewWin32_1.ViewWin32, { keyDownEvents: handledNativeKeyboardEvents, keyUpEvents: handledNativeKeyboardEvents },
|
|
116
|
-
React.createElement(ViewWin32_1.ViewWin32, { style: this.state.hasFocus ? [styles.keyComponentRoot, styles.border] : styles.keyComponentRoot, focusable: true, onKeyUp: this._onKeyUp, onKeyDown: this._onKeyDown, onFocus: this._onFocus, onBlur: this._onBlur },
|
|
116
|
+
React.createElement(ViewWin32_1.ViewWin32, { style: this.state.hasFocus ? [styles.keyComponentRoot, styles.border] : styles.keyComponentRoot, focusable: true, onKeyUp: this._onKeyUp, onKeyDown: this._onKeyDown, onFocus: this._onFocus, onBlur: this._onBlur, enableFocusRing: false },
|
|
117
117
|
React.createElement(ViewWin32_1.ViewWin32, { style: styles.keyEnterVisualizer },
|
|
118
118
|
React.createElement(react_native_1.Text, null, "OnKeyDown"),
|
|
119
119
|
React.createElement(react_native_1.Text, null, "----"),
|
|
@@ -189,6 +189,44 @@ var CursorExample = function () {
|
|
|
189
189
|
React.createElement(CursorTestComponent, { cursor: 'text' }),
|
|
190
190
|
React.createElement(CursorTestComponent, { cursor: 'we-resize' })));
|
|
191
191
|
};
|
|
192
|
+
var EnableFocusRingExample = /** @class */ (function (_super) {
|
|
193
|
+
__extends(EnableFocusRingExample, _super);
|
|
194
|
+
function EnableFocusRingExample(props) {
|
|
195
|
+
var _this = _super.call(this, props) || this;
|
|
196
|
+
_this._onFocus = function () {
|
|
197
|
+
_this.setState({
|
|
198
|
+
hasFocus: true,
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
_this._onBlur = function () {
|
|
202
|
+
_this.setState({
|
|
203
|
+
hasFocus: false,
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
_this.state = {
|
|
207
|
+
hasFocus: false,
|
|
208
|
+
};
|
|
209
|
+
return _this;
|
|
210
|
+
}
|
|
211
|
+
EnableFocusRingExample.prototype.render = function () {
|
|
212
|
+
return (React.createElement(ViewWin32_1.ViewWin32, { style: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', marginVertical: 5 } },
|
|
213
|
+
React.createElement(ViewWin32_1.ViewWin32, { style: {
|
|
214
|
+
backgroundColor: 'pink',
|
|
215
|
+
height: 100,
|
|
216
|
+
width: 100,
|
|
217
|
+
}, enableFocusRing: true, focusable: true },
|
|
218
|
+
React.createElement(react_native_1.Text, null, "enableFocusRing set to true")),
|
|
219
|
+
React.createElement(ViewWin32_1.ViewWin32, { style: {
|
|
220
|
+
backgroundColor: 'pink',
|
|
221
|
+
height: 100,
|
|
222
|
+
width: 100,
|
|
223
|
+
}, enableFocusRing: false, focusable: true, onFocus: this._onFocus, onBlur: this._onBlur },
|
|
224
|
+
React.createElement(React.Fragment, null,
|
|
225
|
+
React.createElement(react_native_1.Text, null, "enableFocusRing set to false"),
|
|
226
|
+
React.createElement(react_native_1.Text, null, this.state.hasFocus ? 'Focus: Yes' : 'Focus: No')))));
|
|
227
|
+
};
|
|
228
|
+
return EnableFocusRingExample;
|
|
229
|
+
}(React.Component));
|
|
192
230
|
exports.title = 'ViewWin32';
|
|
193
231
|
exports.displayName = 'ViewWin32 Example';
|
|
194
232
|
exports.description = 'All the stock View props plus Win32 specific ones';
|
|
@@ -231,5 +269,12 @@ exports.examples = [
|
|
|
231
269
|
return React.createElement(CursorExample, null);
|
|
232
270
|
},
|
|
233
271
|
},
|
|
272
|
+
{
|
|
273
|
+
title: 'EnableFocusRing example',
|
|
274
|
+
description: 'Displays focus visuals that are driven by native',
|
|
275
|
+
render: function () {
|
|
276
|
+
return React.createElement(EnableFocusRingExample, null);
|
|
277
|
+
},
|
|
278
|
+
},
|
|
234
279
|
];
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1dpbjMyVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1Rlc3RzL1ZpZXdXaW4zMlRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUNiLDZCQUErQjtBQUMvQiw2Q0FBb0U7QUFDcEUsMENBQXlDO0FBR3pDLElBQU0sTUFBTSxHQUFHLHlCQUFVLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFdBQVcsRUFBRSxPQUFPO0tBQ3JCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsS0FBSztRQUNwQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsWUFBWTtRQUM3QixjQUFjLEVBQUUsY0FBYztLQUMvQjtJQUNELGtCQUFrQixFQUFFO1FBQ2xCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLEdBQUc7UUFDYixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBQ0QsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtDQUMxRSxDQUFDLENBQUM7QUFNSDtJQUFzQywyQ0FBNkM7SUFJakYsaUNBQW1CLEtBQUs7UUFBeEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FLYjtRQVRPLGtCQUFZLEdBQWMsSUFBSSxDQUFDO1FBZ0N0QixhQUFPLEdBQUcsVUFBQyxHQUFjO1lBQ3hDLEtBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVlLGNBQVEsR0FBRztZQUMxQixJQUFJLEtBQUksQ0FBQyxZQUFZLEtBQUssU0FB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O0lBQ3RCO1FBQ0UsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixXQUFXLEVBQUUscUVBQXFFO1FBQ2xGLE1BQU0sRUFBTjtZQUNFLE9BQU8sQ0FDTCxvQkFBQyxxQkFBUztnQkFDUixvQkFBQyx1QkFBdUIsT0FBRztnQkFDM0Isb0JBQUMsdUJBQXVCLE9BQUc7Z0JBQzNCLG9CQUFDLHVCQUF1QixPQUFHLENBQ2pCLENBQ2IsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixXQUFXLEVBQUUsdUNBQXVDO1FBQ3BELE1BQU0sRUFBTjtZQUNFLE9BQU8sb0JBQUMscUJBQXFCLE9BQUcsQ0FBQztRQUNuQyxDQUFDO0tBQ0Y7SUFDRDtRQUNFLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUIsTUFBTSxFQUFOO1lBQ0UsT0FBTyxvQkFBQyxZQUFZLE9BQUcsQ0FBQztRQUMxQixDQUFDO0tBQ0Y7SUFDRDtRQUNFLEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsV0FBVyxFQUFFLDZCQUE2QjtRQUMxQyxNQUFNLEVBQU47WUFDRSxPQUFPLG9CQUFDLGNBQWMsT0FBRyxDQUFDO1FBQzVCLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLGdCQUFnQjtRQUN2QixXQUFXLEVBQUUsdURBQXVEO1FBQ3BFLE1BQU0sRUFBTjtZQUNFLE9BQU8sb0JBQUMsYUFBYSxPQUFHLENBQUM7UUFDM0IsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZUhpZ2hsaWdodCB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgeyBWaWV3V2luMzIgfSBmcm9tICcuLi9WaWV3V2luMzInO1xuaW1wb3J0IHsgQ3Vyc29yLCBJS2V5Ym9hcmRFdmVudCwgSUhhbmRsZWRLZXlib2FyZEV2ZW50IH0gZnJvbSAnLi4vVmlld1dpbjMyLlByb3BzJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBib3JkZXI6IHtcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGtleUNvbXBvbmVudFJvb3Q6IHtcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZXNtb2tlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIGtleUVudGVyVmlzdWFsaXplcjoge1xuICAgIG1hcmdpbjogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBtaW5XaWR0aDogMTAwLFxuICAgIG1pbkhlaWdodDogMzAsXG4gIH0sXG4gIGJsYWNrYm94OiB7IGhlaWdodDogMzAsIHdpZHRoOiAzMCwgYm9yZGVyQ29sb3I6ICdibGFjaycsIGJvcmRlcldpZHRoOiAzIH0sXG59KTtcblxuaW50ZXJmYWNlIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSB7XG4gIGhhc0ZvY3VzOiBib29sZWFuO1xufVxuXG5jbGFzcyBGb2N1c01vdmVyVGVzdENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHByaXZhdGUgX2ZvY3VzVGFyZ2V0OiBWaWV3V2luMzIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbGVkQnk6IFJlYWN0LlJlZk9iamVjdDxWaWV3V2luMzI+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxlZEJ5ID0gUmVhY3QuY3JlYXRlUmVmPFZpZXdXaW4zMj4oKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyPlxuICAgICAgICA8Vmlld1dpbjMyIHJlZj17dGhpcy5fbGFiZWxlZEJ5fSBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJzZXBhcmF0ZSBsYWJlbCBmb3IgdGVzdFwiIC8+XG4gICAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnLCBtYXJnaW5WZXJ0aWNhbDogNSB9fT5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodCBvblByZXNzPXt0aGlzLl9vblByZXNzfT5cbiAgICAgICAgICA8Vmlld1dpbjMyIGFjY2Vzc2liaWxpdHlMYWJlbGVkQnk9e3RoaXMuX2xhYmVsZWRCeX0gc3R5bGU9e3N0eWxlcy5ibGFja2JveH0gLz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICByZWY9e3RoaXMuX3NldFJlZn1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IHsgYmFja2dyb3VuZENvbG9yOiAnI2FlZThmY2ZmJyB9IDogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwMDAnIH19XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5fb25Gb2N1c31cbiAgICAgICAgICBvbkJsdXI9e3RoaXMuX29uQmx1cn1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gJ0ZvY3VzOiBZZXMnIDogJ0ZvY3VzOiBObyd9PC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJlZiA9IChyZWY6IFZpZXdXaW4zMikgPT4ge1xuICAgIHRoaXMuX2ZvY3VzVGFyZ2V0ID0gcmVmO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uUHJlc3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzVGFyZ2V0LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJS2V5Ym9hcmRhYmxlQ29tcG9uZW50U3RhdGUge1xuICBsYXN0S2V5RG93bjogc3RyaW5nO1xuICBsYXN0S2V5VXA6IHN0cmluZztcbn1cblxuY29uc3QgaGFuZGxlZE5hdGl2ZUtleWJvYXJkRXZlbnRzOiBJSGFuZGxlZEtleWJvYXJkRXZlbnRbXSA9IFtcbiAgeyBrZXk6ICdBcnJvd0Rvd24nIH0sXG4gIHsga2V5OiAnQXJyb3dVcCcgfSxcbiAgeyBrZXk6ICdBcnJvd0xlZnQnIH0sXG4gIHsga2V5OiAnQXJyb3dSaWdodCcgfSxcbiAgeyBrZXk6ICdUYWInIH0sXG5dO1xuXG5jbGFzcyBLZXlib2FyZFRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSAmIElLZXlib2FyZGFibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGxhc3RLZXlEb3duOiBudWxsLFxuICAgICAgbGFzdEtleVVwOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIGtleURvd25FdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30ga2V5VXBFdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMua2V5Q29tcG9uZW50Um9vdCwgc3R5bGVzLmJvcmRlcl0gOiBzdHlsZXMua2V5Q29tcG9uZW50Um9vdH1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBvbktleVVwPXt0aGlzLl9vbktleVVwfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5fb25LZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1dpbjMyIHN0eWxlPXtzdHlsZXMua2V5RW50ZXJWaXN1YWxpemVyfT5cbiAgICAgICAgICAgIDxUZXh0Pk9uS2V5RG93bjwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pi0tLS08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS5sYXN0S2V5RG93biAhPT0gbnVsbCA/IHRoaXMuc3RhdGUubGFzdEtleURvd24gOiAnICd9PC9UZXh0PlxuICAgICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3N0eWxlcy5rZXlFbnRlclZpc3VhbGl6ZXJ9PlxuICAgICAgICAgICAgPFRleHQ+T25LZXlVcDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pi0tLS08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS5sYXN0S2V5VXAgIT09IG51bGwgPyB0aGlzLnN0YXRlLmxhc3RLZXlVcCA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25LZXlVcCA9IChldjogSUtleWJvYXJkRXZlbnQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgbGFzdEtleVVwOiBldi5uYXRpdmVFdmVudC5rZXksIGxhc3RLZXlEb3duOiBudWxsIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uS2V5RG93biA9IChldjogSUtleWJvYXJkRXZlbnQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgbGFzdEtleURvd246IGV2Lm5hdGl2ZUV2ZW50LmtleSwgbGFzdEtleVVwOiBudWxsIH0pO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSUhvdmVyQ29tcG9uZW50UHJvcHMge1xuICBjb2xvcjogc3RyaW5nO1xufVxuY2xhc3MgSG92ZXJUZXN0Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElIb3ZlckNvbXBvbmVudFByb3BzLCBJRm9jdXNhYmxlQ29tcG9uZW50U3RhdGU+IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLl9vbk1vdXNlRW50ZXJ9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5fb25Nb3VzZUxlYXZlfVxuICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMuYmxhY2tib3gsIHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLnByb3BzLmNvbG9yIH1dIDogc3R5bGVzLmJsYWNrYm94fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uTW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGFzRm9jdXM6IGZhbHNlIH0pO1xuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbk1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGhhc0ZvY3VzOiB0cnVlIH0pO1xuICB9O1xufVxuXG5jbGFzcyBIb3ZlckV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5Ib3Jpem9udGFsOiA3NSwganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnIH19PlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwicmVkXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cIm9yYW5nZVwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJ5ZWxsb3dcIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwiZ3JlZW5cIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwiYmx1ZVwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJpbmRpZ29cIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwidmlvbGV0XCIgLz5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgVG9vbFRpcEV4YW1wbGU6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PHt9PiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyXG4gICAgICBzdHlsZT17e1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgIH19XG4gICAgICB0b29sdGlwPVwiRXhhbXBsZSB0b29sdGlwXCJcbiAgICAgIGN1cnNvcj1cInBvaW50ZXJcIlxuICAgIC8+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgSUN1cnNvclRlc3RDb21wb25lbnRQcm9wcyB7XG4gIGN1cnNvcjogQ3Vyc29yXG59XG5cbmNvbnN0IEN1cnNvclRlc3RDb21wb25lbnQ6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PElDdXJzb3JUZXN0Q29tcG9uZW50UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdXaW4zMiBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdjb2x1bW4nfX0+XG4gICAgICA8VGV4dD57cHJvcHMuY3Vyc29yfTwvVGV4dD5cbiAgICAgIDxWaWV3V2luMzIgY3Vyc29yPXtwcm9wcy5jdXJzb3J9IHN0eWxlPXtzdHlsZXMuYmxhY2tib3h9IC8+XG4gICAgPC9WaWV3V2luMzI+XG4gIClcbn1cblxuY29uc3QgQ3Vyc29yRXhhbXBsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdXaW4zMiBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnIH19PlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdhdXRvJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdkZWZhdWx0JyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdoZWxwJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSduZXN3LXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbm90LWFsbG93ZWQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J25zLXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbndzZS1yZXNpemUnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3BvaW50ZXInIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3dhaXQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J21vdmUnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3RleHQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3dlLXJlc2l6ZScgLz5cbiAgICA8L1ZpZXdXaW4zMj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ1ZpZXdXaW4zMic7XG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWUgPSAnVmlld1dpbjMyIEV4YW1wbGUnO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FsbCB0aGUgc3RvY2sgVmlldyBwcm9wcyBwbHVzIFdpbjMyIHNwZWNpZmljIG9uZXMnO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdmb2N1cygpIG1ldGhvZCBleGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VhY2ggb2YgdGhlc2UgYmxhY2sgYm94ZXMgbW92ZXMgZm9jdXMgdG8gdGhlIFZpZXdXaW4zMiBvbiB0aGUgcmlnaHQnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlld1dpbjMyPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmRFdmVudHMgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdOYXRpdmUga2V5Ym9hcmRpbmcgaGFzIGJlZW4gcHJldmVudGVkJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZFRlc3RDb21wb25lbnQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSG92ZXIgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdIb3ZlciBhIHJhaW5ib3cnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEhvdmVyRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb29sdGlwIGV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGlzcGxheXMgYSB0b29sdGlwIG9uIGhvdmVyJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxUb29sVGlwRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXJzb3IgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdFYWNoIG9mIHRoZXNlIGJveGVzIHNob3VsZCBkaXNwbGF5IGEgZGlmZmVyZW50IGN1cnNvcicsXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiA8Q3Vyc29yRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiJdfQ==
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1dpbjMyVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1Rlc3RzL1ZpZXdXaW4zMlRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUNiLDZCQUErQjtBQUMvQiw2Q0FBb0U7QUFDcEUsMENBQXlDO0FBR3pDLElBQU0sTUFBTSxHQUFHLHlCQUFVLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFdBQVcsRUFBRSxPQUFPO0tBQ3JCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsS0FBSztRQUNwQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsWUFBWTtRQUM3QixjQUFjLEVBQUUsY0FBYztLQUMvQjtJQUNELGtCQUFrQixFQUFFO1FBQ2xCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLEdBQUc7UUFDYixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBQ0QsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtDQUMxRSxDQUFDLENBQUM7QUFNSDtJQUFzQywyQ0FBNkM7SUFJakYsaUNBQW1CLEtBQUs7UUFBeEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FLYjtRQVRPLGtCQUFZLEdBQWMsSUFBSSxDQUFDO1FBaUN0QixhQUFPLEdBQUcsVUFBQyxHQUFjO1lBQ3hDLEtBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVlLGNBQVEsR0FBRztZQUMxQixJQUFJLEtBQUksQ0FBQyxZQUFZLEtBQUssU0FB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LGtEQUFrRDtRQUMvRCxNQUFNLEVBQU47WUFDRSxPQUFPLG9CQUFDLHNCQUFzQixPQUFHLENBQUM7UUFDcEMsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZUhpZ2hsaWdodCB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgeyBWaWV3V2luMzIgfSBmcm9tICcuLi9WaWV3V2luMzInO1xuaW1wb3J0IHsgQ3Vyc29yLCBJS2V5Ym9hcmRFdmVudCwgSUhhbmRsZWRLZXlib2FyZEV2ZW50IH0gZnJvbSAnLi4vVmlld1dpbjMyLlByb3BzJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBib3JkZXI6IHtcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGtleUNvbXBvbmVudFJvb3Q6IHtcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZXNtb2tlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIGtleUVudGVyVmlzdWFsaXplcjoge1xuICAgIG1hcmdpbjogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBtaW5XaWR0aDogMTAwLFxuICAgIG1pbkhlaWdodDogMzAsXG4gIH0sXG4gIGJsYWNrYm94OiB7IGhlaWdodDogMzAsIHdpZHRoOiAzMCwgYm9yZGVyQ29sb3I6ICdibGFjaycsIGJvcmRlcldpZHRoOiAzIH0sXG59KTtcblxuaW50ZXJmYWNlIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSB7XG4gIGhhc0ZvY3VzOiBib29sZWFuO1xufVxuXG5jbGFzcyBGb2N1c01vdmVyVGVzdENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHByaXZhdGUgX2ZvY3VzVGFyZ2V0OiBWaWV3V2luMzIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbGVkQnk6IFJlYWN0LlJlZk9iamVjdDxWaWV3V2luMzI+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxlZEJ5ID0gUmVhY3QuY3JlYXRlUmVmPFZpZXdXaW4zMj4oKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyPlxuICAgICAgICA8Vmlld1dpbjMyIHJlZj17dGhpcy5fbGFiZWxlZEJ5fSBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJzZXBhcmF0ZSBsYWJlbCBmb3IgdGVzdFwiIGFjY2Vzc2liaWxpdHlJdGVtVHlwZT1cIkNvbW1lbnRcIiAvPlxuICAgICAgPFZpZXdXaW4zMiBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJywgbWFyZ2luVmVydGljYWw6IDUgfX0+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHQgb25QcmVzcz17dGhpcy5fb25QcmVzc30+XG4gICAgICAgICAgPFZpZXdXaW4zMiBhY2Nlc3NpYmlsaXR5TGFiZWxlZEJ5PXt0aGlzLl9sYWJlbGVkQnl9IHN0eWxlPXtzdHlsZXMuYmxhY2tib3h9IC8+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8Vmlld1dpbjMyXG4gICAgICAgICAgcmVmPXt0aGlzLl9zZXRSZWZ9XG4gICAgICAgICAgZm9jdXNhYmxlXG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3RhdGUuaGFzRm9jdXMgPyB7IGJhY2tncm91bmRDb2xvcjogJyNhZWU4ZmNmZicgfSA6IHsgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMDAwJyB9fVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXtmYWxzZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gJ0ZvY3VzOiBZZXMnIDogJ0ZvY3VzOiBObyd9PC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJlZiA9IChyZWY6IFZpZXdXaW4zMikgPT4ge1xuICAgIHRoaXMuX2ZvY3VzVGFyZ2V0ID0gcmVmO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uUHJlc3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzVGFyZ2V0LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJS2V5Ym9hcmRhYmxlQ29tcG9uZW50U3RhdGUge1xuICBsYXN0S2V5RG93bjogc3RyaW5nO1xuICBsYXN0S2V5VXA6IHN0cmluZztcbn1cblxuY29uc3QgaGFuZGxlZE5hdGl2ZUtleWJvYXJkRXZlbnRzOiBJSGFuZGxlZEtleWJvYXJkRXZlbnRbXSA9IFtcbiAgeyBrZXk6ICdBcnJvd0Rvd24nIH0sXG4gIHsga2V5OiAnQXJyb3dVcCcgfSxcbiAgeyBrZXk6ICdBcnJvd0xlZnQnIH0sXG4gIHsga2V5OiAnQXJyb3dSaWdodCcgfSxcbiAgeyBrZXk6ICdUYWInIH0sXG5dO1xuXG5jbGFzcyBLZXlib2FyZFRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSAmIElLZXlib2FyZGFibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGxhc3RLZXlEb3duOiBudWxsLFxuICAgICAgbGFzdEtleVVwOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIGtleURvd25FdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30ga2V5VXBFdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMua2V5Q29tcG9uZW50Um9vdCwgc3R5bGVzLmJvcmRlcl0gOiBzdHlsZXMua2V5Q29tcG9uZW50Um9vdH1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBvbktleVVwPXt0aGlzLl9vbktleVVwfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5fb25LZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXtmYWxzZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3N0eWxlcy5rZXlFbnRlclZpc3VhbGl6ZXJ9PlxuICAgICAgICAgICAgPFRleHQ+T25LZXlEb3duPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+LS0tLTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmxhc3RLZXlEb3duICE9PSBudWxsID8gdGhpcy5zdGF0ZS5sYXN0S2V5RG93biA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICAgICAgPFZpZXdXaW4zMiBzdHlsZT17c3R5bGVzLmtleUVudGVyVmlzdWFsaXplcn0+XG4gICAgICAgICAgICA8VGV4dD5PbktleVVwPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+LS0tLTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmxhc3RLZXlVcCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUubGFzdEtleVVwIDogJyAnfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICA8L1ZpZXdXaW4zMj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25Gb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhhc0ZvY3VzOiB0cnVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQmx1ciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbktleVVwID0gKGV2OiBJS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsYXN0S2V5VXA6IGV2Lm5hdGl2ZUV2ZW50LmtleSwgbGFzdEtleURvd246IG51bGwgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25LZXlEb3duID0gKGV2OiBJS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsYXN0S2V5RG93bjogZXYubmF0aXZlRXZlbnQua2V5LCBsYXN0S2V5VXA6IG51bGwgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJSG92ZXJDb21wb25lbnRQcm9wcyB7XG4gIGNvbG9yOiBzdHJpbmc7XG59XG5jbGFzcyBIb3ZlclRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUhvdmVyQ29tcG9uZW50UHJvcHMsIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdXaW4zMlxuICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMuX29uTW91c2VFbnRlcn1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLl9vbk1vdXNlTGVhdmV9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gW3N0eWxlcy5ibGFja2JveCwgeyBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMucHJvcHMuY29sb3IgfV0gOiBzdHlsZXMuYmxhY2tib3h9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb25Nb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNGb2N1czogZmFsc2UgfSk7XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGFzRm9jdXM6IHRydWUgfSk7XG4gIH07XG59XG5cbmNsYXNzIEhvdmVyRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkhvcml6b250YWw6IDc1LCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcgfX0+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJyZWRcIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwib3JhbmdlXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cInllbGxvd1wiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJncmVlblwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJibHVlXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cImluZGlnb1wiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJ2aW9sZXRcIiAvPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBUb29sVGlwRXhhbXBsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8e30+ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3V2luMzJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgfX1cbiAgICAgIHRvb2x0aXA9XCJFeGFtcGxlIHRvb2x0aXBcIlxuICAgICAgY3Vyc29yPVwicG9pbnRlclwiXG4gICAgLz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBJQ3Vyc29yVGVzdENvbXBvbmVudFByb3BzIHtcbiAgY3Vyc29yOiBDdXJzb3Jcbn1cblxuY29uc3QgQ3Vyc29yVGVzdENvbXBvbmVudDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8SUN1cnNvclRlc3RDb21wb25lbnRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyIHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ2NvbHVtbid9fT5cbiAgICAgIDxUZXh0Pntwcm9wcy5jdXJzb3J9PC9UZXh0PlxuICAgICAgPFZpZXdXaW4zMiBjdXJzb3I9e3Byb3BzLmN1cnNvcn0gc3R5bGU9e3N0eWxlcy5ibGFja2JveH0gLz5cbiAgICA8L1ZpZXdXaW4zMj5cbiAgKVxufVxuXG5jb25zdCBDdXJzb3JFeGFtcGxlOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcgfX0+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2F1dG8nIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2RlZmF1bHQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2hlbHAnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J25lc3ctcmVzaXplJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdub3QtYWxsb3dlZCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbnMtcmVzaXplJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdud3NlLXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0ncG9pbnRlcicgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nd2FpdCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbW92ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0ndGV4dCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nd2UtcmVzaXplJyAvPlxuICAgIDwvVmlld1dpbjMyPlxuICApO1xufVxuY2xhc3MgRW5hYmxlRm9jdXNSaW5nRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsIG1hcmdpblZlcnRpY2FsOiA1IH19PlxuICAgICAgICA8Vmlld1dpbjMyXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3BpbmsnLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXt0cnVlfVxuICAgICAgICAgIGZvY3VzYWJsZVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHQ+ZW5hYmxlRm9jdXNSaW5nIHNldCB0byB0cnVlPC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICAgPFZpZXdXaW4zMlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJyxcbiAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGVuYWJsZUZvY3VzUmluZz17ZmFsc2V9XG4gICAgICAgICAgZm9jdXNhYmxlXG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5fb25Gb2N1c31cbiAgICAgICAgICBvbkJsdXI9e3RoaXMuX29uQmx1cn1cbiAgICAgICAgPlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VGV4dD5lbmFibGVGb2N1c1Jpbmcgc2V0IHRvIGZhbHNlPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUuaGFzRm9jdXMgPyAnRm9jdXM6IFllcycgOiAnRm9jdXM6IE5vJ308L1RleHQ+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cblxuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ1ZpZXdXaW4zMic7XG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWUgPSAnVmlld1dpbjMyIEV4YW1wbGUnO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FsbCB0aGUgc3RvY2sgVmlldyBwcm9wcyBwbHVzIFdpbjMyIHNwZWNpZmljIG9uZXMnO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdmb2N1cygpIG1ldGhvZCBleGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VhY2ggb2YgdGhlc2UgYmxhY2sgYm94ZXMgbW92ZXMgZm9jdXMgdG8gdGhlIFZpZXdXaW4zMiBvbiB0aGUgcmlnaHQnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlld1dpbjMyPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmRFdmVudHMgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdOYXRpdmUga2V5Ym9hcmRpbmcgaGFzIGJlZW4gcHJldmVudGVkJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZFRlc3RDb21wb25lbnQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSG92ZXIgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdIb3ZlciBhIHJhaW5ib3cnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEhvdmVyRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb29sdGlwIGV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGlzcGxheXMgYSB0b29sdGlwIG9uIGhvdmVyJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxUb29sVGlwRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXJzb3IgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdFYWNoIG9mIHRoZXNlIGJveGVzIHNob3VsZCBkaXNwbGF5IGEgZGlmZmVyZW50IGN1cnNvcicsXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiA8Q3Vyc29yRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdFbmFibGVGb2N1c1JpbmcgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdEaXNwbGF5cyBmb2N1cyB2aXN1YWxzIHRoYXQgYXJlIGRyaXZlbiBieSBuYXRpdmUnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEVuYWJsZUZvY3VzUmluZ0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iXX0=
|