@cyberkaidev/ui 0.1.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 (152) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +721 -0
  3. package/lib/module/ThemeProvider.js +84 -0
  4. package/lib/module/ThemeProvider.js.map +1 -0
  5. package/lib/module/components/AppBar.js +185 -0
  6. package/lib/module/components/AppBar.js.map +1 -0
  7. package/lib/module/components/BounceEffect.js +50 -0
  8. package/lib/module/components/BounceEffect.js.map +1 -0
  9. package/lib/module/components/Button.js +48 -0
  10. package/lib/module/components/Button.js.map +1 -0
  11. package/lib/module/components/Chips.js +94 -0
  12. package/lib/module/components/Chips.js.map +1 -0
  13. package/lib/module/components/IconButton.js +71 -0
  14. package/lib/module/components/IconButton.js.map +1 -0
  15. package/lib/module/components/InforList.js +92 -0
  16. package/lib/module/components/InforList.js.map +1 -0
  17. package/lib/module/components/LoadingApp.js +58 -0
  18. package/lib/module/components/LoadingApp.js.map +1 -0
  19. package/lib/module/components/Overlays.js +20 -0
  20. package/lib/module/components/Overlays.js.map +1 -0
  21. package/lib/module/components/RippleEffect.js +178 -0
  22. package/lib/module/components/RippleEffect.js.map +1 -0
  23. package/lib/module/components/Scaffold.js +172 -0
  24. package/lib/module/components/Scaffold.js.map +1 -0
  25. package/lib/module/components/SearchBar.js +161 -0
  26. package/lib/module/components/SearchBar.js.map +1 -0
  27. package/lib/module/components/SegmentedButton.js +151 -0
  28. package/lib/module/components/SegmentedButton.js.map +1 -0
  29. package/lib/module/components/ShapedButton.js +58 -0
  30. package/lib/module/components/ShapedButton.js.map +1 -0
  31. package/lib/module/components/SlideModal.js +196 -0
  32. package/lib/module/components/SlideModal.js.map +1 -0
  33. package/lib/module/components/TabBar.js +107 -0
  34. package/lib/module/components/TabBar.js.map +1 -0
  35. package/lib/module/components/Text.js +47 -0
  36. package/lib/module/components/Text.js.map +1 -0
  37. package/lib/module/components/TextButton.js +53 -0
  38. package/lib/module/components/TextButton.js.map +1 -0
  39. package/lib/module/components/TextInput.js +83 -0
  40. package/lib/module/components/TextInput.js.map +1 -0
  41. package/lib/module/components/Toast.js +101 -0
  42. package/lib/module/components/Toast.js.map +1 -0
  43. package/lib/module/hooks/useAppBarScroll.js +20 -0
  44. package/lib/module/hooks/useAppBarScroll.js.map +1 -0
  45. package/lib/module/hooks/usePressAndHoldRepeat.js +71 -0
  46. package/lib/module/hooks/usePressAndHoldRepeat.js.map +1 -0
  47. package/lib/module/icons/Icon.js +85 -0
  48. package/lib/module/icons/Icon.js.map +1 -0
  49. package/lib/module/index.js +42 -0
  50. package/lib/module/index.js.map +1 -0
  51. package/lib/module/package.json +1 -0
  52. package/lib/module/responsive.js +28 -0
  53. package/lib/module/responsive.js.map +1 -0
  54. package/lib/module/stores/useLoadingApp.js +14 -0
  55. package/lib/module/stores/useLoadingApp.js.map +1 -0
  56. package/lib/module/stores/useToast.js +24 -0
  57. package/lib/module/stores/useToast.js.map +1 -0
  58. package/lib/module/theme.js +86 -0
  59. package/lib/module/theme.js.map +1 -0
  60. package/lib/module/types.js +2 -0
  61. package/lib/module/types.js.map +1 -0
  62. package/lib/typescript/jest.setup.d.ts +2 -0
  63. package/lib/typescript/jest.setup.d.ts.map +1 -0
  64. package/lib/typescript/package.json +1 -0
  65. package/lib/typescript/src/ThemeProvider.d.ts +39 -0
  66. package/lib/typescript/src/ThemeProvider.d.ts.map +1 -0
  67. package/lib/typescript/src/components/AppBar.d.ts +33 -0
  68. package/lib/typescript/src/components/AppBar.d.ts.map +1 -0
  69. package/lib/typescript/src/components/BounceEffect.d.ts +12 -0
  70. package/lib/typescript/src/components/BounceEffect.d.ts.map +1 -0
  71. package/lib/typescript/src/components/Button.d.ts +24 -0
  72. package/lib/typescript/src/components/Button.d.ts.map +1 -0
  73. package/lib/typescript/src/components/Chips.d.ts +23 -0
  74. package/lib/typescript/src/components/Chips.d.ts.map +1 -0
  75. package/lib/typescript/src/components/IconButton.d.ts +14 -0
  76. package/lib/typescript/src/components/IconButton.d.ts.map +1 -0
  77. package/lib/typescript/src/components/InforList.d.ts +28 -0
  78. package/lib/typescript/src/components/InforList.d.ts.map +1 -0
  79. package/lib/typescript/src/components/LoadingApp.d.ts +8 -0
  80. package/lib/typescript/src/components/LoadingApp.d.ts.map +1 -0
  81. package/lib/typescript/src/components/Overlays.d.ts +12 -0
  82. package/lib/typescript/src/components/Overlays.d.ts.map +1 -0
  83. package/lib/typescript/src/components/RippleEffect.d.ts +18 -0
  84. package/lib/typescript/src/components/RippleEffect.d.ts.map +1 -0
  85. package/lib/typescript/src/components/Scaffold.d.ts +62 -0
  86. package/lib/typescript/src/components/Scaffold.d.ts.map +1 -0
  87. package/lib/typescript/src/components/SearchBar.d.ts +20 -0
  88. package/lib/typescript/src/components/SearchBar.d.ts.map +1 -0
  89. package/lib/typescript/src/components/SegmentedButton.d.ts +37 -0
  90. package/lib/typescript/src/components/SegmentedButton.d.ts.map +1 -0
  91. package/lib/typescript/src/components/ShapedButton.d.ts +18 -0
  92. package/lib/typescript/src/components/ShapedButton.d.ts.map +1 -0
  93. package/lib/typescript/src/components/SlideModal.d.ts +15 -0
  94. package/lib/typescript/src/components/SlideModal.d.ts.map +1 -0
  95. package/lib/typescript/src/components/TabBar.d.ts +20 -0
  96. package/lib/typescript/src/components/TabBar.d.ts.map +1 -0
  97. package/lib/typescript/src/components/Text.d.ts +26 -0
  98. package/lib/typescript/src/components/Text.d.ts.map +1 -0
  99. package/lib/typescript/src/components/TextButton.d.ts +15 -0
  100. package/lib/typescript/src/components/TextButton.d.ts.map +1 -0
  101. package/lib/typescript/src/components/TextInput.d.ts +22 -0
  102. package/lib/typescript/src/components/TextInput.d.ts.map +1 -0
  103. package/lib/typescript/src/components/Toast.d.ts +4 -0
  104. package/lib/typescript/src/components/Toast.d.ts.map +1 -0
  105. package/lib/typescript/src/hooks/useAppBarScroll.d.ts +10 -0
  106. package/lib/typescript/src/hooks/useAppBarScroll.d.ts.map +1 -0
  107. package/lib/typescript/src/hooks/usePressAndHoldRepeat.d.ts +21 -0
  108. package/lib/typescript/src/hooks/usePressAndHoldRepeat.d.ts.map +1 -0
  109. package/lib/typescript/src/icons/Icon.d.ts +64 -0
  110. package/lib/typescript/src/icons/Icon.d.ts.map +1 -0
  111. package/lib/typescript/src/index.d.ts +30 -0
  112. package/lib/typescript/src/index.d.ts.map +1 -0
  113. package/lib/typescript/src/responsive.d.ts +15 -0
  114. package/lib/typescript/src/responsive.d.ts.map +1 -0
  115. package/lib/typescript/src/stores/useLoadingApp.d.ts +14 -0
  116. package/lib/typescript/src/stores/useLoadingApp.d.ts.map +1 -0
  117. package/lib/typescript/src/stores/useToast.d.ts +25 -0
  118. package/lib/typescript/src/stores/useToast.d.ts.map +1 -0
  119. package/lib/typescript/src/theme.d.ts +51 -0
  120. package/lib/typescript/src/theme.d.ts.map +1 -0
  121. package/lib/typescript/src/types.d.ts +26 -0
  122. package/lib/typescript/src/types.d.ts.map +1 -0
  123. package/package.json +189 -0
  124. package/src/ThemeProvider.tsx +108 -0
  125. package/src/components/AppBar.tsx +226 -0
  126. package/src/components/BounceEffect.tsx +53 -0
  127. package/src/components/Button.tsx +70 -0
  128. package/src/components/Chips.tsx +115 -0
  129. package/src/components/IconButton.tsx +84 -0
  130. package/src/components/InforList.tsx +110 -0
  131. package/src/components/LoadingApp.tsx +55 -0
  132. package/src/components/Overlays.tsx +21 -0
  133. package/src/components/RippleEffect.tsx +244 -0
  134. package/src/components/Scaffold.tsx +219 -0
  135. package/src/components/SearchBar.tsx +166 -0
  136. package/src/components/SegmentedButton.tsx +206 -0
  137. package/src/components/ShapedButton.tsx +74 -0
  138. package/src/components/SlideModal.tsx +232 -0
  139. package/src/components/TabBar.tsx +122 -0
  140. package/src/components/Text.tsx +70 -0
  141. package/src/components/TextButton.tsx +57 -0
  142. package/src/components/TextInput.tsx +108 -0
  143. package/src/components/Toast.tsx +95 -0
  144. package/src/hooks/useAppBarScroll.ts +19 -0
  145. package/src/hooks/usePressAndHoldRepeat.ts +85 -0
  146. package/src/icons/Icon.tsx +51 -0
  147. package/src/index.tsx +64 -0
  148. package/src/responsive.ts +32 -0
  149. package/src/stores/useLoadingApp.ts +19 -0
  150. package/src/stores/useToast.ts +36 -0
  151. package/src/theme.ts +125 -0
  152. package/src/types.ts +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","StyleSheet","View","useTheme","useThemedStyles","heightDP","Button","Text","jsx","_jsx","jsxs","_jsxs","Title","children","color","weight","Content","onPress","styles","makeStyles","isInteractive","disabled","style","content","Container","marginB","marginT","colors","items","Children","toArray","container","marginTop","marginBottom","backgroundColor","surface","borderColor","border","map","child","index","Fragment","length","line","InforList","t","create","width","alignItems","borderRadius","radius_20","overflow","borderWidth","flexDirection","justifyContent","height","paddingHorizontal","spaces","horizontal","l","flex","marginLeft"],"sourceRoot":"../../../src","sources":["components/InforList.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import { ActivityIndicator, Modal, StyleSheet, View } from 'react-native';
