@draftbit/core 43.3.0 → 43.3.4-a9cc72.1

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.
Files changed (48) hide show
  1. package/lib/commonjs/components/Divider.js +3 -13
  2. package/lib/commonjs/components/Divider.js.map +1 -1
  3. package/lib/commonjs/components/Stepper.js +28 -19
  4. package/lib/commonjs/components/Stepper.js.map +1 -1
  5. package/lib/commonjs/components/ToggleButton.js +86 -0
  6. package/lib/commonjs/components/ToggleButton.js.map +1 -0
  7. package/lib/commonjs/index.js +8 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/mappings/ActionSheet.js.map +1 -1
  10. package/lib/commonjs/mappings/RadioButtonRow.js.map +1 -1
  11. package/lib/commonjs/mappings/Stepper.js +9 -0
  12. package/lib/commonjs/mappings/Stepper.js.map +1 -1
  13. package/lib/commonjs/mappings/ToggleButton.js +60 -0
  14. package/lib/commonjs/mappings/ToggleButton.js.map +1 -0
  15. package/lib/commonjs/mappings/Touchable.js.map +1 -1
  16. package/lib/commonjs/mappings/Video.js.map +1 -1
  17. package/lib/commonjs/mappings/WebView.js.map +1 -1
  18. package/lib/module/components/Picker/PickerComponent.android.js +10 -7
  19. package/lib/module/components/Picker/PickerComponent.android.js.map +1 -1
  20. package/lib/module/components/RadioButton/RadioButtonFieldGroup.js +4 -5
  21. package/lib/module/components/RadioButton/RadioButtonFieldGroup.js.map +1 -1
  22. package/lib/module/components/Stepper.js +27 -19
  23. package/lib/module/components/Stepper.js.map +1 -1
  24. package/lib/module/components/ToggleButton.js +67 -0
  25. package/lib/module/components/ToggleButton.js.map +1 -0
  26. package/lib/module/index.js +1 -0
  27. package/lib/module/index.js.map +1 -1
  28. package/lib/module/mappings/MapMarker.js.map +1 -1
  29. package/lib/module/mappings/Stepper.js +10 -1
  30. package/lib/module/mappings/Stepper.js.map +1 -1
  31. package/lib/module/mappings/ToggleButton.js +51 -0
  32. package/lib/module/mappings/ToggleButton.js.map +1 -0
  33. package/lib/typescript/src/components/Stepper.d.ts +2 -0
  34. package/lib/typescript/src/components/ToggleButton.d.ts +24 -0
  35. package/lib/typescript/src/index.d.ts +1 -0
  36. package/lib/typescript/src/mappings/Stepper.d.ts +22 -0
  37. package/lib/typescript/src/mappings/ToggleButton.d.ts +124 -0
  38. package/package.json +3 -3
  39. package/src/components/Stepper.js +23 -21
  40. package/src/components/Stepper.tsx +27 -19
  41. package/src/components/ToggleButton.js +39 -0
  42. package/src/components/ToggleButton.tsx +94 -0
  43. package/src/index.js +1 -0
  44. package/src/index.tsx +1 -0
  45. package/src/mappings/Stepper.js +10 -1
  46. package/src/mappings/Stepper.ts +10 -0
  47. package/src/mappings/ToggleButton.js +50 -0
  48. package/src/mappings/ToggleButton.ts +62 -0
@@ -2,40 +2,42 @@ import * as React from "react";
2
2
  import { View, Text } from "react-native";
3
3
  import { withTheme } from "../theming";
4
4
  import IconButton from "./IconButton";
