bootstrap-rn 0.3.4 → 0.3.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 (120) hide show
  1. package/lib/commonjs/components/Image.js.map +1 -1
  2. package/lib/commonjs/components/ImageBackground.js.map +1 -1
  3. package/lib/commonjs/components/Text.js.map +1 -1
  4. package/lib/commonjs/components/dropdown/DropdownMenu.js.map +1 -1
  5. package/lib/commonjs/components/modal/ModalContext.js.map +1 -1
  6. package/lib/commonjs/components/nav/Nav.js.map +1 -1
  7. package/lib/commonjs/components/nav/NavContext.js.map +1 -1
  8. package/lib/commonjs/components/nav/TabContext.js.map +1 -1
  9. package/lib/commonjs/components/navbar/NavbarContext.js.map +1 -1
  10. package/lib/commonjs/components/offcanvas/OffcanvasContext.js.map +1 -1
  11. package/lib/commonjs/components/popover/injectPopover.js.map +1 -1
  12. package/lib/commonjs/components/toasts/ToastContainer.js +3 -1
  13. package/lib/commonjs/components/toasts/ToastContainer.js.map +1 -1
  14. package/lib/commonjs/components/tooltip/injectTooltip.js +0 -3
  15. package/lib/commonjs/components/tooltip/injectTooltip.js.map +1 -1
  16. package/lib/commonjs/index.d.ts +47 -8
  17. package/lib/commonjs/index.js +0 -56
  18. package/lib/commonjs/index.js.map +1 -1
  19. package/lib/commonjs/style/StyleSheet.js +4 -2
  20. package/lib/commonjs/style/StyleSheet.js.map +1 -1
  21. package/lib/commonjs/types.d.ts +6 -3
  22. package/lib/module/components/Image.js.map +1 -1
  23. package/lib/module/components/ImageBackground.js.map +1 -1
  24. package/lib/module/components/Text.js.map +1 -1
  25. package/lib/module/components/dropdown/DropdownMenu.js.map +1 -1
  26. package/lib/module/components/modal/ModalContext.js.map +1 -1
  27. package/lib/module/components/nav/Nav.js.map +1 -1
  28. package/lib/module/components/nav/NavContext.js.map +1 -1
  29. package/lib/module/components/nav/TabContext.js.map +1 -1
  30. package/lib/module/components/navbar/NavbarContext.js.map +1 -1
  31. package/lib/module/components/offcanvas/OffcanvasContext.js.map +1 -1
  32. package/lib/module/components/popover/injectPopover.js.map +1 -1
  33. package/lib/module/components/toasts/ToastContainer.js +3 -1
  34. package/lib/module/components/toasts/ToastContainer.js.map +1 -1
  35. package/lib/module/components/tooltip/injectTooltip.js +0 -3
  36. package/lib/module/components/tooltip/injectTooltip.js.map +1 -1
  37. package/lib/module/index.d.ts +47 -8
  38. package/lib/module/index.js +0 -7
  39. package/lib/module/index.js.map +1 -1
  40. package/lib/module/style/StyleSheet.js +4 -2
  41. package/lib/module/style/StyleSheet.js.map +1 -1
  42. package/lib/module/types.d.ts +6 -3
  43. package/lib/types/components/Image.d.ts.map +1 -1
  44. package/lib/types/components/ImageBackground.d.ts.map +1 -1
  45. package/lib/types/components/Text.d.ts +1 -1
  46. package/lib/types/components/Text.d.ts.map +1 -1
  47. package/lib/types/components/dropdown/Dropdown.d.ts +2 -11
  48. package/lib/types/components/dropdown/Dropdown.d.ts.map +1 -1
  49. package/lib/types/components/dropdown/DropdownContext.d.ts +2 -2
  50. package/lib/types/components/dropdown/DropdownContext.d.ts.map +1 -1
  51. package/lib/types/components/dropdown/DropdownMenu.d.ts +2 -2
  52. package/lib/types/components/dropdown/DropdownMenu.d.ts.map +1 -1
  53. package/lib/types/components/dropdown/DropdownToggle.d.ts +2 -2
  54. package/lib/types/components/dropdown/DropdownToggle.d.ts.map +1 -1
  55. package/lib/types/components/list-group/ListGroup.d.ts +1 -1
  56. package/lib/types/components/list-group/ListGroupItem.d.ts +13 -1
  57. package/lib/types/components/list-group/ListGroupItem.d.ts.map +1 -1
  58. package/lib/types/components/list-group/ListGroupItemAction.d.ts +2 -2
  59. package/lib/types/components/list-group/ListGroupItemAction.d.ts.map +1 -1
  60. package/lib/types/components/modal/Modal.d.ts +1 -3
  61. package/lib/types/components/modal/Modal.d.ts.map +1 -1
  62. package/lib/types/components/modal/ModalContext.d.ts +3 -3
  63. package/lib/types/components/modal/ModalContext.d.ts.map +1 -1
  64. package/lib/types/components/nav/Nav.d.ts +1 -3
  65. package/lib/types/components/nav/Nav.d.ts.map +1 -1
  66. package/lib/types/components/nav/NavContext.d.ts +3 -3
  67. package/lib/types/components/nav/NavContext.d.ts.map +1 -1
  68. package/lib/types/components/nav/Tab.d.ts +1 -1
  69. package/lib/types/components/nav/TabContext.d.ts +3 -3
  70. package/lib/types/components/nav/TabContext.d.ts.map +1 -1
  71. package/lib/types/components/navbar/Navbar.d.ts +1 -1
  72. package/lib/types/components/navbar/NavbarBrand.d.ts +2 -2
  73. package/lib/types/components/navbar/NavbarBrand.d.ts.map +1 -1
  74. package/lib/types/components/navbar/NavbarContext.d.ts +2 -2
  75. package/lib/types/components/navbar/NavbarContext.d.ts.map +1 -1
  76. package/lib/types/components/offcanvas/Offcanvas.d.ts +1 -3
  77. package/lib/types/components/offcanvas/Offcanvas.d.ts.map +1 -1
  78. package/lib/types/components/offcanvas/OffcanvasContext.d.ts +2 -2
  79. package/lib/types/components/offcanvas/OffcanvasContext.d.ts.map +1 -1
  80. package/lib/types/components/popover/injectPopover.d.ts +9 -12
  81. package/lib/types/components/popover/injectPopover.d.ts.map +1 -1
  82. package/lib/types/components/toasts/ToastContainer.d.ts +4 -2
  83. package/lib/types/components/toasts/ToastContainer.d.ts.map +1 -1
  84. package/lib/types/components/tooltip/injectTooltip.d.ts +8 -11
  85. package/lib/types/components/tooltip/injectTooltip.d.ts.map +1 -1
  86. package/lib/types/hooks/useBackground.native.d.ts +3 -1
  87. package/lib/types/hooks/useBackground.native.d.ts.map +1 -1
  88. package/lib/types/index.d.ts +47 -8
  89. package/lib/types/index.d.ts.map +1 -1
  90. package/lib/types/style/StyleSheet.d.ts +2 -3
  91. package/lib/types/style/StyleSheet.d.ts.map +1 -1
  92. package/lib/types/style/createStyle.d.ts +3 -1
  93. package/lib/types/style/createStyle.d.ts.map +1 -1
  94. package/lib/types/style/css.d.ts +3 -1
  95. package/lib/types/style/css.d.ts.map +1 -1
  96. package/lib/types/theme/variables.d.ts +3 -1
  97. package/lib/types/theme/variables.d.ts.map +1 -1
  98. package/lib/types/types.d.ts +6 -3
  99. package/lib/types/types.d.ts.map +1 -1
  100. package/package.json +80 -80
  101. package/src/components/Image.tsx +31 -27
  102. package/src/components/ImageBackground.tsx +48 -46
  103. package/src/components/Text.tsx +119 -117
  104. package/src/components/dropdown/DropdownContext.ts +2 -2
  105. package/src/components/dropdown/DropdownMenu.tsx +127 -125
  106. package/src/components/dropdown/DropdownToggle.ts +2 -2
  107. package/src/components/list-group/ListGroupItemAction.tsx +2 -2
  108. package/src/components/modal/ModalContext.ts +3 -3
  109. package/src/components/nav/Nav.tsx +4 -4
  110. package/src/components/nav/NavContext.ts +3 -3
  111. package/src/components/nav/TabContext.ts +3 -3
  112. package/src/components/navbar/NavbarBrand.tsx +2 -2
  113. package/src/components/navbar/NavbarContext.ts +2 -2
  114. package/src/components/offcanvas/OffcanvasContext.ts +4 -2
  115. package/src/components/popover/injectPopover.tsx +97 -98
  116. package/src/components/toasts/ToastContainer.tsx +41 -39
  117. package/src/components/tooltip/injectTooltip.tsx +93 -96
  118. package/src/index.ts +242 -211
  119. package/src/style/StyleSheet.ts +149 -138
  120. package/src/types.ts +168 -162