4
+ import { useTheme } from "../ThemeProvider.js";
5
+ import { useLoadingApp } from "../stores/useLoadingApp.js";
6
+ import { Text } from "./Text.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ /** Blocking full-screen loading overlay. Drive it with `useLoadingApp().setLoadingVisible(...)`. */
9
+ export function LoadingApp({
10
+ label
11
+ }) {
12
+ const {
13
+ colors,
14
+ spaces
15
+ } = useTheme();
16
+ const {
17
+ visible
18
+ } = useLoadingApp();
19
+ return /*#__PURE__*/_jsx(Modal, {
20
+ visible: visible,
21
+ transparent: true,
22
+ statusBarTranslucent: true,
23
+ animationType: "fade",
24
+ children: /*#__PURE__*/_jsx(View, {
25
+ style: [styles.background, {
26
+ backgroundColor: colors.background_60
27
+ }],
28
+ children: /*#__PURE__*/_jsxs(View, {
29
+ style: styles.content,
30
+ children: [/*#__PURE__*/_jsx(ActivityIndicator, {
31
+ color: colors.text,
32
+ size: "small"
33
+ }), label ? /*#__PURE__*/_jsx(Text, {
34
+ marginL: spaces.horizontal.s,
35
+ weight: "medium",
36
+ children: label
37
+ }) : null]
38
+ })
39
+ })
40
+ });
41
+ }
42
+ const styles = StyleSheet.create({
43
+ background: {
44
+ position: 'absolute',
45
+ top: 0,
46
+ left: 0,
47
+ right: 0,
48
+ bottom: 0,
49
+ justifyContent: 'center',
50
+ alignItems: 'center'
51
+ },
52
+ content: {
53
+ flexDirection: 'row',
54
+ justifyContent: 'center',
55
+ alignItems: 'center'
56
+ }
57
+ });
58
+ //# sourceMappingURL=LoadingApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ActivityIndicator","Modal","StyleSheet","View","useTheme","useLoadingApp","Text","jsx","_jsx","jsxs","_jsxs","LoadingApp","label","colors","spaces","visible","transparent","statusBarTranslucent","animationType","children","style","styles","background","backgroundColor","background_60","content","color","text","size","marginL","horizontal","s","weight","create","position","top","left","right","bottom","justifyContent","alignItems","flexDirection"],"sourceRoot":"../../../src","sources":["components/LoadingApp.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAEzE,SAASC,QAAQ,QAAQ,qBAAkB;AAC3C,SAASC,aAAa,QAAQ,4BAAyB;AACvD,SAASC,IAAI,QAAQ,WAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAO9B;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC;AAAa,CAAC,EAAE;EAC3C,MAAM;IAAEC,MAAM;IAAEC;EAAO,CAAC,GAAGV,QAAQ,CAAC,CAAC;EACrC,MAAM;IAAEW;EAAQ,CAAC,GAAGV,aAAa,CAAC,CAAC;EAEnC,oBACEG,IAAA,CAACP,KAAK;IACJc,OAAO,EAAEA,OAAQ;IACjBC,WAAW;IACXC,oBAAoB;IACpBC,aAAa,EAAC,MAAM;IAAAC,QAAA,eAEpBX,IAAA,CAACL,IAAI;MACHiB,KAAK,EAAE,CAACC,MAAM,CAACC,UAAU,EAAE;QAAEC,eAAe,EAAEV,MAAM,CAACW;MAAc,CAAC,CAAE;MAAAL,QAAA,eAEtET,KAAA,CAACP,IAAI;QAACiB,KAAK,EAAEC,MAAM,CAACI,OAAQ;QAAAN,QAAA,gBAC1BX,IAAA,CAACR,iBAAiB;UAAC0B,KAAK,EAAEb,MAAM,CAACc,IAAK;UAACC,IAAI,EAAC;QAAO,CAAE,CAAC,EACrDhB,KAAK,gBACJJ,IAAA,CAACF,IAAI;UAACuB,OAAO,EAAEf,MAAM,CAACgB,UAAU,CAACC,CAAE;UAACC,MAAM,EAAC,QAAQ;UAAAb,QAAA,EAChDP;QAAK,CACF,CAAC,GACL,IAAI;MAAA,CACJ;IAAC,CACH;EAAC,CACF,CAAC;AAEZ;AAEA,MAAMS,MAAM,GAAGnB,UAAU,CAAC+B,MAAM,CAAC;EAC/BX,UAAU,EAAE;IACVY,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDf,OAAO,EAAE;IACPgB,aAAa,EAAE,KAAK;IACpBF,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ import { LoadingApp } from "./LoadingApp.js";
4
+ import { Toast } from "./Toast.js";
5
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * App-wide overlays (`Toast` + `LoadingApp`). Mount **once** at the root of the
8
+ * app — inside `ThemeProvider`, as a sibling of your navigator. They render
9
+ * above everything and are driven from anywhere via `useToast` / `useLoadingApp`.
10
+ */
11
+ export function Overlays({
12
+ loadingLabel
13
+ }) {
14
+ return /*#__PURE__*/_jsxs(_Fragment, {
15
+ children: [/*#__PURE__*/_jsx(Toast, {}), /*#__PURE__*/_jsx(LoadingApp, {
16
+ label: loadingLabel
17
+ })]
18
+ });
19
+ }
20
+ //# sourceMappingURL=Overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LoadingApp","Toast","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Overlays","loadingLabel","children","label"],"sourceRoot":"../../../src","sources":["components/Overlays.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,KAAK,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAOhC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAC;EAAEC;AAAoB,CAAC,EAAE;EAChD,oBACEF,KAAA,CAAAF,SAAA;IAAAK,QAAA,gBACEP,IAAA,CAACF,KAAK,IAAE,CAAC,eACTE,IAAA,CAACH,UAAU;MAACW,KAAK,EAAEF;IAAa,CAAE,CAAC;EAAA,CACnC,CAAC;AAEP","ignoreList":[]}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { Animated, Easing, I18nManager, Pressable, StyleSheet, View } from 'react-native';
5
+ import { useColors } from "../ThemeProvider.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const CIRCLE_RADIUS = 10;
8
+ const RELEASE_GROW_DURATION = 150;
9
+ const RELEASE_FADE_DURATION = 250;
10
+ const PRESS_FADE_IN_DURATION = 75;
11
+
12
+ /** Wraps a child and paints a touch ripple at the press location. */
13
+ export function RippleEffect({
14
+ children,
15
+ rippleColor,
16
+ rippleOpacity = 0.3,
17
+ rippleDuration = 400,
18
+ rippleSize = 0,
19
+ rippleContainerBorderRadius = 0,
20
+ rippleCentered = false,
21
+ rippleSequential = false,
22
+ rippleFades = true,
23
+ disabled = false,
24
+ onLayout,
25
+ onPressIn,
26
+ onPressOut,
27
+ ...pressableProps
28
+ }) {
29
+ const colors = useColors();
30
+ const color = rippleColor ?? colors.text;
31
+ const [layout, setLayout] = React.useState({
32
+ width: 0,
33
+ height: 0
34
+ });
35
+ const [rippleIds, setRippleIds] = React.useState([]);
36
+ const ripplesRef = React.useRef(new Map());
37
+ const activeRippleRef = React.useRef(null);
38
+ const uniqueRef = React.useRef(0);
39
+ const handleLayout = event => {
40
+ const {
41
+ width,
42
+ height
43
+ } = event.nativeEvent.layout;
44
+ setLayout({
45
+ width,
46
+ height
47
+ });
48
+ onLayout?.(event);
49
+ };
50
+ const handlePressIn = React.useCallback(event => {
51
+ onPressIn?.(event);
52
+ if (rippleSequential && ripplesRef.current.size) return;
53
+ const w2 = 0.5 * layout.width;
54
+ const h2 = 0.5 * layout.height;
55
+
56
+ // Fall back to the center when the gesture carries no coordinates.
57
+ const {
58
+ locationX,
59
+ locationY
60
+ } = rippleCentered || !event?.nativeEvent ? {
61
+ locationX: w2,
62
+ locationY: h2
63
+ } : event.nativeEvent;
64
+ const offsetX = Math.abs(w2 - locationX);
65
+ const offsetY = Math.abs(h2 - locationY);
66
+ const radius = rippleSize > 0 ? 0.5 * rippleSize : Math.sqrt((w2 + offsetX) ** 2 + (h2 + offsetY) ** 2);
67
+ const ripple = {
68
+ unique: uniqueRef.current++,
69
+ locationX,
70
+ locationY,
71
+ radius,
72
+ scale: new Animated.Value(0),
73
+ opacity: new Animated.Value(0)
74
+ };
75
+ ripplesRef.current.set(ripple.unique, ripple);
76
+ activeRippleRef.current = ripple.unique;
77
+ Animated.timing(ripple.scale, {
78
+ toValue: 1,
79
+ duration: rippleDuration,
80
+ easing: Easing.out(Easing.ease),
81
+ useNativeDriver: true
82
+ }).start();
83
+ Animated.timing(ripple.opacity, {
84
+ toValue: rippleOpacity,
85
+ duration: Math.min(rippleDuration, PRESS_FADE_IN_DURATION),
86
+ useNativeDriver: true
87
+ }).start();
88
+ setRippleIds(current => current.concat(ripple.unique));
89
+ }, [layout.width, layout.height, onPressIn, rippleCentered, rippleDuration, rippleOpacity, rippleSequential, rippleSize]);
90
+ const handlePressOut = React.useCallback(event => {
91
+ onPressOut?.(event);
92
+ const releasedUnique = activeRippleRef.current;
93
+ activeRippleRef.current = null;
94
+ if (releasedUnique === null) return;
95
+ const ripple = ripplesRef.current.get(releasedUnique);
96
+ if (!ripple) return;
97
+ const removeRipple = () => {
98
+ ripplesRef.current.delete(releasedUnique);
99
+ setRippleIds(current => current.filter(id => id !== releasedUnique));
100
+ };
101
+ if (!rippleFades) {
102
+ removeRipple();
103
+ return;
104
+ }
105
+ Animated.parallel([Animated.timing(ripple.scale, {
106
+ toValue: 1,
107
+ duration: RELEASE_GROW_DURATION,
108
+ useNativeDriver: true
109
+ }), Animated.timing(ripple.opacity, {
110
+ toValue: 0,
111
+ duration: RELEASE_FADE_DURATION,
112
+ useNativeDriver: true
113
+ })]).start(removeRipple);
114
+ }, [onPressOut, rippleFades]);
115
+ return /*#__PURE__*/_jsxs(Pressable, {
116
+ ...pressableProps,
117
+ disabled: disabled,
118
+ onLayout: handleLayout,
119
+ onPressIn: handlePressIn,
120
+ onPressOut: handlePressOut,
121
+ children: [children, /*#__PURE__*/_jsx(View, {
122
+ pointerEvents: "none",
123
+ style: [styles.container, {
124
+ borderRadius: rippleContainerBorderRadius
125
+ }],
126
+ children: rippleIds.map(id => {
127
+ const ripple = ripplesRef.current.get(id);
128
+ if (!ripple) return null;
129
+ return /*#__PURE__*/_jsx(RippleCircle, {
130
+ ripple: ripple,
131
+ color: color
132
+ }, id);
133
+ })
134
+ })]
135
+ });
136
+ }
137
+ function RippleCircleComponent({
138
+ ripple,
139
+ color
140
+ }) {
141
+ const {
142
+ locationX,
143
+ locationY,
144
+ radius,
145
+ scale,
146
+ opacity
147
+ } = ripple;
148
+ const rippleStyle = {
149
+ top: locationY - CIRCLE_RADIUS,
150
+ [I18nManager.isRTL ? 'right' : 'left']: locationX - CIRCLE_RADIUS,
151
+ backgroundColor: color,
152
+ opacity,
153
+ transform: [{
154
+ scale: scale.interpolate({
155
+ inputRange: [0, 1],
156
+ outputRange: [0.5 / CIRCLE_RADIUS, radius / CIRCLE_RADIUS]
157
+ })
158
+ }]
159
+ };
160
+ return /*#__PURE__*/_jsx(Animated.View, {
161
+ style: [styles.circle, rippleStyle]
162
+ });
163
+ }
164
+ const RippleCircle = /*#__PURE__*/React.memo(RippleCircleComponent);
165
+ const styles = StyleSheet.create({
166
+ container: {
167
+ ...StyleSheet.absoluteFillObject,
168
+ overflow: 'hidden'
169
+ },
170
+ circle: {
171
+ width: CIRCLE_RADIUS * 2,
172
+ height: CIRCLE_RADIUS * 2,
173
+ borderRadius: CIRCLE_RADIUS,
174
+ overflow: 'hidden',
175
+ position: 'absolute'
176
+ }
177
+ });
178
+ //# sourceMappingURL=RippleEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Animated","Easing","I18nManager","Pressable","StyleSheet","View","useColors","jsx","_jsx","jsxs","_jsxs","CIRCLE_RADIUS","RELEASE_GROW_DURATION","RELEASE_FADE_DURATION","PRESS_FADE_IN_DURATION","RippleEffect","children","rippleColor","rippleOpacity","rippleDuration","rippleSize","rippleContainerBorderRadius","rippleCentered","rippleSequential","rippleFades","disabled","onLayout","onPressIn","onPressOut","pressableProps","colors","color","text","layout","setLayout","useState","width","height","rippleIds","setRippleIds","ripplesRef","useRef","Map","activeRippleRef","uniqueRef","handleLayout","event","nativeEvent","handlePressIn","useCallback","current","size","w2","h2","locationX","locationY","offsetX","Math","abs","offsetY","radius","sqrt","ripple","unique","scale","Value","opacity","set","timing","toValue","duration","easing","out","ease","useNativeDriver","start","min","concat","handlePressOut","releasedUnique","get","removeRipple","delete","filter","id","parallel","pointerEvents","style","styles","container","borderRadius","map","RippleCircle","RippleCircleComponent","rippleStyle","top","isRTL","backgroundColor","transform","interpolate","inputRange","outputRange","circle","memo","create","absoluteFillObject","overflow","position"],"sourceRoot":"../../../src","sources":["components/RippleEffect.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+
3
+ import { FlashList } from '@shopify/flash-list';
4
+ import React from 'react';
5
+ import { View as RNView, StyleSheet } from 'react-native';
6
+ import Animated from 'react-native-reanimated';
7
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
8
+ import { useTheme } from "../ThemeProvider.js";
9
+ import { APP_BAR_HEIGHT, APP_BAR_LARGE_HEIGHT } from "./AppBar.js";
10
+ import { useTabBarHeight } from "./TabBar.js";
11
+
12
+ /**
13
+ * Which top bar the screen renders, so the scrolling region can reserve the
14
+ * matching top inset: `large` = collapsing `AppBar` (`large`), `small` = fixed
15
+ * `AppBar`/`SearchBar`, `none` = no top bar (just the page inset).
16
+ */
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ const AnimatedFlashList = Animated.createAnimatedComponent(FlashList);
19
+
20
+ /**
21
+ * Resolves the top/bottom content insets from the declared bars. `useTabBarHeight`
22
+ * already includes the bottom safe-area inset.
23
+ */
24
+ function useBarSpace(spaceTopBar, spaceBottomBar) {
25
+ const {
26
+ pageSpacing
27
+ } = useTheme();
28
+ const {
29
+ bottom: safeBottom
30
+ } = useSafeAreaInsets();
31
+ const tabBarHeight = useTabBarHeight();
32
+ let top;
33
+ if (spaceTopBar === 'large') {
34
+ top = APP_BAR_LARGE_HEIGHT;
35
+ } else if (spaceTopBar === 'small') {
36
+ top = APP_BAR_HEIGHT;
37
+ } else {
38
+ top = pageSpacing.top;
39
+ }
40
+ const bottom = spaceBottomBar ? tabBarHeight + pageSpacing.bottom : pageSpacing.bottom + safeBottom;
41
+ return {
42
+ top,
43
+ bottom,
44
+ safeBottom
45
+ };
46
+ }
47
+
48
+ /** Full-screen page container. */
49
+ function Body({
50
+ children,
51
+ surface,
52
+ testID
53
+ }) {
54
+ const {
55
+ colors
56
+ } = useTheme();
57
+ const backgroundColor = surface ? colors.surface : colors.background;
58
+ return /*#__PURE__*/_jsx(RNView, {
59
+ testID: testID,
60
+ style: [styles.body, {
61
+ backgroundColor
62
+ }],
63
+ children: children
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Non-scrolling content region with standard page insets. Content does not
69
+ * scroll under the fixed bars, so this takes no `spaceTopBar` / `spaceBottomBar`
70
+ * — pass an explicit `paddingTop` when a top bar covers it.
71
+ */
72
+ function View({
73
+ children,
74
+ paddingHorizontal,
75
+ paddingTop,
76
+ testID
77
+ }) {
78
+ const {
79
+ pageSpacing
80
+ } = useTheme();
81
+ return /*#__PURE__*/_jsx(RNView, {
82
+ testID: testID,
83
+ style: {
84
+ paddingHorizontal: paddingHorizontal ?? pageSpacing.horizontal,
85
+ paddingTop: paddingTop ?? pageSpacing.top
86
+ },
87
+ children: children
88
+ });
89
+ }
90
+
91
+ /** Scrolling content region with standard page insets. */
92
+ function ScrollView({
93
+ children,
94
+ spaceTopBar,
95
+ spaceBottomBar,
96
+ paddingHorizontal,
97
+ paddingTop,
98
+ paddingBottom,
99
+ onScroll,
100
+ testID
101
+ }) {
102
+ const {
103
+ pageSpacing
104
+ } = useTheme();
105
+ const bar = useBarSpace(spaceTopBar, spaceBottomBar);
106
+ const hPad = paddingHorizontal ?? pageSpacing.horizontal;
107
+ const tPad = paddingTop ?? bar.top;
108
+ const bPad = paddingBottom != null ? paddingBottom + bar.safeBottom : bar.bottom;
109
+ const contentContainerStyle = React.useMemo(() => ({
110
+ paddingHorizontal: hPad,
111
+ paddingTop: tPad,
112
+ paddingBottom: bPad
113
+ }), [hPad, tPad, bPad]);
114
+ return /*#__PURE__*/_jsx(Animated.ScrollView, {
115
+ testID: testID,
116
+ contentContainerStyle: contentContainerStyle,
117
+ showsVerticalScrollIndicator: false,
118
+ contentInsetAdjustmentBehavior: "never",
119
+ keyboardDismissMode: "interactive",
120
+ onScroll: onScroll,
121
+ scrollEventThrottle: onScroll ? 16 : undefined,
122
+ children: children
123
+ });
124
+ }
125
+
126
+ /** Virtualized list region with standard page insets. */
127
+ function FlashListSection({
128
+ spaceTopBar,
129
+ spaceBottomBar,
130
+ paddingHorizontal,
131
+ paddingTop,
132
+ paddingBottom,
133
+ onScroll,
134
+ drawDistance = 250,
135
+ ...rest
136
+ }) {
137
+ const {
138
+ pageSpacing
139
+ } = useTheme();
140
+ const bar = useBarSpace(spaceTopBar, spaceBottomBar);
141
+ const hPad = paddingHorizontal ?? pageSpacing.horizontal;
142
+ const tPad = paddingTop ?? bar.top;
143
+ const bPad = paddingBottom != null ? paddingBottom + bar.safeBottom : bar.bottom;
144
+ const contentContainerStyle = React.useMemo(() => ({
145
+ paddingHorizontal: hPad,
146
+ paddingTop: tPad,
147
+ paddingBottom: bPad
148
+ }), [hPad, tPad, bPad]);
149
+ const List = AnimatedFlashList;
150
+ return /*#__PURE__*/_jsx(List, {
151
+ contentContainerStyle: contentContainerStyle,
152
+ showsVerticalScrollIndicator: false,
153
+ contentInsetAdjustmentBehavior: "never",
154
+ keyboardDismissMode: "interactive",
155
+ onScroll: onScroll,
156
+ scrollEventThrottle: onScroll ? 16 : undefined,
157
+ drawDistance: drawDistance,
158
+ ...rest
159
+ });
160
+ }
161
+ export const Scaffold = {
162
+ Body,
163
+ View,
164
+ ScrollView,
165
+ FlashList: FlashListSection
166
+ };
167
+ const styles = StyleSheet.create({
168
+ body: {
169
+ flex: 1
170
+ }
171
+ });
172
+ //# sourceMappingURL=Scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FlashList","React","View","RNView","StyleSheet","Animated","useSafeAreaInsets","useTheme","APP_BAR_HEIGHT","APP_BAR_LARGE_HEIGHT","useTabBarHeight","jsx","_jsx","AnimatedFlashList","createAnimatedComponent","useBarSpace","spaceTopBar","spaceBottomBar","pageSpacing","bottom","safeBottom","tabBarHeight","top","Body","children","surface","testID","colors","backgroundColor","background","style","styles","body","paddingHorizontal","paddingTop","horizontal","ScrollView","paddingBottom","onScroll","bar","hPad","tPad","bPad","contentContainerStyle","useMemo","showsVerticalScrollIndicator","contentInsetAdjustmentBehavior","keyboardDismissMode","scrollEventThrottle","undefined","FlashListSection","drawDistance","rest","List","Scaffold","create","flex"],"sourceRoot":"../../../src","sources":["components/Scaffold.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+
3
+ import { BlurView } from 'expo-blur';
4
+ import Constants from 'expo-constants';
5
+ import React from 'react';
6
+ import { Platform, StyleSheet, TextInput, View } from 'react-native';
7
+ import { Icon } from "../icons/Icon.js";
8
+ import { useTheme, useThemedStyles } from "../ThemeProvider.js";
9
+ import { pageSpacing } from "../theme.js";
10
+ import { heightDP } from "../responsive.js";
11
+ import { Button } from "./Button.js";
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ const CONTENT_HEIGHT = heightDP(7);
14
+ const IS_IOS = Platform.OS === 'ios';
15
+
16
+ /**
17
+ * Total height of the fixed search bar, including the status bar. Uses the
18
+ * default `pageSpacing.top` — a themed override is not reflected here.
19
+ */
20
+ export const SEARCH_BAR_HEIGHT = Constants.statusBarHeight + CONTENT_HEIGHT + pageSpacing.top;
21
+ /** Fixed top search bar with a back control and a text field. */
22
+ export function SearchBar({
23
+ placeholder,
24
+ onEnter,
25
+ onBack,
26
+ editable,
27
+ autoFocus
28
+ }) {
29
+ const {
30
+ colors,
31
+ iconSize
32
+ } = useTheme();
33
+ const styles = useThemedStyles(makeStyles);
34
+ const inputRef = React.useRef(null);
35
+ const [value, setValue] = React.useState('');
36
+ const [isFocused, setIsFocused] = React.useState(false);
37
+ function handleSubmit() {
38
+ inputRef.current?.blur();
39
+ onEnter(value.trim());
40
+ }
41
+ return /*#__PURE__*/_jsxs(View, {
42
+ style: [styles.container, {
43
+ backgroundColor: colors.surface_90,
44
+ borderBottomColor: colors.border
45
+ }],
46
+ children: [IS_IOS && /*#__PURE__*/_jsx(BlurView, {
47
+ style: styles.blur,
48
+ tint: "dark",
49
+ intensity: 20
50
+ }), /*#__PURE__*/_jsxs(View, {
51
+ style: styles.content,
52
+ children: [/*#__PURE__*/_jsx(View, {
53
+ style: styles.radiusOverflow,
54
+ children: /*#__PURE__*/_jsx(Button, {
55
+ testID: "search-bar-back-button",
56
+ hitSlop: {
57
+ top: 20,
58
+ bottom: 20,
59
+ left: 25,
60
+ right: 15
61
+ },
62
+ onPress: onBack,
63
+ style: styles.iconButton,
64
+ children: /*#__PURE__*/_jsx(Icon, {
65
+ name: "arrow_back",
66
+ color: colors.text
67
+ })
68
+ })
69
+ }), /*#__PURE__*/_jsxs(View, {
70
+ style: styles.inputWrapper,
71
+ children: [/*#__PURE__*/_jsx(View, {
72
+ style: styles.icon,
73
+ pointerEvents: "none",
74
+ children: /*#__PURE__*/_jsx(Icon, {
75
+ name: "search",
76
+ size: iconSize.s,
77
+ color: colors.text
78
+ })
79
+ }), /*#__PURE__*/_jsx(TextInput, {
80
+ ref: inputRef,
81
+ testID: "search-bar-input",
82
+ style: [styles.input, {
83
+ borderColor: isFocused ? colors.primary : colors.border,
84
+ color: colors.text
85
+ }],
86
+ placeholder: placeholder,
87
+ placeholderTextColor: colors.text,
88
+ autoFocus: autoFocus,
89
+ autoCapitalize: "words",
90
+ autoCorrect: false,
91
+ autoComplete: "off",
92
+ cursorColor: colors.primary,
93
+ onChangeText: setValue,
94
+ value: value,
95
+ onSubmitEditing: handleSubmit,
96
+ onFocus: () => setIsFocused(true),
97
+ onBlur: () => setIsFocused(false),
98
+ returnKeyType: "search",
99
+ editable: editable
100
+ })]
101
+ })]
102
+ })]
103
+ });
104
+ }
105
+ function makeStyles(t) {
106
+ return StyleSheet.create({
107
+ container: {
108
+ position: 'absolute',
109
+ top: 0,
110
+ left: 0,
111
+ right: 0,
112
+ zIndex: 10,
113
+ width: '100%',
114
+ borderStyle: 'solid',
115
+ borderBottomWidth: 1
116
+ },
117
+ content: {
118
+ width: '100%',
119
+ height: CONTENT_HEIGHT,
120
+ flexDirection: 'row',
121
+ alignItems: 'center',
122
+ gap: t.spaces.horizontal.s,
123
+ marginTop: Constants.statusBarHeight,
124
+ paddingHorizontal: t.spaces.horizontal.xs
125
+ },
126
+ inputWrapper: {
127
+ position: 'relative',
128
+ flex: 1
129
+ },
130
+ input: {
131
+ height: heightDP(5.5),
132
+ borderWidth: 1,
133
+ borderRadius: t.borderRadius.radius_15,
134
+ paddingLeft: t.spaces.horizontal.l * 1.7 + t.iconSize.s,
135
+ fontSize: t.fontSizes.s
136
+ },
137
+ icon: {
138
+ position: 'absolute',
139
+ top: 0,
140
+ bottom: 0,
141
+ left: t.spaces.horizontal.l,
142
+ justifyContent: 'center',
143
+ zIndex: 2
144
+ },
145
+ iconButton: {
146
+ padding: t.spaces.horizontal.xs
147
+ },
148
+ radiusOverflow: {
149
+ borderRadius: t.borderRadius.radius_100,
150
+ overflow: 'hidden'
151
+ },
152
+ blur: {
153
+ position: 'absolute',
154
+ top: 0,
155
+ left: 0,
156
+ bottom: 0,
157
+ right: 0
158
+ }
159
+ });
160
+ }
161
+ //# sourceMappingURL=SearchBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BlurView","Constants","React","Platform","StyleSheet","TextInput","View","Icon","useTheme","useThemedStyles","pageSpacing","heightDP","Button","jsx","_jsx","jsxs","_jsxs","CONTENT_HEIGHT","IS_IOS","OS","SEARCH_BAR_HEIGHT","statusBarHeight","top","SearchBar","placeholder","onEnter","onBack","editable","autoFocus","colors","iconSize","styles","makeStyles","inputRef","useRef","value","setValue","useState","isFocused","setIsFocused","handleSubmit","current","blur","trim","style","container","backgroundColor","surface_90","borderBottomColor","border","children","tint","intensity","content","radiusOverflow","testID","hitSlop","bottom","left","right","onPress","iconButton","name","color","text","inputWrapper","icon","pointerEvents","size","s","ref","input","borderColor","primary","placeholderTextColor","autoCapitalize","autoCorrect","autoComplete","cursorColor","onChangeText","onSubmitEditing","onFocus","onBlur","returnKeyType","t","create","position","zIndex","width","borderStyle","borderBottomWidth","height","flexDirection","alignItems","gap","spaces","horizontal","marginTop","paddingHorizontal","xs","flex","borderWidth","borderRadius","radius_15","paddingLeft","l","fontSize","fontSizes","justifyContent","padding","radius_100","overflow"],"sourceRoot":"../../../src","sources":["components/SearchBar.tsx"],"mappings":"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","ignoreList":[]}