@kaushverse/pickify 1.1.15 → 1.1.16

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/dist/index.d.mts CHANGED
@@ -151,16 +151,10 @@ type Props = {
151
151
  styles?: FloatingButtonStyles;
152
152
  style?: ViewStyle;
153
153
  mainIconName?: string;
154
- spacing?: number;
155
- animationDuration?: number;
156
- buttonSize?: number;
157
- secondaryButtonSize?: number;
158
154
  };
159
155
  declare class FloatingButton extends React$1.Component<Props> {
160
156
  animation: Animated.Value;
161
- state: {
162
- open: boolean;
163
- };
157
+ open: boolean;
164
158
  toggleMenu: () => void;
165
159
  renderAction: (action: Action, index: number) => react_jsx_runtime.JSX.Element;
166
160
  render(): react_jsx_runtime.JSX.Element;
package/dist/index.d.ts CHANGED
@@ -151,16 +151,10 @@ type Props = {
151
151
  styles?: FloatingButtonStyles;
152
152
  style?: ViewStyle;
153
153
  mainIconName?: string;
154
- spacing?: number;
155
- animationDuration?: number;
156
- buttonSize?: number;
157
- secondaryButtonSize?: number;
158
154
  };
159
155
  declare class FloatingButton extends React$1.Component<Props> {
160
156
  animation: Animated.Value;
161
- state: {
162
- open: boolean;
163
- };
157
+ open: boolean;
164
158
  toggleMenu: () => void;
165
159
  renderAction: (action: Action, index: number) => react_jsx_runtime.JSX.Element;
166
160
  render(): react_jsx_runtime.JSX.Element;
package/dist/index.js CHANGED
@@ -720,47 +720,42 @@ var defaultStyles3 = import_react_native4.StyleSheet.create({
720
720
  // src/core/FloatingButton.tsx
721
721
  var import_react4 = __toESM(require("react"));
722
722
  var import_react_native5 = require("react-native");
723
- var import_vector_icons = require("@expo/vector-icons");
724
723
  var import_jsx_runtime5 = require("react/jsx-runtime");
725
724
  var FloatingButton = class extends import_react4.default.Component {
726
725
  animation = new import_react_native5.Animated.Value(0);
727
- state = {
728
- open: false
729
- };
726
+ open = false;
730
727
  toggleMenu = () => {
731
- const toValue = this.state.open ? 0 : 1;
732
728
  import_react_native5.Animated.spring(this.animation, {
733
- toValue,
729
+ toValue: this.open ? 0 : 1,
734
730
  useNativeDriver: true,
735
- stiffness: 250,
736
- damping: 20,
737
- mass: 1
731
+ damping: 12,
732
+ mass: 0.6,
733
+ stiffness: 180
738
734
  }).start();
739
- this.setState({ open: !this.state.open });
735
+ this.open = !this.open;
740
736
  };
741
737
  renderAction = (action, index) => {
742
738
  const {
743
739
  mode = "vertical",
744
- radius = 90,
740
+ radius = 65,
741
+ // ✅ FIXED (was 100)
745
742
  actions,
746
743
  renderItemIcon,
747
- styles: styles2,
748
- spacing = 65,
749
- secondaryButtonSize = 48
744
+ styles: styles2
750
745
  } = this.props;
751
746
  let translateX = 0;
752
747
  let translateY = 0;
753
748
  if (mode === "vertical") {
754
- translateY = -spacing * (index + 1);
749
+ translateY = -60 * (index + 1);
755
750
  }
756
751
  if (mode === "horizontal") {
757
- translateX = -spacing * (index + 1);
752
+ translateX = -60 * (index + 1);
758
753
  }
759
754
  if (mode === "circle") {
760
- const totalActions = actions.length;
761
- const startAngle = -Math.PI / 2.5;
762
- const endAngle = -Math.PI * 0.7;
763
- const angle = startAngle + index / (totalActions - 1 || 1) * (endAngle - startAngle);
755
+ const total = actions.length;
756
+ const spread = Math.PI / 2.5;
757
+ const start = -spread;
758
+ const angle = start + index / (total - 1 || 1) * spread;
764
759
  translateX = radius * Math.cos(angle);
765
760
  translateY = radius * Math.sin(angle);
766
761
  }
@@ -780,25 +775,20 @@ var FloatingButton = class extends import_react4.default.Component {
780
775
  },
781
776
  {
782
777
  scale: this.animation.interpolate({
783
- inputRange: [0, 0.3, 0.7, 1],
784
- outputRange: [0, 1.1, 0.95, 1]
778
+ inputRange: [0, 0.5, 1],
779
+ outputRange: [0, 1.1, 1]
785
780
  })
786
781
  }
787
782
  ],
788
- opacity: this.animation.interpolate({
789
- inputRange: [0, 0.2, 1],
790
- outputRange: [0, 0.8, 1]
791
- })
783
+ opacity: this.animation
792
784
  };
793
785
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
794
786
  import_react_native5.TouchableWithoutFeedback,
795
787
  {
796
788
  onPress: () => {
797
789
  this.toggleMenu();
798
- setTimeout(() => {
799
- action.onPress?.();
800
- action.navigateTo?.();
801
- }, 100);
790
+ action.onPress?.();
791
+ action.navigateTo?.();
802
792
  },
803
793
  children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
804
794
  import_react_native5.Animated.View,
@@ -806,26 +796,14 @@ var FloatingButton = class extends import_react4.default.Component {
806
796
  style: [
807
797
  defaultStyles4.secondary,
808
798
  styles2?.secondaryButton,
809
- {
810
- backgroundColor: action.color || "#F02A4B",
811
- width: secondaryButtonSize,
812
- height: secondaryButtonSize,
813
- borderRadius: secondaryButtonSize / 2
814
- },
799
+ { backgroundColor: action.color || "#F02A4B" },
815
800
  animStyle
816
801
  ],
817
- children: renderItemIcon ? renderItemIcon({
802
+ children: renderItemIcon?.({
818
803
  name: action.icon,
819
- size: secondaryButtonSize * 0.42,
804
+ size: 20,
820
805
  color: action.iconColor || "#FFF"
821
- }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
822
- import_vector_icons.Ionicons,
823
- {
824
- name: action.icon,
825
- size: secondaryButtonSize * 0.42,
826
- color: action.iconColor || "#FFF"
827
- }
828
- )
806
+ })
829
807
  }
830
808
  )
831
809
  },
@@ -833,14 +811,7 @@ var FloatingButton = class extends import_react4.default.Component {
833
811
  );
834
812
  };
835
813
  render() {
836
- const {
837
- actions,
838
- renderMainIcon,
839
- styles: styles2,
840
- style,
841
- mainIconName,
842
- buttonSize = 56
843
- } = this.props;
814
+ const { actions, renderMainIcon, styles: styles2, style, mainIconName } = this.props;
844
815
  const rotation = {
845
816
  transform: [
846
817
  {
@@ -851,88 +822,79 @@ var FloatingButton = class extends import_react4.default.Component {
851
822
  }
852
823
  ]
853
824
  };
854
- const mainScale = {
855
- transform: [
856
- {
857
- scale: this.animation.interpolate({
858
- inputRange: [0, 0.5, 1],
859
- outputRange: [1, 1.15, 1]
860
- })
861
- }
862
- ]
863
- };
864
825
  const mainIcon = mainIconName || "add";
865
- const containerStyle = [
866
- defaultStyles4.container,
867
- styles2?.container,
868
- style,
869
- { right: 20, bottom: 100 }
870
- ];
871
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_native5.View, { style: containerStyle, children: [
872
- actions.map(this.renderAction),
873
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native5.TouchableWithoutFeedback, { onPress: this.toggleMenu, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
826
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_native5.View, { style: [defaultStyles4.container, styles2?.container, style], children: [
827
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
874
828
  import_react_native5.Animated.View,
875
829
  {
876
830
  style: [
877
- defaultStyles4.mainButtonWrapper,
878
- styles2?.mainButton,
879
- rotation,
880
- mainScale,
831
+ defaultStyles4.circleContainer,
832
+ styles2?.circleContainer,
881
833
  {
882
- width: buttonSize,
883
- height: buttonSize,
884
- borderRadius: buttonSize / 2
885
- }
886
- ],
887
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
888
- import_react_native5.View,
889
- {
890
- style: [
891
- defaultStyles4.button,
834
+ transform: [
892
835
  {
893
- width: buttonSize,
894
- height: buttonSize,
895
- borderRadius: buttonSize / 2
836
+ scale: this.animation.interpolate({
837
+ inputRange: [0, 1],
838
+ outputRange: [0, 1]
839
+ })
896
840
  }
897
841
  ],
898
- children: renderMainIcon ? renderMainIcon({
899
- name: mainIcon,
900
- size: buttonSize * 0.46,
901
- color: "#FFF"
902
- }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_vector_icons.Ionicons, { name: "add", size: buttonSize * 0.46, color: "#FFF" })
842
+ opacity: this.animation
903
843
  }
904
- )
844
+ ],
845
+ children: actions.map((a, i) => this.renderAction(a, i))
905
846
  }
906
- ) })
847
+ ),
848
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native5.TouchableWithoutFeedback, { onPress: this.toggleMenu, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native5.Animated.View, { style: [defaultStyles4.mainButtonWrapper, rotation], children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native5.View, { style: [defaultStyles4.button, styles2?.mainButton], children: renderMainIcon?.({
849
+ name: mainIcon,
850
+ size: 26,
851
+ color: "#FFF"
852
+ }) }) }) })
907
853
  ] });
