@apple-pie/slice-native 0.1.3 → 0.1.6

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 (74) hide show
  1. package/README.md +196 -6
  2. package/dist/cjs/components.js +15 -0
  3. package/dist/cjs/hooks.js +7 -0
  4. package/dist/cjs/index.js +18 -805
  5. package/dist/cjs/providers.js +9 -0
  6. package/dist/cjs/src/components/SliceButton/SliceButton.js +119 -0
  7. package/dist/cjs/src/components/SliceIcon/SliceIcon.js +20 -0
  8. package/dist/cjs/src/components/SliceIcon/iconRegistry.js +668 -0
  9. package/dist/cjs/src/components/SliceIcon/icons.js +144 -0
  10. package/dist/cjs/src/components/SliceText/SliceText.js +21 -0
  11. package/dist/cjs/src/components/SliceTextInput/SliceTextInput.js +87 -0
  12. package/dist/cjs/src/hooks/useCreateThemedStyles/useCreateThemedStyles.js +13 -0
  13. package/dist/cjs/src/providers/SliceThemeProvider.js +37 -0
  14. package/dist/cjs/src/theme/colors/colors.js +253 -0
  15. package/dist/cjs/src/theme/corners/corners.js +14 -0
  16. package/dist/cjs/src/theme/elevations/elevations.js +17 -0
  17. package/dist/cjs/src/theme/motion/motion.js +15 -0
  18. package/dist/cjs/src/theme/motion.js +47 -0
  19. package/dist/cjs/src/theme/spacing/spacing.js +14 -0
  20. package/dist/cjs/src/theme/type/type.js +190 -0
  21. package/dist/cjs/src/utils/typography/typography.js +17 -0
  22. package/dist/cjs/theme.js +23 -538
  23. package/dist/cjs/utils.js +7 -0
  24. package/dist/esm/components.mjs +5 -0
  25. package/dist/esm/hooks.mjs +1 -0
  26. package/dist/esm/index.mjs +8 -806
  27. package/dist/esm/providers.mjs +1 -0
  28. package/dist/esm/src/components/SliceButton/SliceButton.mjs +117 -0
  29. package/dist/esm/src/components/SliceIcon/SliceIcon.mjs +18 -0
  30. package/dist/esm/src/components/SliceIcon/iconRegistry.mjs +666 -0
  31. package/dist/esm/src/components/SliceIcon/icons.mjs +142 -0
  32. package/dist/esm/src/components/SliceText/SliceText.mjs +19 -0
  33. package/dist/esm/src/components/SliceTextInput/SliceTextInput.mjs +85 -0
  34. package/dist/esm/src/hooks/useCreateThemedStyles/useCreateThemedStyles.mjs +11 -0
  35. package/dist/esm/src/providers/SliceThemeProvider.mjs +33 -0
  36. package/dist/esm/src/theme/colors/colors.mjs +249 -0
  37. package/dist/esm/src/theme/corners/corners.mjs +12 -0
  38. package/dist/esm/src/theme/elevations/elevations.mjs +15 -0
  39. package/dist/esm/src/theme/motion/motion.mjs +13 -0
  40. package/dist/esm/src/theme/motion.mjs +45 -0
  41. package/dist/esm/src/theme/spacing/spacing.mjs +12 -0
  42. package/dist/esm/src/theme/type/type.mjs +184 -0
  43. package/dist/esm/src/utils/typography/typography.mjs +15 -0
  44. package/dist/esm/theme.mjs +7 -522
  45. package/dist/esm/utils.mjs +1 -0
  46. package/dist/types/native/index.d.ts +8 -4
  47. package/dist/types/native/src/components/SliceButton/SliceButton.d.ts +5 -0
  48. package/dist/types/native/src/components/SliceButton/_types.d.ts +47 -0
  49. package/dist/types/native/src/components/SliceButton/index.d.ts +2 -0
  50. package/dist/types/native/src/components/SliceIcon/SliceIcon.d.ts +2 -0
  51. package/dist/types/native/{components/Icon → src/components/SliceIcon}/icons.d.ts +2 -0
  52. package/dist/types/native/src/components/SliceIcon/index.d.ts +3 -0
  53. package/dist/types/native/src/components/SliceText/SliceText.d.ts +5 -0
  54. package/dist/types/native/src/components/SliceText/_types.d.ts +17 -0
  55. package/dist/types/native/src/components/SliceText/index.d.ts +2 -0
  56. package/dist/types/native/src/components/SliceTextInput/SliceTextInput.d.ts +2 -0
  57. package/dist/types/native/src/components/SliceTextInput/_types.d.ts +36 -0
  58. package/dist/types/native/src/components/SliceTextInput/index.d.ts +2 -0
  59. package/dist/types/native/src/components/index.d.ts +8 -0
  60. package/dist/types/native/src/hooks/index.d.ts +1 -0
  61. package/dist/types/native/src/hooks/useCreateThemedStyles/index.d.ts +1 -0
  62. package/dist/types/native/src/hooks/useCreateThemedStyles/useCreateThemedStyles.d.ts +7 -0
  63. package/dist/types/native/src/providers/SliceThemeProvider.d.ts +16 -0
  64. package/dist/types/native/src/providers/index.d.ts +2 -0
  65. package/dist/types/native/{theme → src/theme}/index.d.ts +5 -5
  66. package/dist/types/native/src/utils/index.d.ts +1 -0
  67. package/dist/types/native/src/utils/typography/index.d.ts +1 -0
  68. package/dist/types/native/src/utils/typography/typography.d.ts +7 -0
  69. package/package.json +32 -3
  70. package/dist/types/native/components/Icon/NativeIcon.d.ts +0 -2
  71. package/dist/types/native/components/Icon/index.d.ts +0 -3
  72. /package/dist/types/native/{components/Icon → src/components/SliceIcon}/_types.d.ts +0 -0
  73. /package/dist/types/native/{components/Icon → src/components/SliceIcon}/iconRegistry.d.ts +0 -0
  74. /package/dist/types/native/{theme → src/theme}/motion.d.ts +0 -0
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var SliceThemeProvider = require('./src/providers/SliceThemeProvider.js');
4
+
5
+
6
+
7
+ exports.SliceThemeProvider = SliceThemeProvider.SliceThemeProvider;
8
+ exports.useSliceContext = SliceThemeProvider.useSliceContext;
9
+ exports.useSliceTheme = SliceThemeProvider.useSliceTheme;
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var reactNative = require('react-native');
6
+ var Reanimated = require('react-native-reanimated');
7
+ var SliceThemeProvider = require('../../providers/SliceThemeProvider.js');
8
+ var SliceIcon = require('../SliceIcon/SliceIcon.js');
9
+ var SliceText = require('../SliceText/SliceText.js');
10
+
11
+ /**
12
+ * Component logic & render
13
+ */
14
+ function SliceButton(props) {
15
+ const { colors, name } = SliceThemeProvider.useSliceTheme();
16
+ const isLightTheme = name.includes('light');
17
+ const { children, onPress, disabled = false, icon, iconPosition = 'left', iconSize = 24, animatedStyle, variant = 'primary', layout, presence, accessibilityState, ...pressableProps } = props;
18
+ const hasLabel = children !== undefined && children !== null && children !== false && children !== '';
19
+ // adjust padding for the visual discrepancy because of the intrinsic padding of each icon
20
+ const pressableStyle = react.useMemo(() => {
21
+ if (!hasLabel)
22
+ return reactNative.StyleSheet.compose(styles.pressable, styles.pressableNoLabel);
23
+ if (icon && iconPosition === 'left')
24
+ return reactNative.StyleSheet.compose(styles.pressable, styles.pressableIconLeft);
25
+ if (icon && iconPosition === 'right')
26
+ return reactNative.StyleSheet.compose(styles.pressable, styles.pressableIconRight);
27
+ return styles.pressable;
28
+ }, [icon, iconPosition, hasLabel]);
29
+ // create a round button when the button has no label
30
+ const wrapperStyle = react.useMemo(() => {
31
+ if (!hasLabel)
32
+ return reactNative.StyleSheet.compose(styles.wrapper, styles.roundWrapper);
33
+ return styles.wrapper;
34
+ }, [hasLabel]);
35
+ // memoize the color styles to apply to the button/label based on variant and disabled state
36
+ const colorStyles = react.useMemo(() => {
37
+ const bgColor = variant === 'primary' ? colors['core-button-primary'] : colors['core-surface-primary'];
38
+ const disabledBGColor = disabled ? colors['core-surface-secondary'] : undefined;
39
+ const color = colors['core-text-primary'];
40
+ const disabledColor = disabled ? colors['core-text-disabled'] : undefined;
41
+ const iconColor = disabled
42
+ ? disabledColor
43
+ : isLightTheme
44
+ ? colors['core-icon-primary']
45
+ : colors['core-link-primary'];
46
+ return reactNative.StyleSheet.create({
47
+ backgroundColor: {
48
+ backgroundColor: disabledBGColor ?? bgColor,
49
+ },
50
+ textColor: {
51
+ color: disabledColor ?? color,
52
+ },
53
+ ripple: {
54
+ color: 'rgba(255,255,255,0.5)',
55
+ },
56
+ icon: {
57
+ color: iconColor,
58
+ },
59
+ });
60
+ }, [variant, disabled, colors, isLightTheme]);
61
+ // primary buttons are full color and have no border
62
+ const borderStyles = react.useMemo(() => {
63
+ return reactNative.StyleSheet.create({
64
+ border: {
65
+ borderWidth: variant === 'primary' ? 0 : 1,
66
+ borderColor: colors['core-outline-secondary'],
67
+ },
68
+ });
69
+ }, [variant, colors]);
70
+ // disable touch events when button is disabled
71
+ const pointerEvents = react.useMemo(() => {
72
+ return reactNative.StyleSheet.create({
73
+ pointer: {
74
+ pointerEvents: disabled ? 'none' : 'auto',
75
+ },
76
+ });
77
+ }, [disabled]);
78
+ return (jsxRuntime.jsx(Reanimated.View, { layout: layout, children: jsxRuntime.jsx(Reanimated.View, { entering: presence?.entering, exiting: presence?.exiting, children: jsxRuntime.jsx(Reanimated.View, { style: [wrapperStyle, pointerEvents.pointer, colorStyles.backgroundColor, borderStyles.border, animatedStyle], children: jsxRuntime.jsxs(reactNative.Pressable, { ...pressableProps, accessibilityRole: pressableProps.accessibilityRole ?? 'button', accessibilityState: { ...accessibilityState, disabled }, disabled: disabled, style: pressableStyle, onPress: disabled ? undefined : onPress, android_ripple: pressableProps.android_ripple ?? colorStyles.ripple, children: [icon && iconPosition === 'left' && (jsxRuntime.jsx(SliceIcon.SliceIcon, { name: icon, size: iconSize, strokeColor: colorStyles.icon.color, pointerEvents: "none", accessible: false })), hasLabel && (jsxRuntime.jsx(SliceText.StyledText, { textStyle: 'body-xl-bold', style: colorStyles.textColor, singleLine: true, numberOfLines: 1, ellipsizeMode: 'tail', children: children })), icon && iconPosition === 'right' && (jsxRuntime.jsx(SliceIcon.SliceIcon, { name: icon, size: iconSize, strokeColor: colorStyles.icon.color, pointerEvents: "none", accessible: false }))] }) }) }) }));
79
+ }
80
+ /**
81
+ * Base Styles
82
+ */
83
+ const styles = reactNative.StyleSheet.create({
84
+ wrapper: {
85
+ borderRadius: 100,
86
+ overflow: 'hidden',
87
+ justifyContent: 'center',
88
+ alignItems: 'center',
89
+ height: 48,
90
+ width: 'auto',
91
+ },
92
+ roundWrapper: {
93
+ borderRadius: 24,
94
+ width: 48,
95
+ height: 48,
96
+ },
97
+ pressable: {
98
+ flex: 1,
99
+ flexDirection: 'row',
100
+ gap: 6,
101
+ paddingHorizontal: 16,
102
+ justifyContent: 'center',
103
+ alignItems: 'center',
104
+ },
105
+ pressableIconLeft: {
106
+ paddingLeft: 16,
107
+ paddingRight: 22,
108
+ },
109
+ pressableIconRight: {
110
+ paddingLeft: 22,
111
+ paddingRight: 16,
112
+ },
113
+ pressableNoLabel: {
114
+ paddingLeft: 0,
115
+ paddingRight: 0,
116
+ },
117
+ });
118
+
119
+ exports.SliceButton = SliceButton;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var reactNative = require('react-native');
6
+ var Svg = require('react-native-svg');
7
+ var iconRegistry = require('./iconRegistry.js');
8
+
9
+ const SliceIcon = react.memo((props) => {
10
+ const dark = reactNative.useColorScheme() === 'dark';
11
+ const { name = 'home', size = 20, stroke = 1.5, strokeColor = dark ? '#ffffff' : '#000000', fillColor, fill = false, coverUp = dark ? '#000000' : '#ffffff', toggle = false, disabled = false, onPress, onPressIn, onPressOut, onLongPress, accessibilityState, opacity = 1, ...svgProps } = props;
12
+ const variant = iconRegistry.STATIC_ICON_REGISTRY.get(name);
13
+ const shape = toggle ? (variant?.lineOn ?? variant?.line) : variant?.line;
14
+ if (!shape)
15
+ return null;
16
+ return (jsxRuntime.jsx(Svg, { width: size, height: size, viewBox: "0 0 20 20", fill: "none", accessibilityRole: onPress || onLongPress ? 'button' : 'image', accessibilityLabel: `${name} icon`, ...svgProps, disabled: disabled, opacity: disabled ? Number(opacity) * 0.5 : opacity, accessibilityState: { ...accessibilityState, disabled }, onPress: disabled ? undefined : onPress, onPressIn: disabled ? undefined : onPressIn, onPressOut: disabled ? undefined : onPressOut, onLongPress: disabled ? undefined : onLongPress, children: shape({ stroke, strokeColor, fillColor: fill ? (fillColor ?? (dark ? 0.2 : 0.125)) : 0, coverUp }) }));
17
+ });
18
+ SliceIcon.displayName = 'SliceIcon';
19
+
20
+ exports.SliceIcon = SliceIcon;