bootstrap-rn 0.4.3 → 0.4.5

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 (73) hide show
  1. package/lib/module/components/Body.js +4 -2
  2. package/lib/module/components/Body.js.map +1 -1
  3. package/lib/module/components/SafeAreaView.js +44 -0
  4. package/lib/module/components/SafeAreaView.js.map +1 -0
  5. package/lib/module/components/close/CloseButton.js +1 -1
  6. package/lib/module/components/close/CloseButton.js.map +1 -1
  7. package/lib/module/components/forms/internals/FormCheckInputNative.js +1 -1
  8. package/lib/module/components/forms/internals/FormCheckInputNative.js.map +1 -1
  9. package/lib/module/components/forms/internals/FormCheckInputWeb.js +4 -2
  10. package/lib/module/components/forms/internals/FormCheckInputWeb.js.map +1 -1
  11. package/lib/module/components/forms/internals/PickerNative.js +1 -1
  12. package/lib/module/components/forms/internals/PickerNative.js.map +1 -1
  13. package/lib/module/components/forms/internals/PickerWeb.js +5 -2
  14. package/lib/module/components/forms/internals/PickerWeb.js.map +1 -1
  15. package/lib/module/components/helpers/Overlay.js +2 -13
  16. package/lib/module/components/helpers/Overlay.js.map +1 -1
  17. package/lib/module/components/modal/Modal.js +5 -2
  18. package/lib/module/components/modal/Modal.js.map +1 -1
  19. package/lib/module/components/navbar/NavbarToggler.js +1 -1
  20. package/lib/module/components/navbar/NavbarToggler.js.map +1 -1
  21. package/lib/module/components/offcanvas/Offcanvas.js +65 -66
  22. package/lib/module/components/offcanvas/Offcanvas.js.map +1 -1
  23. package/lib/module/components/popover/PopoverArrow.js +28 -0
  24. package/lib/module/components/popover/PopoverArrow.js.map +1 -1
  25. package/lib/module/components/tooltip/TooltipArrow.js +16 -0
  26. package/lib/module/components/tooltip/TooltipArrow.js.map +1 -1
  27. package/lib/module/hooks/useBackground.js +4 -78
  28. package/lib/module/hooks/useBackground.js.map +1 -1
  29. package/lib/module/hooks/{useBackground.native.js → useBackgroundNative.js} +2 -2
  30. package/lib/module/hooks/useBackgroundNative.js.map +1 -0
  31. package/lib/module/hooks/useBackgroundWeb.js +81 -0
  32. package/lib/module/hooks/useBackgroundWeb.js.map +1 -0
  33. package/lib/module/index.js +1 -0
  34. package/lib/module/index.js.map +1 -1
  35. package/lib/typescript/components/Body.d.ts +2 -2
  36. package/lib/typescript/components/Body.d.ts.map +1 -1
  37. package/lib/typescript/components/SafeAreaView.d.ts +13 -0
  38. package/lib/typescript/components/SafeAreaView.d.ts.map +1 -0
  39. package/lib/typescript/components/forms/internals/FormCheckInputWeb.d.ts.map +1 -1
  40. package/lib/typescript/components/forms/internals/PickerNative.d.ts.map +1 -1
  41. package/lib/typescript/components/forms/internals/PickerWeb.d.ts.map +1 -1
  42. package/lib/typescript/components/helpers/Overlay.d.ts.map +1 -1
  43. package/lib/typescript/components/modal/Modal.d.ts.map +1 -1
  44. package/lib/typescript/components/offcanvas/Offcanvas.d.ts.map +1 -1
  45. package/lib/typescript/components/popover/PopoverArrow.d.ts.map +1 -1
  46. package/lib/typescript/components/tooltip/TooltipArrow.d.ts.map +1 -1
  47. package/lib/typescript/hooks/useBackground.d.ts +4 -5
  48. package/lib/typescript/hooks/useBackground.d.ts.map +1 -1
  49. package/lib/typescript/hooks/{useBackground.native.d.ts → useBackgroundNative.d.ts} +2 -2
  50. package/lib/typescript/hooks/useBackgroundNative.d.ts.map +1 -0
  51. package/lib/typescript/hooks/useBackgroundWeb.d.ts +6 -0
  52. package/lib/typescript/hooks/useBackgroundWeb.d.ts.map +1 -0
  53. package/lib/typescript/index.d.ts +2 -0
  54. package/lib/typescript/index.d.ts.map +1 -1
  55. package/package.json +87 -85
  56. package/src/components/Body.tsx +68 -58
  57. package/src/components/SafeAreaView.tsx +71 -0
  58. package/src/components/forms/internals/FormCheckInputWeb.tsx +79 -78
  59. package/src/components/forms/internals/PickerNative.tsx +3 -2
  60. package/src/components/forms/internals/PickerWeb.tsx +85 -78
  61. package/src/components/helpers/Overlay.tsx +2 -13
  62. package/src/components/modal/Modal.tsx +241 -234
  63. package/src/components/offcanvas/Offcanvas.tsx +247 -245
  64. package/src/components/popover/PopoverArrow.tsx +192 -164
  65. package/src/components/tooltip/TooltipArrow.tsx +118 -102
  66. package/src/hooks/useBackground.tsx +4 -122
  67. package/src/hooks/{useBackground.native.tsx → useBackgroundNative.tsx} +1 -1
  68. package/src/hooks/useBackgroundWeb.tsx +123 -0
  69. package/src/index.ts +3 -0
  70. package/src/style/transform/index.ts +245 -245
  71. package/src/theme/variables.ts +1420 -1420
  72. package/lib/module/hooks/useBackground.native.js.map +0 -1
  73. package/lib/typescript/hooks/useBackground.native.d.ts.map +0 -1