908
854
  }
909
855
  };
910
856
  var defaultStyles4 = import_react_native5.StyleSheet.create({
911
857
  container: {
912
858
  position: "absolute",
859
+ bottom: 100,
860
+ right: 20,
913
861
  alignItems: "center",
914
- justifyContent: "center",
915
- zIndex: 1e3
862
+ justifyContent: "center"
916
863
  },
917
864
  mainButtonWrapper: {
865
+ width: 60,
866
+ height: 60,
867
+ borderRadius: 30,
918
868
  backgroundColor: "#F02A4B",
919
869
  alignItems: "center",
920
870
  justifyContent: "center",
921
- elevation: 8,
922
- zIndex: 1e3
871
+ elevation: 5
923
872
  },
924
873
  button: {
874
+ width: 60,
875
+ height: 60,
876
+ borderRadius: 30,
925
877
  backgroundColor: "#F02A4B",
926
878
  alignItems: "center",
927
879
  justifyContent: "center"
928
880
  },
881
+ circleContainer: {
882
+ position: "absolute",
883
+ width: 140,
884
+ height: 140,
885
+ right: -40,
886
+ bottom: -40,
887
+ alignItems: "center",
888
+ justifyContent: "center"
889
+ },
929
890
  secondary: {
930
891
  position: "absolute",
931
- backgroundColor: "#F02A4B",
892
+ width: 48,
893
+ height: 48,
894
+ borderRadius: 24,
932
895
  alignItems: "center",
933
896
  justifyContent: "center",
934
- elevation: 5,
935
- zIndex: 999
897
+ elevation: 5
936
898
  }
937
899
  });