5
- const Stepper = ({ Icon, value, style, onChange, defaultValue, theme: { colors, typography, roundness }, iconSize = 24, iconColor = colors.strong, borderRadius = roundness, typeStyle, }) => {
5
+ import isNumber from "lodash.isnumber";
6
+ const Stepper = ({ Icon, value, min, max, style, onChange, defaultValue, theme: { colors, typography, roundness }, iconSize = 24, iconColor = colors.strong, borderRadius = roundness, typeStyle, }) => {
6
7
  const [stateValue, setStateValue] = React.useState(value || defaultValue || 0);
7
8
  React.useEffect(() => {
8
- if (value != null) {
9
- setStateValue(value);
9
+ if (value || value === 0) {
10
+ onChange && onChange(stateValue);
10
11
  }
11
- }, [value]);
12
+ }, [onChange, stateValue, value]);
12
13
  React.useEffect(() => {
13
- if (defaultValue != null) {
14
- setStateValue(defaultValue);
15
- }
16
- }, [defaultValue]);
17
- const handleMinus = () => {
18
- if (value || value === 0) {
19
- onChange && onChange(value - 1);
14
+ let newValue = value || defaultValue || 0;
15
+ if (isNumber(max) && newValue > max) {
16
+ newValue = max;
20
17
  }
21
- else {
22
- setStateValue(stateValue - 1);
18
+ if (isNumber(min) && newValue < min) {
19
+ newValue = min;
23
20
  }
24
- };
25
- const handlePlus = () => {
26
- if (value || value === 0) {
27
- onChange && onChange(value + 1);
21
+ setStateValue(newValue);
22
+ }, [defaultValue, value, min, max]);
23
+ const handleMinus = React.useCallback(() => {
24
+ if (isNumber(min) && value === min) {
25
+ return;
28
26
  }
29
- else {
30
- setStateValue(stateValue + 1);
27
+ setStateValue(stateValue - 1);
28
+ }, [min, stateValue, value]);
29
+ const handlePlus = React.useCallback(() => {
30
+ if (isNumber(max) && value === max) {
31
+ return;
31
32
  }
32
- };
33
+ setStateValue(stateValue + 1);
34
+ }, [max, stateValue, value]);
33
35
  return (React.createElement(View, { style: [
34
36
  { flexDirection: "row" },
35
37
  style,
36
38
  borderRadius ? { borderRadius } : {},
37
39
  ] },
38
- React.createElement(IconButton, { Icon: Icon, icon: "MaterialIcons/remove", onPress: handleMinus, size: iconSize, color: iconColor, disabled: value ? value === 0 : stateValue === 0 }),
40
+ React.createElement(IconButton, { Icon: Icon, icon: "MaterialIcons/remove", onPress: handleMinus, size: iconSize, color: iconColor, disabled: stateValue === 0 }),
39
41
  React.createElement(Text, { style: [
40
42
  typography.body1,
41
43
  {
@@ -5,9 +5,12 @@ import type { Theme } from "../styles/DefaultTheme";
5
5
  import type { IconSlot } from "../interfaces/Icon";
6
6
 
7
7
  import IconButton from "./IconButton";
8
+ import isNumber from "lodash.isnumber";
8
9
 
9
10
  type Props = {
10
11
  value?: number;
12
+ min?: number;
13
+ max?: number;
11
14
  theme: Theme;
12
15
  style?: StyleProp<ViewStyle>;
13
16
  onChange?: (value: number) => void;
@@ -21,6 +24,8 @@ type Props = {
21
24
  const Stepper: React.FC<Props> = ({
22
25
  Icon,
23
26
  value,
27
+ min,
28
+ max,
24
29
  style,
25
30
  onChange,
26
31
  defaultValue,
@@ -35,32 +40,35 @@ const Stepper: React.FC<Props> = ({
35
40
  );
36
41
 
37
42
  React.useEffect(() => {
38
- if (value != null) {
39
- setStateValue(value);
43
+ if (value || value === 0) {
44
+ onChange && onChange(stateValue);
40
45
  }
41
- }, [value]);
46
+ }, [onChange, stateValue, value]);
42
47
 
43
48
  React.useEffect(() => {
44
- if (defaultValue != null) {
45
- setStateValue(defaultValue);
49
+ let newValue = value || defaultValue || 0;
50
+ if (isNumber(max) && newValue > max) {
51
+ newValue = max;
52
+ }
53
+ if (isNumber(min) && newValue < min) {
54
+ newValue = min;
46
55
  }
47
- }, [defaultValue]);
56
+ setStateValue(newValue);
57
+ }, [defaultValue, value, min, max]);
48
58
 
49
- const handleMinus = () => {
50
- if (value || value === 0) {
51
- onChange && onChange(value - 1);
52
- } else {
53
- setStateValue(stateValue - 1);
59
+ const handleMinus = React.useCallback(() => {
60
+ if (isNumber(min) && value === min) {
61
+ return;
54
62
  }
55
- };
63
+ setStateValue(stateValue - 1);
64
+ }, [min, stateValue, value]);
56
65
 
57
- const handlePlus = () => {
58
- if (value || value === 0) {
59
- onChange && onChange(value + 1);
60
- } else {
61
- setStateValue(stateValue + 1);
66
+ const handlePlus = React.useCallback(() => {
67
+ if (isNumber(max) && value === max) {
68
+ return;
62
69
  }
63
- };
70
+ setStateValue(stateValue + 1);
71
+ }, [max, stateValue, value]);
64
72
 
65
73
  return (
66
74
  <View
@@ -76,7 +84,7 @@ const Stepper: React.FC<Props> = ({
76
84
  onPress={handleMinus}
77
85
  size={iconSize}
78
86
  color={iconColor}
79
- disabled={value ? value === 0 : stateValue === 0}
87
+ disabled={stateValue === 0}
80
88
  />
81
89
  <Text
82
90
  style={[
@@ -0,0 +1,39 @@
1
+ import * as React from "react";
2
+ import { withTheme } from "../theming";
3
+ import { StyleSheet } from "react-native";
4
+ import IconButton from "./IconButton";
5
+ const ToggleButton = ({ Icon, icon, toggled = false, onPress = () => { }, defaultValue, disabled = false, color = "primary", colorSecondary = "surface", borderColor = "divider", iconSize = 25, width = 50, height = 50, theme: { colors }, style, ...rest }) => {
6
+ const [internalValue, setInternalValue] = React.useState(toggled || defaultValue || false);
7
+ React.useEffect(() => {
8
+ if (toggled != null) {
9
+ setInternalValue(toggled);
10
+ }
11
+ }, [toggled]);
12
+ React.useEffect(() => {
13
+ if (defaultValue != null) {
14
+ setInternalValue(defaultValue);
15
+ }
16
+ }, [defaultValue]);
17
+ const handlePress = () => {
18
+ setInternalValue(!internalValue);
19
+ onPress(!internalValue);
20
+ };
21
+ return (React.createElement(IconButton, { Icon: Icon, icon: icon, size: iconSize, color: internalValue ? colors[color] : colors[colorSecondary], onPress: handlePress, disabled: disabled, style: [
22
+ styles.mainContainer,
23
+ {
24
+ width,
25
+ height,
26
+ backgroundColor: internalValue
27
+ ? colors[colorSecondary]
28
+ : colors[color],
29
+ borderColor: colors[borderColor],
30
+ },
31
+ style,
32
+ ], ...rest }));
33
+ };
34
+ const styles = StyleSheet.create({
35
+ mainContainer: {
36
+ borderWidth: 1,
37
+ },
38
+ });
39
+ export default withTheme(ToggleButton);
@@ -0,0 +1,94 @@
1
+ import * as React from "react";
2
+ import { withTheme } from "../theming";
3
+ import { colorTypes } from "@draftbit/types";
4
+ import { StyleProp, StyleSheet, ViewStyle } from "react-native";
5
+ import IconButton from "./IconButton";
6
+ import type { Theme } from "../styles/DefaultTheme";
7
+ import type { IconSlot } from "../interfaces/Icon";
8
+
9
+ type Props = {
10
+ icon: string;
11
+ toggled?: boolean;
12
+ onPress?: (value: boolean) => void;
13
+ defaultValue?: boolean;
14
+ disabled?: boolean;
15
+ color?: colorTypes;
16
+ colorSecondary?: colorTypes;
17
+ borderColor?: colorTypes;
18
+ iconSize?: number;
19
+ width?: number;
20
+ height?: number;
21
+ style?: StyleProp<ViewStyle>;
22
+ theme: Theme;
23
+ } & IconSlot;
24
+
25
+ const ToggleButton: React.FC<Props> = ({
26
+ Icon,
27
+ icon,
28
+ toggled = false,
29
+ onPress = () => {},
30
+ defaultValue,
31
+ disabled = false,
32
+ color = "primary",
33
+ colorSecondary = "surface",
34
+ borderColor = "divider",
35
+ iconSize = 25,
36
+ width = 50,
37
+ height = 50,
38
+ theme: { colors },
39
+ style,
40
+ ...rest
41
+ }) => {
42
+ const [internalValue, setInternalValue] = React.useState<boolean>(
43
+ toggled || defaultValue || false
44
+ );
45
+
46
+ React.useEffect(() => {
47
+ if (toggled != null) {
48
+ setInternalValue(toggled);
49
+ }
50
+ }, [toggled]);
51
+
52
+ React.useEffect(() => {
53
+ if (defaultValue != null) {
54
+ setInternalValue(defaultValue);
55
+ }
56
+ }, [defaultValue]);
57
+
58
+ const handlePress = () => {
59
+ setInternalValue(!internalValue);
60
+ onPress(!internalValue);
61
+ };
62
+
63
+ return (
64
+ <IconButton
65
+ Icon={Icon}
66
+ icon={icon}
67
+ size={iconSize}
68
+ color={internalValue ? colors[color] : colors[colorSecondary]}
69
+ onPress={handlePress}
70
+ disabled={disabled}
71
+ style={[
72
+ styles.mainContainer,
73
+ {
74
+ width,
75
+ height,
76
+ backgroundColor: internalValue
77
+ ? colors[colorSecondary]
78
+ : colors[color],
79
+ borderColor: colors[borderColor],
80
+ },
81
+ style,
82
+ ]}
83
+ {...rest}
84
+ />
85
+ );
86
+ };
87
+
88
+ const styles = StyleSheet.create({
89
+ mainContainer: {
90
+ borderWidth: 1,
91
+ },
92
+ });
93
+
94
+ export default withTheme(ToggleButton);
package/src/index.js CHANGED
@@ -22,6 +22,7 @@ export { default as StarRating } from "./components/StarRating";
22
22
  export { default as Surface } from "./components/Surface";
23
23
  export { default as Switch, SwitchRow } from "./components/Switch";
24
24
  export { default as TextField } from "./components/TextField";
25
+ export { default as ToggleButton } from "./components/ToggleButton";
25
26
  export { default as Touchable } from "./components/Touchable";
26
27
  export { AccordionGroup, AccordionItem } from "./components/Accordion";
27
28
  export { ActionSheet, ActionSheetItem, ActionSheetCancel, } from "./components/ActionSheet";
package/src/index.tsx CHANGED
@@ -23,6 +23,7 @@ export { default as StarRating } from "./components/StarRating";
23
23
  export { default as Surface } from "./components/Surface";
24
24
  export { default as Switch, SwitchRow } from "./components/Switch";
25
25
  export { default as TextField } from "./components/TextField";
26
+ export { default as ToggleButton } from "./components/ToggleButton";
26
27
  export { default as Touchable } from "./components/Touchable";
27
28
  export { AccordionGroup, AccordionItem } from "./components/Accordion";
28
29
  export {
@@ -1,4 +1,4 @@
1
- import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, Triggers, } from "@draftbit/types";
1
+ import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, createStaticNumberProp, Triggers, } from "@draftbit/types";
2
2
  export const SEED_DATA = [
3
3
  {
4
4
  name: "Stepper",
@@ -15,6 +15,15 @@ export const SEED_DATA = [
15
15
  }),
16
16
  iconSize: createIconSizeProp({ defaultValue: 24 }),
17
17
  iconColor: createColorProp({ defaultValue: "strong" }),
18
+ min: createStaticNumberProp({
19
+ label: "Minimum",
20
+ description: "Minimum Number",
21
+ defaultValue: 0,
22
+ }),
23
+ max: createStaticNumberProp({
24
+ label: "Maximum",
25
+ description: "Maximum Number",
26
+ }),
18
27
  },
19
28
  },
20
29
  ];
@@ -3,6 +3,7 @@ import {
3
3
  createIconSizeProp,
4
4
  createColorProp,
5
5
  createFieldNameProp,
6
+ createStaticNumberProp,
6
7
  Triggers,
7
8
  } from "@draftbit/types";
8
9
 
@@ -22,6 +23,15 @@ export const SEED_DATA = [
22
23
  }),
23
24
  iconSize: createIconSizeProp({ defaultValue: 24 }),
24
25
  iconColor: createColorProp({ defaultValue: "strong" }),
26
+ min: createStaticNumberProp({
27
+ label: "Minimum",
28
+ description: "Minimum Number",
29
+ defaultValue: 0,
30
+ }),
31
+ max: createStaticNumberProp({
32
+ label: "Maximum",
33
+ description: "Maximum Number",
34
+ }),
25
35
  },
26
36
  },
27
37
  ];
@@ -0,0 +1,50 @@
1
+ import { GROUPS, COMPONENT_TYPES, createIconProp, createBoolProp, createColorProp, createStaticNumberProp, createFieldNameProp, createIconSizeProp, createActionProp, Triggers, } from "@draftbit/types";
2
+ export const SEED_DATA = {
3
+ name: "Toggle Button",
4
+ tag: "ToggleButton",
5
+ category: COMPONENT_TYPES.deprecated,
6
+ layout: {},
7
+ triggers: [Triggers.OnPress],
8
+ props: {
9
+ onPress: createActionProp(),
10
+ icon: createIconProp({
11
+ required: true,
12
+ }),
13
+ iconSize: createIconSizeProp(),
14
+ fieldName: createFieldNameProp({
15
+ defaultValue: false,
16
+ valuePropName: "toggled",
17
+ }),
18
+ disabled: createBoolProp({
19
+ label: "Disabled",
20
+ description: "Whether the button should be disabled",
21
+ group: GROUPS.basic,
22
+ }),
23
+ color: createColorProp({
24
+ group: GROUPS.basic,
25
+ }),
26
+ colorSecondary: createColorProp({
27
+ label: "Secondary Color",
28
+ group: GROUPS.basic,
29
+ }),
30
+ borderColor: createColorProp({
31
+ label: "Border Color",
32
+ group: GROUPS.basic,
33
+ }),
34
+ width: createStaticNumberProp({
35
+ label: "Width",
36
+ description: "Width",
37
+ defaultValue: 50,
38
+ }),
39
+ height: createStaticNumberProp({
40
+ label: "Height",
41
+ description: "Height",
42
+ defaultValue: 50,
43
+ }),
44
+ toggled: createBoolProp({
45
+ label: "Toggled",
46
+ description: "Whether the button should show the toggled state",
47
+ defaultValue: false,
48
+ }),
49
+ },
50
+ };
@@ -0,0 +1,62 @@
1
+ import {
2
+ GROUPS,
3
+ COMPONENT_TYPES,
4
+ createIconProp,
5
+ createBoolProp,
6
+ createColorProp,
7
+ createStaticNumberProp,
8
+ createFieldNameProp,
9
+ createIconSizeProp,
10
+ createActionProp,
11
+ Triggers,
12
+ } from "@draftbit/types";
13
+
14
+ export const SEED_DATA = {
15
+ name: "Toggle Button",
16
+ tag: "ToggleButton",
17
+ category: COMPONENT_TYPES.deprecated,
18
+ layout: {},
19
+ triggers: [Triggers.OnPress],
20
+ props: {
21
+ onPress: createActionProp(),
22
+ icon: createIconProp({
23
+ required: true,
24
+ }),
25
+ iconSize: createIconSizeProp(),
26
+ fieldName: createFieldNameProp({
27
+ defaultValue: false,
28
+ valuePropName: "toggled",
29
+ }),
30
+ disabled: createBoolProp({
31
+ label: "Disabled",
32
+ description: "Whether the button should be disabled",
33
+ group: GROUPS.basic,
34
+ }),
35
+ color: createColorProp({
36
+ group: GROUPS.basic,
37
+ }),
38
+ colorSecondary: createColorProp({
39
+ label: "Secondary Color",
40
+ group: GROUPS.basic,
41
+ }),
42
+ borderColor: createColorProp({
43
+ label: "Border Color",
44
+ group: GROUPS.basic,
45
+ }),
46
+ width: createStaticNumberProp({
47
+ label: "Width",
48
+ description: "Width",
49
+ defaultValue: 50,
50
+ }),
51
+ height: createStaticNumberProp({
52
+ label: "Height",
53
+ description: "Height",
54
+ defaultValue: 50,
55
+ }),
56
+ toggled: createBoolProp({
57
+ label: "Toggled",
58
+ description: "Whether the button should show the toggled state",
59
+ defaultValue: false,
60
+ }),
61
+ },
62
+ };