@@ -1,164 +1,192 @@
1
- import React from 'react';
2
- import View, { ViewProps, ViewRef } from '../View';
3
- import { subtract } from '../../theme/functions';
4
- import StyleSheet from '../../style/StyleSheet';
5
- import { getStyles } from '../../utils';
6
- import css from '../../style/css';
7
- import useForcedContext from '../../hooks/useForcedContext';
8
- import PopoverContext from './PopoverContext';
9
- import type { ThemeVariables } from '../../types';
10
-
11
- export interface PopoverArrowProps extends ViewProps {}
12
-
13
- const styles = StyleSheet.create({
14
- '.popover-arrow': css`
15
- position: absolute;
16
- // display: block;
17
- width: $popover-arrow-width;
18
- height: $popover-arrow-height;
19
- `,
20
- '.popover-arrow::before': css`
21
- position: absolute;
22
- // display: block;
23
- // content: "";
24
- border-top-color: transparent;
25
- border-right-color: transparent;
26
- border-left-color: transparent;
27
- border-bottom-color: transparent;
28
- border-style: solid;
29
- `,
30
- '.popover-arrow::after': css`
31
- position: absolute;
32
- // display: block;
33
- // content: "";
34
- border-top-color: transparent;
35
- border-right-color: transparent;
36
- border-left-color: transparent;
37
- border-bottom-color: transparent;
38
- border-style: solid;
39
- `,
40
- '.bs-popover-top .popover-arrow': css`
41
- bottom: ${subtract(
42
- (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
43
- (t: ThemeVariables) => t['popover-border-width'],
44
- )};
45
- `,
46
- '.bs-popover-top .popover-arrow::before': css`
47
- bottom: 0;
48
- border-top-width: $popover-arrow-height;
49
- border-right-width: $popover-arrow-width * 0.5;
50
- border-left-width: $popover-arrow-width * 0.5;
51
- border-bottom-width: 0;
52
- border-top-color: $popover-arrow-outer-color;
53
- `,
54
- '.bs-popover-top .popover-arrow::after': css`
55
- bottom: $popover-border-width;
56
- border-top-width: $popover-arrow-height;
57
- border-right-width: $popover-arrow-width * 0.5;
58
- border-left-width: $popover-arrow-width * 0.5;
59
- border-bottom-width: 0;
60
- border-top-color: $popover-arrow-color;
61
- `,
62
- '.bs-popover-end .popover-arrow': css`
63
- left: ${subtract(
64
- (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
65
- (t: ThemeVariables) => t['popover-border-width'],
66
- )};
67
- width: $popover-arrow-height;
68
- height: $popover-arrow-width;
69
- `,
70
- '.bs-popover-end .popover-arrow::before': css`
71
- left: 0;
72
- border-top-width: $popover-arrow-width * 0.5;
73
- border-right-width: $popover-arrow-height;
74
- border-left-width: 0;
75
- border-bottom-width: $popover-arrow-width * 0.5;
76
- border-right-color: $popover-arrow-outer-color;
77
- `,
78
- '.bs-popover-end .popover-arrow::after': css`
79
- left: $popover-border-width;
80
- border-top-width: $popover-arrow-width * 0.5;
81
- border-right-width: $popover-arrow-height;
82
- border-left-width: 0;
83
- border-bottom-width: $popover-arrow-width * 0.5;
84
- border-right-color: $popover-arrow-color;
85
- `,
86
- '.bs-popover-bottom .popover-arrow': css`
87
- top: ${subtract(
88
- (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
89
- (t: ThemeVariables) => t['popover-border-width'],
90
- )};
91
- `,
92
- '.bs-popover-bottom .popover-arrow::before': css`
93
- top: 0;
94
- border-top-width: 0;
95
- border-right-width: $popover-arrow-width * 0.5;
96
- border-left-width: $popover-arrow-width * 0.5;
97
- border-bottom-width: $popover-arrow-height;
98
- border-bottom-color: $popover-arrow-outer-color;
99
- `,
100
- '.bs-popover-bottom .popover-arrow::after': css`
101
- top: $popover-border-width;
102
- border-top-width: 0;
103
- border-right-width: $popover-arrow-width * 0.5;
104
- border-left-width: $popover-arrow-width * 0.5;
105
- border-bottom-width: $popover-arrow-height;
106
- border-bottom-color: $popover-arrow-color;
107
- `,
108
- '.bs-popover-start .popover-arrow': css`
109
- right: ${subtract(
110
- (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
111
- (t: ThemeVariables) => t['popover-border-width'],
112
- )};
113
- width: $popover-arrow-height;
114
- height: $popover-arrow-width;
115
- `,
116
- '.bs-popover-start .popover-arrow::before': css`
117
- right: 0;
118
- border-top-width: $popover-arrow-width * 0.5;
119
- border-right-width: 0;
120
- border-left-width: $popover-arrow-height;
121
- border-bottom-width: $popover-arrow-width * 0.5;
122
- border-left-color: $popover-arrow-outer-color;
123
- `,
124
- '.bs-popover-start .popover-arrow::after': css`
125
- right: $popover-border-width;
126
- border-top-width: $popover-arrow-width * 0.5;
127
- border-right-width: 0;
128
- border-left-width: $popover-arrow-height;
129
- border-bottom-width: $popover-arrow-width * 0.5;
130
- border-left-color: $popover-arrow-color;
131
- `,
132
- });
133
-
134
- const PopoverArrow = React.forwardRef<ViewRef, PopoverArrowProps>(
135
- (props, ref) => {
136
- const { style, ...elementProps } = props;
137
-
138
- const { placement, arrowStyle, popper } = useForcedContext(PopoverContext);
139
-
140
- const classes = getStyles(styles, [
141
- '.popover-arrow',
142
- popper && `.bs-popover-${placement} .popover-arrow`,
143
- ]);
144
- const beforeClasses = getStyles(styles, [
145
- '.popover-arrow::before',
146
- popper && `.bs-popover-${placement} .popover-arrow::before`,
147
- ]);
148
- const afterClasses = getStyles(styles, [
149
- '.popover-arrow::after',
150
- popper && `.bs-popover-${placement} .popover-arrow::after`,
151
- ]);
152
-
153
- return (
154
- <View {...elementProps} ref={ref} style={[classes, arrowStyle, style]}>
155
- <View style={beforeClasses} />
156
- <View style={afterClasses} />
157
- </View>
158
- );
159
- },
160
- );
161
-
162
- PopoverArrow.displayName = 'PopoverArrow';
163
-
164
- export default PopoverArrow;
1
+ import React from 'react';
2
+ import View, { ViewProps, ViewRef } from '../View';
3
+ import { subtract } from '../../theme/functions';
4
+ import StyleSheet from '../../style/StyleSheet';
5
+ import { getStyles } from '../../utils';
6
+ import css from '../../style/css';
7
+ import useForcedContext from '../../hooks/useForcedContext';
8
+ import PopoverContext from './PopoverContext';
9
+ import type { ThemeVariables } from '../../types';
10
+
11
+ export interface PopoverArrowProps extends ViewProps {}
12
+
13
+ // Note: Border colors are defined for each side, because it seems like that the new react native
14
+ // architecture overwrites border colors from a previous style on Android.
15
+ // Example: `.bs-popover-top .popover-arrow::before` overwrites `.popover-arrow::before`
16
+
17
+ const styles = StyleSheet.create({
18
+ '.popover-arrow': css`
19
+ position: absolute;
20
+ // display: block;
21
+ width: $popover-arrow-width;
22
+ height: $popover-arrow-height;
23
+ `,
24
+ '.popover-arrow::before': css`
25
+ position: absolute;
26
+ // display: block;
27
+ // content: "";
28
+ border-top-color: transparent;
29
+ border-right-color: transparent;
30
+ border-left-color: transparent;
31
+ border-bottom-color: transparent;
32
+ border-style: solid;
33
+ `,
34
+ '.popover-arrow::after': css`
35
+ position: absolute;
36
+ // display: block;
37
+ // content: "";
38
+ border-top-color: transparent;
39
+ border-right-color: transparent;
40
+ border-left-color: transparent;
41
+ border-bottom-color: transparent;
42
+ border-style: solid;
43
+ `,
44
+ '.bs-popover-top .popover-arrow': css`
45
+ bottom: ${subtract(
46
+ (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
47
+ (t: ThemeVariables) => t['popover-border-width'],
48
+ )};
49
+ `,
50
+ '.bs-popover-top .popover-arrow::before': css`
51
+ bottom: 0;
52
+ border-top-width: $popover-arrow-height;
53
+ border-right-width: $popover-arrow-width * 0.5;
54
+ border-left-width: $popover-arrow-width * 0.5;
55
+ border-bottom-width: 0;
56
+ border-top-color: $popover-arrow-outer-color;
57
+ border-right-color: transparent; // added for bootstrap-rn
58
+ border-left-color: transparent; // added for bootstrap-rn
59
+ border-bottom-color: transparent; // added for bootstrap-rn
60
+ `,
61
+ '.bs-popover-top .popover-arrow::after': css`
62
+ bottom: $popover-border-width;
63
+ border-top-width: $popover-arrow-height;
64
+ border-right-width: $popover-arrow-width * 0.5;
65
+ border-left-width: $popover-arrow-width * 0.5;
66
+ border-bottom-width: 0;
67
+ border-top-color: $popover-arrow-color;
68
+ border-right-color: transparent; // added for bootstrap-rn
69
+ border-left-color: transparent; // added for bootstrap-rn
70
+ border-bottom-color: transparent; // added for bootstrap-rn
71
+ `,
72
+ '.bs-popover-end .popover-arrow': css`
73
+ left: ${subtract(
74
+ (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
75
+ (t: ThemeVariables) => t['popover-border-width'],
76
+ )};
77
+ width: $popover-arrow-height;
78
+ height: $popover-arrow-width;
79
+ `,
80
+ '.bs-popover-end .popover-arrow::before': css`
81
+ left: 0;
82
+ border-top-width: $popover-arrow-width * 0.5;
83
+ border-right-width: $popover-arrow-height;
84
+ border-left-width: 0;
85
+ border-bottom-width: $popover-arrow-width * 0.5;
86
+ border-top-color: transparent; // added for bootstrap-rn
87
+ border-right-color: $popover-arrow-outer-color;
88
+ border-left-color: transparent; // added for bootstrap-rn
89
+ border-bottom-color: transparent; // added for bootstrap-rn
90
+ `,
91
+ '.bs-popover-end .popover-arrow::after': css`
92
+ left: $popover-border-width;
93
+ border-top-width: $popover-arrow-width * 0.5;
94
+ border-right-width: $popover-arrow-height;
95
+ border-left-width: 0;
96
+ border-bottom-width: $popover-arrow-width * 0.5;
97
+ border-top-color: transparent; // added for bootstrap-rn
98
+ border-right-color: $popover-arrow-color;
99
+ border-left-color: transparent; // added for bootstrap-rn
100
+ border-bottom-color: transparent; // added for bootstrap-rn
101
+ `,
102
+ '.bs-popover-bottom .popover-arrow': css`
103
+ top: ${subtract(
104
+ (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
105
+ (t: ThemeVariables) => t['popover-border-width'],
106
+ )};
107
+ `,
108
+ '.bs-popover-bottom .popover-arrow::before': css`
109
+ top: 0;
110
+ border-top-width: 0;
111
+ border-right-width: $popover-arrow-width * 0.5;
112
+ border-left-width: $popover-arrow-width * 0.5;
113
+ border-bottom-width: $popover-arrow-height;
114
+ border-top-color: transparent; // added for bootstrap-rn
115
+ border-right-color: transparent; // added for bootstrap-rn
116
+ border-left-color: transparent; // added for bootstrap-rn
117
+ border-bottom-color: $popover-arrow-outer-color;
118
+ `,
119
+ '.bs-popover-bottom .popover-arrow::after': css`
120
+ top: $popover-border-width;
121
+ border-top-width: 0;
122
+ border-right-width: $popover-arrow-width * 0.5;
123
+ border-left-width: $popover-arrow-width * 0.5;
124
+ border-bottom-width: $popover-arrow-height;
125
+ border-top-color: transparent; // added for bootstrap-rn
126
+ border-right-color: transparent; // added for bootstrap-rn
127
+ border-left-color: transparent; // added for bootstrap-rn
128
+ border-bottom-color: $popover-arrow-color;
129
+ `,
130
+ '.bs-popover-start .popover-arrow': css`
131
+ right: ${subtract(
132
+ (t: ThemeVariables) => `-${t['popover-arrow-height']}`,
133
+ (t: ThemeVariables) => t['popover-border-width'],
134
+ )};
135
+ width: $popover-arrow-height;
136
+ height: $popover-arrow-width;
137
+ `,
138
+ '.bs-popover-start .popover-arrow::before': css`
139
+ right: 0;
140
+ border-top-width: $popover-arrow-width * 0.5;
141
+ border-right-width: 0;
142
+ border-left-width: $popover-arrow-height;
143
+ border-bottom-width: $popover-arrow-width * 0.5;
144
+ border-top-color: transparent; // added for bootstrap-rn
145
+ border-right-color: transparent; // added for bootstrap-rn
146
+ border-left-color: $popover-arrow-outer-color;
147
+ border-bottom-color: transparent; // added for bootstrap-rn
148
+ `,
149
+ '.bs-popover-start .popover-arrow::after': css`
150
+ right: $popover-border-width;
151
+ border-top-width: $popover-arrow-width * 0.5;
152
+ border-right-width: 0;
153
+ border-left-width: $popover-arrow-height;
154
+ border-bottom-width: $popover-arrow-width * 0.5;
155
+ border-top-color: transparent; // added for bootstrap-rn
156
+ border-right-color: transparent; // added for bootstrap-rn
157
+ border-left-color: $popover-arrow-color;
158
+ border-bottom-color: transparent; // added for bootstrap-rn
159
+ `,
160
+ });
161
+
162
+ const PopoverArrow = React.forwardRef<ViewRef, PopoverArrowProps>(
163
+ (props, ref) => {
164
+ const { style, ...elementProps } = props;
165
+
166
+ const { placement, arrowStyle, popper } = useForcedContext(PopoverContext);
167
+
168
+ const classes = getStyles(styles, [
169
+ '.popover-arrow',
170
+ popper && `.bs-popover-${placement} .popover-arrow`,
171
+ ]);
172
+ const beforeClasses = getStyles(styles, [
173
+ '.popover-arrow::before',
174
+ popper && `.bs-popover-${placement} .popover-arrow::before`,
175
+ ]);
176
+ const afterClasses = getStyles(styles, [
177
+ '.popover-arrow::after',
178
+ popper && `.bs-popover-${placement} .popover-arrow::after`,
179
+ ]);
180
+
181
+ return (
182
+ <View {...elementProps} ref={ref} style={[classes, arrowStyle, style]}>
183
+ <View style={beforeClasses} />
184
+ <View style={afterClasses} />
185
+ </View>
186
+ );
187
+ },
188
+ );
189
+
190
+ PopoverArrow.displayName = 'PopoverArrow';
191
+
192
+ export default PopoverArrow;
@@ -1,102 +1,118 @@
1
- import React from 'react';
2
- import View, { ViewProps, ViewRef } from '../View';
3
- import StyleSheet from '../../style/StyleSheet';
4
- import { getStyles } from '../../utils';
5
- import css from '../../style/css';
6
- import useForcedContext from '../../hooks/useForcedContext';
7
- import TooltipContext from './TooltipContext';
8
-
9
- export interface TooltipArrowProps extends ViewProps {}
10
-
11
- const styles = StyleSheet.create({
12
- '.tooltip-arrow': css`
13
- position: absolute;
14
- // display: block;
15
- width: $tooltip-arrow-width;
16
- height: $tooltip-arrow-height;
17
- `,
18
- '.tooltip-arrow::before': css`
19
- position: absolute;
20
- // content: "";
21
- border-top-color: transparent;
22
- border-right-color: transparent;
23
- border-left-color: transparent;
24
- border-bottom-color: transparent;
25
- border-style: solid;
26
- `,
27
- '.bs-tooltip-top .tooltip-arrow': css`
28
- bottom: 0;
29
- `,
30
- '.bs-tooltip-top .tooltip-arrow::before': css`
31
- top: -1px;
32
- border-top-width: $tooltip-arrow-height;
33
- border-right-width: $tooltip-arrow-width * 0.5;
34
- border-left-width: $tooltip-arrow-width * 0.5;
35
- border-bottom-width: 0;
36
- border-top-color: $tooltip-arrow-color;
37
- `,
38
- '.bs-tooltip-end .tooltip-arrow': css`
39
- left: 0;
40
- width: $tooltip-arrow-height;
41
- height: $tooltip-arrow-width;
42
- `,
43
- '.bs-tooltip-end .tooltip-arrow::before': css`
44
- right: -1px;
45
- border-top-width: $tooltip-arrow-width * 0.5;
46
- border-right-width: $tooltip-arrow-height;
47
- border-left-width: 0;
48
- border-bottom-width: $tooltip-arrow-width * 0.5;
49
- border-right-color: $tooltip-arrow-color;
50
- `,
51
- '.bs-tooltip-bottom .tooltip-arrow': css`
52
- top: 0;
53
- `,
54
- '.bs-tooltip-bottom .tooltip-arrow::before': css`
55
- bottom: -1px;
56
- border-top-width: 0;
57
- border-right-width: $tooltip-arrow-width * 0.5;
58
- border-left-width: $tooltip-arrow-width * 0.5;
59
- border-bottom-width: $tooltip-arrow-height;
60
- border-bottom-color: $tooltip-arrow-color;
61
- `,
62
- '.bs-tooltip-start .tooltip-arrow': css`
63
- right: 0;
64
- width: $tooltip-arrow-height;
65
- height: $tooltip-arrow-width;
66
- `,
67
- '.bs-tooltip-start .tooltip-arrow::before': css`
68
- left: -1px;
69
- border-top-width: $tooltip-arrow-width * 0.5;
70
- border-right-width: 0;
71
- border-left-width: $tooltip-arrow-height;
72
- border-bottom-width: $tooltip-arrow-width * 0.5;
73
- border-left-color: $tooltip-arrow-color;
74
- `,
75
- });
76
-
77
- const TooltipArrow = React.forwardRef<ViewRef, TooltipArrowProps>(
78
- (props, ref) => {
79
- const { style, ...elementProps } = props;
80
-
81
- const { placement, arrowStyle, popper } = useForcedContext(TooltipContext);
82
-
83
- const classes = getStyles(styles, [
84
- '.tooltip-arrow',
85
- popper && `.bs-tooltip-${placement} .tooltip-arrow`,
86
- ]);
87
- const beforeClasses = getStyles(styles, [
88
- '.tooltip-arrow::before',
89
- popper && `.bs-tooltip-${placement} .tooltip-arrow::before`,
90
- ]);
91
-
92
- return (
93
- <View {...elementProps} ref={ref} style={[classes, arrowStyle, style]}>
94
- <View style={beforeClasses} />
95
- </View>
96
- );
97
- },
98
- );
99
-
100
- TooltipArrow.displayName = 'TooltipArrow';
101
-
102
- export default TooltipArrow;
1
+ import React from 'react';
2
+ import View, { ViewProps, ViewRef } from '../View';
3
+ import StyleSheet from '../../style/StyleSheet';
4
+ import { getStyles } from '../../utils';
5
+ import css from '../../style/css';
6
+ import useForcedContext from '../../hooks/useForcedContext';
7
+ import TooltipContext from './TooltipContext';
8
+
9
+ export interface TooltipArrowProps extends ViewProps {}
10
+
11
+ // Note: Border colors are defined for each side, because it seems like that the new react native
12
+ // architecture overwrites border colors from a previous style on Android.
13
+ // Example: `.bs-tooltip-top .tooltip-arrow::before` overwrites `.tooltip-arrow::before`
14
+
15
+ const styles = StyleSheet.create({
16
+ '.tooltip-arrow': css`
17
+ position: absolute;
18
+ // display: block;
19
+ width: $tooltip-arrow-width;
20
+ height: $tooltip-arrow-height;
21
+ `,
22
+ '.tooltip-arrow::before': css`
23
+ position: absolute;
24
+ // content: "";
25
+ border-top-color: transparent;
26
+ border-right-color: transparent;
27
+ border-left-color: transparent;
28
+ border-bottom-color: transparent;
29
+ border-style: solid;
30
+ `,
31
+ '.bs-tooltip-top .tooltip-arrow': css`
32
+ bottom: 0;
33
+ `,
34
+ '.bs-tooltip-top .tooltip-arrow::before': css`
35
+ top: -1px;
36
+ border-top-width: $tooltip-arrow-height;
37
+ border-right-width: $tooltip-arrow-width * 0.5;
38
+ border-left-width: $tooltip-arrow-width * 0.5;
39
+ border-bottom-width: 0;
40
+ border-top-color: $tooltip-arrow-color;
41
+ border-right-color: transparent; // added for bootstrap-rn
42
+ border-left-color: transparent; // added for bootstrap-rn
43
+ border-bottom-color: transparent; // added for bootstrap-rn
44
+ `,
45
+ '.bs-tooltip-end .tooltip-arrow': css`
46
+ left: 0;
47
+ width: $tooltip-arrow-height;
48
+ height: $tooltip-arrow-width;
49
+ `,
50
+ '.bs-tooltip-end .tooltip-arrow::before': css`
51
+ right: -1px;
52
+ border-top-width: $tooltip-arrow-width * 0.5;
53
+ border-right-width: $tooltip-arrow-height;
54
+ border-left-width: 0;
55
+ border-bottom-width: $tooltip-arrow-width * 0.5;
56
+ border-top-color: transparent; // added for bootstrap-rn
57
+ border-right-color: $tooltip-arrow-color;
58
+ border-left-color: transparent; // added for bootstrap-rn
59
+ border-bottom-color: transparent; // added for bootstrap-rn
60
+ `,
61
+ '.bs-tooltip-bottom .tooltip-arrow': css`
62
+ top: 0;
63
+ `,
64
+ '.bs-tooltip-bottom .tooltip-arrow::before': css`
65
+ bottom: -1px;
66
+ border-top-width: 0;
67
+ border-right-width: $tooltip-arrow-width * 0.5;
68
+ border-left-width: $tooltip-arrow-width * 0.5;
69
+ border-bottom-width: $tooltip-arrow-height;
70
+ border-top-color: transparent; // added for bootstrap-rn
71
+ border-right-color: transparent; // added for bootstrap-rn
72
+ border-left-color: transparent; // added for bootstrap-rn
73
+ border-bottom-color: $tooltip-arrow-color;
74
+ `,
75
+ '.bs-tooltip-start .tooltip-arrow': css`
76
+ right: 0;
77
+ width: $tooltip-arrow-height;
78
+ height: $tooltip-arrow-width;
79
+ `,
80
+ '.bs-tooltip-start .tooltip-arrow::before': css`
81
+ left: -1px;
82
+ border-top-width: $tooltip-arrow-width * 0.5;
83
+ border-right-width: 0;
84
+ border-left-width: $tooltip-arrow-height;
85
+ border-bottom-width: $tooltip-arrow-width * 0.5;
86
+ border-top-color: transparent; // added for bootstrap-rn
87
+ border-right-color: transparent; // added for bootstrap-rn
88
+ border-left-color: $tooltip-arrow-color;
89
+ border-bottom-color: transparent; // added for bootstrap-rn
90
+ `,
91
+ });
92
+
93
+ const TooltipArrow = React.forwardRef<ViewRef, TooltipArrowProps>(
94
+ (props, ref) => {
95
+ const { style, ...elementProps } = props;
96
+
97
+ const { placement, arrowStyle, popper } = useForcedContext(TooltipContext);
98
+
99
+ const classes = getStyles(styles, [
100
+ '.tooltip-arrow',
101
+ popper && `.bs-tooltip-${placement} .tooltip-arrow`,
102
+ ]);
103
+ const beforeClasses = getStyles(styles, [
104
+ '.tooltip-arrow::before',
105
+ popper && `.bs-tooltip-${placement} .tooltip-arrow::before`,
106
+ ]);
107
+
108
+ return (
109
+ <View {...elementProps} ref={ref} style={[classes, arrowStyle, style]}>
110
+ <View style={beforeClasses} />
111
+ </View>
112
+ );
113
+ },
114
+ );
115
+
116
+ TooltipArrow.displayName = 'TooltipArrow';
117
+
118
+ export default TooltipArrow;