bootstrap-rn 0.3.5 → 0.3.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 (58) hide show
  1. package/lib/commonjs/components/Image.js.map +1 -1
  2. package/lib/commonjs/components/forms/RadioGroup.js.map +1 -1
  3. package/lib/commonjs/components/forms/internals/PickerNative.js.map +1 -1
  4. package/lib/commonjs/components/modal/Modal.js +1 -1
  5. package/lib/commonjs/components/modal/Modal.js.map +1 -1
  6. package/lib/commonjs/components/modal/ModalBody.js +1 -1
  7. package/lib/commonjs/components/modal/ModalBody.js.map +1 -1
  8. package/lib/commonjs/components/offcanvas/OffcanvasBody.js.map +1 -1
  9. package/lib/commonjs/style/makeUtilities.js.map +1 -1
  10. package/lib/module/components/Image.js.map +1 -1
  11. package/lib/module/components/forms/RadioGroup.js.map +1 -1
  12. package/lib/module/components/forms/internals/PickerNative.js.map +1 -1
  13. package/lib/module/components/modal/Modal.js +1 -1
  14. package/lib/module/components/modal/Modal.js.map +1 -1
  15. package/lib/module/components/modal/ModalBody.js +1 -1
  16. package/lib/module/components/modal/ModalBody.js.map +1 -1
  17. package/lib/module/components/offcanvas/OffcanvasBody.js.map +1 -1
  18. package/lib/module/style/makeUtilities.js.map +1 -1
  19. package/lib/types/components/forms/Picker.d.ts +4 -4
  20. package/lib/types/components/forms/Picker.d.ts.map +1 -1
  21. package/lib/types/components/forms/PickerItem.d.ts +1 -1
  22. package/lib/types/components/forms/PickerItem.d.ts.map +1 -1
  23. package/lib/types/components/forms/Radio.d.ts +1 -1
  24. package/lib/types/components/forms/Radio.d.ts.map +1 -1
  25. package/lib/types/components/forms/RadioContext.d.ts +2 -2
  26. package/lib/types/components/forms/RadioContext.d.ts.map +1 -1
  27. package/lib/types/components/forms/RadioGroup.d.ts +2 -2
  28. package/lib/types/components/forms/RadioGroup.d.ts.map +1 -1
  29. package/lib/types/components/forms/internals/PickerNative.d.ts.map +1 -1
  30. package/lib/types/components/forms/internals/PickerNativeContext.d.ts +2 -2
  31. package/lib/types/components/forms/internals/PickerNativeContext.d.ts.map +1 -1
  32. package/lib/types/components/forms/internals/PickerNativeItem.d.ts +1 -1
  33. package/lib/types/components/forms/internals/PickerNativeItem.d.ts.map +1 -1
  34. package/lib/types/components/forms/internals/PickerWebItem.d.ts +1 -1
  35. package/lib/types/components/forms/internals/PickerWebItem.d.ts.map +1 -1
  36. package/lib/types/components/modal/Modal.d.ts +3 -4
  37. package/lib/types/components/modal/Modal.d.ts.map +1 -1
  38. package/lib/types/components/modal/ModalBody.d.ts +3 -6
  39. package/lib/types/components/modal/ModalBody.d.ts.map +1 -1
  40. package/lib/types/components/offcanvas/OffcanvasBody.d.ts +3 -4
  41. package/lib/types/components/offcanvas/OffcanvasBody.d.ts.map +1 -1
  42. package/lib/types/style/makeUtilities.d.ts +6 -2
  43. package/lib/types/style/makeUtilities.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/Image.tsx +1 -1
  46. package/src/components/forms/Picker.tsx +191 -191
  47. package/src/components/forms/PickerItem.tsx +32 -32
  48. package/src/components/forms/Radio.tsx +37 -37
  49. package/src/components/forms/RadioContext.ts +13 -13
  50. package/src/components/forms/RadioGroup.tsx +42 -40
  51. package/src/components/forms/internals/PickerNative.tsx +193 -195
  52. package/src/components/forms/internals/PickerNativeContext.ts +14 -14
  53. package/src/components/forms/internals/PickerNativeItem.tsx +59 -59
  54. package/src/components/forms/internals/PickerWebItem.tsx +36 -36
  55. package/src/components/modal/Modal.tsx +234 -233
  56. package/src/components/modal/ModalBody.tsx +52 -56
  57. package/src/components/offcanvas/OffcanvasBody.tsx +64 -66
  58. package/src/style/makeUtilities.ts +79 -76
