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.
Files changed (73) hide show
  1. package/LICENSE.txt +674 -0
  2. package/README.md +16 -0
  3. package/lib/module/component/snow-break.js +15 -0
  4. package/lib/module/component/snow-break.js.map +1 -0
  5. package/lib/module/component/snow-dropdown.js +66 -0
  6. package/lib/module/component/snow-dropdown.js.map +1 -0
  7. package/lib/module/component/snow-fill-view.js +40 -0
  8. package/lib/module/component/snow-fill-view.js.map +1 -0
  9. package/lib/module/component/snow-grid.js +70 -0
  10. package/lib/module/component/snow-grid.js.map +1 -0
  11. package/lib/module/component/snow-header.js +20 -0
  12. package/lib/module/component/snow-header.js.map +1 -0
  13. package/lib/module/component/snow-image-button.js +98 -0
  14. package/lib/module/component/snow-image-button.js.map +1 -0
  15. package/lib/module/component/snow-image-grid.js +84 -0
  16. package/lib/module/component/snow-image-grid.js.map +1 -0
  17. package/lib/module/component/snow-input.js +51 -0
  18. package/lib/module/component/snow-input.js.map +1 -0
  19. package/lib/module/component/snow-label.js +20 -0
  20. package/lib/module/component/snow-label.js.map +1 -0
  21. package/lib/module/component/snow-modal.js +49 -0
  22. package/lib/module/component/snow-modal.js.map +1 -0
  23. package/lib/module/component/snow-range-slider.js +247 -0
  24. package/lib/module/component/snow-range-slider.js.map +1 -0
  25. package/lib/module/component/snow-safe-area.js +22 -0
  26. package/lib/module/component/snow-safe-area.js.map +1 -0
  27. package/lib/module/component/snow-tabs.js +62 -0
  28. package/lib/module/component/snow-tabs.js.map +1 -0
  29. package/lib/module/component/snow-text-button.js +102 -0
  30. package/lib/module/component/snow-text-button.js.map +1 -0
  31. package/lib/module/component/snow-text.js +34 -0
  32. package/lib/module/component/snow-text.js.map +1 -0
  33. package/lib/module/component/snow-toggle.js +38 -0
  34. package/lib/module/component/snow-toggle.js.map +1 -0
  35. package/lib/module/context/snow-focus-context.js +39 -0
  36. package/lib/module/context/snow-focus-context.js.map +1 -0
  37. package/lib/module/context/snow-style-context.js +54 -0
  38. package/lib/module/context/snow-style-context.js.map +1 -0
  39. package/lib/module/index.js +63 -0
  40. package/lib/module/index.js.map +1 -0
  41. package/lib/module/package.json +1 -0
  42. package/lib/module/snow-app.js +40 -0
  43. package/lib/module/snow-app.js.map +1 -0
  44. package/lib/module/snow-style.js +392 -0
  45. package/lib/module/snow-style.js.map +1 -0
  46. package/lib/module/snow-ui.js +19 -0
  47. package/lib/module/snow-ui.js.map +1 -0
  48. package/lib/typescript/package.json +1 -0
  49. package/lib/typescript/src/index.d.ts +42 -0
  50. package/lib/typescript/src/index.d.ts.map +1 -0
  51. package/package.json +163 -0
  52. package/src/component/snow-break.js +9 -0
  53. package/src/component/snow-dropdown.js +64 -0
  54. package/src/component/snow-fill-view.js +36 -0
  55. package/src/component/snow-grid.js +74 -0
  56. package/src/component/snow-header.js +18 -0
  57. package/src/component/snow-image-button.js +98 -0
  58. package/src/component/snow-image-grid.js +87 -0
  59. package/src/component/snow-input.js +47 -0
  60. package/src/component/snow-label.js +18 -0
  61. package/src/component/snow-modal.js +46 -0
  62. package/src/component/snow-range-slider.js +263 -0
  63. package/src/component/snow-safe-area.js +17 -0
  64. package/src/component/snow-tabs.js +62 -0
  65. package/src/component/snow-text-button.js +106 -0
  66. package/src/component/snow-text.js +31 -0
  67. package/src/component/snow-toggle.js +32 -0
  68. package/src/context/snow-focus-context.js +37 -0
  69. package/src/context/snow-style-context.js +46 -0
  70. package/src/index.tsx +63 -0
  71. package/src/snow-app.js +27 -0
  72. package/src/snow-style.js +399 -0
  73. 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":[]}