@archireport/react-native-svg-draw 1.0.3 → 1.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.
- package/lib/commonjs/components/DrawCore/ColorSlider.js +5 -2
- package/lib/commonjs/components/DrawCore/ColorSlider.js.map +1 -1
- package/lib/commonjs/components/DrawCore/CurrentAnimatedItem.js +56 -6
- package/lib/commonjs/components/DrawCore/CurrentAnimatedItem.js.map +1 -1
- package/lib/commonjs/components/DrawCore/DrawPad.js +4 -4
- package/lib/commonjs/components/DrawCore/DrawPad.js.map +1 -1
- package/lib/commonjs/components/DrawCore/Item.js +3 -5
- package/lib/commonjs/components/DrawCore/Item.js.map +1 -1
- package/lib/commonjs/components/DrawCore/StrokeSlider.js +5 -2
- package/lib/commonjs/components/DrawCore/StrokeSlider.js.map +1 -1
- package/lib/commonjs/components/DrawCore/index.js +138 -50
- package/lib/commonjs/components/DrawCore/index.js.map +1 -1
- package/lib/commonjs/components/DrawWithOptions/CancelSvg.js +35 -0
- package/lib/commonjs/components/DrawWithOptions/CancelSvg.js.map +1 -0
- package/lib/commonjs/components/DrawWithOptions/PenSvg.js +27 -0
- package/lib/commonjs/components/DrawWithOptions/PenSvg.js.map +1 -0
- package/lib/commonjs/components/DrawWithOptions/index.js +30 -1
- package/lib/commonjs/components/DrawWithOptions/index.js.map +1 -1
- package/lib/module/components/DrawCore/ColorSlider.js +6 -3
- package/lib/module/components/DrawCore/ColorSlider.js.map +1 -1
- package/lib/module/components/DrawCore/CurrentAnimatedItem.js +53 -7
- package/lib/module/components/DrawCore/CurrentAnimatedItem.js.map +1 -1
- package/lib/module/components/DrawCore/DrawPad.js +4 -4
- package/lib/module/components/DrawCore/DrawPad.js.map +1 -1
- package/lib/module/components/DrawCore/Item.js +2 -6
- package/lib/module/components/DrawCore/Item.js.map +1 -1
- package/lib/module/components/DrawCore/StrokeSlider.js +5 -2
- package/lib/module/components/DrawCore/StrokeSlider.js.map +1 -1
- package/lib/module/components/DrawCore/index.js +139 -51
- package/lib/module/components/DrawCore/index.js.map +1 -1
- package/lib/module/components/DrawWithOptions/CancelSvg.js +22 -0
- package/lib/module/components/DrawWithOptions/CancelSvg.js.map +1 -0
- package/lib/module/components/DrawWithOptions/PenSvg.js +14 -0
- package/lib/module/components/DrawWithOptions/PenSvg.js.map +1 -0
- package/lib/module/components/DrawWithOptions/index.js +28 -1
- package/lib/module/components/DrawWithOptions/index.js.map +1 -1
- package/lib/typescript/components/DrawCore/ColorSlider.d.ts +2 -1
- package/lib/typescript/components/DrawCore/CurrentAnimatedItem.d.ts +2 -1
- package/lib/typescript/components/DrawCore/StrokeSlider.d.ts +2 -1
- package/lib/typescript/components/DrawCore/index.d.ts +1 -0
- package/lib/typescript/components/DrawWithOptions/CancelSvg.d.ts +2 -0
- package/lib/typescript/components/DrawWithOptions/PenSvg.d.ts +2 -0
- package/package.json +5 -5
- package/src/components/DrawCore/ColorSlider.tsx +6 -1
- package/src/components/DrawCore/CurrentAnimatedItem.tsx +59 -8
- package/src/components/DrawCore/DrawPad.tsx +2 -2
- package/src/components/DrawCore/Item.tsx +3 -11
- package/src/components/DrawCore/StrokeSlider.tsx +5 -1
- package/src/components/DrawCore/index.tsx +1105 -970
- package/src/components/DrawWithOptions/CancelSvg.tsx +23 -0
- package/src/components/DrawWithOptions/PenSvg.tsx +14 -0
- package/src/components/DrawWithOptions/index.tsx +34 -0
- package/src/types.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["React","useCallback","useEffect","useRef","useState","Pressable","View","StyleSheet","Keyboard","DrawCore","DoubleHeadSvg","CircleSvg","SquareSvg","ArrowSvg","TextSvg","CloseSvg","ThrashSvg","SendSvg","styles","create","container","flex","backgroundColor","option","width","height","justifyContent","alignItems","marginHorizontal","toolbar","flexDirection","paddingBottom","paddingTop","paddingHorizontal","drawOptions","sendButton","borderRadius","marginLeft","bottomToolBar","DrawWithOptions","close","takeSnapshot","linearGradient","image","drawRef","drawingMode","setDrawingMode","selectedItem","setSelectedItem","onPressSend","current","showToolbar","setShowToolbar","sudDidHide","addListener","sudDidShow","event","endCoordinates","remove","deleteSelectedItem"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n Pressable,\n View,\n StyleSheet,\n ViewProps,\n ImageRequireSource,\n ImageURISource,\n Keyboard,\n} from 'react-native';\nimport DrawCore from '../DrawCore';\nimport type { DrawItemType, DrawCoreProps } from '../../types';\nimport DoubleHeadSvg from './DoubleHeadSvg';\nimport CircleSvg from './CircleSvg';\nimport SquareSvg from './SquareSvg';\nimport ArrowSvg from './ArrowSvg';\nimport TextSvg from './TextSvg';\nimport CloseSvg from './CloseSvg';\nimport ThrashSvg from './ThrashSvg';\nimport SendSvg from './SendSvg';\n\nconst styles = StyleSheet.create({\n container: { flex: 1, backgroundColor: '#000000' },\n option: {\n width: 30,\n height: 30,\n justifyContent: 'center',\n alignItems: 'center',\n marginHorizontal: 4,\n },\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: 30,\n paddingTop: 15,\n paddingHorizontal: 15,\n },\n drawOptions: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n sendButton: {\n backgroundColor: '#3a6cff',\n width: 48,\n height: 48,\n borderRadius: 24,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 20,\n },\n bottomToolBar: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingBottom: 30,\n paddingTop: 30,\n paddingHorizontal: 20,\n },\n});\n\nexport default function DrawWithOptions({\n close,\n takeSnapshot,\n linearGradient,\n image,\n}: {\n close?: () => void;\n takeSnapshot?: (snap: Promise<string | undefined>) => void;\n linearGradient: React.ComponentType<{ colors: any[] } & ViewProps>;\n image?: ImageRequireSource | ImageURISource;\n}) {\n const drawRef = useRef<DrawCoreProps>(null);\n\n const [drawingMode, setDrawingMode] = useState<DrawItemType>('ellipse');\n\n const [selectedItem, setSelectedItem] = useState(false);\n\n const onPressSend = useCallback(() => {\n if (drawRef.current) {\n takeSnapshot?.(drawRef.current.takeSnapshot());\n }\n }, [takeSnapshot]);\n\n const [showToolbar, setShowToolbar] = useState(true);\n\n useEffect(() => {\n const sudDidHide = Keyboard.addListener('keyboardDidHide', () => {\n setShowToolbar(true);\n });\n\n const sudDidShow = Keyboard.addListener('keyboardDidShow', (event) => {\n // avoid events triggered by InputAccessoryView\n if (event.endCoordinates.height > 100) {\n setShowToolbar(false);\n }\n });\n\n // cleanup function\n return () => {\n sudDidShow.remove();\n sudDidHide.remove();\n };\n }, []);\n\n return (\n <View style={styles.container}>\n <View style={styles.toolbar}>\n <Pressable style={styles.option} onPress={close}>\n <CloseSvg height={20} width={20} fill=\"#ffffff\" />\n </Pressable>\n <View style={styles.drawOptions}>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('doubleHead');\n }}\n >\n <DoubleHeadSvg\n height={20}\n width={20}\n fill=\"#ffffff\"\n opacity={drawingMode === 'doubleHead' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('singleHead');\n }}\n >\n <ArrowSvg\n height={23}\n width={23}\n fill=\"#ffffff\"\n opacity={drawingMode === 'singleHead' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('rectangle');\n }}\n >\n <SquareSvg\n height={27}\n width={27}\n fill=\"#ffffff\"\n opacity={drawingMode === 'rectangle' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('ellipse');\n }}\n >\n <CircleSvg\n fill=\"#ffffff\"\n height={26}\n width={26}\n opacity={drawingMode === 'ellipse' ? 1 : 0.5}\n />\n </Pressable>\n\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('text');\n }}\n >\n <TextSvg\n height={28}\n width={28}\n fill=\"#ffffff\"\n opacity={drawingMode === 'text' ? 1 : 0.5}\n />\n </Pressable>\n </View>\n </View>\n <DrawCore\n ref={drawRef}\n drawingMode={drawingMode}\n image={image}\n linearGradient={linearGradient}\n onSelectionChange={setSelectedItem}\n />\n\n {showToolbar ? (\n <View style={styles.bottomToolBar}>\n {selectedItem ? (\n <Pressable\n style={styles.option}\n onPress={() => {\n drawRef.current?.deleteSelectedItem();\n }}\n >\n <ThrashSvg width={28} height={28} fill=\"white\" />\n </Pressable>\n ) : null}\n <Pressable style={styles.sendButton} onPress={onPressSend}>\n <SendSvg fill=\"#fff\" width={20} height={20} />\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","useCallback","useEffect","useRef","useState","Pressable","View","StyleSheet","Keyboard","DrawCore","PenSvg","DoubleHeadSvg","CircleSvg","SquareSvg","ArrowSvg","TextSvg","CloseSvg","ThrashSvg","SendSvg","CancelSvg","styles","create","container","flex","backgroundColor","option","width","height","justifyContent","alignItems","marginHorizontal","toolbar","flexDirection","paddingBottom","paddingTop","paddingHorizontal","drawOptions","sendButton","borderRadius","marginLeft","bottomToolBar","DrawWithOptions","close","takeSnapshot","linearGradient","image","drawRef","drawingMode","setDrawingMode","selectedItem","setSelectedItem","cancelEnabled","setCancelEnabled","onPressSend","current","showToolbar","setShowToolbar","sudDidHide","addListener","sudDidShow","event","endCoordinates","remove","deleteSelectedItem","cancelLastAction"],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n Pressable,\n View,\n StyleSheet,\n ViewProps,\n ImageRequireSource,\n ImageURISource,\n Keyboard,\n} from 'react-native';\nimport DrawCore from '../DrawCore';\nimport type { DrawItemType, DrawCoreProps } from '../../types';\nimport PenSvg from './PenSvg';\nimport DoubleHeadSvg from './DoubleHeadSvg';\nimport CircleSvg from './CircleSvg';\nimport SquareSvg from './SquareSvg';\nimport ArrowSvg from './ArrowSvg';\nimport TextSvg from './TextSvg';\nimport CloseSvg from './CloseSvg';\nimport ThrashSvg from './ThrashSvg';\nimport SendSvg from './SendSvg';\nimport CancelSvg from './CancelSvg';\n\nconst styles = StyleSheet.create({\n container: { flex: 1, backgroundColor: '#000000' },\n option: {\n width: 30,\n height: 30,\n justifyContent: 'center',\n alignItems: 'center',\n marginHorizontal: 4,\n },\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: 30,\n paddingTop: 15,\n paddingHorizontal: 15,\n },\n drawOptions: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n sendButton: {\n backgroundColor: '#3a6cff',\n width: 48,\n height: 48,\n borderRadius: 24,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 20,\n },\n bottomToolBar: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n paddingBottom: 30,\n paddingTop: 30,\n paddingHorizontal: 20,\n },\n});\n\nexport default function DrawWithOptions({\n close,\n takeSnapshot,\n linearGradient,\n image,\n}: {\n close?: () => void;\n takeSnapshot?: (snap: Promise<string | undefined>) => void;\n linearGradient: React.ComponentType<{ colors: any[] } & ViewProps>;\n image?: ImageRequireSource | ImageURISource;\n}) {\n const drawRef = useRef<DrawCoreProps>(null);\n\n const [drawingMode, setDrawingMode] = useState<DrawItemType>('ellipse');\n\n const [selectedItem, setSelectedItem] = useState(false);\n\n const [cancelEnabled, setCancelEnabled] = useState(false);\n\n const onPressSend = useCallback(() => {\n if (drawRef.current) {\n takeSnapshot?.(drawRef.current.takeSnapshot());\n }\n }, [takeSnapshot]);\n\n const [showToolbar, setShowToolbar] = useState(true);\n\n useEffect(() => {\n const sudDidHide = Keyboard.addListener('keyboardDidHide', () => {\n setShowToolbar(true);\n });\n\n const sudDidShow = Keyboard.addListener('keyboardDidShow', (event) => {\n // avoid events triggered by InputAccessoryView\n if (event.endCoordinates.height > 100) {\n setShowToolbar(false);\n }\n });\n\n // cleanup function\n return () => {\n sudDidShow.remove();\n sudDidHide.remove();\n };\n }, []);\n\n return (\n <View style={styles.container}>\n <View style={styles.toolbar}>\n <Pressable style={styles.option} onPress={close}>\n <CloseSvg height={20} width={20} fill=\"#ffffff\" />\n </Pressable>\n <View style={styles.drawOptions}>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('pen');\n }}\n >\n <PenSvg\n height={23}\n width={22}\n stroke=\"#ffffff\"\n strokeWidth=\"2\"\n opacity={drawingMode === 'pen' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('doubleHead');\n }}\n >\n <DoubleHeadSvg\n height={20}\n width={20}\n fill=\"#ffffff\"\n opacity={drawingMode === 'doubleHead' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('singleHead');\n }}\n >\n <ArrowSvg\n height={23}\n width={23}\n fill=\"#ffffff\"\n opacity={drawingMode === 'singleHead' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('rectangle');\n }}\n >\n <SquareSvg\n height={27}\n width={27}\n fill=\"#ffffff\"\n opacity={drawingMode === 'rectangle' ? 1 : 0.5}\n />\n </Pressable>\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('ellipse');\n }}\n >\n <CircleSvg\n fill=\"#ffffff\"\n height={26}\n width={26}\n opacity={drawingMode === 'ellipse' ? 1 : 0.5}\n />\n </Pressable>\n\n <Pressable\n style={styles.option}\n onPress={() => {\n setDrawingMode('text');\n }}\n >\n <TextSvg\n height={28}\n width={28}\n fill=\"#ffffff\"\n opacity={drawingMode === 'text' ? 1 : 0.5}\n />\n </Pressable>\n </View>\n </View>\n <DrawCore\n ref={drawRef}\n drawingMode={drawingMode}\n image={image}\n linearGradient={linearGradient}\n onSelectionChange={setSelectedItem}\n onCancelChange={setCancelEnabled}\n />\n\n {showToolbar ? (\n <View style={styles.bottomToolBar}>\n {selectedItem ? (\n <Pressable\n style={styles.option}\n onPress={() => {\n drawRef.current?.deleteSelectedItem();\n }}\n >\n <ThrashSvg width={28} height={28} fill=\"white\" />\n </Pressable>\n ) : null}\n {cancelEnabled ? (\n <Pressable\n style={styles.option}\n onPress={() => {\n drawRef.current?.cancelLastAction();\n }}\n >\n <CancelSvg\n width={27}\n height={27}\n stroke=\"#ffffff\"\n strokeWidth={2}\n />\n </Pressable>\n ) : null}\n <Pressable style={styles.sendButton} onPress={onPressSend}>\n <SendSvg fill=\"#fff\" width={20} height={20} />\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n"]}
|
|
@@ -2,10 +2,11 @@ import React from 'react';
|
|
|
2
2
|
import { ViewProps } from 'react-native';
|
|
3
3
|
import Animated from 'react-native-reanimated';
|
|
4
4
|
import type { hslColor } from '../../types';
|
|
5
|
-
declare const ColorSlider: ({ color, linearGradient: LinearGradient, }: {
|
|
5
|
+
declare const ColorSlider: ({ color, linearGradient: LinearGradient, onColorChange, }: {
|
|
6
6
|
color: Animated.SharedValue<hslColor>;
|
|
7
7
|
linearGradient: React.ComponentType<{
|
|
8
8
|
colors: any[];
|
|
9
9
|
} & ViewProps>;
|
|
10
|
+
onColorChange: () => void;
|
|
10
11
|
}) => JSX.Element;
|
|
11
12
|
export default ColorSlider;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Animated from 'react-native-reanimated';
|
|
2
|
-
import type { DrawItem } from '../../types';
|
|
2
|
+
import type { DrawItem, Point } from '../../types';
|
|
3
|
+
export declare const pointsToPath: (points: Point[]) => string;
|
|
3
4
|
export default function CurrentAnimatedItem({ currentItem, }: {
|
|
4
5
|
currentItem: Animated.SharedValue<DrawItem | null>;
|
|
5
6
|
}): JSX.Element;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Animated from 'react-native-reanimated';
|
|
2
|
-
declare const StrokeSlider: ({ minValue, maxValue, stroke, }: {
|
|
2
|
+
declare const StrokeSlider: ({ minValue, maxValue, stroke, onStrokeChange, }: {
|
|
3
3
|
minValue: number;
|
|
4
4
|
maxValue: number;
|
|
5
5
|
stroke: Animated.SharedValue<number>;
|
|
6
|
+
onStrokeChange: () => void;
|
|
6
7
|
}) => JSX.Element;
|
|
7
8
|
export default StrokeSlider;
|
|
@@ -8,5 +8,6 @@ declare const DrawCore: React.ForwardRefExoticComponent<{
|
|
|
8
8
|
colors: any[];
|
|
9
9
|
} & ViewProps>;
|
|
10
10
|
onSelectionChange?: ((selected: boolean) => void) | undefined;
|
|
11
|
+
onCancelChange?: ((cancel: boolean) => void) | undefined;
|
|
11
12
|
} & React.RefAttributes<DrawCoreProps>>;
|
|
12
13
|
export default DrawCore;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@archireport/react-native-svg-draw",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "React Native drawing component based on SVG with editable annotations",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -65,12 +65,12 @@
|
|
|
65
65
|
"react": "17.0.2",
|
|
66
66
|
"react-native": "^0.68.2",
|
|
67
67
|
"react-native-builder-bob": "^0.18.2",
|
|
68
|
-
"react-native-gesture-handler": "^2.
|
|
69
|
-
"react-native-reanimated": "^2.
|
|
68
|
+
"react-native-gesture-handler": "^2.5.0",
|
|
69
|
+
"react-native-reanimated": "^2.9.1",
|
|
70
70
|
"react-native-svg": "^12.3.0",
|
|
71
|
-
"react-native-view-shot": "^3.
|
|
71
|
+
"react-native-view-shot": "^3.3.0",
|
|
72
72
|
"release-it": "^15.0.0",
|
|
73
|
-
"typescript": "^4.4
|
|
73
|
+
"typescript": "^4.6.4"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"react": "*",
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
PanGestureHandlerGestureEvent,
|
|
7
7
|
} from 'react-native-gesture-handler';
|
|
8
8
|
import Animated, {
|
|
9
|
+
runOnJS,
|
|
9
10
|
useAnimatedGestureHandler,
|
|
10
11
|
useAnimatedStyle,
|
|
11
12
|
useDerivedValue,
|
|
@@ -55,9 +56,11 @@ const styles = StyleSheet.create({
|
|
|
55
56
|
const ColorSlider = ({
|
|
56
57
|
color,
|
|
57
58
|
linearGradient: LinearGradient,
|
|
59
|
+
onColorChange,
|
|
58
60
|
}: {
|
|
59
61
|
color: Animated.SharedValue<hslColor>;
|
|
60
62
|
linearGradient: React.ComponentType<{ colors: any[] } & ViewProps>;
|
|
63
|
+
onColorChange: () => void;
|
|
61
64
|
}) => {
|
|
62
65
|
const sliderHeight = useSharedValue(0);
|
|
63
66
|
|
|
@@ -119,7 +122,9 @@ const ColorSlider = ({
|
|
|
119
122
|
}, 100%, 50%)`;
|
|
120
123
|
}
|
|
121
124
|
},
|
|
122
|
-
onEnd: () => {
|
|
125
|
+
onEnd: () => {
|
|
126
|
+
runOnJS(onColorChange)();
|
|
127
|
+
},
|
|
123
128
|
},
|
|
124
129
|
[]
|
|
125
130
|
);
|
|
@@ -11,12 +11,62 @@ const AnimatedRectangle = Animated.createAnimatedComponent(Rect);
|
|
|
11
11
|
|
|
12
12
|
const AnimatedLine = Animated.createAnimatedComponent(Line);
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// properties of a line
|
|
15
|
+
const line = (pointA: Point, pointB: Point) => {
|
|
16
|
+
'worklet';
|
|
17
|
+
const lengthX = pointB.x - pointA.x;
|
|
18
|
+
const lengthY = pointB.y - pointA.y;
|
|
19
|
+
return {
|
|
20
|
+
length: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),
|
|
21
|
+
angle: Math.atan2(lengthY, lengthX),
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// position of a control point
|
|
26
|
+
const controlPoint = (
|
|
27
|
+
current: Point,
|
|
28
|
+
previous: Point,
|
|
29
|
+
next: Point,
|
|
30
|
+
reverse: boolean
|
|
31
|
+
): Point => {
|
|
32
|
+
'worklet';
|
|
33
|
+
// When 'current' is the first or last point of the array, 'previous' or 'next' don't exist --> replace with 'current'
|
|
34
|
+
const p = previous || current;
|
|
35
|
+
const n = next || current;
|
|
36
|
+
const smoothing = 0.2;
|
|
37
|
+
// Properties of the opposed-line
|
|
38
|
+
const o = line(p, n);
|
|
39
|
+
// If is end-control-point, add PI to the angle to go backward
|
|
40
|
+
const angle = o.angle + (reverse ? Math.PI : 0);
|
|
41
|
+
const length = o.length * smoothing;
|
|
42
|
+
|
|
43
|
+
const x = current.x + Math.cos(angle) * length;
|
|
44
|
+
const y = current.y + Math.sin(angle) * length;
|
|
45
|
+
|
|
46
|
+
return { x: x, y: y };
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// create the bezier curve command
|
|
50
|
+
const bezierCommand = (point: Point, i: number, a: Point[]) => {
|
|
51
|
+
'worklet';
|
|
52
|
+
const endPoint: Point = controlPoint(point, a[i - 1], a[i + 1], true);
|
|
53
|
+
if (i === 1) {
|
|
54
|
+
const startPoint: Point = controlPoint(a[i - 1], a[i - 2], point, true);
|
|
55
|
+
return `C ${startPoint.x},${startPoint.y} ${endPoint.x},${endPoint.y} ${point.x},${point.y}`;
|
|
56
|
+
} else {
|
|
57
|
+
return `S ${endPoint.x},${endPoint.y} ${point.x},${point.y}`;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const pointsToPath = (points: Point[]) => {
|
|
15
62
|
'worklet';
|
|
16
63
|
return points.length > 0
|
|
17
64
|
? points.reduce(
|
|
18
|
-
(acc, point) =>
|
|
19
|
-
|
|
65
|
+
(acc, point, i, a) =>
|
|
66
|
+
i === 0
|
|
67
|
+
? `M ${point.x},${point.y}`
|
|
68
|
+
: `${acc} ${bezierCommand(point, i, a)}`,
|
|
69
|
+
''
|
|
20
70
|
)
|
|
21
71
|
: '';
|
|
22
72
|
};
|
|
@@ -158,12 +208,13 @@ export default function CurrentAnimatedItem({
|
|
|
158
208
|
}, [currentItem.value]);
|
|
159
209
|
|
|
160
210
|
const penAnimatedProps = useAnimatedProps(() => {
|
|
211
|
+
const d = pointsToPath(
|
|
212
|
+
currentItem.value?.type === 'pen'
|
|
213
|
+
? currentItem.value.data
|
|
214
|
+
: [{ x: -10, y: -10 }]
|
|
215
|
+
);
|
|
161
216
|
return {
|
|
162
|
-
d:
|
|
163
|
-
currentItem.value?.type === 'pen'
|
|
164
|
-
? currentItem.value.data
|
|
165
|
-
: [{ x: -10, y: -10 }]
|
|
166
|
-
),
|
|
217
|
+
d: d,
|
|
167
218
|
strokeWidth:
|
|
168
219
|
currentItem.value?.type === 'pen' ? currentItem.value.strokeWidth : 0,
|
|
169
220
|
stroke: hslToRgb(currentItem.value?.color || 'hsl(0, 0%, 0%)'),
|
|
@@ -78,11 +78,11 @@ const DrawPad = ({
|
|
|
78
78
|
</Marker>
|
|
79
79
|
</Defs>
|
|
80
80
|
|
|
81
|
-
<CurrentAnimatedItem currentItem={currentItem} />
|
|
82
|
-
|
|
83
81
|
{doneItems.map((item, index) => (
|
|
84
82
|
<Item key={index} item={item} onPress={onPressItem(item, index)} />
|
|
85
83
|
))}
|
|
84
|
+
|
|
85
|
+
<CurrentAnimatedItem currentItem={currentItem} />
|
|
86
86
|
</Svg>
|
|
87
87
|
|
|
88
88
|
<CurrentAnimatedText
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { View, Text, StyleSheet } from 'react-native';
|
|
3
3
|
import { G, Line, Ellipse, Rect, Path, ForeignObject } from 'react-native-svg';
|
|
4
|
-
import type { DrawItem
|
|
5
|
-
|
|
6
|
-
const transformPointsToPath = (points: Point[]) => {
|
|
7
|
-
return points.length > 0
|
|
8
|
-
? points.reduce(
|
|
9
|
-
(acc, point) => `${acc} L ${point.x},${point.y}`,
|
|
10
|
-
`M ${points[0].x},${points[0].y}`
|
|
11
|
-
)
|
|
12
|
-
: '';
|
|
13
|
-
};
|
|
4
|
+
import type { DrawItem } from '../../types';
|
|
5
|
+
import { pointsToPath } from './CurrentAnimatedItem';
|
|
14
6
|
|
|
15
7
|
const styles = StyleSheet.create({
|
|
16
8
|
textZone: {
|
|
@@ -83,7 +75,7 @@ export default function Item({
|
|
|
83
75
|
case 'pen':
|
|
84
76
|
return (
|
|
85
77
|
<Path
|
|
86
|
-
d={
|
|
78
|
+
d={pointsToPath(item.data)}
|
|
87
79
|
stroke={item.color}
|
|
88
80
|
fill="none"
|
|
89
81
|
strokeWidth={item.strokeWidth}
|
|
@@ -46,10 +46,12 @@ const StrokeSlider = ({
|
|
|
46
46
|
minValue,
|
|
47
47
|
maxValue,
|
|
48
48
|
stroke,
|
|
49
|
+
onStrokeChange,
|
|
49
50
|
}: {
|
|
50
51
|
minValue: number;
|
|
51
52
|
maxValue: number;
|
|
52
53
|
stroke: Animated.SharedValue<number>;
|
|
54
|
+
onStrokeChange: () => void;
|
|
53
55
|
}) => {
|
|
54
56
|
const sliderHeight = useSharedValue(0);
|
|
55
57
|
|
|
@@ -81,7 +83,9 @@ const StrokeSlider = ({
|
|
|
81
83
|
)
|
|
82
84
|
);
|
|
83
85
|
},
|
|
84
|
-
onEnd: () => {
|
|
86
|
+
onEnd: () => {
|
|
87
|
+
runOnJS(onStrokeChange)();
|
|
88
|
+
},
|
|
85
89
|
},
|
|
86
90
|
[]
|
|
87
91
|
);
|