938
900
 
package/dist/index.mjs CHANGED
@@ -704,47 +704,42 @@ import {
704
704
  TouchableWithoutFeedback,
705
705
  View as View5
706
706
  } from "react-native";
707
- import { Ionicons } from "@expo/vector-icons";
708
707
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
709
708
  var FloatingButton = class extends React4.Component {
710
709
  animation = new Animated3.Value(0);
711
- state = {
712
- open: false
713
- };
710
+ open = false;
714
711
  toggleMenu = () => {
715
- const toValue = this.state.open ? 0 : 1;
716
712
  Animated3.spring(this.animation, {
717
- toValue,
713
+ toValue: this.open ? 0 : 1,
718
714
  useNativeDriver: true,
719
- stiffness: 250,
720
- damping: 20,
721
- mass: 1
715
+ damping: 12,
716
+ mass: 0.6,
717
+ stiffness: 180
722
718
  }).start();
723
- this.setState({ open: !this.state.open });
719
+ this.open = !this.open;
724
720
  };
725
721
  renderAction = (action, index) => {
726
722
  const {
727
723
  mode = "vertical",
728
- radius = 90,
724
+ radius = 65,
725
+ // ✅ FIXED (was 100)
729
726
  actions,
730
727
  renderItemIcon,
731
- styles: styles2,
732
- spacing = 65,
733
- secondaryButtonSize = 48
728
+ styles: styles2
734
729
  } = this.props;
735
730
  let translateX = 0;
736
731
  let translateY = 0;
737
732
  if (mode === "vertical") {
738
- translateY = -spacing * (index + 1);
733
+ translateY = -60 * (index + 1);
739
734
  }
740
735
  if (mode === "horizontal") {
741
- translateX = -spacing * (index + 1);
736
+ translateX = -60 * (index + 1);
742
737
  }
743
738
  if (mode === "circle") {
744
- const totalActions = actions.length;
745
- const startAngle = -Math.PI / 2.5;
746
- const endAngle = -Math.PI * 0.7;
747
- const angle = startAngle + index / (totalActions - 1 || 1) * (endAngle - startAngle);
739
+ const total = actions.length;
740
+ const spread = Math.PI / 2.5;
741
+ const start = -spread;
742
+ const angle = start + index / (total - 1 || 1) * spread;
748
743
  translateX = radius * Math.cos(angle);
749
744
  translateY = radius * Math.sin(angle);
750
745
  }
@@ -764,25 +759,20 @@ var FloatingButton = class extends React4.Component {
764
759
  },
765
760
  {
766
761
  scale: this.animation.interpolate({
767
- inputRange: [0, 0.3, 0.7, 1],
768
- outputRange: [0, 1.1, 0.95, 1]
762
+ inputRange: [0, 0.5, 1],
763
+ outputRange: [0, 1.1, 1]
769
764
  })
770
765
  }
771
766
  ],
772
- opacity: this.animation.interpolate({
773
- inputRange: [0, 0.2, 1],
774
- outputRange: [0, 0.8, 1]
775
- })
767
+ opacity: this.animation
776
768
  };
