@kaushverse/pickify 1.1.14 → 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,10 +151,6 @@ 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;
package/dist/index.d.ts CHANGED
@@ -151,10 +151,6 @@ 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;
package/dist/index.js CHANGED
@@ -728,36 +728,34 @@ var FloatingButton = class extends import_react4.default.Component {
728
728
  import_react_native5.Animated.spring(this.animation, {
729
729
  toValue: this.open ? 0 : 1,
730
730
  useNativeDriver: true,
731
- // ✅ ONLY physics-based config (FIXED)
732
- stiffness: 250,
733
- damping: 20,
734
- mass: 1
731
+ damping: 12,
732
+ mass: 0.6,
733
+ stiffness: 180
735
734
  }).start();
736
735
  this.open = !this.open;
737
736
  };
738
737
  renderAction = (action, index) => {
739
738
  const {
740
739
  mode = "vertical",
741
- radius = 90,
740
+ radius = 65,
741
+ // ✅ FIXED (was 100)
742
742
  actions,
743
743
  renderItemIcon,
744
- styles: styles2,
745
- spacing = 65,
746
- secondaryButtonSize = 48
744
+ styles: styles2
747
745
  } = this.props;
748
746
  let translateX = 0;
749
747
  let translateY = 0;
750
748
  if (mode === "vertical") {
751
- translateY = -spacing * (index + 1);
749
+ translateY = -60 * (index + 1);
752
750
  }
753
751
  if (mode === "horizontal") {
754
- translateX = -spacing * (index + 1);
752
+ translateX = -60 * (index + 1);
755
753
  }
756
754
  if (mode === "circle") {
757
- const totalActions = actions.length;
758
- const startAngle = -Math.PI / 2.5;
759
- const endAngle = -Math.PI * 0.7;
760
- 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;
761
759
  translateX = radius * Math.cos(angle);
762
760
  translateY = radius * Math.sin(angle);
763
761
  }
@@ -777,40 +775,20 @@ var FloatingButton = class extends import_react4.default.Component {
777
775
  },
778
776
  {
779
777
  scale: this.animation.interpolate({
780
- inputRange: [0, 0.3, 0.7, 1],
781
- outputRange: [0, 1.1, 0.95, 1]
778
+ inputRange: [0, 0.5, 1],
779
+ outputRange: [0, 1.1, 1]
782
780
  })
783
781
  }
784
782
  ],
785
- opacity: this.animation.interpolate({
786
- inputRange: [0, 0.2, 1],
787
- outputRange: [0, 0.8, 1]
788
- })
789
- };
790
- const delay = index * 30;
791
- const delayedStyle = {
792
- opacity: this.animation.interpolate({
793
- inputRange: [0, 0.2 + delay / 100, 1],
794
- outputRange: [0, 0, 1]
795
- }),
796
- transform: [
797
- {
798
- scale: this.animation.interpolate({
799
- inputRange: [0, 0.3 + delay / 100, 1],
800
- outputRange: [0, 0.8, 1]
801
- })
802
- }
803
- ]
783
+ opacity: this.animation
804
784
  };
805
785
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
806
786
  import_react_native5.TouchableWithoutFeedback,
807
787
  {
808
788
  onPress: () => {
809
789
  this.toggleMenu();
810
- setTimeout(() => {
811
- action.onPress?.();
812
- action.navigateTo?.();
813
- }, 100);
790
+ action.onPress?.();
791
+ action.navigateTo?.();
814
792
  },
815
793
  children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
816
794
  import_react_native5.Animated.View,
@@ -818,18 +796,12 @@ var FloatingButton = class extends import_react4.default.Component {
818
796
  style: [
819
797
  defaultStyles4.secondary,
820
798
  styles2?.secondaryButton,
821
- {
822
- backgroundColor: action.color || "#F02A4B",
823
- width: secondaryButtonSize,
824
- height: secondaryButtonSize,
825
- borderRadius: secondaryButtonSize / 2
826
- },
827
- animStyle,
828
- mode !== "circle" && delayedStyle
799
+ { backgroundColor: action.color || "#F02A4B" },
800
+ animStyle
829
801
  ],
830
802
  children: renderItemIcon?.({
831
803
  name: action.icon,
832
- size: secondaryButtonSize * 0.42,
804
+ size: 20,
833
805
  color: action.iconColor || "#FFF"
834
806
  })
835
807
  }
@@ -839,15 +811,7 @@ var FloatingButton = class extends import_react4.default.Component {
839
811
  );
840
812
  };