@@ -1,138 +1,149 @@
1
- import { StyleSheet as BaseStyleSheet } from 'react-native';
2
- import type { ExtendedStyle, BaseStyle, ThemeVariables } from '../types';
3
-
4
- type StyleSource = Record<
5
- string,
6
- (theme: object, key: string) => ExtendedStyle | ExtendedStyle
7
- >;
8
-
9
- type NamedExtendedStyles = Record<string, ExtendedStyle>;
10
- type NamedStyles = Record<string, BaseStyle>;
11
-
12
- type StyleSheetDefinition = {
13
- source: StyleSource;
14
- cache: Record<string, NamedExtendedStyles>;
15
- active: NamedExtendedStyles;
16
- };
17
-
18
- let activeKey: string | null = null;
19
-
20
- const themes: Record<string, ThemeVariables> = {};
21
- const sheets: StyleSheetDefinition[] = [];
22
-
23
- const createSheet = (sheet: StyleSheetDefinition): NamedExtendedStyles => {
24
- const theme = themes[activeKey as string];
25
-
26
- const statelessSource: NamedStyles = {};
27
- const statefulSource: NamedExtendedStyles = {};
28
-
29
- // Apply theme to themeable styles.
30
- Object.entries(sheet.source).forEach(([key, style]) => {
31
- // Resolve theme.
32
- const value =
33
- typeof style === 'function' ? style(theme, activeKey as string) : style;
34
-
35
- if (typeof value === 'function') {
36
- statefulSource[key] = value;
37
- } else {
38
- statelessSource[key] = value as BaseStyle;
39
- }
40
- });
41
-
42
- // Wrap stateful and stateless in a proxy, so that we can update the styles on theme change.
43
- // For using Object.assign below we need some additional methods on the proxy that are mentioned here:
44
- // https://stackoverflow.com/questions/43185453/object-assign-and-proxies
45
- // @ts-expect-error proxy is equivalent to NamedExtendedStyles
46
- return new Proxy(
47
- {
48
- keys: Object.keys(sheet.source),
49
- stateless: BaseStyleSheet.create(statelessSource),
50
- stateful: statefulSource,
51
- },
52
- {
53
- get(target, prop: string) {
54
- return target.stateless[prop] || target.stateful[prop] || undefined;
55
- },
56
- ownKeys: (target) => target.keys,
57
- getOwnPropertyDescriptor(target, name: string) {
58
- // eslint-disable-next-line @typescript-eslint/no-this-alias
59
- const proxy = this;
60
-
61
- return {
62
- get value() {
63
- return proxy.get(target, name);
64
- },
65
- configurable: true,
66
- enumerable: true,
67
- };
68
- },
69
- has: (target, name: string) => target.keys.indexOf(name) >= 0,
70
- },
71
- );
72
- };
73
-
74
- const { absoluteFill, absoluteFillObject, hairlineWidth } = BaseStyleSheet;
75
-
76
- const StyleSheet = {
77
- create(source: StyleSource) {
78
- // Create sheet object.
79
- const sheet: StyleSheetDefinition = {
80
- source,
81
- cache: {},
82
- // Placeholder until build method is called.
83
- active: {},
84
- };
85
-
86
- // If initialized, set active sheet based by active theme.
87
- if (activeKey !== null) {
88
- sheet.cache[activeKey] = createSheet(sheet);
89
- sheet.active = sheet.cache[activeKey];
90
- }
91
-
92
- sheets.push(sheet);
93
-
94
- return sheet.active;
95
- },
96
- build(theme: ThemeVariables, key: string = 'default') {
97
- if (!themes[key]) {
98
- themes[key] = theme;
99
- }
100
-
101
- // If theme is already set, we don't need to do anything.
102
- if (key === activeKey) {
103
- return;
104
- }
105
-
106
- // Set new theme active.
107
- activeKey = key;
108
-
109
- // Update style sheets.
110
- sheets.forEach((_, i) => {
111
- // If there is no result for the active theme, we'll create a themed
112
- // style sheet.
113
- if (!sheets[i].cache[key]) {
114
- sheets[i].cache[key] = createSheet(sheets[i]);
115
- }
116
-
117
- // Assign active object, which is also returned from the create
118
- // function, so style changes will be applied on next rerender in
119
- // the components as well.
120
- Object.assign(sheets[i].active, sheets[i].cache[key]);
121
- });
122
- },
123
- value(key: keyof ThemeVariables) {
124
- if (activeKey === null) {
125
- throw new Error('Use of StyleSheet.value() before initializing.');
126
- }
127
-
128
- const theme = themes[activeKey];
129
-
130
- return theme[key];
131
- },
132
- // Add default styles from StyleSheet
133
- absoluteFill,
134
- absoluteFillObject,
135
- hairlineWidth,
136
- };
137
-
138
- export default StyleSheet;
1
+ import { StyleSheet as BaseStyleSheet } from 'react-native';
2
+ import type { ExtendedStyle, BaseStyle, ThemeVariables } from '../types';
3
+
4
+ type StyleSourceEntry =
5
+ | ((theme: object, key: string) => ExtendedStyle)
6
+ | ExtendedStyle;
7
+
8
+ type NamedExtendedStyles<T extends string> = {
9
+ [K in T]: ExtendedStyle;
10
+ };
11
+ type NamedStyles<T extends string> = {
12
+ [K in T]: BaseStyle;
13
+ };
14
+
15
+ type StyleSheetDefinition<T extends string> = {
16
+ source: {
17
+ [K in T]: StyleSourceEntry;
18
+ };
19
+ cache: Record<string, NamedExtendedStyles<T>>;
20
+ active: NamedExtendedStyles<T>;
21
+ };
22
+
23
+ let activeKey: string | null = null;
24
+
25
+ const themes: Record<string, ThemeVariables> = {};
26
+ const sheets: StyleSheetDefinition<string>[] = [];
27
+
28
+ const createSheet = <T extends string>(
29
+ sheet: StyleSheetDefinition<T>,
30
+ ): NamedExtendedStyles<T> => {
31
+ if (!activeKey) {
32
+ throw new Error('No active theme key.');
33
+ }
34
+
35
+ const theme = themes[activeKey];
36
+
37
+ const statelessSource: Partial<NamedStyles<T>> = {};
38
+ const statefulSource: Partial<NamedExtendedStyles<T>> = {};
39
+
40
+ // Apply theme to themeable styles.
41
+ Object.entries(sheet.source).forEach(([key, style]) => {
42
+ // Resolve theme.
43
+ const value = typeof style === 'function' ? style(theme, activeKey) : style;
44
+
45
+ if (typeof value === 'function') {
46
+ statefulSource[key as T] = value;
47
+ } else {
48
+ statelessSource[key as T] = value as BaseStyle;
49
+ }
50
+ });
51
+
52
+ // Wrap stateful and stateless in a proxy, so that we can update the styles on theme change.
53
+ // For using Object.assign below we need some additional methods on the proxy that are mentioned here:
54
+ // https://stackoverflow.com/questions/43185453/object-assign-and-proxies
55
+ return new Proxy(
56
+ {
57
+ keys: Object.keys(sheet.source),
58
+ stateless: BaseStyleSheet.create(statelessSource as NamedStyles<string>),
59
+ stateful: statefulSource,
60
+ },
61
+ {
62
+ get(target, prop: T) {
63
+ return target.stateless[prop] || target.stateful[prop] || undefined;
64
+ },
65
+ ownKeys: (target) => target.keys,
66
+ getOwnPropertyDescriptor(target, name: string) {
67
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
68
+ const proxy = this;
69
+
70
+ return {
71
+ get value() {
72
+ return proxy.get(target, name);
73
+ },
74
+ configurable: true,
75
+ enumerable: true,
76
+ };
77
+ },
78
+ has: (target, name: string) => target.keys.indexOf(name) >= 0,
79
+ },
80
+ ) as NamedExtendedStyles<T>;
81
+ };
82
+
83
+ const { absoluteFill, absoluteFillObject, hairlineWidth } = BaseStyleSheet;
84
+
85
+ const StyleSheet = {
86
+ create<T extends string>(source: { [K in T]: StyleSourceEntry }): {
87
+ [K in T]: ExtendedStyle;
88
+ } {
89
+ // Create sheet object.
90
+ const sheet: StyleSheetDefinition<T> = {
91
+ source,
92
+ cache: {},
93
+ // @ts-expect-error Placeholder until build method is called.
94
+ active: {},
95
+ };
96
+
97
+ // If initialized, set active sheet based by active theme.
98
+ if (activeKey !== null) {
99
+ sheet.cache[activeKey] = createSheet(sheet);
100
+ sheet.active = sheet.cache[activeKey];
101
+ }
102
+
103
+ sheets.push(sheet);
104
+
105
+ return sheet.active;
106
+ },
107
+ build(theme: ThemeVariables, key: string = 'default') {
108
+ if (!themes[key]) {
109
+ themes[key] = theme;
110
+ }
111
+
112
+ // If theme is already set, we don't need to do anything.
113
+ if (key === activeKey) {
114
+ return;
115
+ }
116
+
117
+ // Set new theme active.
118
+ activeKey = key;
119
+
120
+ // Update style sheets.
121
+ sheets.forEach((_, i) => {
122
+ // If there is no result for the active theme, we'll create a themed
123
+ // style sheet.
124
+ if (!sheets[i].cache[key]) {
125
+ sheets[i].cache[key] = createSheet(sheets[i]);
126
+ }
127
+
128
+ // Assign active object, which is also returned from the create
129
+ // function, so style changes will be applied on next rerender in
130
+ // the components as well.
131
+ Object.assign(sheets[i].active, sheets[i].cache[key]);
132
+ });
133
+ },
134
+ value(key: keyof ThemeVariables) {
135
+ if (activeKey === null) {
136
+ throw new Error('Use of StyleSheet.value() before initializing.');
137
+ }
138
+
139
+ const theme = themes[activeKey];
140
+
141
+ return theme[key];
142
+ },
143
+ // Add default styles from StyleSheet
144
+ absoluteFill,
145
+ absoluteFillObject,
146
+ hairlineWidth,
147
+ };
148
+
149
+ export default StyleSheet;
package/src/types.ts CHANGED
@@ -1,162 +1,168 @@
1
- import {
2
- ViewStyle as BaseViewStyle,
3
- ImageStyle as BaseImageStyle,
4
- TextStyle as BaseTextStyle,
5
- GestureResponderEvent,
6
- Role,
7
- NativeSyntheticEvent,
8
- TextInputKeyPressEventData,
9
- } from 'react-native';
10
- import type { Placement, Axis, PlacementAxis } from '@react-types/overlays';
11
- import { BOOTSTRAP_RN_STYLE } from './style/createStyle';
12
-
13
- // Media
14
-
15
- export type Viewport = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
16
-
17
- export type MediaHandler = {
18
- up: (point: Viewport) => boolean;
19
- down: (point: Viewport) => boolean;
20
- only: (point: Viewport) => boolean;
21
- between: (lower: Viewport, upper: Viewport) => boolean;
22
- };
23
-
24
- // Styles
25
-
26
- export type BaseStyle = BaseViewStyle | BaseImageStyle | BaseTextStyle;
27
-
28
- export type InteractionState = {
29
- interaction?: {
30
- hover?: boolean;
31
- focus: boolean;
32
- focusVisible: boolean;
33
- active?: boolean;
34
- };
35
- media: MediaHandler;
36
- };
37
-
38
- // Ref: https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/StyleSheet/StyleSheet.d.ts
39
- type Falsy = undefined | null | undefined | false | '';
40
- interface RecursiveArray<T>
41
- extends Array<T | ReadonlyArray<T> | RecursiveArray<T>> {}
42
- type RegisteredStyle<T> = number & { __registeredStyleBrand: T };
43
-
44
- export type SpecialInteractionStyle<T> = {
45
- (state: InteractionState): [T[], T[]];
46
- $$typeof: typeof BOOTSTRAP_RN_STYLE;
47
- };
48
-
49
- export type ExtendedStyleType<T> =
50
- | T
51
- | SpecialInteractionStyle<T>
52
- | ((state: InteractionState) => T);
53
-
54
- export type StyleProp<T> =
55
- | ExtendedStyleType<T>
56
- | RegisteredStyle<T>
57
- | RecursiveArray<ExtendedStyleType<T> | RegisteredStyle<T> | Falsy>
58
- | Falsy;
59
-
60
- export type ExtendedViewStyle = ExtendedStyleType<BaseViewStyle>;
61
-
62
- export type ExtendedImageStyle = ExtendedStyleType<BaseImageStyle>;
63
-
64
- export type ExtendedTextStyle = ExtendedStyleType<BaseTextStyle>;
65
-
66
- export type ExtendedStyle =
67
- | ExtendedViewStyle
68
- | ExtendedImageStyle
69
- | ExtendedTextStyle;
70
-
71
- export type StyleName = string;
72
-
73
- // Theme
74
-
75
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
- export type StyleValue = any;
77
-
78
- export type ThemeVariables = {
79
- [key: string]: StyleValue;
80
- };
81
-
82
- export type StyleUtility = {
83
- responsive?: boolean;
84
- print?: boolean;
85
- rfs?: boolean;
86
- property: string;
87
- class?: string;
88
- values: Record<string, string | ((t: ThemeVariables) => StyleValue)>;
89
- };
90
-
91
- export type FormValidationState = (t: ThemeVariables) => {
92
- color: string;
93
- icon: string;
94
- };
95
-
96
- // Overlay
97
-
98
- export type Trigger =
99
- | 'press'
100
- | 'hover'
101
- | 'focus'
102
- | 'manual'
103
- | 'press hover'
104
- | 'hover press'
105
- | 'hover focus'
106
- | 'focus hover'
107
- | 'press focus'
108
- | 'focus press';
109
-
110
- export { Placement, Axis, PlacementAxis };
111
-
112
- export type TransformedPlacementAxis =
113
- | 'top'
114
- | 'bottom'
115
- | 'end'
116
- | 'start'
117
- | 'center';
118
-
119
- // Modifiers
120
-
121
- // TODO: Modifiers can have different props based on the implementation. It would be better to define modifiers on the application.
122
-
123
- type To =
124
- | string
125
- | Partial<{
126
- pathname: string;
127
- search: string;
128
- hash: string;
129
- }>;
130
-
131
- type External =
132
- | boolean
133
- | {
134
- download: boolean;
135
- target: string;
136
- rel: string;
137
- };
138
-
139
- export type UseTabbableProps = {
140
- to?: To;
141
- external?: External;
142
- end?: boolean;
143
- caseSensitive?: boolean;
144
- active?: boolean;
145
- };
146
-
147
- export type UseActionableProps = {
148
- to?: To;
149
- external?: External;
150
- relative?: 'path' | 'route';
151
- replace?: boolean;
152
- preventScrollReset?: boolean;
153
- reloadDocument?: boolean;
154
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
155
- state?: any;
156
- onPress?: null | ((event: GestureResponderEvent) => void);
157
- role?: Role;
158
- };
159
-
160
- export type UseFormFieldProps = {
161
- onKeyPress?: (e: NativeSyntheticEvent<TextInputKeyPressEventData>) => void;
162
- };
1
+ import {
2
+ ViewStyle as BaseViewStyle,
3
+ ImageStyle as TempImageStyle,
4
+ TextStyle as BaseTextStyle,
5
+ GestureResponderEvent,
6
+ Role,
7
+ NativeSyntheticEvent,
8
+ TextInputKeyPressEventData,
9
+ } from 'react-native';
10
+ import type { Placement, Axis, PlacementAxis } from '@react-types/overlays';
11
+ import { BOOTSTRAP_RN_STYLE } from './style/createStyle';
12
+
13
+ // Media
14
+
15
+ export type Viewport = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
16
+
17
+ export type MediaHandler = {
18
+ up: (point: Viewport) => boolean;
19
+ down: (point: Viewport) => boolean;
20
+ only: (point: Viewport) => boolean;
21
+ between: (lower: Viewport, upper: Viewport) => boolean;
22
+ };
23
+
24
+ // Styles
25
+
26
+ // Workaround: Add scroll to possible overflow values of ImageStyle to resolve conflict between
27
+ // ImageStyle and ViewStyle.
28
+ type BaseImageStyle = Omit<TempImageStyle, 'overflow'> & {
29
+ overflow?: 'visible' | 'hidden' | 'scroll';
30
+ };
31
+
32
+ export type BaseStyle = BaseViewStyle | BaseImageStyle | BaseTextStyle;
33
+
34
+ export type InteractionState = {
35
+ interaction?: {
36
+ hover?: boolean;
37
+ focus: boolean;
38
+ focusVisible: boolean;
39
+ active?: boolean;
40
+ };
41
+ media: MediaHandler;
42
+ };
43
+
44
+ // Ref: https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/StyleSheet/StyleSheet.d.ts
45
+ type Falsy = undefined | null | undefined | false | '';
46
+ interface RecursiveArray<T>
47
+ extends Array<T | ReadonlyArray<T> | RecursiveArray<T>> {}
48
+ type RegisteredStyle<T> = number & { __registeredStyleBrand: T };
49
+
50
+ export type SpecialInteractionStyle<T> = {
51
+ (state: InteractionState): [T[], T[]];
52
+ $$typeof: typeof BOOTSTRAP_RN_STYLE;
53
+ };
54
+
55
+ export type ExtendedStyleType<T> =
56
+ | T
57
+ | SpecialInteractionStyle<T>
58
+ | ((state: InteractionState) => T);
59
+
60
+ export type StyleProp<T> =
61
+ | ExtendedStyleType<T>
62
+ | RegisteredStyle<T>
63
+ | RecursiveArray<ExtendedStyleType<T> | RegisteredStyle<T> | Falsy>
64
+ | Falsy;
65
+
66
+ export type ExtendedViewStyle = ExtendedStyleType<BaseViewStyle>;
67
+
68
+ export type ExtendedImageStyle = ExtendedStyleType<BaseImageStyle>;
69
+
70
+ export type ExtendedTextStyle = ExtendedStyleType<BaseTextStyle>;
71
+
72
+ export type ExtendedStyle =
73
+ | ExtendedViewStyle
74
+ | ExtendedImageStyle
75
+ | ExtendedTextStyle;
76
+
77
+ export type StyleName = string;
78
+
79
+ // Theme
80
+
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ export type StyleValue = any;
83
+
84
+ export type ThemeVariables = {
85
+ [key: string]: StyleValue;
86
+ };
87
+
88
+ export type StyleUtility = {
89
+ responsive?: boolean;
90
+ print?: boolean;
91
+ rfs?: boolean;
92
+ property: string;
93
+ class?: string;
94
+ values: Record<string, string | ((t: ThemeVariables) => StyleValue)>;
95
+ };
96
+
97
+ export type FormValidationState = (t: ThemeVariables) => {
98
+ color: string;
99
+ icon: string;
100
+ };
101
+
102
+ // Overlay
103
+
104
+ export type Trigger =
105
+ | 'press'
106
+ | 'hover'
107
+ | 'focus'
108
+ | 'manual'
109
+ | 'press hover'
110
+ | 'hover press'
111
+ | 'hover focus'
112
+ | 'focus hover'
113
+ | 'press focus'
114
+ | 'focus press';
115
+
116
+ export { Placement, Axis, PlacementAxis };
117
+
118
+ export type TransformedPlacementAxis =
119
+ | 'top'
120
+ | 'bottom'
121
+ | 'end'
122
+ | 'start'
123
+ | 'center';
124
+
125
+ // Modifiers
126
+
127
+ // TODO: Modifiers can have different props based on the implementation. It would be better to define modifiers on the application.
128
+
129
+ type To =
130
+ | string
131
+ | Partial<{
132
+ pathname: string;
133
+ search: string;
134
+ hash: string;
135
+ }>;
136
+
137
+ type External =
138
+ | boolean
139
+ | Partial<{
140
+ download: boolean;
141
+ target: string;
142
+ rel: string;
143
+ }>;
144
+
145
+ export type UseTabbableProps = {
146
+ to?: To;
147
+ external?: External;
148
+ end?: boolean;
149
+ caseSensitive?: boolean;
150
+ active?: boolean;
151
+ };
152
+
153
+ export type UseActionableProps = {
154
+ to?: To;
155
+ external?: External;
156
+ relative?: 'path' | 'route';
157
+ replace?: boolean;
158
+ preventScrollReset?: boolean;
159
+ reloadDocument?: boolean;
160
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
161
+ state?: any;
162
+ onPress?: null | ((event: GestureResponderEvent) => void);
163
+ role?: Role;
164
+ };
165
+
166
+ export type UseFormFieldProps = {
167
+ onKeyPress?: (e: NativeSyntheticEvent<TextInputKeyPressEventData>) => void;
168
+ };