777
769
  return /* @__PURE__ */ jsx5(
778
770
  TouchableWithoutFeedback,
779
771
  {
780
772
  onPress: () => {
781
773
  this.toggleMenu();
782
- setTimeout(() => {
783
- action.onPress?.();
784
- action.navigateTo?.();
785
- }, 100);
774
+ action.onPress?.();
775
+ action.navigateTo?.();
786
776
  },
787
777
  children: /* @__PURE__ */ jsx5(
788
778
  Animated3.View,
@@ -790,26 +780,14 @@ var FloatingButton = class extends React4.Component {
790
780
  style: [
791
781
  defaultStyles4.secondary,
792
782
  styles2?.secondaryButton,
793
- {
794
- backgroundColor: action.color || "#F02A4B",
795
- width: secondaryButtonSize,
796
- height: secondaryButtonSize,
797
- borderRadius: secondaryButtonSize / 2
798
- },
783
+ { backgroundColor: action.color || "#F02A4B" },
799
784
  animStyle
800
785
  ],
801
- children: renderItemIcon ? renderItemIcon({
786
+ children: renderItemIcon?.({
802
787
  name: action.icon,
803
- size: secondaryButtonSize * 0.42,
788
+ size: 20,
804
789
  color: action.iconColor || "#FFF"
805
- }) : /* @__PURE__ */ jsx5(
806
- Ionicons,
807
- {
808
- name: action.icon,
809
- size: secondaryButtonSize * 0.42,
810
- color: action.iconColor || "#FFF"
811
- }
812
- )
790
+ })
813
791
  }
814
792
  )
815
793
  },
@@ -817,14 +795,7 @@ var FloatingButton = class extends React4.Component {
817
795
  );
818
796
  };
