@herca/rn-kit 0.1.96 → 0.1.98

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.
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import { useRef } from 'react';
4
- import { StyleSheet, View, TouchableOpacity } from 'react-native';
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
5
5
  import SignatureCanvas from 'react-native-signature-canvas';
6
- import Icon from "../Icon/index.js";
7
6
  import Button from "../Button/Button.js";
8
7
  import Color from "../Color/Color.js";
8
+ import Icon from "../Icon/index.js";
9
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  const Drawing = ({
11
11
  onChange,
@@ -14,6 +14,11 @@ const Drawing = ({
14
14
  dataURL
15
15
  }) => {
16
16
  const ref = useRef(null);
17
+ const [internalDataURL, setInternalDataURL] = useState(null);
18
+ const [stepCount, setStepCount] = useState(0);
19
+ const [undoCount, setUndoCount] = useState(0);
20
+ const canUndo = stepCount - undoCount > 0;
21
+ const canRedo = undoCount > 0;
17
22
  const handleSignature = signature => {
18
23
  if (signature && onChange) {
19
24
  onChange(signature);
@@ -29,6 +34,8 @@ const Drawing = ({
29
34
  console.error('Signature pad error:', error);
30
35
  };
31
36
  const handleEnd = () => {
37
+ setStepCount(prev => prev + 1);
38
+ setUndoCount(0);
32
39
  refreshSignature();
33
40
  if (onEnd) {
34
41
  onEnd();
@@ -40,19 +47,33 @@ const Drawing = ({
40
47
  }
41
48
  };
42
49
  const undo = () => {
50
+ if (!canUndo) return;
43
51
  ref.current?.undo();
52
+ setUndoCount(prev => prev + 1);
44
53
  refreshSignature();
45
54
  };
46
55
  const redo = () => {
56
+ if (!canRedo) return;
47
57
  ref.current?.redo();
58
+ setUndoCount(prev => prev - 1);
48
59
  refreshSignature();
49
60
  };
50
61
  const clear = () => {
51
62
  ref.current?.clearSignature();
52
63
  if (onChange) {
53
64
  onChange(null);
65
+ setInternalDataURL('');
54
66
  }
67
+ setStepCount(0);
68
+ setUndoCount(0);
55
69
  };
70
+ useEffect(() => {
71
+ onChange?.(dataURL);
72
+ setInternalDataURL(dataURL);
73
+ setStepCount(dataURL ? 1 : 0);
74
+ setUndoCount(0);
75
+ // eslint-disable-next-line react-hooks/exhaustive-deps
76
+ }, [dataURL]);
56
77
  return /*#__PURE__*/_jsxs(View, {
57
78
  style: styles.container,
58
79
  children: [/*#__PURE__*/_jsx(SignatureCanvas, {
@@ -77,18 +98,22 @@ const Drawing = ({
77
98
  cacheEnabled: true,
78
99
  androidLayerType: 'hardware'
79
100
  },
80
- dataURL: dataURL
101
+ dataURL: internalDataURL
81
102
  }), /*#__PURE__*/_jsxs(View, {
82
103
  style: styles.footerConteiner,
83
104
  children: [/*#__PURE__*/_jsxs(View, {
84
105
  style: styles.actionButtonContainer,
85
106
  children: [/*#__PURE__*/_jsx(TouchableOpacity, {
86
107
  onPress: undo,
108
+ disabled: !canUndo,
109
+ style: !canUndo && styles.disabledButton,
87
110
  children: /*#__PURE__*/_jsx(Icon, {
88
111
  name: "ArrowBackAlt"
89
112
  })
90
113
  }), /*#__PURE__*/_jsx(TouchableOpacity, {
91
114
  onPress: redo,
115
+ disabled: !canRedo,
116
+ style: !canRedo && styles.disabledButton,
92
117
  children: /*#__PURE__*/_jsx(Icon, {
93
118
  name: "ArrowForwardAlt"
94
119
  })
@@ -117,6 +142,9 @@ const styles = StyleSheet.create({
117
142
  flexDirection: 'row',
118
143
  gap: 10
119
144
  },
145
+ disabledButton: {
146
+ opacity: 0.3
147
+ },
120
148
  preview: {
121
149
  width: 335,
122
150
  height: 114,
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","StyleSheet","View","TouchableOpacity","SignatureCanvas","Icon","Button","Color","jsx","_jsx","jsxs","_jsxs","Drawing","onChange","onEnd","onStart","dataURL","ref","handleSignature","signature","refreshSignature","requestAnimationFrame","current","readSignature","handleEmpty","handleError","error","console","handleEnd","handleBegin","undo","redo","clear","clearSignature","style","styles","container","children","onBegin","onOK","onEmpty","onError","descriptionText","webStyle","gray","clearText","penColor","backgroundColor","base","white100","webviewProps","cacheEnabled","androidLayerType","footerConteiner","actionButtonContainer","onPress","name","variant","color","title","size","create","height","flexDirection","justifyContent","alignContent","alignItems","gap","preview","width","marginTop"],"sourceRoot":"../../../src","sources":["Drawing/Drawing.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","useState","StyleSheet","TouchableOpacity","View","SignatureCanvas","Button","Color","Icon","jsx","_jsx","jsxs","_jsxs","Drawing","onChange","onEnd","onStart","dataURL","ref","internalDataURL","setInternalDataURL","stepCount","setStepCount","undoCount","setUndoCount","canUndo","canRedo","handleSignature","signature","refreshSignature","requestAnimationFrame","current","readSignature","handleEmpty","handleError","error","console","handleEnd","prev","handleBegin","undo","redo","clear","clearSignature","style","styles","container","children","onBegin","onOK","onEmpty","onError","descriptionText","webStyle","gray","clearText","penColor","backgroundColor","base","white100","webviewProps","cacheEnabled","androidLayerType","footerConteiner","actionButtonContainer","onPress","disabled","disabledButton","name","variant","color","title","size","create","height","flexDirection","justifyContent","alignContent","alignItems","gap","opacity","preview","width","marginTop"],"sourceRoot":"../../../src","sources":["Drawing/Drawing.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACnD,SAASC,UAAU,EAAEC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AACjE,OAAOC,eAAe,MAEf,+BAA+B;AACtC,OAAOC,MAAM,MAAM,qBAAkB;AACrC,OAAOC,KAAK,MAAM,mBAAgB;AAClC,OAAOC,IAAI,MAAM,kBAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAS3B,MAAMC,OAAO,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,KAAK;EAAEC,OAAO;EAAEC;AAAsB,CAAC,KAAK;EACvE,MAAMC,GAAG,GAAGlB,MAAM,CAA0B,IAAI,CAAC;EAEjD,MAAM,CAACmB,eAAe,EAAEC,kBAAkB,CAAC,GAAGnB,QAAQ,CAAM,IAAI,CAAC;EACjE,MAAM,CAACoB,SAAS,EAAEC,YAAY,CAAC,GAAGrB,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAM,CAACsB,SAAS,EAAEC,YAAY,CAAC,GAAGvB,QAAQ,CAAC,CAAC,CAAC;EAE7C,MAAMwB,OAAO,GAAGJ,SAAS,GAAGE,SAAS,GAAG,CAAC;EACzC,MAAMG,OAAO,GAAGH,SAAS,GAAG,CAAC;EAE7B,MAAMI,eAAe,GAAIC,SAAiB,IAAK;IAC7C,IAAIA,SAAS,IAAId,QAAQ,EAAE;MACzBA,QAAQ,CAACc,SAAS,CAAC;IACrB;EACF,CAAC;EAED,MAAMC,gBAAgB,GAAGA,CAAA,KACvBC,qBAAqB,CAAC,MAAMZ,GAAG,CAACa,OAAO,EAAEC,aAAa,CAAC,CAAC,CAAC;EAE3D,MAAMC,WAAW,GAAGA,CAAA,KAAM;IACxB,IAAInB,QAAQ,EAAE;MACZA,QAAQ,CAAC,IAAI,CAAC;IAChB;EACF,CAAC;EAED,MAAMoB,WAAW,GAAIC,KAAY,IAAK;IACpCC,OAAO,CAACD,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;EAC9C,CAAC;EAED,MAAME,SAAS,GAAGA,CAAA,KAAM;IACtBf,YAAY,CAAEgB,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;IAChCd,YAAY,CAAC,CAAC,CAAC;IACfK,gBAAgB,CAAC,CAAC;IAClB,IAAId,KAAK,EAAE;MACTA,KAAK,CAAC,CAAC;IACT;EACF,CAAC;EAED,MAAMwB,WAAW,GAAGA,CAAA,KAAM;IACxB,IAAIvB,OAAO,EAAE;MACXA,OAAO,CAAC,CAAC;IACX;EACF,CAAC;EAED,MAAMwB,IAAI,GAAGA,CAAA,KAAM;IACjB,IAAI,CAACf,OAAO,EAAE;IACdP,GAAG,CAACa,OAAO,EAAES,IAAI,CAAC,CAAC;IACnBhB,YAAY,CAAEc,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;IAChCT,gBAAgB,CAAC,CAAC;EACpB,CAAC;EAED,MAAMY,IAAI,GAAGA,CAAA,KAAM;IACjB,IAAI,CAACf,OAAO,EAAE;IACdR,GAAG,CAACa,OAAO,EAAEU,IAAI,CAAC,CAAC;IACnBjB,YAAY,CAAEc,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;IAChCT,gBAAgB,CAAC,CAAC;EACpB,CAAC;EAED,MAAMa,KAAK,GAAGA,CAAA,KAAM;IAClBxB,GAAG,CAACa,OAAO,EAAEY,cAAc,CAAC,CAAC;IAC7B,IAAI7B,QAAQ,EAAE;MACZA,QAAQ,CAAC,IAAI,CAAC;MACdM,kBAAkB,CAAC,EAAE,CAAC;IACxB;IACAE,YAAY,CAAC,CAAC,CAAC;IACfE,YAAY,CAAC,CAAC,CAAC;EACjB,CAAC;EAEDzB,SAAS,CAAC,MAAM;IACde,QAAQ,GAAGG,OAAO,CAAC;IACnBG,kBAAkB,CAACH,OAAO,CAAC;IAE3BK,YAAY,CAACL,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7BO,YAAY,CAAC,CAAC,CAAC;IACf;EACF,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;EAEb,oBACEL,KAAA,CAACR,IAAI;IAACwC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5BrC,IAAA,CAACL,eAAe;MACda,GAAG,EAAEA,GAAI;MACTH,KAAK,EAAEsB,SAAU;MACjBW,OAAO,EAAET,WAAY;MACrBU,IAAI,EAAEtB,eAAgB;MACtBuB,OAAO,EAAEjB,WAAY;MACrBkB,OAAO,EAAEjB,WAAY;MACrBkB,eAAe,EAAC,GAAG;MACnBC,QAAQ,EAAE;AAClB,6DAA6D9C,KAAK,CAAC+C,IAAI,CAAC,GAAG,CAAC;AAC5E,iDAAiD/C,KAAK,CAAC+C,IAAI,CAAC,GAAG,CAAC;AAChE;AACA;AACA;AACA,SAAU;MACFC,SAAS,EAAE,OAAQ;MACnBC,QAAQ,EAAEjD,KAAK,CAAC+C,IAAI,CAAC,GAAG,CAAE;MAC1BG,eAAe,EAAElD,KAAK,CAACmD,IAAI,CAACC,QAAS;MACrCC,YAAY,EAAE;QACZC,YAAY,EAAE,IAAI;QAClBC,gBAAgB,EAAE;MACpB,CAAE;MACF7C,OAAO,EAAEE;IAAgB,CAC1B,CAAC,eACFP,KAAA,CAACR,IAAI;MAACwC,KAAK,EAAEC,MAAM,CAACkB,eAAgB;MAAAhB,QAAA,gBAClCnC,KAAA,CAACR,IAAI;QAACwC,KAAK,EAAEC,MAAM,CAACmB,qBAAsB;QAAAjB,QAAA,gBACxCrC,IAAA,CAACP,gBAAgB;UACf8D,OAAO,EAAEzB,IAAK;UACd0B,QAAQ,EAAE,CAACzC,OAAQ;UACnBmB,KAAK,EAAE,CAACnB,OAAO,IAAIoB,MAAM,CAACsB,cAAe;UAAApB,QAAA,eAEzCrC,IAAA,CAACF,IAAI;YAAC4D,IAAI,EAAC;UAAc,CAAE;QAAC,CACZ,CAAC,eACnB1D,IAAA,CAACP,gBAAgB;UACf8D,OAAO,EAAExB,IAAK;UACdyB,QAAQ,EAAE,CAACxC,OAAQ;UACnBkB,KAAK,EAAE,CAAClB,OAAO,IAAImB,MAAM,CAACsB,cAAe;UAAApB,QAAA,eAEzCrC,IAAA,CAACF,IAAI;YAAC4D,IAAI,EAAC;UAAiB,CAAE;QAAC,CACf,CAAC;MAAA,CACf,CAAC,eACP1D,IAAA,CAACJ,MAAM;QACL+D,OAAO,EAAC,SAAS;QACjBC,KAAK,EAAC,SAAS;QACfC,KAAK,EAAC,OAAO;QACbC,IAAI,EAAC,OAAO;QACZP,OAAO,EAAEvB;MAAM,CAChB,CAAC;IAAA,CACE,CAAC;EAAA,CACH,CAAC;AAEX,CAAC;AAED,MAAMG,MAAM,GAAG3C,UAAU,CAACuE,MAAM,CAAC;EAC/B3B,SAAS,EAAE;IACT4B,MAAM,EAAE;EACV,CAAC;EACDX,eAAe,EAAE;IACfY,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,eAAe;IAC/BC,YAAY,EAAE,QAAQ;IACtBC,UAAU,EAAE;EACd,CAAC;EACDd,qBAAqB,EAAE;IACrBW,aAAa,EAAE,KAAK;IACpBI,GAAG,EAAE;EACP,CAAC;EACDZ,cAAc,EAAE;IACda,OAAO,EAAE;EACX,CAAC;EACDC,OAAO,EAAE;IACPC,KAAK,EAAE,GAAG;IACVR,MAAM,EAAE,GAAG;IACXjB,eAAe,EAAE,SAAS;IAC1BmB,cAAc,EAAE,QAAQ;IACxBE,UAAU,EAAE,QAAQ;IACpBK,SAAS,EAAE;EACb;AACF,CAAC,CAAC;AAEF,eAAetE,OAAO","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Drawing.d.ts","sourceRoot":"","sources":["../../../../src/Drawing/Drawing.tsx"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,OAAO,GAAI,uCAAuC,YAAY,4CAiGnE,CAAC;AA0BF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Drawing.d.ts","sourceRoot":"","sources":["../../../../src/Drawing/Drawing.tsx"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,OAAO,GAAI,uCAAuC,YAAY,4CAkInE,CAAC;AA6BF,eAAe,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herca/rn-kit",
3
- "version": "0.1.96",
3
+ "version": "0.1.98",
4
4
  "description": "React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,11 +1,11 @@
1
- import { useRef } from 'react';
2
- import { StyleSheet, View, TouchableOpacity } from 'react-native';
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
3
3
  import SignatureCanvas, {
4
4
  type SignatureViewRef,
5
5
  } from 'react-native-signature-canvas';
6
- import Icon from '../Icon';
7
6
  import Button from '../Button/Button';
8
7
  import Color from '../Color/Color';
8
+ import Icon from '../Icon';
9
9
 
10
10
  interface DrawingProps {
11
11
  onChange?: (value?: string | undefined | null) => void;
@@ -17,6 +17,13 @@ interface DrawingProps {
17
17
  const Drawing = ({ onChange, onEnd, onStart, dataURL }: DrawingProps) => {
18
18
  const ref = useRef<SignatureViewRef | null>(null);
19
19
 
20
+ const [internalDataURL, setInternalDataURL] = useState<any>(null);
21
+ const [stepCount, setStepCount] = useState(0);
22
+ const [undoCount, setUndoCount] = useState(0);
23
+
24
+ const canUndo = stepCount - undoCount > 0;
25
+ const canRedo = undoCount > 0;
26
+
20
27
  const handleSignature = (signature: string) => {
21
28
  if (signature && onChange) {
22
29
  onChange(signature);
@@ -37,6 +44,8 @@ const Drawing = ({ onChange, onEnd, onStart, dataURL }: DrawingProps) => {
37
44
  };
38
45
 
39
46
  const handleEnd = () => {
47
+ setStepCount((prev) => prev + 1);
48
+ setUndoCount(0);
40
49
  refreshSignature();
41
50
  if (onEnd) {
42
51
  onEnd();
@@ -50,12 +59,16 @@ const Drawing = ({ onChange, onEnd, onStart, dataURL }: DrawingProps) => {
50
59
  };
51
60
 
52
61
  const undo = () => {
62
+ if (!canUndo) return;
53
63
  ref.current?.undo();
64
+ setUndoCount((prev) => prev + 1);
54
65
  refreshSignature();
55
66
  };
56
67
 
57
68
  const redo = () => {
69
+ if (!canRedo) return;
58
70
  ref.current?.redo();
71
+ setUndoCount((prev) => prev - 1);
59
72
  refreshSignature();
60
73
  };
61
74
 
@@ -63,9 +76,21 @@ const Drawing = ({ onChange, onEnd, onStart, dataURL }: DrawingProps) => {
63
76
  ref.current?.clearSignature();
64
77
  if (onChange) {
65
78
  onChange(null);
79
+ setInternalDataURL('');
66
80
  }
81
+ setStepCount(0);
82
+ setUndoCount(0);
67
83
  };
68
84
 
85
+ useEffect(() => {
86
+ onChange?.(dataURL);
87
+ setInternalDataURL(dataURL);
88
+
89
+ setStepCount(dataURL ? 1 : 0);
90
+ setUndoCount(0);
91
+ // eslint-disable-next-line react-hooks/exhaustive-deps
92
+ }, [dataURL]);
93
+
69
94
  return (
70
95
  <View style={styles.container}>
71
96
  <SignatureCanvas
@@ -90,14 +115,22 @@ const Drawing = ({ onChange, onEnd, onStart, dataURL }: DrawingProps) => {
90
115
  cacheEnabled: true,
91
116
  androidLayerType: 'hardware',
92
117
  }}
93
- dataURL={dataURL}
118
+ dataURL={internalDataURL}
94
119
  />
95
120
  <View style={styles.footerConteiner}>
96
121
  <View style={styles.actionButtonContainer}>
97
- <TouchableOpacity onPress={undo}>
122
+ <TouchableOpacity
123
+ onPress={undo}
124
+ disabled={!canUndo}
125
+ style={!canUndo && styles.disabledButton}
126
+ >
98
127
  <Icon name="ArrowBackAlt" />
99
128
  </TouchableOpacity>
100
- <TouchableOpacity onPress={redo}>
129
+ <TouchableOpacity
130
+ onPress={redo}
131
+ disabled={!canRedo}
132
+ style={!canRedo && styles.disabledButton}
133
+ >
101
134
  <Icon name="ArrowForwardAlt" />
102
135
  </TouchableOpacity>
103
136
  </View>
@@ -127,6 +160,9 @@ const styles = StyleSheet.create({
127
160
  flexDirection: 'row',
128
161
  gap: 10,
129
162
  },
163
+ disabledButton: {
164
+ opacity: 0.3,
165
+ },
130
166
  preview: {
131
167
  width: 335,
132
168
  height: 114,