expo-snowui 1.0.0
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/LICENSE.txt +674 -0
- package/README.md +16 -0
- package/lib/module/component/snow-break.js +15 -0
- package/lib/module/component/snow-break.js.map +1 -0
- package/lib/module/component/snow-dropdown.js +66 -0
- package/lib/module/component/snow-dropdown.js.map +1 -0
- package/lib/module/component/snow-fill-view.js +40 -0
- package/lib/module/component/snow-fill-view.js.map +1 -0
- package/lib/module/component/snow-grid.js +70 -0
- package/lib/module/component/snow-grid.js.map +1 -0
- package/lib/module/component/snow-header.js +20 -0
- package/lib/module/component/snow-header.js.map +1 -0
- package/lib/module/component/snow-image-button.js +98 -0
- package/lib/module/component/snow-image-button.js.map +1 -0
- package/lib/module/component/snow-image-grid.js +84 -0
- package/lib/module/component/snow-image-grid.js.map +1 -0
- package/lib/module/component/snow-input.js +51 -0
- package/lib/module/component/snow-input.js.map +1 -0
- package/lib/module/component/snow-label.js +20 -0
- package/lib/module/component/snow-label.js.map +1 -0
- package/lib/module/component/snow-modal.js +49 -0
- package/lib/module/component/snow-modal.js.map +1 -0
- package/lib/module/component/snow-range-slider.js +247 -0
- package/lib/module/component/snow-range-slider.js.map +1 -0
- package/lib/module/component/snow-safe-area.js +22 -0
- package/lib/module/component/snow-safe-area.js.map +1 -0
- package/lib/module/component/snow-tabs.js +62 -0
- package/lib/module/component/snow-tabs.js.map +1 -0
- package/lib/module/component/snow-text-button.js +102 -0
- package/lib/module/component/snow-text-button.js.map +1 -0
- package/lib/module/component/snow-text.js +34 -0
- package/lib/module/component/snow-text.js.map +1 -0
- package/lib/module/component/snow-toggle.js +38 -0
- package/lib/module/component/snow-toggle.js.map +1 -0
- package/lib/module/context/snow-focus-context.js +39 -0
- package/lib/module/context/snow-focus-context.js.map +1 -0
- package/lib/module/context/snow-style-context.js +54 -0
- package/lib/module/context/snow-style-context.js.map +1 -0
- package/lib/module/index.js +63 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/snow-app.js +40 -0
- package/lib/module/snow-app.js.map +1 -0
- package/lib/module/snow-style.js +392 -0
- package/lib/module/snow-style.js.map +1 -0
- package/lib/module/snow-ui.js +19 -0
- package/lib/module/snow-ui.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/index.d.ts +42 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/package.json +163 -0
- package/src/component/snow-break.js +9 -0
- package/src/component/snow-dropdown.js +64 -0
- package/src/component/snow-fill-view.js +36 -0
- package/src/component/snow-grid.js +74 -0
- package/src/component/snow-header.js +18 -0
- package/src/component/snow-image-button.js +98 -0
- package/src/component/snow-image-grid.js +87 -0
- package/src/component/snow-input.js +47 -0
- package/src/component/snow-label.js +18 -0
- package/src/component/snow-modal.js +46 -0
- package/src/component/snow-range-slider.js +263 -0
- package/src/component/snow-safe-area.js +17 -0
- package/src/component/snow-tabs.js +62 -0
- package/src/component/snow-text-button.js +106 -0
- package/src/component/snow-text.js +31 -0
- package/src/component/snow-toggle.js +32 -0
- package/src/context/snow-focus-context.js +37 -0
- package/src/context/snow-style-context.js +46 -0
- package/src/index.tsx +63 -0
- package/src/snow-app.js +27 -0
- package/src/snow-style.js +399 -0
- package/src/snow-ui.js +16 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { PanResponder, Pressable, View, findNodeHandle } from "react-native";
|
|
5
|
+
import { useDebouncedCallback } from 'use-debounce';
|
|
6
|
+
import { useFocusContext } from "../context/snow-focus-context.js";
|
|
7
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
const min = 0.0;
|
|
10
|
+
const max = 1.0;
|
|
11
|
+
const step = 0.01;
|
|
12
|
+
|
|
13
|
+
/* spread props
|
|
14
|
+
nextFocusLeft
|
|
15
|
+
nextFocusRight
|
|
16
|
+
nextFocusUp
|
|
17
|
+
nextFocusDown
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// This is a tricky component because props.value can be debounced
|
|
21
|
+
// The numerical value the component provides is `percent`
|
|
22
|
+
// This is a float between 0.0 and 1.0, to ease multiplication
|
|
23
|
+
|
|
24
|
+
// The slider has two primary components, the thumb and the track.
|
|
25
|
+
// The thumb's position within the track determines the `percent` used throughout the component
|
|
26
|
+
// However, that position can also be decided by the parent by passing in a percent
|
|
27
|
+
// When the component is being manually updated, then parent updates should be ignored
|
|
28
|
+
// Otherwise the parent should take priority
|
|
29
|
+
|
|
30
|
+
// I first tried @react-native-community/slider
|
|
31
|
+
// It did not offer enough customization of the track and thumb
|
|
32
|
+
|
|
33
|
+
// I then tried @react-native-assets/slider
|
|
34
|
+
// It completely breaks in Android or Web, depending on the version of react I override it to use
|
|
35
|
+
|
|
36
|
+
// After a handful of other libraries still had problems, I rolled my own
|
|
37
|
+
export function SnowRangeSlider(props) {
|
|
38
|
+
const {
|
|
39
|
+
SnowStyle,
|
|
40
|
+
SnowConfig
|
|
41
|
+
} = useStyleContext(props);
|
|
42
|
+
const {
|
|
43
|
+
allowFocusing,
|
|
44
|
+
setLockedElement,
|
|
45
|
+
lockedElement
|
|
46
|
+
} = useFocusContext();
|
|
47
|
+
const isDraggingRef = React.useRef(false);
|
|
48
|
+
const [percent, setPercent] = React.useState(0);
|
|
49
|
+
const percentRef = React.useRef(percent);
|
|
50
|
+
const [thumbFocus, setThumbFocus] = React.useState(false);
|
|
51
|
+
const elementRef = React.useRef(null);
|
|
52
|
+
const [applyStepInterval, setApplyStepInterval] = React.useState(null);
|
|
53
|
+
let sliderWidth = SnowStyle.component.rangeSlider.trackWrapper.width;
|
|
54
|
+
if (props.width) {
|
|
55
|
+
sliderWidth = props.width;
|
|
56
|
+
}
|
|
57
|
+
const layoutsRef = React.useRef({
|
|
58
|
+
slider: sliderWidth,
|
|
59
|
+
track: 0,
|
|
60
|
+
thumb: 0,
|
|
61
|
+
leftTrack: 0,
|
|
62
|
+
rightTrack: sliderWidth
|
|
63
|
+
});
|
|
64
|
+
let onValueChange = props.onValueChange;
|
|
65
|
+
if (props.debounce) {
|
|
66
|
+
onValueChange = useDebouncedCallback(props.onValueChange, SnowConfig.inputDebounceMilliseconds);
|
|
67
|
+
}
|
|
68
|
+
const thumbPositionToPercent = positionX => {
|
|
69
|
+
let actionPositionX = positionX - layoutsRef.current.track.x - layoutsRef.current.thumb.width / 2;
|
|
70
|
+
if (actionPositionX < 0) {
|
|
71
|
+
actionPositionX = 0;
|
|
72
|
+
}
|
|
73
|
+
if (actionPositionX > sliderWidth) {
|
|
74
|
+
actionPositionX = sliderWidth;
|
|
75
|
+
}
|
|
76
|
+
let newPercent = actionPositionX / sliderWidth;
|
|
77
|
+
if (newPercent < 0) {
|
|
78
|
+
newPercent = 0;
|
|
79
|
+
}
|
|
80
|
+
if (newPercent > 1) {
|
|
81
|
+
newPercent = 1;
|
|
82
|
+
}
|
|
83
|
+
setPercent(newPercent);
|
|
84
|
+
percentRef.current = newPercent;
|
|
85
|
+
};
|
|
86
|
+
const panRef = React.useRef(PanResponder.create({
|
|
87
|
+
onStartShouldSetPanResponder: () => true,
|
|
88
|
+
onMoveShouldSetPanResponder: () => true,
|
|
89
|
+
onPanResponderEnd: () => {
|
|
90
|
+
isDraggingRef.current = false;
|
|
91
|
+
onValueChange(percentRef.current);
|
|
92
|
+
},
|
|
93
|
+
onPanResponderRelease: () => {
|
|
94
|
+
isDraggingRef.current = false;
|
|
95
|
+
onValueChange(percentRef.current);
|
|
96
|
+
},
|
|
97
|
+
onPanResponderMove: (pressEvent, gestureState) => {
|
|
98
|
+
isDraggingRef.current = true;
|
|
99
|
+
let positionX = gestureState.moveX;
|
|
100
|
+
if (!positionX) {
|
|
101
|
+
positionX = gestureState.x0;
|
|
102
|
+
}
|
|
103
|
+
thumbPositionToPercent(positionX);
|
|
104
|
+
},
|
|
105
|
+
onPanResponderGrant: (pressEvent, gestureState) => {
|
|
106
|
+
isDraggingRef.current = true;
|
|
107
|
+
let positionX = gestureState.moveX;
|
|
108
|
+
if (!positionX) {
|
|
109
|
+
positionX = gestureState.x0;
|
|
110
|
+
}
|
|
111
|
+
thumbPositionToPercent(positionX);
|
|
112
|
+
}
|
|
113
|
+
}));
|
|
114
|
+
React.useEffect(() => {
|
|
115
|
+
if (!isDraggingRef.current) {
|
|
116
|
+
setPercent(props.percent);
|
|
117
|
+
}
|
|
118
|
+
}, [props.percent]);
|
|
119
|
+
React.useEffect(() => {
|
|
120
|
+
percentRef.current = percent;
|
|
121
|
+
}, [percent]);
|
|
122
|
+
React.useEffect(() => {
|
|
123
|
+
if (props.setRemoteCallbacks) {
|
|
124
|
+
props.setRemoteCallbacks(callbacks => {
|
|
125
|
+
callbacks['slider'] = sliderHandleRemote;
|
|
126
|
+
return callbacks;
|
|
127
|
+
});
|
|
128
|
+
return () => {
|
|
129
|
+
props.setRemoteCallbacks(callbacks => {
|
|
130
|
+
callbacks['slider'] = null;
|
|
131
|
+
return callbacks;
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
const applyStep = amount => {
|
|
137
|
+
let result = percentRef.current + amount;
|
|
138
|
+
if (result < min) {
|
|
139
|
+
result = min;
|
|
140
|
+
}
|
|
141
|
+
if (result > max) {
|
|
142
|
+
result = max;
|
|
143
|
+
}
|
|
144
|
+
percentRef.current = result;
|
|
145
|
+
setPercent(result);
|
|
146
|
+
onValueChange(result);
|
|
147
|
+
};
|
|
148
|
+
const longPress = (amount, action) => {
|
|
149
|
+
if (action === 0) {
|
|
150
|
+
applyStep(amount);
|
|
151
|
+
setApplyStepInterval(setInterval(() => {
|
|
152
|
+
applyStep(amount);
|
|
153
|
+
}, 100));
|
|
154
|
+
}
|
|
155
|
+
if (action === 1) {
|
|
156
|
+
clearInterval(applyStepInterval);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const sliderHandleRemote = (kind, action) => {
|
|
160
|
+
if (lockedElement) {
|
|
161
|
+
if (kind === 'right') {
|
|
162
|
+
applyStep(step);
|
|
163
|
+
clearInterval(applyStepInterval);
|
|
164
|
+
} else if (kind === 'longRight') {
|
|
165
|
+
longPress(step * 2, action);
|
|
166
|
+
} else if (kind === 'left') {
|
|
167
|
+
applyStep(-step);
|
|
168
|
+
clearInterval(applyStepInterval);
|
|
169
|
+
} else if (kind === 'longLeft') {
|
|
170
|
+
longPress(-step * 2, action);
|
|
171
|
+
} else if (kind === 'down') {
|
|
172
|
+
focusThumb(false);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const focusThumb = focus => {
|
|
177
|
+
if (allowFocusing) {
|
|
178
|
+
if (focus !== thumbFocus) {
|
|
179
|
+
if (focus) {
|
|
180
|
+
setLockedElement(findNodeHandle(elementRef.current));
|
|
181
|
+
} else {
|
|
182
|
+
setLockedElement(null);
|
|
183
|
+
}
|
|
184
|
+
setThumbFocus(focus);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
const trackWrapperStyle = [SnowStyle.component.rangeSlider.trackWrapper, {
|
|
189
|
+
width: sliderWidth
|
|
190
|
+
}];
|
|
191
|
+
let thumbX = 0;
|
|
192
|
+
if (isDraggingRef.current) {
|
|
193
|
+
thumbX = percent * sliderWidth;
|
|
194
|
+
} else {
|
|
195
|
+
thumbX = percentRef.current * sliderWidth;
|
|
196
|
+
}
|
|
197
|
+
const leftTrackStyle = [SnowStyle.component.rangeSlider.leftTrack, {
|
|
198
|
+
width: thumbX
|
|
199
|
+
}];
|
|
200
|
+
let thumbStyle = [SnowStyle.component.rangeSlider.thumb, {
|
|
201
|
+
left: thumbX - SnowStyle.component.rangeSlider.thumb.width / 2
|
|
202
|
+
}];
|
|
203
|
+
if (thumbFocus) {
|
|
204
|
+
thumbStyle.push({
|
|
205
|
+
backgroundColor: 'white'
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
const handleLayout = kind => {
|
|
209
|
+
return event => {
|
|
210
|
+
let widths = {
|
|
211
|
+
...layoutsRef.current
|
|
212
|
+
};
|
|
213
|
+
widths[kind] = event.nativeEvent.layout;
|
|
214
|
+
layoutsRef.current = widths;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
return /*#__PURE__*/_jsx(View, {
|
|
218
|
+
onLayout: handleLayout('slider'),
|
|
219
|
+
style: SnowStyle.component.rangeSlider.wrapper,
|
|
220
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
221
|
+
...panRef.current.panHandlers,
|
|
222
|
+
onLayout: handleLayout('track'),
|
|
223
|
+
style: trackWrapperStyle,
|
|
224
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
225
|
+
onLayout: handleLayout('leftTrack'),
|
|
226
|
+
style: leftTrackStyle
|
|
227
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
228
|
+
onLayout: handleLayout('rightTrack'),
|
|
229
|
+
style: SnowStyle.component.rangeSlider.rightTrack
|
|
230
|
+
}), /*#__PURE__*/_jsx(Pressable, {
|
|
231
|
+
...props,
|
|
232
|
+
onLayout: handleLayout('thumb'),
|
|
233
|
+
ref: elementRef,
|
|
234
|
+
onPress: () => {
|
|
235
|
+
focusThumb(true);
|
|
236
|
+
},
|
|
237
|
+
onFocus: () => {
|
|
238
|
+
focusThumb(true);
|
|
239
|
+
},
|
|
240
|
+
focusable: true,
|
|
241
|
+
style: thumbStyle
|
|
242
|
+
})]
|
|
243
|
+
})
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
export default SnowRangeSlider;
|
|
247
|
+
//# sourceMappingURL=snow-range-slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","PanResponder","Pressable","View","findNodeHandle","useDebouncedCallback","useFocusContext","useStyleContext","jsx","_jsx","jsxs","_jsxs","min","max","step","SnowRangeSlider","props","SnowStyle","SnowConfig","allowFocusing","setLockedElement","lockedElement","isDraggingRef","useRef","percent","setPercent","useState","percentRef","thumbFocus","setThumbFocus","elementRef","applyStepInterval","setApplyStepInterval","sliderWidth","component","rangeSlider","trackWrapper","width","layoutsRef","slider","track","thumb","leftTrack","rightTrack","onValueChange","debounce","inputDebounceMilliseconds","thumbPositionToPercent","positionX","actionPositionX","current","x","newPercent","panRef","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onPanResponderEnd","onPanResponderRelease","onPanResponderMove","pressEvent","gestureState","moveX","x0","onPanResponderGrant","useEffect","setRemoteCallbacks","callbacks","sliderHandleRemote","applyStep","amount","result","longPress","action","setInterval","clearInterval","kind","focusThumb","focus","trackWrapperStyle","thumbX","leftTrackStyle","thumbStyle","left","push","backgroundColor","handleLayout","event","widths","nativeEvent","layout","onLayout","style","wrapper","children","panHandlers","ref","onPress","onFocus","focusable"],"sourceRoot":"../../../src","sources":["component/snow-range-slider.js"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { View, TVFocusGuideView } from 'react-native';
|
|
4
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
export function SnowSafeArea(props) {
|
|
7
|
+
const {
|
|
8
|
+
SnowStyle
|
|
9
|
+
} = useStyleContext(props);
|
|
10
|
+
let Wrapper = View;
|
|
11
|
+
if (SnowStyle.isTV) {
|
|
12
|
+
Wrapper = TVFocusGuideView;
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/_jsx(Wrapper, {
|
|
15
|
+
autoFocus: true,
|
|
16
|
+
snowStyle: SnowStyle,
|
|
17
|
+
style: SnowStyle.component.safeArea,
|
|
18
|
+
children: props.children
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export default SnowSafeArea;
|
|
22
|
+
//# sourceMappingURL=snow-safe-area.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","TVFocusGuideView","useStyleContext","jsx","_jsx","SnowSafeArea","props","SnowStyle","Wrapper","isTV","autoFocus","snowStyle","style","component","safeArea","children"],"sourceRoot":"../../../src","sources":["component/snow-safe-area.js"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,gBAAgB,QAAQ,cAAc;AACrD,SAASC,eAAe,QAAQ,kCAA+B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE/D,OAAO,SAASC,YAAYA,CAACC,KAAK,EAAE;EAChC,MAAM;IAAEC;EAAU,CAAC,GAAGL,eAAe,CAACI,KAAK,CAAC;EAC5C,IAAIE,OAAO,GAAGR,IAAI;EAClB,IAAIO,SAAS,CAACE,IAAI,EAAE;IAChBD,OAAO,GAAGP,gBAAgB;EAC9B;EACA,oBACIG,IAAA,CAACI,OAAO;IAACE,SAAS;IAACC,SAAS,EAAEJ,SAAU;IAACK,KAAK,EAAEL,SAAS,CAACM,SAAS,CAACC,QAAS;IAAAC,QAAA,EACxET,KAAK,CAACS;EAAQ,CACV,CAAC;AAElB;AAEA,eAAeV,YAAY","ignoreList":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import SnowDropdown from "./snow-dropdown.js";
|
|
6
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
export function SnowTabs(props) {
|
|
9
|
+
const {
|
|
10
|
+
SnowStyle
|
|
11
|
+
} = useStyleContext(props);
|
|
12
|
+
if (!props.headers) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
if (!props.children) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const [tabIndex, setTabIndex] = React.useState(0);
|
|
19
|
+
const tabStyle = {
|
|
20
|
+
color: {
|
|
21
|
+
fade: SnowStyle.color.panel
|
|
22
|
+
},
|
|
23
|
+
component: {
|
|
24
|
+
textButton: {
|
|
25
|
+
fade: {
|
|
26
|
+
backgroundColor: SnowStyle.color.panel
|
|
27
|
+
},
|
|
28
|
+
fadeText: {
|
|
29
|
+
color: SnowStyle.color.text
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
imageButton: {
|
|
33
|
+
wrapper: {
|
|
34
|
+
borderColor: SnowStyle.color.panel
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const tabs = React.Children.toArray(props.children).map(child => {
|
|
40
|
+
if (/*#__PURE__*/React.isValidElement(child)) {
|
|
41
|
+
return /*#__PURE__*/React.cloneElement(child, {
|
|
42
|
+
snowStyle: tabStyle
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return child;
|
|
46
|
+
}).filter(child => child !== null);
|
|
47
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
48
|
+
children: [/*#__PURE__*/_jsx(SnowDropdown, {
|
|
49
|
+
snowStyle: tabStyle,
|
|
50
|
+
fade: true,
|
|
51
|
+
options: props.headers,
|
|
52
|
+
onValueChange: setTabIndex,
|
|
53
|
+
valueIndex: tabIndex,
|
|
54
|
+
itemsPerRow: props.headers.length
|
|
55
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
56
|
+
style: SnowStyle.component.tabs.panel,
|
|
57
|
+
children: tabs[tabIndex]
|
|
58
|
+
})]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export default SnowTabs;
|
|
62
|
+
//# sourceMappingURL=snow-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","SnowDropdown","useStyleContext","jsx","_jsx","jsxs","_jsxs","SnowTabs","props","SnowStyle","headers","children","tabIndex","setTabIndex","useState","tabStyle","color","fade","panel","component","textButton","backgroundColor","fadeText","text","imageButton","wrapper","borderColor","tabs","Children","toArray","map","child","isValidElement","cloneElement","snowStyle","filter","options","onValueChange","valueIndex","itemsPerRow","length","style"],"sourceRoot":"../../../src","sources":["component/snow-tabs.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AAEnC,OAAOC,YAAY,MAAM,oBAAiB;AAC1C,SAASC,eAAe,QAAQ,kCAA+B;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE/D,OAAO,SAASC,QAAQA,CAACC,KAAK,EAAE;EAC5B,MAAM;IAAEC;EAAU,CAAC,GAAGP,eAAe,CAACM,KAAK,CAAC;EAC5C,IAAI,CAACA,KAAK,CAACE,OAAO,EAAE;IAChB,OAAO,IAAI;EACf;EACA,IAAI,CAACF,KAAK,CAACG,QAAQ,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGd,KAAK,CAACe,QAAQ,CAAC,CAAC,CAAC;EACjD,MAAMC,QAAQ,GAAG;IACbC,KAAK,EAAE;MACHC,IAAI,EAAER,SAAS,CAACO,KAAK,CAACE;IAC1B,CAAC;IACDC,SAAS,EAAE;MACPC,UAAU,EAAE;QACRH,IAAI,EAAE;UACFI,eAAe,EAAEZ,SAAS,CAACO,KAAK,CAACE;QACrC,CAAC;QACDI,QAAQ,EAAE;UACNN,KAAK,EAAEP,SAAS,CAACO,KAAK,CAACO;QAC3B;MACJ,CAAC;MACDC,WAAW,EAAE;QACTC,OAAO,EAAE;UACLC,WAAW,EAAEjB,SAAS,CAACO,KAAK,CAACE;QACjC;MACJ;IACJ;EACJ,CAAC;EAED,MAAMS,IAAI,GAAG5B,KAAK,CAAC6B,QAAQ,CAACC,OAAO,CAACrB,KAAK,CAACG,QAAQ,CAAC,CAACmB,GAAG,CAACC,KAAK,IAAI;IAC7D,iBAAIhC,KAAK,CAACiC,cAAc,CAACD,KAAK,CAAC,EAAE;MAC7B,oBAAOhC,KAAK,CAACkC,YAAY,CAACF,KAAK,EAAE;QAAEG,SAAS,EAAEnB;MAAS,CAAC,CAAC;IAC7D;IACA,OAAOgB,KAAK;EAChB,CAAC,CAAC,CAACI,MAAM,CAACJ,KAAK,IAAIA,KAAK,KAAK,IAAI,CAAC;EAElC,oBACIzB,KAAA,CAACN,IAAI;IAAAW,QAAA,gBACDP,IAAA,CAACH,YAAY;MACTiC,SAAS,EAAEnB,QAAS;MACpBE,IAAI;MACJmB,OAAO,EAAE5B,KAAK,CAACE,OAAQ;MACvB2B,aAAa,EAAExB,WAAY;MAC3ByB,UAAU,EAAE1B,QAAS;MACrB2B,WAAW,EAAE/B,KAAK,CAACE,OAAO,CAAC8B;IAAO,CAAE,CAAC,eACzCpC,IAAA,CAACJ,IAAI;MAACyC,KAAK,EAAEhC,SAAS,CAACU,SAAS,CAACQ,IAAI,CAACT,KAAM;MAAAP,QAAA,EACvCgB,IAAI,CAACf,QAAQ;IAAC,CACb,CAAC;EAAA,CACL,CAAC;AAGf;AAEA,eAAeL,QAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Pressable, Keyboard } from 'react-native';
|
|
5
|
+
import { useFocusContext } from "../context/snow-focus-context.js";
|
|
6
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
7
|
+
import SnowText from "./snow-text.js";
|
|
8
|
+
|
|
9
|
+
/* spread props
|
|
10
|
+
nextFocusLeft
|
|
11
|
+
nextFocusRight
|
|
12
|
+
nextFocusUp
|
|
13
|
+
nextFocusDown
|
|
14
|
+
*/
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
export function SnowTextButton(props) {
|
|
17
|
+
const {
|
|
18
|
+
SnowStyle
|
|
19
|
+
} = useStyleContext(props);
|
|
20
|
+
const {
|
|
21
|
+
focusIsLocked
|
|
22
|
+
} = useFocusContext();
|
|
23
|
+
const [focused, setFocused] = React.useState(false);
|
|
24
|
+
const touchRef = React.useRef(null);
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
if (props.shouldFocus && !Keyboard.isVisible()) {
|
|
27
|
+
touchRef.current.focus();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const wrapperStyle = [SnowStyle.component.textButton.wrapper];
|
|
31
|
+
if (props.disabled) {
|
|
32
|
+
wrapperStyle.push(SnowStyle.component.textButton.disabled);
|
|
33
|
+
} else {
|
|
34
|
+
if (props.selected) {
|
|
35
|
+
wrapperStyle.push(SnowStyle.component.textButton.selected);
|
|
36
|
+
}
|
|
37
|
+
if (focused) {
|
|
38
|
+
wrapperStyle.push(SnowStyle.component.textButton.focused);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (props.fade) {
|
|
42
|
+
wrapperStyle.push(SnowStyle.component.textButton.fade);
|
|
43
|
+
}
|
|
44
|
+
if (props.tall && SnowStyle.isWeb) {
|
|
45
|
+
wrapperStyle.push(SnowStyle.component.textButton.tallWrapper);
|
|
46
|
+
}
|
|
47
|
+
if (props.style) {
|
|
48
|
+
wrapperStyle.push(props.style);
|
|
49
|
+
}
|
|
50
|
+
let textStyle = [SnowStyle.component.textButton.text];
|
|
51
|
+
if (props.title.length > 18) {
|
|
52
|
+
textStyle.push(SnowStyle.component.textButton.smallText);
|
|
53
|
+
}
|
|
54
|
+
if (props.fade) {
|
|
55
|
+
textStyle.push(SnowStyle.component.textButton.fadeText);
|
|
56
|
+
}
|
|
57
|
+
if (props.short) {
|
|
58
|
+
wrapperStyle.push(SnowStyle.component.textButton.shortWrapper);
|
|
59
|
+
textStyle.push(SnowStyle.component.textButton.smallText);
|
|
60
|
+
}
|
|
61
|
+
const onPressUnlessTyping = () => {
|
|
62
|
+
if (props.onPress && !Keyboard.isVisible()) {
|
|
63
|
+
return props.onPress();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const onLongPressUnlessTyping = () => {
|
|
67
|
+
if (props.onLongPress && !Keyboard.isVisible()) {
|
|
68
|
+
return props.onLongPress();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
let allowFocus = !focusIsLocked && !Keyboard.isVisible();
|
|
72
|
+
const changeFocus = focus => {
|
|
73
|
+
if (!focusIsLocked) {
|
|
74
|
+
setFocused(focus);
|
|
75
|
+
} else {
|
|
76
|
+
setFocused(false);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
80
|
+
...props,
|
|
81
|
+
ref: touchRef,
|
|
82
|
+
style: wrapperStyle,
|
|
83
|
+
onPress: onPressUnlessTyping,
|
|
84
|
+
onLongPress: onLongPressUnlessTyping,
|
|
85
|
+
focusable: allowFocus || focused,
|
|
86
|
+
onFocus: () => {
|
|
87
|
+
changeFocus(true);
|
|
88
|
+
},
|
|
89
|
+
onBlur: () => {
|
|
90
|
+
changeFocus(false);
|
|
91
|
+
},
|
|
92
|
+
hasTVPreferredFocus: props.shouldFocus && !Keyboard.isVisible,
|
|
93
|
+
disabled: props.disabled,
|
|
94
|
+
children: /*#__PURE__*/_jsx(SnowText, {
|
|
95
|
+
noSelect: true,
|
|
96
|
+
style: textStyle,
|
|
97
|
+
children: props.title
|
|
98
|
+
})
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export default SnowTextButton;
|
|
102
|
+
//# sourceMappingURL=snow-text-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Pressable","Keyboard","useFocusContext","useStyleContext","SnowText","jsx","_jsx","SnowTextButton","props","SnowStyle","focusIsLocked","focused","setFocused","useState","touchRef","useRef","useEffect","shouldFocus","isVisible","current","focus","wrapperStyle","component","textButton","wrapper","disabled","push","selected","fade","tall","isWeb","tallWrapper","style","textStyle","text","title","length","smallText","fadeText","short","shortWrapper","onPressUnlessTyping","onPress","onLongPressUnlessTyping","onLongPress","allowFocus","changeFocus","ref","focusable","onFocus","onBlur","hasTVPreferredFocus","children","noSelect"],"sourceRoot":"../../../src","sources":["component/snow-text-button.js"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { View, Text } from 'react-native';
|
|
4
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
export function SnowText(props) {
|
|
7
|
+
const {
|
|
8
|
+
SnowStyle
|
|
9
|
+
} = useStyleContext(props);
|
|
10
|
+
let style = [SnowStyle.component.text.text];
|
|
11
|
+
if (!props.shrink && !props.skipDefault) {
|
|
12
|
+
style.push(SnowStyle.component.text.normal);
|
|
13
|
+
}
|
|
14
|
+
if (props.noSelect) {
|
|
15
|
+
style.push(SnowStyle.component.text.noSelect);
|
|
16
|
+
}
|
|
17
|
+
if (props.style) {
|
|
18
|
+
style.push(props.style);
|
|
19
|
+
}
|
|
20
|
+
let wrapperStyle = null;
|
|
21
|
+
if (props.center) {
|
|
22
|
+
wrapperStyle = SnowStyle.component.text.center;
|
|
23
|
+
}
|
|
24
|
+
return /*#__PURE__*/_jsx(View, {
|
|
25
|
+
style: wrapperStyle,
|
|
26
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
27
|
+
style: style,
|
|
28
|
+
selectable: !props.noSelect,
|
|
29
|
+
children: props.children
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export default SnowText;
|
|
34
|
+
//# sourceMappingURL=snow-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","Text","useStyleContext","jsx","_jsx","SnowText","props","SnowStyle","style","component","text","shrink","skipDefault","push","normal","noSelect","wrapperStyle","center","children","selectable"],"sourceRoot":"../../../src","sources":["component/snow-text.js"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,eAAe,QAAQ,kCAA+B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE/D,OAAO,SAASC,QAAQA,CAACC,KAAK,EAAE;EAC5B,MAAM;IAAEC;EAAU,CAAC,GAAGL,eAAe,CAACI,KAAK,CAAC;EAE5C,IAAIE,KAAK,GAAG,CAACD,SAAS,CAACE,SAAS,CAACC,IAAI,CAACA,IAAI,CAAC;EAC3C,IAAI,CAACJ,KAAK,CAACK,MAAM,IAAI,CAACL,KAAK,CAACM,WAAW,EAAE;IACrCJ,KAAK,CAACK,IAAI,CAACN,SAAS,CAACE,SAAS,CAACC,IAAI,CAACI,MAAM,CAAC;EAC/C;EACA,IAAIR,KAAK,CAACS,QAAQ,EAAE;IAChBP,KAAK,CAACK,IAAI,CAACN,SAAS,CAACE,SAAS,CAACC,IAAI,CAACK,QAAQ,CAAC;EACjD;EACA,IAAIT,KAAK,CAACE,KAAK,EAAE;IACbA,KAAK,CAACK,IAAI,CAACP,KAAK,CAACE,KAAK,CAAC;EAC3B;EACA,IAAIQ,YAAY,GAAG,IAAI;EACvB,IAAIV,KAAK,CAACW,MAAM,EAAE;IACdD,YAAY,GAAGT,SAAS,CAACE,SAAS,CAACC,IAAI,CAACO,MAAM;EAClD;EACA,oBACIb,IAAA,CAACJ,IAAI;IAACQ,KAAK,EAAEQ,YAAa;IAAAE,QAAA,eACtBd,IAAA,CAACH,IAAI;MACDO,KAAK,EAAEA,KAAM;MACbW,UAAU,EAAE,CAACb,KAAK,CAACS,QAAS;MAC5BG,QAAQ,EAAEZ,KAAK,CAACY;IAAS,CAAE;EAAC,CAC9B,CAAC;AAEf;AAEA,eAAeb,QAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Switch, Pressable } from 'react-native';
|
|
4
|
+
import { useStyleContext } from "../context/snow-style-context.js";
|
|
5
|
+
import { SnowLabel } from "./snow-label.js";
|
|
6
|
+
|
|
7
|
+
/* spread props
|
|
8
|
+
nextFocusLeft
|
|
9
|
+
nextFocusRight
|
|
10
|
+
nextFocusUp
|
|
11
|
+
nextFocusDown
|
|
12
|
+
*/
|
|
13
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
export function SnowToggle(props) {
|
|
15
|
+
const {
|
|
16
|
+
SnowStyle
|
|
17
|
+
} = useStyleContext(props);
|
|
18
|
+
const toggleValue = () => {
|
|
19
|
+
props.onValueChange(!props.value);
|
|
20
|
+
};
|
|
21
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
22
|
+
...props,
|
|
23
|
+
onPress: toggleValue,
|
|
24
|
+
style: SnowStyle.component.toggle.center,
|
|
25
|
+
children: [/*#__PURE__*/_jsx(SnowLabel, {
|
|
26
|
+
children: props.title
|
|
27
|
+
}), /*#__PURE__*/_jsx(Switch, {
|
|
28
|
+
style: {
|
|
29
|
+
marginLeft: 'auto',
|
|
30
|
+
marginRight: 'auto'
|
|
31
|
+
},
|
|
32
|
+
value: props.value,
|
|
33
|
+
onValueChange: toggleValue
|
|
34
|
+
})]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export default SnowToggle;
|
|
38
|
+
//# sourceMappingURL=snow-toggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Switch","Pressable","useStyleContext","SnowLabel","jsx","_jsx","jsxs","_jsxs","SnowToggle","props","SnowStyle","toggleValue","onValueChange","value","onPress","style","component","toggle","center","children","title","marginLeft","marginRight"],"sourceRoot":"../../../src","sources":["component/snow-toggle.js"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,SAAS,QAAQ,cAAc;AAChD,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,SAAS,QAAQ,iBAAc;;AAExC;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOA,OAAO,SAASC,UAAUA,CAACC,KAAK,EAAE;EAC9B,MAAM;IAAEC;EAAU,CAAC,GAAGR,eAAe,CAACO,KAAK,CAAC;EAE5C,MAAME,WAAW,GAAGA,CAAA,KAAM;IACtBF,KAAK,CAACG,aAAa,CAAC,CAACH,KAAK,CAACI,KAAK,CAAC;EACrC,CAAC;EACD,oBACIN,KAAA,CAACN,SAAS;IAAA,GACFQ,KAAK;IACTK,OAAO,EAAEH,WAAY;IACrBI,KAAK,EAAEL,SAAS,CAACM,SAAS,CAACC,MAAM,CAACC,MAAO;IAAAC,QAAA,gBACzCd,IAAA,CAACF,SAAS;MAAAgB,QAAA,EAAEV,KAAK,CAACW;IAAK,CAAY,CAAC,eACpCf,IAAA,CAACL,MAAM;MACHe,KAAK,EAAE;QAAEM,UAAU,EAAE,MAAM;QAAEC,WAAW,EAAE;MAAO,CAAE;MACnDT,KAAK,EAAEJ,KAAK,CAACI,KAAM;MACnBD,aAAa,EAAED;IAAY,CAAE,CAAC;EAAA,CAC3B,CAAC;AAEpB;AAEA,eAAeH,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { SnowSafeArea } from "../component/snow-safe-area.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const FocusContext = /*#__PURE__*/React.createContext({});
|
|
8
|
+
export function useFocusContext() {
|
|
9
|
+
const value = React.useContext(FocusContext);
|
|
10
|
+
if (!value) {
|
|
11
|
+
throw new Error('useFocusContext must be wrapped in a <FocusContextProvider />');
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
export function FocusContextProvider(props) {
|
|
16
|
+
const [lockedElement, setLockedElement] = React.useState(null);
|
|
17
|
+
const focusIsLocked = !!lockedElement;
|
|
18
|
+
const allowFocusing = Platform.isTV;
|
|
19
|
+
const focusContext = {
|
|
20
|
+
allowFocusing,
|
|
21
|
+
lockedElement,
|
|
22
|
+
setLockedElement,
|
|
23
|
+
focusIsLocked
|
|
24
|
+
};
|
|
25
|
+
return /*#__PURE__*/_jsx(FocusContext.Provider, {
|
|
26
|
+
style: {
|
|
27
|
+
flex: 1
|
|
28
|
+
},
|
|
29
|
+
value: focusContext,
|
|
30
|
+
children: /*#__PURE__*/_jsx(SnowSafeArea, {
|
|
31
|
+
style: {
|
|
32
|
+
flex: 1
|
|
33
|
+
},
|
|
34
|
+
children: props.children
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export default FocusContextProvider;
|
|
39
|
+
//# sourceMappingURL=snow-focus-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Platform","SnowSafeArea","jsx","_jsx","FocusContext","createContext","useFocusContext","value","useContext","Error","FocusContextProvider","props","lockedElement","setLockedElement","useState","focusIsLocked","allowFocusing","isTV","focusContext","Provider","style","flex","children"],"sourceRoot":"../../../src","sources":["context/snow-focus-context.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,YAAY,QAAQ,gCAA6B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE1D,MAAMC,YAAY,gBAAGL,KAAK,CAACM,aAAa,CAAC,CAAC,CAAC,CAAC;AAE5C,OAAO,SAASC,eAAeA,CAAA,EAAG;EAC9B,MAAMC,KAAK,GAAGR,KAAK,CAACS,UAAU,CAACJ,YAAY,CAAC;EAC5C,IAAI,CAACG,KAAK,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,+DAA+D,CAAC;EACpF;EACA,OAAOF,KAAK;AAChB;AAEA,OAAO,SAASG,oBAAoBA,CAACC,KAAK,EAAE;EACxC,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGd,KAAK,CAACe,QAAQ,CAAC,IAAI,CAAC;EAC9D,MAAMC,aAAa,GAAG,CAAC,CAACH,aAAa;EACrC,MAAMI,aAAa,GAAGhB,QAAQ,CAACiB,IAAI;EAEnC,MAAMC,YAAY,GAAG;IACjBF,aAAa;IACbJ,aAAa;IACbC,gBAAgB;IAChBE;EACJ,CAAC;EACD,oBACIZ,IAAA,CAACC,YAAY,CAACe,QAAQ;IAClBC,KAAK,EAAE;MAAEC,IAAI,EAAE;IAAE,CAAE;IACnBd,KAAK,EAAEW,YAAa;IAAAI,QAAA,eACpBnB,IAAA,CAACF,YAAY;MAACmB,KAAK,EAAE;QAAEC,IAAI,EAAE;MAAE,CAAE;MAAAC,QAAA,EAC5BX,KAAK,CAACW;IAAQ,CACL;EAAC,CACI,CAAC;AAEhC;AAEA,eAAeZ,oBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { createStyle, getWindowHeight, getWindowWidth } from "../snow-style.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const StyleContext = /*#__PURE__*/React.createContext({});
|
|
8
|
+
export function useStyleContext(componentProps) {
|
|
9
|
+
let value = React.useContext(StyleContext);
|
|
10
|
+
if (!value) {
|
|
11
|
+
throw new Error('useStyleContext must be wrapped in a <StyleContextProvider />');
|
|
12
|
+
}
|
|
13
|
+
if (componentProps && componentProps.snowStyle) {
|
|
14
|
+
value = {
|
|
15
|
+
...value
|
|
16
|
+
};
|
|
17
|
+
value.SnowStyle = _.merge({}, value.SnowStyle, componentProps.snowStyle);
|
|
18
|
+
}
|
|
19
|
+
if (componentProps && componentProps.snowConfig) {
|
|
20
|
+
value = {
|
|
21
|
+
...value
|
|
22
|
+
};
|
|
23
|
+
value.SnowConfig = _.merge({}, value.SnowConfig, componentProps.snowConfig);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
const AppConfig = {
|
|
28
|
+
inputDebounceMilliseconds: 700
|
|
29
|
+
};
|
|
30
|
+
export function StyleContextProvider(props) {
|
|
31
|
+
let style = createStyle(props.snowStyle);
|
|
32
|
+
let config = AppConfig;
|
|
33
|
+
if (props.snowConfig) {
|
|
34
|
+
config = {
|
|
35
|
+
...config,
|
|
36
|
+
...props.snowConfig
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const context = {
|
|
40
|
+
SnowStyle: style,
|
|
41
|
+
SnowConfig: config,
|
|
42
|
+
getWindowHeight,
|
|
43
|
+
getWindowWidth
|
|
44
|
+
};
|
|
45
|
+
return /*#__PURE__*/_jsx(StyleContext.Provider, {
|
|
46
|
+
style: {
|
|
47
|
+
flex: 1
|
|
48
|
+
},
|
|
49
|
+
value: context,
|
|
50
|
+
children: props.children
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export default StyleContextProvider;
|
|
54
|
+
//# sourceMappingURL=snow-style-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","_","createStyle","getWindowHeight","getWindowWidth","jsx","_jsx","StyleContext","createContext","useStyleContext","componentProps","value","useContext","Error","snowStyle","SnowStyle","merge","snowConfig","SnowConfig","AppConfig","inputDebounceMilliseconds","StyleContextProvider","props","style","config","context","Provider","flex","children"],"sourceRoot":"../../../src","sources":["context/snow-style-context.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,WAAW,EAAEC,eAAe,EAAEC,cAAc,QAAQ,kBAAe;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE5E,MAAMC,YAAY,gBAAGP,KAAK,CAACQ,aAAa,CAAC,CAAC,CAAC,CAAC;AAE5C,OAAO,SAASC,eAAeA,CAACC,cAAc,EAAE;EAC5C,IAAIC,KAAK,GAAGX,KAAK,CAACY,UAAU,CAACL,YAAY,CAAC;EAC1C,IAAI,CAACI,KAAK,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,+DAA+D,CAAC;EACpF;EACA,IAAIH,cAAc,IAAIA,cAAc,CAACI,SAAS,EAAE;IAC5CH,KAAK,GAAG;MAAE,GAAGA;IAAM,CAAC;IACpBA,KAAK,CAACI,SAAS,GAAGd,CAAC,CAACe,KAAK,CAAC,CAAC,CAAC,EAAEL,KAAK,CAACI,SAAS,EAAEL,cAAc,CAACI,SAAS,CAAC;EAC5E;EACA,IAAIJ,cAAc,IAAIA,cAAc,CAACO,UAAU,EAAE;IAC7CN,KAAK,GAAG;MAAE,GAAGA;IAAM,CAAC;IACpBA,KAAK,CAACO,UAAU,GAAGjB,CAAC,CAACe,KAAK,CAAC,CAAC,CAAC,EAAEL,KAAK,CAACO,UAAU,EAAER,cAAc,CAACO,UAAU,CAAC;EAC/E;EACA,OAAON,KAAK;AAChB;AAEA,MAAMQ,SAAS,GAAG;EACdC,yBAAyB,EAAE;AAC/B,CAAC;AAED,OAAO,SAASC,oBAAoBA,CAACC,KAAK,EAAE;EACxC,IAAIC,KAAK,GAAGrB,WAAW,CAACoB,KAAK,CAACR,SAAS,CAAC;EACxC,IAAIU,MAAM,GAAGL,SAAS;EACtB,IAAIG,KAAK,CAACL,UAAU,EAAE;IAClBO,MAAM,GAAG;MAAE,GAAGA,MAAM;MAAE,GAAGF,KAAK,CAACL;IAAW,CAAC;EAC/C;EACA,MAAMQ,OAAO,GAAG;IACZV,SAAS,EAAEQ,KAAK;IAChBL,UAAU,EAAEM,MAAM;IAClBrB,eAAe;IACfC;EACJ,CAAC;EACD,oBACIE,IAAA,CAACC,YAAY,CAACmB,QAAQ;IAACH,KAAK,EAAE;MAAEI,IAAI,EAAE;IAAE,CAAE;IAAChB,KAAK,EAAEc,OAAQ;IAAAG,QAAA,EACrDN,KAAK,CAACM;EAAQ,CACI,CAAC;AAEhC;AAEA,eAAeP,oBAAoB","ignoreList":[]}
|