841
813
  render() {
842
- const {
843
- actions,
844
- renderMainIcon,
845
- styles: styles2,
846
- style,
847
- mainIconName,
848
- mode = "vertical",
849
- buttonSize = 56
850
- } = this.props;
814
+ const { actions, renderMainIcon, styles: styles2, style, mainIconName } = this.props;
851
815
  const rotation = {
852
816
  transform: [
853
817
  {
@@ -858,83 +822,76 @@ var FloatingButton = class extends import_react4.default.Component {
858
822
  }
859
823
  ]
860
824
  };
861
- const mainScale = {
862
- transform: [
863
- {
864
- scale: this.animation.interpolate({
865
- inputRange: [0, 0.5, 1],
866
- outputRange: [1, 1.15, 1]
867
- })
868
- }
869
- ]
870
- };
871
825
  const mainIcon = mainIconName || "add";
872
- const containerStyle = [
873
- defaultStyles4.container,
874
- styles2?.container,
875
- style,
876
- { right: 20, bottom: 100 }
877
- ];
878
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_native5.View, { style: containerStyle, children: [
879
- actions.map(this.renderAction),
880
- /* @__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)(
881
828
  import_react_native5.Animated.View,
882
829
  {
883
830
  style: [
884
- defaultStyles4.mainButtonWrapper,
885
- styles2?.mainButton,
886
- rotation,
887
- mainScale,
888
- {
889
- width: buttonSize,
890
- height: buttonSize,
891
- borderRadius: buttonSize / 2
892
- }
893
- ],
894
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
895
- import_react_native5.View,
831
+ defaultStyles4.circleContainer,
832
+ styles2?.circleContainer,
896
833
  {
897
- style: [
898
- defaultStyles4.button,
834
+ transform: [
899
835
  {
900
- width: buttonSize,
901
- height: buttonSize,
902
- borderRadius: buttonSize / 2
836
+ scale: this.animation.interpolate({
837
+ inputRange: [0, 1],
838
+ outputRange: [0, 1]
839
+ })
903
840
  }
904
841
  ],
905
- children: renderMainIcon?.({
906
- name: mainIcon,
907
- size: buttonSize * 0.46,
908
- color: "#FFF"
909
- })
842
+ opacity: this.animation
910
843
  }
911
- )
844
+ ],
845
+ children: actions.map((a, i) => this.renderAction(a, i))
912
846
  }
913
- ) })
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
+ }) }) }) })
914
853
  ] });
915
854
  }
916
855
  };
917
856
  var defaultStyles4 = import_react_native5.StyleSheet.create({
918
857
  container: {
919
858
  position: "absolute",
859
+ bottom: 100,
860
+ right: 20,
920
861
  alignItems: "center",
921
- justifyContent: "center",
922
- zIndex: 1e3
862
+ justifyContent: "center"
923
863
  },
924
864
  mainButtonWrapper: {
865
+ width: 60,
866
+ height: 60,
867
+ borderRadius: 30,
925
868
  backgroundColor: "#F02A4B",
926
869
  alignItems: "center",
927
870
  justifyContent: "center",
928
- elevation: 8
871
+ elevation: 5
929
872
  },
930
873
  button: {
874
+ width: 60,
875
+ height: 60,
876
+ borderRadius: 30,
931
877
  backgroundColor: "#F02A4B",
932
878
  alignItems: "center",
933
879
  justifyContent: "center"
934
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
+ },
935
890
  secondary: {
936
891
  position: "absolute",
937
- backgroundColor: "#F02A4B",
892
+ width: 48,
893
+ height: 48,
894
+ borderRadius: 24,
938
895
  alignItems: "center",
939
896
  justifyContent: "center",
940
897
  elevation: 5
package/dist/index.mjs CHANGED
@@ -712,36 +712,34 @@ var FloatingButton = class extends React4.Component {
712
712
  Animated3.spring(this.animation, {
713
713
  toValue: this.open ? 0 : 1,
714
714
  useNativeDriver: true,
715
- // ✅ ONLY physics-based config (FIXED)
716
- stiffness: 250,
717
- damping: 20,
718
- mass: 1
715
+ damping: 12,
716
+ mass: 0.6,
717
+ stiffness: 180
719
718
  }).start();
720
719
  this.open = !this.open;
721
720
  };
722
721
  renderAction = (action, index) => {
723
722
  const {
724
723
  mode = "vertical",
725
- radius = 90,
724
+ radius = 65,
725
+ // ✅ FIXED (was 100)
726
726
  actions,
727
727
  renderItemIcon,
728
- styles: styles2,
729
- spacing = 65,
730
- secondaryButtonSize = 48
728
+ styles: styles2
731
729
  } = this.props;
732
730
  let translateX = 0;
733
731
  let translateY = 0;
734
732
  if (mode === "vertical") {
735
- translateY = -spacing * (index + 1);
733
+ translateY = -60 * (index + 1);
736
734
  }
737
735
  if (mode === "horizontal") {
738
- translateX = -spacing * (index + 1);
736
+ translateX = -60 * (index + 1);
739
737
  }
740
738
  if (mode === "circle") {
741
- const totalActions = actions.length;
742
- const startAngle = -Math.PI / 2.5;
743
- const endAngle = -Math.PI * 0.7;
744
- 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;
745
743
  translateX = radius * Math.cos(angle);
746
744
  translateY = radius * Math.sin(angle);
747
745
  }
@@ -761,40 +759,20 @@ var FloatingButton = class extends React4.Component {
761
759
  },
762
760
  {
763
761
  scale: this.animation.interpolate({
764
- inputRange: [0, 0.3, 0.7, 1],
765
- outputRange: [0, 1.1, 0.95, 1]
762
+ inputRange: [0, 0.5, 1],
763
+ outputRange: [0, 1.1, 1]
766
764
  })
767
765
  }
768
766
  ],
769
- opacity: this.animation.interpolate({
770
- inputRange: [0, 0.2, 1],
771
- outputRange: [0, 0.8, 1]
772
- })
773
- };
774
- const delay = index * 30;
775
- const delayedStyle = {
776
- opacity: this.animation.interpolate({
777
- inputRange: [0, 0.2 + delay / 100, 1],
778
- outputRange: [0, 0, 1]
779
- }),
780
- transform: [
781
- {
782
- scale: this.animation.interpolate({
783
- inputRange: [0, 0.3 + delay / 100, 1],
784
- outputRange: [0, 0.8, 1]
785
- })
786
- }
787
- ]
767
+ opacity: this.animation
788
768
  };
789
769
  return /* @__PURE__ */ jsx5(
790
770
  TouchableWithoutFeedback,
791
771
  {
792
772
  onPress: () => {
793
773
  this.toggleMenu();
794
- setTimeout(() => {
795
- action.onPress?.();
796
- action.navigateTo?.();
797
- }, 100);
774
+ action.onPress?.();
775
+ action.navigateTo?.();
798
776
  },
799
777
  children: /* @__PURE__ */ jsx5(
800
778
  Animated3.View,
@@ -802,18 +780,12 @@ var FloatingButton = class extends React4.Component {
802
780
  style: [
803
781
  defaultStyles4.secondary,
804
782
  styles2?.secondaryButton,
805
- {
806
- backgroundColor: action.color || "#F02A4B",
807
- width: secondaryButtonSize,
808
- height: secondaryButtonSize,
809
- borderRadius: secondaryButtonSize / 2
810
- },
811
- animStyle,
812
- mode !== "circle" && delayedStyle
783
+ { backgroundColor: action.color || "#F02A4B" },
784
+ animStyle
813
785
  ],
814
786
  children: renderItemIcon?.({
815
787
  name: action.icon,
816
- size: secondaryButtonSize * 0.42,
788
+ size: 20,
817
789
  color: action.iconColor || "#FFF"
818
790
  })
819
791
  }
@@ -823,15 +795,7 @@ var FloatingButton = class extends React4.Component {
823
795
  );
824
796
  };
825
797
  render() {
826
- const {
827
- actions,
828
- renderMainIcon,
829
- styles: styles2,
830
- style,
831
- mainIconName,
832
- mode = "vertical",
833
- buttonSize = 56
834
- } = this.props;
798
+ const { actions, renderMainIcon, styles: styles2, style, mainIconName } = this.props;
835
799
  const rotation = {
836
800
  transform: [
837
801
  {
@@ -842,83 +806,76 @@ var FloatingButton = class extends React4.Component {
842
806
  }
843
807
  ]
844
808
  };
845
- const mainScale = {
846
- transform: [
847
- {
848
- scale: this.animation.interpolate({
849
- inputRange: [0, 0.5, 1],
850
- outputRange: [1, 1.15, 1]
851
- })
852
- }
853
- ]
854
- };
855
809
  const mainIcon = mainIconName || "add";
856
- const containerStyle = [
857
- defaultStyles4.container,
858
- styles2?.container,
859
- style,
860
- { right: 20, bottom: 100 }
861
- ];
862
- return /* @__PURE__ */ jsxs5(View5, { style: containerStyle, children: [
863
- actions.map(this.renderAction),
864
- /* @__PURE__ */ jsx5(TouchableWithoutFeedback, { onPress: this.toggleMenu, children: /* @__PURE__ */ jsx5(
810
+ return /* @__PURE__ */ jsxs5(View5, { style: [defaultStyles4.container, styles2?.container, style], children: [
811
+ /* @__PURE__ */ jsx5(
865
812
  Animated3.View,
866
813
  {
867
814
  style: [
868
- defaultStyles4.mainButtonWrapper,
869
- styles2?.mainButton,
870
- rotation,
871
- mainScale,
872
- {
873
- width: buttonSize,
874
- height: buttonSize,
875
- borderRadius: buttonSize / 2
876
- }
877
- ],
878
- children: /* @__PURE__ */ jsx5(
879
- View5,
815
+ defaultStyles4.circleContainer,
816
+ styles2?.circleContainer,
880
817
  {
881
- style: [
882
- defaultStyles4.button,
818
+ transform: [
883
819
  {
884
- width: buttonSize,
885
- height: buttonSize,
886
- borderRadius: buttonSize / 2
820
+ scale: this.animation.interpolate({
821
+ inputRange: [0, 1],
822
+ outputRange: [0, 1]
823
+ })
887
824
  }
888
825
  ],
889
- children: renderMainIcon?.({
890
- name: mainIcon,
891
- size: buttonSize * 0.46,
892
- color: "#FFF"
893
- })
826
+ opacity: this.animation
894
827
  }
895
- )
828
+ ],
829
+ children: actions.map((a, i) => this.renderAction(a, i))
896
830
  }
897
- ) })
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
+ }) }) }) })
898
837
  ] });
899
838
  }
900
839
  };
901
840
  var defaultStyles4 = StyleSheet5.create({
902
841
  container: {
903
842
  position: "absolute",
843
+ bottom: 100,
844
+ right: 20,
904
845
  alignItems: "center",
905
- justifyContent: "center",
906
- zIndex: 1e3
846
+ justifyContent: "center"
907
847
  },
908
848
  mainButtonWrapper: {
849
+ width: 60,
850
+ height: 60,
851
+ borderRadius: 30,
909
852
  backgroundColor: "#F02A4B",
910
853
  alignItems: "center",
911
854
  justifyContent: "center",
912
- elevation: 8
855
+ elevation: 5
913
856
  },
914
857
  button: {
858
+ width: 60,
859
+ height: 60,
860
+ borderRadius: 30,
915
861
  backgroundColor: "#F02A4B",
916
862
  alignItems: "center",
917
863
  justifyContent: "center"
918
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
+ },
919
874
  secondary: {
920
875
  position: "absolute",
921
- backgroundColor: "#F02A4B",
876
+ width: 48,
877
+ height: 48,
878
+ borderRadius: 24,
922
879
  alignItems: "center",
923
880
  justifyContent: "center",
924
881
  elevation: 5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaushverse/pickify",
3
- "version": "1.1.14",
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",