819
797
  render() {
820
- const {
821
- actions,
822
- renderMainIcon,
823
- styles: styles2,
824
- style,
825
- mainIconName,
826
- buttonSize = 56
827
- } = this.props;
798
+ const { actions, renderMainIcon, styles: styles2, style, mainIconName } = this.props;
828
799
  const rotation = {
829
800
  transform: [
830
801
  {
@@ -835,88 +806,79 @@ var FloatingButton = class extends React4.Component {
835
806
  }
836
807
  ]
837
808
  };
838
- const mainScale = {
839
- transform: [
840
- {
841
- scale: this.animation.interpolate({
842
- inputRange: [0, 0.5, 1],
843
- outputRange: [1, 1.15, 1]
844
- })
845
- }
846
- ]
847
- };
848
809
  const mainIcon = mainIconName || "add";
849
- const containerStyle = [
850
- defaultStyles4.container,
851
- styles2?.container,
852
- style,
853
- { right: 20, bottom: 100 }
854
- ];
855
- return /* @__PURE__ */ jsxs5(View5, { style: containerStyle, children: [
856
- actions.map(this.renderAction),
857
- /* @__PURE__ */ jsx5(TouchableWithoutFeedback, { onPress: this.toggleMenu, children: /* @__PURE__ */ jsx5(
810
+ return /* @__PURE__ */ jsxs5(View5, { style: [defaultStyles4.container, styles2?.container, style], children: [
811
+ /* @__PURE__ */ jsx5(
858
812
  Animated3.View,
859
813
  {
860
814
  style: [
861
- defaultStyles4.mainButtonWrapper,
862
- styles2?.mainButton,
863
- rotation,
864
- mainScale,
815
+ defaultStyles4.circleContainer,
816
+ styles2?.circleContainer,
865
817
  {
866
- width: buttonSize,
867
- height: buttonSize,
868
- borderRadius: buttonSize / 2
869
- }
870
- ],
871
- children: /* @__PURE__ */ jsx5(
872
- View5,
873
- {
874
- style: [
875
- defaultStyles4.button,
818
+ transform: [
876
819
  {
877
- width: buttonSize,
878
- height: buttonSize,
879
- borderRadius: buttonSize / 2
820
+ scale: this.animation.interpolate({
821
+ inputRange: [0, 1],
822
+ outputRange: [0, 1]
823
+ })
880
824
  }
881
825
  ],
882
- children: renderMainIcon ? renderMainIcon({
883
- name: mainIcon,
884
- size: buttonSize * 0.46,
885
- color: "#FFF"
886
- }) : /* @__PURE__ */ jsx5(Ionicons, { name: "add", size: buttonSize * 0.46, color: "#FFF" })
826
+ opacity: this.animation
887
827
  }
888
- )
828
+ ],
829
+ children: actions.map((a, i) => this.renderAction(a, i))
889
830
  }
890
- ) })
831
+ ),
832
+ /* @__PURE__ */ jsx5(TouchableWithoutFeedback, { onPress: this.toggleMenu, children: /* @__PURE__ */ jsx5(Animated3.View, { style: [defaultStyles4.mainButtonWrapper, rotation], children: /* @__PURE__ */ jsx5(View5, { style: [defaultStyles4.button, styles2?.mainButton], children: renderMainIcon?.({
833
+ name: mainIcon,
834
+ size: 26,
835
+ color: "#FFF"
836
+ }) }) }) })
891
837
  ] });
892
838
  }
893
839
  };
894
840
  var defaultStyles4 = StyleSheet5.create({
895
841
  container: {
896
842
  position: "absolute",
843
+ bottom: 100,
844
+ right: 20,
897
845
  alignItems: "center",
898
- justifyContent: "center",
899
- zIndex: 1e3
846
+ justifyContent: "center"
900
847
  },
901
848
  mainButtonWrapper: {
849
+ width: 60,
850
+ height: 60,
851
+ borderRadius: 30,
902
852
  backgroundColor: "#F02A4B",
903
853
  alignItems: "center",
904
854
  justifyContent: "center",
905
- elevation: 8,
906
- zIndex: 1e3
855
+ elevation: 5
907
856
  },
908
857
  button: {
858
+ width: 60,
859
+ height: 60,
860
+ borderRadius: 30,
909
861
  backgroundColor: "#F02A4B",
910
862
  alignItems: "center",
911
863
  justifyContent: "center"
912
864
  },
865
+ circleContainer: {
866
+ position: "absolute",
867
+ width: 140,
868
+ height: 140,
869
+ right: -40,
870
+ bottom: -40,
871
+ alignItems: "center",
872
+ justifyContent: "center"
873
+ },
913
874
  secondary: {
914
875
  position: "absolute",
915
- backgroundColor: "#F02A4B",
876
+ width: 48,
877
+ height: 48,
878
+ borderRadius: 24,
916
879
  alignItems: "center",
917
880
  justifyContent: "center",
918
- elevation: 5,
919
- zIndex: 999
881
+ elevation: 5
920
882
  }
921
883
  });
922
884
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaushverse/pickify",
3
- "version": "1.1.15",
3
+ "version": "1.1.16",
4
4
  "description": "A fully customizable React Native picker with search, multi-select, grouping, and async support.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",