@herca/rn-kit 0.1.25 → 0.1.27
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/README.md +2 -1
- package/lib/module/Badge/Badge.js.map +1 -1
- package/lib/module/Badge/type.js +2 -0
- package/lib/module/BottomSheet/BottomSheet.js +4 -1
- package/lib/module/BottomSheet/BottomSheet.js.map +1 -1
- package/lib/module/Button/tests/Button.test.js +70 -0
- package/lib/module/Button/tests/Button.test.js.map +1 -0
- package/lib/module/Button/type.js +1 -1
- package/lib/module/DatePicker/TimePicker.js +84 -39
- package/lib/module/DatePicker/TimePicker.js.map +1 -1
- package/lib/module/Icon/Icon.js +27 -1
- package/lib/module/Icon/Icon.js.map +1 -1
- package/lib/module/Icon/README.md +42 -26
- package/lib/module/Icon/icons/AtSign.js +22 -0
- package/lib/module/Icon/icons/AtSign.js.map +1 -0
- package/lib/module/Icon/icons/Bold.js +25 -0
- package/lib/module/Icon/icons/Bold.js.map +1 -0
- package/lib/module/Icon/icons/BriefcaseOutline.js +22 -0
- package/lib/module/Icon/icons/BriefcaseOutline.js.map +1 -0
- package/lib/module/Icon/icons/Edit.js +22 -0
- package/lib/module/Icon/icons/Edit.js.map +1 -0
- package/lib/module/Icon/icons/GlobeEarth.js +22 -0
- package/lib/module/Icon/icons/GlobeEarth.js.map +1 -0
- package/lib/module/Icon/icons/Italic.js +25 -0
- package/lib/module/Icon/icons/Italic.js.map +1 -0
- package/lib/module/Icon/icons/LockFill.js +22 -0
- package/lib/module/Icon/icons/LockFill.js.map +1 -0
- package/lib/module/Icon/icons/LogoHercaHris.js +64 -0
- package/lib/module/Icon/icons/LogoHercaHris.js.map +1 -0
- package/lib/module/Icon/icons/QuestionCircleOutline.js +22 -0
- package/lib/module/Icon/icons/QuestionCircleOutline.js.map +1 -0
- package/lib/module/Icon/icons/Scanner.js +3 -3
- package/lib/module/Icon/icons/Scanner.js.map +1 -1
- package/lib/module/Icon/icons/Search.js +2 -2
- package/lib/module/Icon/icons/Search.js.map +1 -1
- package/lib/module/Icon/icons/ShieldFill.js +22 -0
- package/lib/module/Icon/icons/ShieldFill.js.map +1 -0
- package/lib/module/Icon/icons/UnderLine.js +25 -0
- package/lib/module/Icon/icons/UnderLine.js.map +1 -0
- package/lib/module/Icon/icons/Users.js +22 -0
- package/lib/module/Icon/icons/Users.js.map +1 -0
- package/lib/module/Icon/icons/WhatsappFill.js +22 -0
- package/lib/module/Icon/icons/WhatsappFill.js.map +1 -0
- package/lib/module/Input/Input.js +17 -14
- package/lib/module/Input/Input.js.map +1 -1
- package/lib/module/Input/InputOtp.js +31 -12
- package/lib/module/Input/InputOtp.js.map +1 -1
- package/lib/module/Input/README_INPUT_OTP.md +60 -0
- package/lib/module/TextEditor/TextEditor.js +206 -4
- package/lib/module/TextEditor/TextEditor.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/Badge/Badge.d.ts.map +1 -1
- package/lib/typescript/src/Badge/type.d.ts +8 -0
- package/lib/typescript/src/Badge/type.d.ts.map +1 -1
- package/lib/typescript/src/Button/tests/Button.test.d.ts +2 -0
- package/lib/typescript/src/Button/tests/Button.test.d.ts.map +1 -0
- package/lib/typescript/src/DatePicker/TimePicker.d.ts.map +1 -1
- package/lib/typescript/src/Icon/Icon.d.ts.map +1 -1
- package/lib/typescript/src/Icon/icons/AtSign.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/AtSign.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/Bold.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/Bold.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/BriefcaseOutline.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/BriefcaseOutline.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/Edit.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/Edit.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/GlobeEarth.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/GlobeEarth.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/Italic.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/Italic.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/LockFill.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/LockFill.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/LogoHercaHris.d.ts +8 -0
- package/lib/typescript/src/Icon/icons/LogoHercaHris.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/QuestionCircleOutline.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/QuestionCircleOutline.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/Scanner.d.ts.map +1 -1
- package/lib/typescript/src/Icon/icons/ShieldFill.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/ShieldFill.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/UnderLine.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/UnderLine.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/Users.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/Users.d.ts.map +1 -0
- package/lib/typescript/src/Icon/icons/WhatsappFill.d.ts +9 -0
- package/lib/typescript/src/Icon/icons/WhatsappFill.d.ts.map +1 -0
- package/lib/typescript/src/Icon/type.d.ts +1 -1
- package/lib/typescript/src/Icon/type.d.ts.map +1 -1
- package/lib/typescript/src/Input/Input.d.ts.map +1 -1
- package/lib/typescript/src/Input/InputOtp.d.ts +1 -0
- package/lib/typescript/src/Input/InputOtp.d.ts.map +1 -1
- package/lib/typescript/src/Input/type.d.ts +1 -0
- package/lib/typescript/src/Input/type.d.ts.map +1 -1
- package/lib/typescript/src/TextEditor/TextEditor.d.ts +2 -1
- package/lib/typescript/src/TextEditor/TextEditor.d.ts.map +1 -1
- package/lib/typescript/src/TextEditor/types.d.ts +7 -0
- package/lib/typescript/src/TextEditor/types.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Badge/Badge.tsx +1 -10
- package/src/Badge/type.tsx +10 -0
- package/src/BottomSheet/BottomSheet.tsx +4 -1
- package/src/Button/tests/Button.test.tsx +49 -0
- package/src/Button/type.tsx +1 -1
- package/src/DatePicker/TimePicker.tsx +116 -52
- package/src/Icon/Icon.tsx +26 -0
- package/src/Icon/README.md +42 -26
- package/src/Icon/icons/AtSign.tsx +19 -0
- package/src/Icon/icons/Bold.tsx +22 -0
- package/src/Icon/icons/BriefcaseOutline.tsx +29 -0
- package/src/Icon/icons/Edit.tsx +23 -0
- package/src/Icon/icons/GlobeEarth.tsx +19 -0
- package/src/Icon/icons/Italic.tsx +22 -0
- package/src/Icon/icons/LockFill.tsx +19 -0
- package/src/Icon/icons/LogoHercaHris.tsx +71 -0
- package/src/Icon/icons/QuestionCircleOutline.tsx +23 -0
- package/src/Icon/icons/Scanner.tsx +2 -8
- package/src/Icon/icons/Search.tsx +2 -2
- package/src/Icon/icons/ShieldFill.tsx +19 -0
- package/src/Icon/icons/UnderLine.tsx +26 -0
- package/src/Icon/icons/Users.tsx +19 -0
- package/src/Icon/icons/WhatsappFill.tsx +23 -0
- package/src/Icon/type.tsx +14 -1
- package/src/Input/Input.tsx +22 -14
- package/src/Input/InputOtp.tsx +33 -9
- package/src/Input/README_INPUT_OTP.md +60 -0
- package/src/Input/type.tsx +1 -0
- package/src/TextEditor/TextEditor.tsx +222 -3
- package/src/TextEditor/types.tsx +7 -0
- package/src/index.tsx +8 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnderLine.d.ts","sourceRoot":"","sources":["../../../../../src/Icon/icons/UnderLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAc9B,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Users.d.ts","sourceRoot":"","sources":["../../../../../src/Icon/icons/Users.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAO1B,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhatsappFill.d.ts","sourceRoot":"","sources":["../../../../../src/Icon/icons/WhatsappFill.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAWjC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ViewStyle } from 'react-native';
|
|
2
|
-
export type IconNameProps = 'Search' | 'User' | 'Eye' | 'EyeOpen' | 'ArrowRight' | 'ArrowLeft' | 'Document' | 'Calendar' | 'ExclamationMark' | 'Download' | 'x-circle' | 'StickyNote' | 'RadioButton' | 'Pdf' | 'ArrowBackAlt' | 'ArrowForwardAlt' | 'ArrowDown' | 'ArrowUp' | 'Check' | 'Filter' | 'AirPlane' | 'Camera' | 'Image' | 'Times' | 'Plus' | 'Minus' | 'Bell' | 'file-list-check' | 'file-text' | 'bookmark-user' | 'folder-clock' | 'home-fill' | 'home-outline' | 'user-circle-outline' | 'user-circle-fill' | 'clipboard-list-check' | 'clipboard-list' | 'Megaphone' | 'Scanner' | 'Clock' | 'clock-outline' | 'clipboard-list-check-outline' | 'box-outline' | 'Box' | 'plus-square';
|
|
2
|
+
export type IconNameProps = 'Search' | 'User' | 'Eye' | 'EyeOpen' | 'ArrowRight' | 'ArrowLeft' | 'Document' | 'Calendar' | 'ExclamationMark' | 'Download' | 'x-circle' | 'StickyNote' | 'RadioButton' | 'Pdf' | 'ArrowBackAlt' | 'ArrowForwardAlt' | 'ArrowDown' | 'ArrowUp' | 'Check' | 'Filter' | 'AirPlane' | 'Camera' | 'Image' | 'Times' | 'Plus' | 'Minus' | 'Bell' | 'file-list-check' | 'file-text' | 'bookmark-user' | 'folder-clock' | 'home-fill' | 'home-outline' | 'user-circle-outline' | 'user-circle-fill' | 'clipboard-list-check' | 'clipboard-list' | 'Megaphone' | 'Scanner' | 'Clock' | 'clock-outline' | 'clipboard-list-check-outline' | 'box-outline' | 'Box' | 'plus-square' | 'at-sign' | 'briefcase-outline' | 'edit-square-outline' | 'globe-earth' | 'lock-fill' | 'logo-herca-hris' | 'question-circle-outline' | 'shield-fill' | 'Users' | 'Bold' | 'Italic' | 'UnderLine' | 'whatsapp-fill';
|
|
3
3
|
export interface IconProps {
|
|
4
4
|
name: IconNameProps;
|
|
5
5
|
size?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/Icon/type.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,MAAM,GACN,KAAK,GACL,SAAS,GACT,YAAY,GACZ,WAAW,GACX,UAAU,GACV,UAAU,GACV,iBAAiB,GACjB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,aAAa,GACb,KAAK,GACL,cAAc,GACd,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,cAAc,GACd,WAAW,GACX,cAAc,GACd,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,OAAO,GACP,eAAe,GACf,8BAA8B,GAC9B,aAAa,GACb,KAAK,GACL,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/Icon/type.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,MAAM,GACN,KAAK,GACL,SAAS,GACT,YAAY,GACZ,WAAW,GACX,UAAU,GACV,UAAU,GACV,iBAAiB,GACjB,UAAU,GACV,UAAU,GACV,YAAY,GACZ,aAAa,GACb,KAAK,GACL,cAAc,GACd,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,cAAc,GACd,WAAW,GACX,cAAc,GACd,qBAAqB,GACrB,kBAAkB,GAClB,sBAAsB,GACtB,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,OAAO,GACP,eAAe,GACf,8BAA8B,GAC9B,aAAa,GACb,KAAK,GACL,aAAa,GACb,SAAS,GACT,mBAAmB,GACnB,qBAAqB,GACrB,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,yBAAyB,GACzB,aAAa,GACb,OAAO,GACP,MAAM,GACN,QAAQ,GACR,WAAW,GACX,eAAe,CAAC;AAEpB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../../src/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../../src/Input/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAsG/B,CAAC;AAsCF,eAAe,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputOtp.d.ts","sourceRoot":"","sources":["../../../../src/Input/InputOtp.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"InputOtp.d.ts","sourceRoot":"","sources":["../../../../src/Input/InputOtp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAMhD,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAkFrC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -11,6 +11,7 @@ export interface InputProps extends TextInputProps {
|
|
|
11
11
|
onPressIconRight?: (val?: GestureResponderEvent) => void;
|
|
12
12
|
onChangeText?: (val: string) => void;
|
|
13
13
|
secureTextEntry?: boolean;
|
|
14
|
+
iconRightColor?: string;
|
|
14
15
|
}
|
|
15
16
|
export interface TextAreaProps extends InputProps {
|
|
16
17
|
height?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/Input/type.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACxD,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../../src/Input/type.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACxD,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { TextEditorType } from './types';
|
|
2
|
+
export default function TextEditor({ label, hasError, hint, onChange, height, }: TextEditorType): import("react/jsx-runtime").JSX.Element;
|
|
2
3
|
//# sourceMappingURL=TextEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAK9C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,MAAY,GACb,EAAE,cAAc,2CA0KhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/types.tsx"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/types.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -4,6 +4,7 @@ export { default as AccordionItem } from './Accordion/AccordionItem';
|
|
|
4
4
|
export type { AccordionRenderHeaderProps } from './Accordion/type';
|
|
5
5
|
export { default as Button } from './Button/Button';
|
|
6
6
|
export { default as Color } from './Color/Color';
|
|
7
|
+
export type { ColorVariantType } from './Color/type';
|
|
7
8
|
export { default as Typography } from './Typography/Typography';
|
|
8
9
|
export type { fontSizeMap, fontWeightMap, lineHeightMap, TypographyVariantProps, } from './Typography/type';
|
|
9
10
|
export { default as BottomSheet } from './BottomSheet/BottomSheet';
|
|
@@ -28,9 +29,9 @@ export { default as InputOtp } from './Input/InputOtp';
|
|
|
28
29
|
export { default as Switch } from './Input/Switch';
|
|
29
30
|
export { default as CheckBox } from './CheckBox/CheckBox';
|
|
30
31
|
export { default as CheckBoxList } from './CheckBox/CheckBoxList';
|
|
31
|
-
export { default as CounterButton } from './CounterButton/CounterButton';
|
|
32
32
|
export { default as RadioButton } from './RadioButton/RadioButton';
|
|
33
33
|
export { default as Icon } from './Icon/Icon';
|
|
34
|
+
export type { IconNameProps } from './Icon/type';
|
|
34
35
|
export { default as Modal } from './Modal/Modal';
|
|
35
36
|
export { default as Label } from './Label/Label';
|
|
36
37
|
export { default as List } from './List/List';
|
|
@@ -39,6 +40,7 @@ export { default as Loading } from './Loading/Loading';
|
|
|
39
40
|
export { default as Avatar } from './Avatar/Avatar';
|
|
40
41
|
export { default as AvatarGroup } from './Avatar/AvatarGroup';
|
|
41
42
|
export { default as Badge } from './Badge/Badge';
|
|
43
|
+
export type { Variant as BadgeVariant, Size as BadgeSize, HexColor as BadgeColor, SizeStyle as BadgeSizeStyle, } from './Badge/type';
|
|
42
44
|
export { default as Alert } from './Alert/Alert';
|
|
43
45
|
export { default as Timeline } from './Timeline/Timeline';
|
|
44
46
|
export { default as TimelineItem } from './Timeline/TimelineItem';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,YAAY,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACV,OAAO,IAAI,YAAY,EACvB,IAAI,IAAI,SAAS,EACjB,QAAQ,IAAI,UAAU,EACtB,SAAS,IAAI,cAAc,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herca/rn-kit",
|
|
3
|
-
"
|
|
4
|
-
"version": "0.1.25",
|
|
3
|
+
"version": "0.1.27",
|
|
5
4
|
"description": "React Native UI Kit",
|
|
6
5
|
"main": "./lib/module/index.js",
|
|
7
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -94,6 +93,7 @@
|
|
|
94
93
|
"@react-native-documents/picker": "^10.1.3",
|
|
95
94
|
"@react-native-documents/viewer": "^1.0.1",
|
|
96
95
|
"@react-navigation/native": "^7.1.14",
|
|
96
|
+
"@testing-library/react-native": "^13.2.0",
|
|
97
97
|
"react-native-blob-util": "^0.22.2",
|
|
98
98
|
"react-native-image-picker": "^8.2.1",
|
|
99
99
|
"react-native-pager-view": "^6.8.1",
|
package/src/Badge/Badge.tsx
CHANGED
|
@@ -2,9 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import { View, StyleSheet } from 'react-native';
|
|
3
3
|
import Color from '../Color/Color';
|
|
4
4
|
import Typography from '../Typography/Typography';
|
|
5
|
-
import type { TypographyVariantProps } from '../Typography/type';
|
|
6
5
|
import { hexToRGBA } from '../helpers/hexToRgba';
|
|
7
|
-
import type { HexColor, Size, Variant } from './type';
|
|
6
|
+
import type { HexColor, Size, SizeStyle, Variant } from './type';
|
|
8
7
|
|
|
9
8
|
interface BadgeProps {
|
|
10
9
|
value?: string | number | React.ReactNode;
|
|
@@ -26,14 +25,6 @@ const COLORS: Record<Variant, { background: string; fontColor: string }> = {
|
|
|
26
25
|
purple: { background: Color.purple[50], fontColor: Color.purple[500] },
|
|
27
26
|
};
|
|
28
27
|
|
|
29
|
-
interface SizeStyle {
|
|
30
|
-
height: number;
|
|
31
|
-
fontSize: TypographyVariantProps;
|
|
32
|
-
paddingHorizontal: number;
|
|
33
|
-
paddingVertical: number;
|
|
34
|
-
borderRadius: number;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
28
|
const SIZE_MAP: Record<Size, SizeStyle> = {
|
|
38
29
|
small: {
|
|
39
30
|
height: 18,
|
package/src/Badge/type.tsx
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { TypographyVariantProps } from '../Typography/type';
|
|
2
|
+
|
|
1
3
|
type Variant =
|
|
2
4
|
| 'default'
|
|
3
5
|
| 'primary'
|
|
@@ -12,3 +14,11 @@ type Size = 'small' | 'medium';
|
|
|
12
14
|
type HexColor = `#${string}`;
|
|
13
15
|
|
|
14
16
|
export type { Variant, Size, HexColor };
|
|
17
|
+
|
|
18
|
+
export interface SizeStyle {
|
|
19
|
+
height: number;
|
|
20
|
+
fontSize: TypographyVariantProps;
|
|
21
|
+
paddingHorizontal: number;
|
|
22
|
+
paddingVertical: number;
|
|
23
|
+
borderRadius: number;
|
|
24
|
+
}
|
|
@@ -249,9 +249,12 @@ const styles = StyleSheet.create({
|
|
|
249
249
|
},
|
|
250
250
|
contentWithFooter: {},
|
|
251
251
|
footer: {
|
|
252
|
+
borderTopWidth: 1,
|
|
253
|
+
borderTopColor: Color.gray[100],
|
|
252
254
|
backgroundColor: Color.base.white100,
|
|
253
255
|
position: 'absolute',
|
|
254
|
-
|
|
256
|
+
paddingTop: 10,
|
|
257
|
+
marginBottom: 32,
|
|
255
258
|
bottom: 0,
|
|
256
259
|
left: 0,
|
|
257
260
|
right: 0,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/react-native';
|
|
3
|
+
import { Text } from 'react-native';
|
|
4
|
+
import Button from '../Button';
|
|
5
|
+
|
|
6
|
+
describe('Button Component', () => {
|
|
7
|
+
it('renders with title', () => {
|
|
8
|
+
const { getByText } = render(<Button title="Submit" onPress={() => {}} />);
|
|
9
|
+
expect(getByText('Submit')).toBeTruthy();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('calls onPress when pressed', () => {
|
|
13
|
+
const mockFn = jest.fn();
|
|
14
|
+
const { getByText } = render(<Button title="Click me" onPress={mockFn} />);
|
|
15
|
+
fireEvent.press(getByText('Click me'));
|
|
16
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('does not call onPress when disabled', () => {
|
|
20
|
+
const mockFn = jest.fn();
|
|
21
|
+
const { getByText } = render(
|
|
22
|
+
<Button title="Disabled" onPress={mockFn} disabled />
|
|
23
|
+
);
|
|
24
|
+
fireEvent.press(getByText('Disabled'));
|
|
25
|
+
expect(mockFn).not.toHaveBeenCalled();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('renders loading indicator when loading', () => {
|
|
29
|
+
const { getByTestId } = render(
|
|
30
|
+
<Button title="Load" onPress={() => {}} loading />
|
|
31
|
+
);
|
|
32
|
+
// You might want to set `testID="loading-indicator"` in <ActivityIndicator /> in the component
|
|
33
|
+
// For now, we check for presence of ActivityIndicator via accessibilityRole
|
|
34
|
+
const indicator = getByTestId('ActivityIndicator');
|
|
35
|
+
expect(indicator).toBeTruthy();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('renders custom child instead of title', () => {
|
|
39
|
+
const { queryByText, getByText } = render(
|
|
40
|
+
<Button onPress={() => {}}>
|
|
41
|
+
<React.Fragment>
|
|
42
|
+
<Text>Custom Child</Text>
|
|
43
|
+
</React.Fragment>
|
|
44
|
+
</Button>
|
|
45
|
+
);
|
|
46
|
+
expect(getByText('Custom Child')).toBeTruthy();
|
|
47
|
+
expect(queryByText('title')).toBeNull();
|
|
48
|
+
});
|
|
49
|
+
});
|
package/src/Button/type.tsx
CHANGED
|
@@ -255,7 +255,7 @@ export const COLOR_MAP: Record<
|
|
|
255
255
|
tertiaryFocusBorderColor: Color.info[200],
|
|
256
256
|
tertiaryPressTextColor: Color.info[700],
|
|
257
257
|
tertiaryPressBorderColor: 'transparent',
|
|
258
|
-
tertiaryDisabledTextColor: Color.info[
|
|
258
|
+
tertiaryDisabledTextColor: Color.info[200],
|
|
259
259
|
tertiaryDisabledBorderColor: Color.base.white100,
|
|
260
260
|
},
|
|
261
261
|
orange: {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import React, { useRef, useState, useEffect } from 'react';
|
|
1
|
+
import React, { useRef, useState, useEffect, useMemo } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
View,
|
|
4
|
-
ScrollView,
|
|
5
4
|
StyleSheet,
|
|
6
5
|
Text,
|
|
7
|
-
type NativeScrollEvent,
|
|
8
|
-
type NativeSyntheticEvent,
|
|
9
6
|
Dimensions,
|
|
7
|
+
Animated,
|
|
8
|
+
type NativeSyntheticEvent,
|
|
9
|
+
type NativeScrollEvent,
|
|
10
|
+
ScrollView,
|
|
10
11
|
} from 'react-native';
|
|
11
12
|
import BottomSheet from '../BottomSheet/BottomSheet';
|
|
12
13
|
import Button from '../Button/Button';
|
|
@@ -17,6 +18,7 @@ const ITEM_HEIGHT = 40;
|
|
|
17
18
|
const SCREEN_WIDTH = Dimensions.get('window').width;
|
|
18
19
|
const VISIBLE_ITEMS = 5;
|
|
19
20
|
const MIDDLE_INDEX = Math.floor(VISIBLE_ITEMS / 2);
|
|
21
|
+
const REPEAT_COUNT = 5;
|
|
20
22
|
|
|
21
23
|
interface TimePickerProps {
|
|
22
24
|
isOpen: boolean;
|
|
@@ -26,42 +28,61 @@ interface TimePickerProps {
|
|
|
26
28
|
|
|
27
29
|
const generateItems = (max: number) => Array.from({ length: max }, (_, i) => i);
|
|
28
30
|
|
|
31
|
+
const repeatItems = (items: number[], repeatCount: number) =>
|
|
32
|
+
Array.from({ length: repeatCount }).flatMap(() => items);
|
|
33
|
+
|
|
29
34
|
export default function TimePickerWheel({
|
|
30
35
|
isOpen,
|
|
31
36
|
onClose,
|
|
32
37
|
onChange,
|
|
33
38
|
}: TimePickerProps) {
|
|
34
|
-
const [selectedHour, setSelectedHour] = useState(0);
|
|
35
|
-
const [selectedMinute, setSelectedMinute] = useState(0);
|
|
39
|
+
const [selectedHour, setSelectedHour] = useState<number>(0);
|
|
40
|
+
const [selectedMinute, setSelectedMinute] = useState<number>(0);
|
|
36
41
|
|
|
37
42
|
const hourRef = useRef<ScrollView>(null);
|
|
38
43
|
const minuteRef = useRef<ScrollView>(null);
|
|
39
44
|
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
];
|
|
46
|
-
};
|
|
45
|
+
const hourScrollY = useRef(new Animated.Value(0)).current;
|
|
46
|
+
const minuteScrollY = useRef(new Animated.Value(0)).current;
|
|
47
|
+
|
|
48
|
+
const hoursBase = generateItems(24);
|
|
49
|
+
const minutesBase = generateItems(60);
|
|
47
50
|
|
|
48
|
-
const hours =
|
|
49
|
-
|
|
51
|
+
const hours = useMemo(
|
|
52
|
+
() => repeatItems(hoursBase, REPEAT_COUNT),
|
|
53
|
+
[hoursBase]
|
|
54
|
+
);
|
|
55
|
+
const minutes = useMemo(
|
|
56
|
+
() => repeatItems(minutesBase, REPEAT_COUNT),
|
|
57
|
+
[minutesBase]
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const CENTER_INDEX_HOUR =
|
|
61
|
+
Math.floor(hours.length / 2 / 24) * 24 + selectedHour;
|
|
62
|
+
const CENTER_INDEX_MINUTE =
|
|
63
|
+
Math.floor(minutes.length / 2 / 60) * 60 + selectedMinute;
|
|
50
64
|
|
|
51
65
|
useEffect(() => {
|
|
52
66
|
if (isOpen) {
|
|
53
67
|
setTimeout(() => {
|
|
54
|
-
scrollToIndex(hourRef,
|
|
55
|
-
scrollToIndex(minuteRef,
|
|
68
|
+
scrollToIndex(hourRef, CENTER_INDEX_HOUR);
|
|
69
|
+
scrollToIndex(minuteRef, CENTER_INDEX_MINUTE);
|
|
56
70
|
}, 100);
|
|
57
71
|
}
|
|
58
|
-
}, [
|
|
72
|
+
}, [
|
|
73
|
+
isOpen,
|
|
74
|
+
selectedMinute,
|
|
75
|
+
selectedHour,
|
|
76
|
+
CENTER_INDEX_HOUR,
|
|
77
|
+
CENTER_INDEX_MINUTE,
|
|
78
|
+
]);
|
|
59
79
|
|
|
60
80
|
const scrollToIndex = (
|
|
61
81
|
ref: React.RefObject<ScrollView | null>,
|
|
62
|
-
index: number
|
|
82
|
+
index: number,
|
|
83
|
+
animated: boolean = true
|
|
63
84
|
) => {
|
|
64
|
-
ref.current?.scrollTo({ y: index * ITEM_HEIGHT, animated
|
|
85
|
+
ref.current?.scrollTo({ y: index * ITEM_HEIGHT, animated });
|
|
65
86
|
};
|
|
66
87
|
|
|
67
88
|
const handleScrollEnd = (
|
|
@@ -70,14 +91,23 @@ export default function TimePickerWheel({
|
|
|
70
91
|
) => {
|
|
71
92
|
const offsetY = event.nativeEvent.contentOffset.y;
|
|
72
93
|
const index = Math.round(offsetY / ITEM_HEIGHT);
|
|
94
|
+
|
|
73
95
|
if (type === 'hour') {
|
|
74
|
-
const
|
|
75
|
-
setSelectedHour(
|
|
76
|
-
|
|
96
|
+
const realValue = hours[index % 24] as number;
|
|
97
|
+
setSelectedHour(realValue);
|
|
98
|
+
|
|
99
|
+
const newCenter = Math.floor(hours.length / 2 / 24) * 24 + realValue;
|
|
100
|
+
if (Math.abs(index - newCenter) > 12) {
|
|
101
|
+
scrollToIndex(hourRef, newCenter, false);
|
|
102
|
+
}
|
|
77
103
|
} else {
|
|
78
|
-
const
|
|
79
|
-
setSelectedMinute(
|
|
80
|
-
|
|
104
|
+
const realValue = minutes[index % 60] as number;
|
|
105
|
+
setSelectedMinute(realValue);
|
|
106
|
+
|
|
107
|
+
const newCenter = Math.floor(minutes.length / 2 / 60) * 60 + realValue;
|
|
108
|
+
if (Math.abs(index - newCenter) > 12) {
|
|
109
|
+
scrollToIndex(minuteRef, newCenter, false);
|
|
110
|
+
}
|
|
81
111
|
}
|
|
82
112
|
};
|
|
83
113
|
|
|
@@ -86,22 +116,44 @@ export default function TimePickerWheel({
|
|
|
86
116
|
onClose?.();
|
|
87
117
|
};
|
|
88
118
|
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
119
|
+
const renderAnimatedItem = (
|
|
120
|
+
value: number,
|
|
121
|
+
type: 'hour' | 'minute',
|
|
122
|
+
index: number,
|
|
123
|
+
scrollY: Animated.Value
|
|
124
|
+
) => {
|
|
125
|
+
const normalizedValue =
|
|
126
|
+
type === 'hour' ? ((value % 24) + 24) % 24 : ((value % 60) + 60) % 60;
|
|
127
|
+
|
|
128
|
+
const inputRange = [
|
|
129
|
+
(index - 2) * ITEM_HEIGHT,
|
|
130
|
+
(index - 1) * ITEM_HEIGHT,
|
|
131
|
+
index * ITEM_HEIGHT,
|
|
132
|
+
(index + 1) * ITEM_HEIGHT,
|
|
133
|
+
(index + 2) * ITEM_HEIGHT,
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const scale = scrollY.interpolate({
|
|
137
|
+
inputRange,
|
|
138
|
+
outputRange: [0.7, 0.85, 1, 0.85, 0.7],
|
|
139
|
+
extrapolate: 'clamp',
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const opacity = scrollY.interpolate({
|
|
143
|
+
inputRange,
|
|
144
|
+
outputRange: [0.3, 0.6, 1, 0.6, 0.3],
|
|
145
|
+
extrapolate: 'clamp',
|
|
146
|
+
});
|
|
98
147
|
|
|
99
148
|
return (
|
|
100
|
-
<View
|
|
101
|
-
|
|
102
|
-
|
|
149
|
+
<Animated.View
|
|
150
|
+
key={`${type}-${index}`}
|
|
151
|
+
style={[styles.item, { transform: [{ scale }], opacity }]}
|
|
152
|
+
>
|
|
153
|
+
<Text style={styles.itemText}>
|
|
154
|
+
{normalizedValue.toString().padStart(2, '0')}
|
|
103
155
|
</Text>
|
|
104
|
-
</View>
|
|
156
|
+
</Animated.View>
|
|
105
157
|
);
|
|
106
158
|
};
|
|
107
159
|
|
|
@@ -136,7 +188,7 @@ export default function TimePickerWheel({
|
|
|
136
188
|
weight="semibold"
|
|
137
189
|
color={Color.gray[900]}
|
|
138
190
|
center
|
|
139
|
-
style={
|
|
191
|
+
style={styles.hintTime}
|
|
140
192
|
>
|
|
141
193
|
Pilih Waktu
|
|
142
194
|
</Typography>
|
|
@@ -146,31 +198,46 @@ export default function TimePickerWheel({
|
|
|
146
198
|
<View style={styles.highlightOverlay} pointerEvents="none">
|
|
147
199
|
<View style={styles.highlight} />
|
|
148
200
|
</View>
|
|
201
|
+
|
|
149
202
|
<View style={styles.scrollContainer}>
|
|
150
203
|
<View style={styles.pickerColumn}>
|
|
151
|
-
<ScrollView
|
|
204
|
+
<Animated.ScrollView
|
|
152
205
|
ref={hourRef}
|
|
153
206
|
showsVerticalScrollIndicator={false}
|
|
154
207
|
snapToInterval={ITEM_HEIGHT}
|
|
155
208
|
decelerationRate="fast"
|
|
156
209
|
onMomentumScrollEnd={(e) => handleScrollEnd(e, 'hour')}
|
|
210
|
+
onScroll={Animated.event(
|
|
211
|
+
[{ nativeEvent: { contentOffset: { y: hourScrollY } } }],
|
|
212
|
+
{ useNativeDriver: true }
|
|
213
|
+
)}
|
|
214
|
+
scrollEventThrottle={16}
|
|
157
215
|
contentContainerStyle={styles.scrollContent}
|
|
158
216
|
>
|
|
159
|
-
{hours.map((h) =>
|
|
160
|
-
|
|
217
|
+
{hours.map((h, i) =>
|
|
218
|
+
renderAnimatedItem(h, 'hour', i, hourScrollY)
|
|
219
|
+
)}
|
|
220
|
+
</Animated.ScrollView>
|
|
161
221
|
</View>
|
|
162
222
|
|
|
163
223
|
<View style={styles.pickerColumn}>
|
|
164
|
-
<ScrollView
|
|
224
|
+
<Animated.ScrollView
|
|
165
225
|
ref={minuteRef}
|
|
166
226
|
showsVerticalScrollIndicator={false}
|
|
167
227
|
snapToInterval={ITEM_HEIGHT}
|
|
168
228
|
decelerationRate="fast"
|
|
169
229
|
onMomentumScrollEnd={(e) => handleScrollEnd(e, 'minute')}
|
|
230
|
+
onScroll={Animated.event(
|
|
231
|
+
[{ nativeEvent: { contentOffset: { y: minuteScrollY } } }],
|
|
232
|
+
{ useNativeDriver: true }
|
|
233
|
+
)}
|
|
234
|
+
scrollEventThrottle={16}
|
|
170
235
|
contentContainerStyle={styles.scrollContent}
|
|
171
236
|
>
|
|
172
|
-
{minutes.map((m) =>
|
|
173
|
-
|
|
237
|
+
{minutes.map((m, i) =>
|
|
238
|
+
renderAnimatedItem(m, 'minute', i, minuteScrollY)
|
|
239
|
+
)}
|
|
240
|
+
</Animated.ScrollView>
|
|
174
241
|
</View>
|
|
175
242
|
</View>
|
|
176
243
|
</View>
|
|
@@ -209,13 +276,9 @@ const styles = StyleSheet.create({
|
|
|
209
276
|
alignItems: 'center',
|
|
210
277
|
},
|
|
211
278
|
itemText: {
|
|
212
|
-
fontSize: 18,
|
|
213
|
-
color: Color.gray[400],
|
|
214
|
-
},
|
|
215
|
-
selectedItemText: {
|
|
216
|
-
color: Color.gray[900],
|
|
217
|
-
fontWeight: 'bold',
|
|
218
279
|
fontSize: 22,
|
|
280
|
+
color: Color.gray[900],
|
|
281
|
+
fontWeight: '600',
|
|
219
282
|
},
|
|
220
283
|
highlightOverlay: {
|
|
221
284
|
position: 'absolute',
|
|
@@ -231,4 +294,5 @@ const styles = StyleSheet.create({
|
|
|
231
294
|
zIndex: -1,
|
|
232
295
|
backgroundColor: Color.primary[50],
|
|
233
296
|
},
|
|
297
|
+
hintTime: { marginBottom: 16 },
|
|
234
298
|
});
|
package/src/Icon/Icon.tsx
CHANGED
|
@@ -46,6 +46,19 @@ import ClipBoardListCheckOutline from './icons/ClipBoardListCheckOutline';
|
|
|
46
46
|
import Box from './icons/Box';
|
|
47
47
|
import Minus from './icons/Minus';
|
|
48
48
|
import PlusSquare from './icons/PlusSquare';
|
|
49
|
+
import AtSign from './icons/AtSign';
|
|
50
|
+
import BriefCaseOutline from './icons/BriefcaseOutline';
|
|
51
|
+
import EditSquareOutline from './icons/Edit';
|
|
52
|
+
import GlobeEarth from './icons/GlobeEarth';
|
|
53
|
+
import LockFill from './icons/LockFill';
|
|
54
|
+
import LogoHercaHris from './icons/LogoHercaHris';
|
|
55
|
+
import QuestionCircleOutline from './icons/QuestionCircleOutline';
|
|
56
|
+
import ShieldFill from './icons/ShieldFill';
|
|
57
|
+
import Users from './icons/Users';
|
|
58
|
+
import WhatsAppFill from './icons/WhatsappFill';
|
|
59
|
+
import Bold from './icons/Bold';
|
|
60
|
+
import Italic from './icons/Italic';
|
|
61
|
+
import UnderLine from './icons/UnderLine';
|
|
49
62
|
|
|
50
63
|
const icons: Record<
|
|
51
64
|
IconNameProps,
|
|
@@ -96,6 +109,19 @@ const icons: Record<
|
|
|
96
109
|
'clipboard-list-check-outline': ClipBoardListCheckOutline,
|
|
97
110
|
'Box': Box,
|
|
98
111
|
'plus-square': PlusSquare,
|
|
112
|
+
'at-sign': AtSign,
|
|
113
|
+
'briefcase-outline': BriefCaseOutline,
|
|
114
|
+
'edit-square-outline': EditSquareOutline,
|
|
115
|
+
'globe-earth': GlobeEarth,
|
|
116
|
+
'lock-fill': LockFill,
|
|
117
|
+
'logo-herca-hris': LogoHercaHris,
|
|
118
|
+
'question-circle-outline': QuestionCircleOutline,
|
|
119
|
+
'shield-fill': ShieldFill,
|
|
120
|
+
'Users': Users,
|
|
121
|
+
'whatsapp-fill': WhatsAppFill,
|
|
122
|
+
'Bold': Bold,
|
|
123
|
+
'Italic': Italic,
|
|
124
|
+
'UnderLine': UnderLine,
|
|
99
125
|
};
|
|
100
126
|
|
|
101
127
|
const Icon: React.FC<IconProps> = ({
|