@@ -1,195 +1,193 @@
1
- import React, { useState, useMemo } from 'react';
2
- import {
3
- TextStyle,
4
- TextInputFocusEventData,
5
- NativeSyntheticEvent,
6
- TargetedEvent,
7
- StyleSheet as StyleUtils,
8
- } from 'react-native';
9
- import StyleSheet from '../../../style/StyleSheet';
10
- import css from '../../../style/css';
11
- import Pressable, { PressableRef } from '../../Pressable';
12
- import Text from '../../Text';
13
- import Offcanvas from '../../offcanvas/Offcanvas';
14
- import useBackground from '../../../hooks/useBackground';
15
- import PickerNativeContext from './PickerNativeContext';
16
- import type { PickerProps, MenuComponentProps } from '../Picker';
17
- import type { BaseStyle } from '../../../types';
18
-
19
- export interface PickerNativeProps extends PickerProps {
20
- style: TextStyle[];
21
- }
22
-
23
- const styles = StyleSheet.create({
24
- menu: css`
25
- align-items: center;
26
- `,
27
- });
28
-
29
- // Ref: https://reactnative.dev/docs/text-style-props
30
- const textStyleKeys = [
31
- 'color',
32
- 'fontFamily',
33
- 'fontSize',
34
- 'fontStyle',
35
- 'fontWeight',
36
- 'includeFontPaddingAndroid',
37
- 'fontVariant',
38
- 'letterSpacing',
39
- 'lineHeight',
40
- 'textAlign',
41
- 'textAlignVerticalAndroid',
42
- 'textDecorationColoriOS',
43
- 'textDecorationLine',
44
- 'textDecorationStyleiOS',
45
- 'textShadowColor',
46
- 'textShadowOffset',
47
- 'textShadowRadius',
48
- 'textTransform',
49
- 'writingDirection',
50
- ];
51
-
52
- const extractTextStyles = (style: BaseStyle[]) => {
53
- const flattenedStyle = StyleUtils.flatten(style);
54
- const textStyles: { [key: string]: string } = {};
55
-
56
- Object.entries(flattenedStyle).forEach(([key, value]) => {
57
- if (textStyleKeys.includes(key)) {
58
- textStyles[key] = value;
59
- }
60
- });
61
-
62
- return textStyles;
63
- };
64
-
65
- type GetTextProps = {
66
- children: React.ReactElement | React.ReactElement[];
67
- selectedValue?: boolean | number | string | object;
68
- };
69
-
70
- const getText = ({ children, selectedValue }: GetTextProps) => {
71
- const items = React.Children.map(children, (child) => ({
72
- label: child.props.label,
73
- value: child.props.value,
74
- }));
75
-
76
- const selectedItem = items?.find((item) => item.value === selectedValue);
77
-
78
- return selectedItem?.label;
79
- };
80
-
81
- function DefaultMenuComponent({
82
- children,
83
- selectedValue,
84
- onValueChange: handleValueChange,
85
- onClose: handleClose,
86
- }: MenuComponentProps) {
87
- const contextValue = useMemo(
88
- () => ({
89
- selectedValue,
90
- handleValueChange,
91
- }),
92
- [selectedValue, handleValueChange],
93
- );
94
-
95
- return (
96
- <Offcanvas placement="bottom" visible onToggle={handleClose}>
97
- <Offcanvas.Body contentContainerStyle={styles.menu}>
98
- <PickerNativeContext.Provider value={contextValue}>
99
- {children}
100
- </PickerNativeContext.Provider>
101
- </Offcanvas.Body>
102
- </Offcanvas>
103
- );
104
- }
105
- /* eslint-enable */
106
-
107
- const PickerNative = React.forwardRef<PressableRef, PickerNativeProps>(
108
- (props, ref) => {
109
- const {
110
- children,
111
- selectedValue,
112
- onValueChange = () => {},
113
- onFocus = () => {},
114
- onBlur = () => {},
115
- placeholder,
116
- placeholderTextColor,
117
- disabled = false,
118
- MenuComponent = DefaultMenuComponent,
119
- style,
120
- ...elementProps
121
- } = props;
122
-
123
- const background = useBackground(style);
124
-
125
- const [visible, setVisible] = useState(false);
126
-
127
- const textStyle = extractTextStyles(background.style);
128
-
129
- const showPlaceholder =
130
- selectedValue === undefined || selectedValue === null;
131
-
132
- const handleValueChange = (
133
- nextValue?: boolean | number | string | object,
134
- ) => {
135
- onValueChange(nextValue);
136
- setVisible(false);
137
- };
138
- const handleClose = () => {
139
- setVisible(false);
140
- };
141
-
142
- const handleFocus = (event: NativeSyntheticEvent<TargetedEvent>) => {
143
- onFocus(event as NativeSyntheticEvent<TextInputFocusEventData>);
144
- };
145
-
146
- const handleBlur = (event: NativeSyntheticEvent<TargetedEvent>) => {
147
- onBlur(event as NativeSyntheticEvent<TextInputFocusEventData>);
148
- };
149
-
150
- return (
151
- <>
152
- <Pressable
153
- {...elementProps}
154
- ref={ref}
155
- role="combobox"
156
- onPress={() => {
157
- setVisible(true);
158
- }}
159
- onFocus={(event: NativeSyntheticEvent<TargetedEvent>) => {
160
- handleFocus(event);
161
- }}
162
- onBlur={(event: NativeSyntheticEvent<TargetedEvent>) => {
163
- handleBlur(event);
164
- }}
165
- disabled={disabled}
166
- style={background.style}
167
- >
168
- {background.element}
169
- <Text
170
- numberOfLines={1}
171
- style={[
172
- textStyle,
173
- showPlaceholder && { color: placeholderTextColor },
174
- ]}
175
- >
176
- {showPlaceholder
177
- ? placeholder || <Text>&nbsp;</Text>
178
- : getText({ children, selectedValue })}
179
- </Text>
180
- </Pressable>
181
- {visible && (
182
- <MenuComponent
183
- selectedValue={selectedValue}
184
- onValueChange={handleValueChange}
185
- onClose={handleClose}
186
- >
187
- {children}
188
- </MenuComponent>
189
- )}
190
- </>
191
- );
192
- },
193
- );
194
-
195
- export default PickerNative;
1
+ import React, { useState, useMemo } from 'react';
2
+ import {
3
+ TextStyle,
4
+ TextInputFocusEventData,
5
+ NativeSyntheticEvent,
6
+ TargetedEvent,
7
+ StyleSheet as StyleUtils,
8
+ } from 'react-native';
9
+ import StyleSheet from '../../../style/StyleSheet';
10
+ import css from '../../../style/css';
11
+ import Pressable, { PressableRef } from '../../Pressable';
12
+ import Text from '../../Text';
13
+ import Offcanvas from '../../offcanvas/Offcanvas';
14
+ import useBackground from '../../../hooks/useBackground';
15
+ import PickerNativeContext from './PickerNativeContext';
16
+ import type { PickerProps, MenuComponentProps } from '../Picker';
17
+ import type { BaseStyle } from '../../../types';
18
+
19
+ export interface PickerNativeProps extends PickerProps {
20
+ style: TextStyle[];
21
+ }
22
+
23
+ const styles = StyleSheet.create({
24
+ menu: css`
25
+ align-items: center;
26
+ `,
27
+ });
28
+
29
+ // Ref: https://reactnative.dev/docs/text-style-props
30
+ const textStyleKeys = [
31
+ 'color',
32
+ 'fontFamily',
33
+ 'fontSize',
34
+ 'fontStyle',
35
+ 'fontWeight',
36
+ 'includeFontPaddingAndroid',
37
+ 'fontVariant',
38
+ 'letterSpacing',
39
+ 'lineHeight',
40
+ 'textAlign',
41
+ 'textAlignVerticalAndroid',
42
+ 'textDecorationColoriOS',
43
+ 'textDecorationLine',
44
+ 'textDecorationStyleiOS',
45
+ 'textShadowColor',
46
+ 'textShadowOffset',
47
+ 'textShadowRadius',
48
+ 'textTransform',
49
+ 'writingDirection',
50
+ ];
51
+
52
+ const extractTextStyles = (style: BaseStyle[]) => {
53
+ const flattenedStyle = StyleUtils.flatten(style);
54
+ const textStyles: { [key: string]: string } = {};
55
+
56
+ Object.entries(flattenedStyle).forEach(([key, value]) => {
57
+ if (textStyleKeys.includes(key)) {
58
+ textStyles[key] = value;
59
+ }
60
+ });
61
+
62
+ return textStyles;
63
+ };
64
+
65
+ type GetTextProps = {
66
+ children: React.ReactElement | React.ReactElement[];
67
+ selectedValue?: string | null | undefined;
68
+ };
69
+
70
+ const getText = ({ children, selectedValue }: GetTextProps) => {
71
+ const items = React.Children.map(children, (child) => ({
72
+ label: child.props.label,
73
+ value: child.props.value,
74
+ }));
75
+
76
+ const selectedItem = items?.find((item) => item.value === selectedValue);
77
+
78
+ return selectedItem?.label;
79
+ };
80
+
81
+ function DefaultMenuComponent({
82
+ children,
83
+ selectedValue,
84
+ onValueChange: handleValueChange,
85
+ onClose: handleClose,
86
+ }: MenuComponentProps) {
87
+ const contextValue = useMemo(
88
+ () => ({
89
+ selectedValue,
90
+ handleValueChange,
91
+ }),
92
+ [selectedValue, handleValueChange],
93
+ );
94
+
95
+ return (
96
+ <Offcanvas placement="bottom" visible onToggle={handleClose}>
97
+ <Offcanvas.Body contentContainerStyle={styles.menu}>
98
+ <PickerNativeContext.Provider value={contextValue}>
99
+ {children}
100
+ </PickerNativeContext.Provider>
101
+ </Offcanvas.Body>
102
+ </Offcanvas>
103
+ );
104
+ }
105
+ /* eslint-enable */
106
+
107
+ const PickerNative = React.forwardRef<PressableRef, PickerNativeProps>(
108
+ (props, ref) => {
109
+ const {
110
+ children,
111
+ selectedValue,
112
+ onValueChange = () => {},
113
+ onFocus = () => {},
114
+ onBlur = () => {},
115
+ placeholder,
116
+ placeholderTextColor,
117
+ disabled = false,
118
+ MenuComponent = DefaultMenuComponent,
119
+ style,
120
+ ...elementProps
121
+ } = props;
122
+
123
+ const background = useBackground(style);
124
+
125
+ const [visible, setVisible] = useState(false);
126
+
127
+ const textStyle = extractTextStyles(background.style);
128
+
129
+ const showPlaceholder =
130
+ selectedValue === undefined || selectedValue === null;
131
+
132
+ const handleValueChange = (nextValue: string) => {
133
+ onValueChange(nextValue);
134
+ setVisible(false);
135
+ };
136
+ const handleClose = () => {
137
+ setVisible(false);
138
+ };
139
+
140
+ const handleFocus = (event: NativeSyntheticEvent<TargetedEvent>) => {
141
+ onFocus(event as NativeSyntheticEvent<TextInputFocusEventData>);
142
+ };
143
+
144
+ const handleBlur = (event: NativeSyntheticEvent<TargetedEvent>) => {
145
+ onBlur(event as NativeSyntheticEvent<TextInputFocusEventData>);
146
+ };
147
+
148
+ return (
149
+ <>
150
+ <Pressable
151
+ {...elementProps}
152
+ ref={ref}
153
+ role="combobox"
154
+ onPress={() => {
155
+ setVisible(true);
156
+ }}
157
+ onFocus={(event: NativeSyntheticEvent<TargetedEvent>) => {
158
+ handleFocus(event);
159
+ }}
160
+ onBlur={(event: NativeSyntheticEvent<TargetedEvent>) => {
161
+ handleBlur(event);
162
+ }}
163
+ disabled={disabled}
164
+ style={background.style}
165
+ >
166
+ {background.element}
167
+ <Text
168
+ numberOfLines={1}
169
+ style={[
170
+ textStyle,
171
+ showPlaceholder && { color: placeholderTextColor },
172
+ ]}
173
+ >
174
+ {showPlaceholder
175
+ ? placeholder || <Text>&nbsp;</Text>
176
+ : getText({ children, selectedValue })}
177
+ </Text>
178
+ </Pressable>
179
+ {visible && (
180
+ <MenuComponent
181
+ selectedValue={selectedValue}
182
+ onValueChange={handleValueChange}
183
+ onClose={handleClose}
184
+ >
185
+ {children}
186
+ </MenuComponent>
187
+ )}
188
+ </>
189
+ );
190
+ },
191
+ );
192
+
193
+ export default PickerNative;
@@ -1,14 +1,14 @@
1
- import React from 'react';
2
-
3
- type PickerNativeContextType = {
4
- selectedValue?: boolean | number | string | object;
5
- handleValueChange: (value?: boolean | number | string | object) => void;
6
- };
7
-
8
- const PickerNativeContext = React.createContext<PickerNativeContextType | null>(
9
- null,
10
- );
11
-
12
- PickerNativeContext.displayName = 'PickerNativeContext';
13
-
14
- export default PickerNativeContext;
1
+ import React from 'react';
2
+
3
+ type PickerNativeContextType = {
4
+ selectedValue?: string | null | undefined;
5
+ handleValueChange: (value: string) => void;
6
+ };
7
+
8
+ const PickerNativeContext = React.createContext<PickerNativeContextType | null>(
9
+ null,
10
+ );
11
+
12
+ PickerNativeContext.displayName = 'PickerNativeContext';
13
+
14
+ export default PickerNativeContext;
@@ -1,59 +1,59 @@
1
- import React from 'react';
2
- import StyleSheet from '../../../style/StyleSheet';
3
- import css from '../../../style/css';
4
- import Pressable from '../../Pressable';
5
- import Text from '../../Text';
6
- import useMedia from '../../../hooks/useMedia';
7
- import { getStyles } from '../../../utils';
8
- import useStyle from '../../../hooks/useStyle';
9
- import useForcedContext from '../../../hooks/useForcedContext';
10
- import PickerNativeContext from './PickerNativeContext';
11
- import { ViewProps, ViewRef } from '../../View';
12
-
13
- export interface PickerNativeItemProps extends ViewProps {
14
- label: string;
15
- value?: boolean | number | string | object;
16
- disabled?: boolean;
17
- }
18
-
19
- const styles = StyleSheet.create({
20
- item: css`
21
- margin: 0.25rem 1rem;
22
- padding: 0.25rem;
23
- `,
24
- itemDisabled: css``,
25
- });
26
-
27
- const PickerNativeItem = React.forwardRef<ViewRef, PickerNativeItemProps>(
28
- (props, ref) => {
29
- const { label, value, disabled = false } = props;
30
-
31
- const { selectedValue, handleValueChange } =
32
- useForcedContext(PickerNativeContext);
33
- const media = useMedia();
34
-
35
- const classes = getStyles(styles, ['item', disabled && 'itemDisabled']);
36
-
37
- const resolveStyle = useStyle(classes);
38
-
39
- const selected = value === selectedValue;
40
-
41
- return (
42
- <Pressable
43
- ref={ref}
44
- onPress={() => {
45
- handleValueChange(value);
46
- }}
47
- aria-selected={selected}
48
- disabled={disabled}
49
- style={resolveStyle({ media })}
50
- >
51
- <Text styleName={selected ? 'text-primary' : undefined}>{label}</Text>
52
- </Pressable>
53
- );
54
- },
55
- );
56
-
57
- PickerNativeItem.displayName = 'PickerNativeItem';
58
-
59
- export default PickerNativeItem;
1
+ import React from 'react';
2
+ import StyleSheet from '../../../style/StyleSheet';
3
+ import css from '../../../style/css';
4
+ import Pressable from '../../Pressable';
5
+ import Text from '../../Text';
6
+ import useMedia from '../../../hooks/useMedia';
7
+ import { getStyles } from '../../../utils';
8
+ import useStyle from '../../../hooks/useStyle';
9
+ import useForcedContext from '../../../hooks/useForcedContext';
10
+ import PickerNativeContext from './PickerNativeContext';
11
+ import { ViewProps, ViewRef } from '../../View';
12
+
13
+ export interface PickerNativeItemProps extends ViewProps {
14
+ label: string;
15
+ value: string;
16
+ disabled?: boolean;
17
+ }
18
+
19
+ const styles = StyleSheet.create({
20
+ item: css`
21
+ margin: 0.25rem 1rem;
22
+ padding: 0.25rem;
23
+ `,
24
+ itemDisabled: css``,
25
+ });
26
+
27
+ const PickerNativeItem = React.forwardRef<ViewRef, PickerNativeItemProps>(
28
+ (props, ref) => {
29
+ const { label, value, disabled = false } = props;
30
+
31
+ const { selectedValue, handleValueChange } =
32
+ useForcedContext(PickerNativeContext);
33
+ const media = useMedia();
34
+
35
+ const classes = getStyles(styles, ['item', disabled && 'itemDisabled']);
36
+
37
+ const resolveStyle = useStyle(classes);
38
+
39
+ const selected = value === selectedValue;
40
+
41
+ return (
42
+ <Pressable
43
+ ref={ref}
44
+ onPress={() => {
45
+ handleValueChange(value);
46
+ }}
47
+ aria-selected={selected}
48
+ disabled={disabled}
49
+ style={resolveStyle({ media })}
50
+ >
51
+ <Text styleName={selected ? 'text-primary' : undefined}>{label}</Text>
52
+ </Pressable>
53
+ );
54
+ },
55
+ );
56
+
57
+ PickerNativeItem.displayName = 'PickerNativeItem';
58
+
59
+ export default PickerNativeItem;
@@ -1,36 +1,36 @@
1
- import React from 'react';
2
- import {
3
- // @ts-expect-error web only import
4
- Picker as WebPicker,
5
- } from 'react-native';
6
- import useForcedContext from '../../../hooks/useForcedContext';
7
- import PickerWebContext from './PickerWebContext';
8
- import type { ViewProps, ViewRef } from '../../View';
9
-
10
- export interface PickerWebItemProps extends ViewProps {
11
- label: string;
12
- value?: boolean | number | string | object;
13
- disabled?: boolean;
14
- }
15
-
16
- const PickerWebItem = React.forwardRef<ViewRef, PickerWebItemProps>(
17
- (props, ref) => {
18
- const { label, value, disabled = false } = props;
19
-
20
- const { optionColor } = useForcedContext(PickerWebContext);
21
-
22
- return (
23
- <WebPicker.Item
24
- ref={ref}
25
- label={label}
26
- value={value}
27
- disabled={disabled}
28
- color={optionColor}
29
- />
30
- );
31
- },
32
- );
33
-
34
- PickerWebItem.displayName = 'PickerWebItem';
35
-
36
- export default PickerWebItem;
1
+ import React from 'react';
2
+ import {
3
+ // @ts-expect-error web only import
4
+ Picker as WebPicker,
5
+ } from 'react-native';
6
+ import useForcedContext from '../../../hooks/useForcedContext';
7
+ import PickerWebContext from './PickerWebContext';
8
+ import type { ViewProps, ViewRef } from '../../View';
9
+
10
+ export interface PickerWebItemProps extends ViewProps {
11
+ label: string;
12
+ value: string;
13
+ disabled?: boolean;
14
+ }
15
+
16
+ const PickerWebItem = React.forwardRef<ViewRef, PickerWebItemProps>(
17
+ (props, ref) => {
18
+ const { label, value, disabled = false } = props;
19
+
20
+ const { optionColor } = useForcedContext(PickerWebContext);
21
+
22
+ return (
23
+ <WebPicker.Item
24
+ ref={ref}
25
+ label={label}
26
+ value={value}
27
+ disabled={disabled}
28
+ color={optionColor}
29
+ />
30
+ );
31
+ },
32
+ );
33
+
34
+ PickerWebItem.displayName = 'PickerWebItem';
35
+
36
+ export default PickerWebItem;