@pagopa/io-app-design-system 1.46.2 → 1.47.0
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.
- package/lib/commonjs/components/layout/BlockButtons.js +1 -1
- package/lib/commonjs/components/layout/FooterActions.js +162 -0
- package/lib/commonjs/components/layout/FooterActions.js.map +1 -0
- package/lib/commonjs/components/layout/FooterActionsInline.js +113 -0
- package/lib/commonjs/components/layout/FooterActionsInline.js.map +1 -0
- package/lib/commonjs/components/layout/FooterWithButtons.js +3 -1
- package/lib/commonjs/components/layout/FooterWithButtons.js.map +1 -1
- package/lib/commonjs/components/layout/hooks/index.js +28 -0
- package/lib/commonjs/components/layout/hooks/index.js.map +1 -0
- package/lib/commonjs/components/layout/hooks/useBottomMargins.js +31 -0
- package/lib/commonjs/components/layout/hooks/useBottomMargins.js.map +1 -0
- package/lib/commonjs/components/layout/hooks/useFooterActionsInlineMeasurements.js +30 -0
- package/lib/commonjs/components/layout/hooks/useFooterActionsInlineMeasurements.js.map +1 -0
- package/lib/commonjs/components/layout/hooks/useFooterActionsMeasurements.js +31 -0
- package/lib/commonjs/components/layout/hooks/useFooterActionsMeasurements.js.map +1 -0
- package/lib/commonjs/components/layout/index.js +33 -0
- package/lib/commonjs/components/layout/index.js.map +1 -1
- package/lib/commonjs/core/IOColors.js +2 -0
- package/lib/commonjs/core/IOColors.js.map +1 -1
- package/lib/commonjs/core/IOSpacing.js +10 -1
- package/lib/commonjs/core/IOSpacing.js.map +1 -1
- package/lib/commonjs/core/index.js +0 -11
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/module/components/layout/BlockButtons.js +1 -1
- package/lib/module/components/layout/FooterActions.js +153 -0
- package/lib/module/components/layout/FooterActions.js.map +1 -0
- package/lib/module/components/layout/FooterActionsInline.js +104 -0
- package/lib/module/components/layout/FooterActionsInline.js.map +1 -0
- package/lib/module/components/layout/FooterWithButtons.js +3 -1
- package/lib/module/components/layout/FooterWithButtons.js.map +1 -1
- package/lib/module/components/layout/hooks/index.js +3 -0
- package/lib/module/components/layout/hooks/index.js.map +1 -0
- package/lib/module/components/layout/hooks/useBottomMargins.js +25 -0
- package/lib/module/components/layout/hooks/useBottomMargins.js.map +1 -0
- package/lib/module/components/layout/hooks/useFooterActionsInlineMeasurements.js +23 -0
- package/lib/module/components/layout/hooks/useFooterActionsInlineMeasurements.js.map +1 -0
- package/lib/module/components/layout/hooks/useFooterActionsMeasurements.js +24 -0
- package/lib/module/components/layout/hooks/useFooterActionsMeasurements.js.map +1 -0
- package/lib/module/components/layout/index.js +3 -0
- package/lib/module/components/layout/index.js.map +1 -1
- package/lib/module/core/IOColors.js +2 -0
- package/lib/module/core/IOColors.js.map +1 -1
- package/lib/module/core/IOSpacing.js +9 -0
- package/lib/module/core/IOSpacing.js.map +1 -1
- package/lib/module/core/index.js +0 -1
- package/lib/module/core/index.js.map +1 -1
- package/lib/typescript/components/layout/BlockButtons.d.ts +1 -1
- package/lib/typescript/components/layout/FooterActions.d.ts +45 -0
- package/lib/typescript/components/layout/FooterActions.d.ts.map +1 -0
- package/lib/typescript/components/layout/FooterActionsInline.d.ts +17 -0
- package/lib/typescript/components/layout/FooterActionsInline.d.ts.map +1 -0
- package/lib/typescript/components/layout/FooterWithButtons.d.ts +3 -1
- package/lib/typescript/components/layout/FooterWithButtons.d.ts.map +1 -1
- package/lib/typescript/components/layout/HeaderFirstLevel.d.ts +7 -7
- package/lib/typescript/components/layout/HeaderFirstLevel.d.ts.map +1 -1
- package/lib/typescript/components/layout/HeaderSecondLevel.d.ts +7 -7
- package/lib/typescript/components/layout/HeaderSecondLevel.d.ts.map +1 -1
- package/lib/typescript/components/layout/common.d.ts +1 -1
- package/lib/typescript/components/layout/common.d.ts.map +1 -1
- package/lib/typescript/components/layout/hooks/index.d.ts +3 -0
- package/lib/typescript/components/layout/hooks/index.d.ts.map +1 -0
- package/lib/typescript/components/layout/hooks/useBottomMargins.d.ts +5 -0
- package/lib/typescript/components/layout/hooks/useBottomMargins.d.ts.map +1 -0
- package/lib/typescript/components/layout/hooks/useFooterActionsInlineMeasurements.d.ts +17 -0
- package/lib/typescript/components/layout/hooks/useFooterActionsInlineMeasurements.d.ts.map +1 -0
- package/lib/typescript/components/layout/hooks/useFooterActionsMeasurements.d.ts +17 -0
- package/lib/typescript/components/layout/hooks/useFooterActionsMeasurements.d.ts.map +1 -0
- package/lib/typescript/components/layout/index.d.ts +3 -0
- package/lib/typescript/components/layout/index.d.ts.map +1 -1
- package/lib/typescript/core/IOColors.d.ts +1 -0
- package/lib/typescript/core/IOColors.d.ts.map +1 -1
- package/lib/typescript/core/IOSpacing.d.ts +8 -0
- package/lib/typescript/core/IOSpacing.d.ts.map +1 -1
- package/lib/typescript/core/index.d.ts +0 -1
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/layout/BlockButtons.tsx +1 -1
- package/src/components/layout/FooterActions.tsx +260 -0
- package/src/components/layout/FooterActionsInline.tsx +137 -0
- package/src/components/layout/FooterWithButtons.tsx +3 -1
- package/src/components/layout/HeaderFirstLevel.tsx +7 -7
- package/src/components/layout/HeaderSecondLevel.tsx +7 -7
- package/src/components/layout/common.ts +1 -1
- package/src/components/layout/hooks/index.ts +2 -0
- package/src/components/layout/hooks/useBottomMargins.ts +30 -0
- package/src/components/layout/hooks/useFooterActionsInlineMeasurements.ts +38 -0
- package/src/components/layout/hooks/useFooterActionsMeasurements.ts +35 -0
- package/src/components/layout/index.tsx +3 -0
- package/src/core/IOColors.ts +3 -0
- package/src/core/IOSpacing.ts +14 -0
- package/src/core/index.ts +0 -1
- package/lib/commonjs/core/IOStyleVariables.js +0 -14
- package/lib/commonjs/core/IOStyleVariables.js.map +0 -1
- package/lib/module/core/IOStyleVariables.js +0 -7
- package/lib/module/core/IOStyleVariables.js.map +0 -1
- package/lib/typescript/core/IOStyleVariables.d.ts +0 -7
- package/lib/typescript/core/IOStyleVariables.d.ts.map +0 -1
- package/src/core/IOStyleVariables.ts +0 -6
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ComponentProps, PropsWithChildren } from "react";
|
|
3
|
+
import { ColorValue, LayoutChangeEvent, StyleSheet, View } from "react-native";
|
|
4
|
+
import {
|
|
5
|
+
IOColors,
|
|
6
|
+
IOSpacer,
|
|
7
|
+
IOSpacing,
|
|
8
|
+
IOSpacingScale,
|
|
9
|
+
IOVisualCostants,
|
|
10
|
+
useIOTheme,
|
|
11
|
+
useIOThemeContext
|
|
12
|
+
} from "../../core";
|
|
13
|
+
import { WithTestID } from "../../utils/types";
|
|
14
|
+
import { ButtonOutline, ButtonSolid } from "../buttons";
|
|
15
|
+
import { HSpacer } from "../spacer";
|
|
16
|
+
import { useBottomMargins } from "./hooks/useBottomMargins";
|
|
17
|
+
|
|
18
|
+
export type FooterActionsInlineMeasurements = {
|
|
19
|
+
/* Height of the safe bottom area. It includes:
|
|
20
|
+
- Margin between screen content
|
|
21
|
+
and actions (contentEndMargin)
|
|
22
|
+
- Actions block height
|
|
23
|
+
- Eventual safe area margin (bottomMargin)
|
|
24
|
+
This is the total bottom padding that needs
|
|
25
|
+
to be applied to the ScrollView.
|
|
26
|
+
*/
|
|
27
|
+
safeBottomAreaHeight: number;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type FooterActionsInline = WithTestID<
|
|
31
|
+
PropsWithChildren<{
|
|
32
|
+
startAction: Omit<ComponentProps<typeof ButtonOutline>, "fullWidth">;
|
|
33
|
+
endAction: Omit<ComponentProps<typeof ButtonSolid>, "fullWidth">;
|
|
34
|
+
onMeasure?: (measurements: FooterActionsInlineMeasurements) => void;
|
|
35
|
+
/* Don't include safe area insets */
|
|
36
|
+
excludeSafeAreaMargins?: boolean;
|
|
37
|
+
/* Fixed at the bottom of the screen */
|
|
38
|
+
fixed?: boolean;
|
|
39
|
+
}>
|
|
40
|
+
>;
|
|
41
|
+
|
|
42
|
+
/* Margin between ButtonSolid and ButtonOutline */
|
|
43
|
+
const spaceBetweenActions: IOSpacer = 16;
|
|
44
|
+
|
|
45
|
+
const styles = StyleSheet.create({
|
|
46
|
+
buttonContainer: {
|
|
47
|
+
paddingHorizontal: IOVisualCostants.appMarginDefault,
|
|
48
|
+
width: "100%",
|
|
49
|
+
flexShrink: 0
|
|
50
|
+
},
|
|
51
|
+
buttonWrapper: {
|
|
52
|
+
flex: 1
|
|
53
|
+
},
|
|
54
|
+
blockShadow: {
|
|
55
|
+
shadowColor: IOColors.black,
|
|
56
|
+
shadowOffset: {
|
|
57
|
+
width: 0,
|
|
58
|
+
height: -4
|
|
59
|
+
},
|
|
60
|
+
shadowOpacity: 0.1,
|
|
61
|
+
shadowRadius: 32,
|
|
62
|
+
elevation: 10 // Prop supported on Android only
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
export const FooterActionsInline = ({
|
|
67
|
+
startAction,
|
|
68
|
+
endAction,
|
|
69
|
+
excludeSafeAreaMargins = false,
|
|
70
|
+
fixed = true,
|
|
71
|
+
onMeasure,
|
|
72
|
+
testID
|
|
73
|
+
}: FooterActionsInline) => {
|
|
74
|
+
const theme = useIOTheme();
|
|
75
|
+
const { themeType } = useIOThemeContext();
|
|
76
|
+
|
|
77
|
+
const { bottomMargin } = useBottomMargins(false, excludeSafeAreaMargins);
|
|
78
|
+
|
|
79
|
+
/* Top padding applied above the actions */
|
|
80
|
+
const topSpacingValue: IOSpacingScale = 16;
|
|
81
|
+
const topSpacing = fixed ? topSpacingValue : 0;
|
|
82
|
+
|
|
83
|
+
/* Background color should be app main background
|
|
84
|
+
(both light and dark themes) */
|
|
85
|
+
const HEADER_BG_COLOR: ColorValue = IOColors[theme["appBackground-primary"]];
|
|
86
|
+
|
|
87
|
+
const getActionBlockMeasurements = (event: LayoutChangeEvent) => {
|
|
88
|
+
const { height } = event.nativeEvent.layout;
|
|
89
|
+
/* Height of the safe bottom area, applied to the ScrollView:
|
|
90
|
+
Actions + Screen end margin */
|
|
91
|
+
const safeBottomAreaHeight =
|
|
92
|
+
bottomMargin + height + IOSpacing.screenEndMargin;
|
|
93
|
+
onMeasure?.({ safeBottomAreaHeight });
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<View
|
|
98
|
+
style={[
|
|
99
|
+
{
|
|
100
|
+
width: "100%",
|
|
101
|
+
paddingBottom: bottomMargin
|
|
102
|
+
},
|
|
103
|
+
fixed
|
|
104
|
+
? {
|
|
105
|
+
position: "absolute",
|
|
106
|
+
bottom: 0,
|
|
107
|
+
backgroundColor: HEADER_BG_COLOR
|
|
108
|
+
}
|
|
109
|
+
: { marginTop: IOSpacing.screenEndMargin },
|
|
110
|
+
/* Apply shadow only on light theme OR if fixed */
|
|
111
|
+
fixed || themeType === "light" ? styles.blockShadow : {},
|
|
112
|
+
/* Apply bottom border only on dark theme */
|
|
113
|
+
themeType === "dark" && {
|
|
114
|
+
borderTopColor: IOColors[theme["divider-bottomBar"]],
|
|
115
|
+
borderTopWidth: 1
|
|
116
|
+
}
|
|
117
|
+
]}
|
|
118
|
+
testID={testID}
|
|
119
|
+
>
|
|
120
|
+
<View
|
|
121
|
+
style={[styles.buttonContainer, { paddingTop: topSpacing }]}
|
|
122
|
+
onLayout={getActionBlockMeasurements}
|
|
123
|
+
pointerEvents="box-none"
|
|
124
|
+
>
|
|
125
|
+
<View style={{ flexDirection: "row" }}>
|
|
126
|
+
<View style={styles.buttonWrapper}>
|
|
127
|
+
<ButtonOutline fullWidth {...startAction} />
|
|
128
|
+
</View>
|
|
129
|
+
<HSpacer size={spaceBetweenActions} />
|
|
130
|
+
<View style={styles.buttonWrapper}>
|
|
131
|
+
<ButtonSolid fullWidth {...endAction} />
|
|
132
|
+
</View>
|
|
133
|
+
</View>
|
|
134
|
+
</View>
|
|
135
|
+
</View>
|
|
136
|
+
);
|
|
137
|
+
};
|
|
@@ -44,7 +44,9 @@ const verticalSpacing: IOSpacingScale = 16;
|
|
|
44
44
|
/**
|
|
45
45
|
* Implements a component that show buttons as sticky footer
|
|
46
46
|
* It can include 1, 2 or 3 buttons. If they are 2, they can have the inlineHalf or the inlineOneThird style
|
|
47
|
-
* @deprecated This component is deprecated. Use `FooterActions`
|
|
47
|
+
* @deprecated This component is deprecated. Use `FooterActions` or `FooterActionsInline` instead.
|
|
48
|
+
* `FooterActionsInline` is the official replacement for `FooterWithButtons`, but use it only
|
|
49
|
+
* if explicitly required.
|
|
48
50
|
*/
|
|
49
51
|
export const FooterWithButtons = ({
|
|
50
52
|
sticky = false,
|
|
@@ -23,7 +23,7 @@ import { WithTestID } from "../../utils/types";
|
|
|
23
23
|
import { IconButton } from "../buttons";
|
|
24
24
|
import { HSpacer } from "../spacer";
|
|
25
25
|
import { H3 } from "../typography";
|
|
26
|
-
import {
|
|
26
|
+
import { HeaderActionProps } from "./common";
|
|
27
27
|
|
|
28
28
|
type CommonProps = WithTestID<{
|
|
29
29
|
title: string;
|
|
@@ -41,23 +41,23 @@ interface Base extends CommonProps {
|
|
|
41
41
|
|
|
42
42
|
interface OneAction extends CommonProps {
|
|
43
43
|
type: "singleAction";
|
|
44
|
-
firstAction:
|
|
44
|
+
firstAction: HeaderActionProps;
|
|
45
45
|
secondAction?: never;
|
|
46
46
|
thirdAction?: never;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
interface TwoActions extends CommonProps {
|
|
50
50
|
type: "twoActions";
|
|
51
|
-
firstAction:
|
|
52
|
-
secondAction:
|
|
51
|
+
firstAction: HeaderActionProps;
|
|
52
|
+
secondAction: HeaderActionProps;
|
|
53
53
|
thirdAction?: never;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
interface ThreeActions extends CommonProps {
|
|
57
57
|
type: "threeActions";
|
|
58
|
-
firstAction:
|
|
59
|
-
secondAction:
|
|
60
|
-
thirdAction:
|
|
58
|
+
firstAction: HeaderActionProps;
|
|
59
|
+
secondAction: HeaderActionProps;
|
|
60
|
+
thirdAction: HeaderActionProps;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export type HeaderFirstLevel = Base | OneAction | TwoActions | ThreeActions;
|
|
@@ -37,7 +37,7 @@ import { makeFontStyleObject } from "../../utils/fonts";
|
|
|
37
37
|
import { WithTestID } from "../../utils/types";
|
|
38
38
|
import IconButton from "../buttons/IconButton";
|
|
39
39
|
import { HSpacer } from "../spacer";
|
|
40
|
-
import {
|
|
40
|
+
import { HeaderActionProps } from "./common";
|
|
41
41
|
|
|
42
42
|
type ScrollValues = {
|
|
43
43
|
contentOffsetY: SharedValue<number>;
|
|
@@ -85,23 +85,23 @@ interface Base extends CommonProps {
|
|
|
85
85
|
|
|
86
86
|
interface OneAction extends CommonProps {
|
|
87
87
|
type: "singleAction";
|
|
88
|
-
firstAction:
|
|
88
|
+
firstAction: HeaderActionProps;
|
|
89
89
|
secondAction?: never;
|
|
90
90
|
thirdAction?: never;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
interface TwoActions extends CommonProps {
|
|
94
94
|
type: "twoActions";
|
|
95
|
-
firstAction:
|
|
96
|
-
secondAction:
|
|
95
|
+
firstAction: HeaderActionProps;
|
|
96
|
+
secondAction: HeaderActionProps;
|
|
97
97
|
thirdAction?: never;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
interface ThreeActions extends CommonProps {
|
|
101
101
|
type: "threeActions";
|
|
102
|
-
firstAction:
|
|
103
|
-
secondAction:
|
|
104
|
-
thirdAction:
|
|
102
|
+
firstAction: HeaderActionProps;
|
|
103
|
+
secondAction: HeaderActionProps;
|
|
104
|
+
thirdAction: HeaderActionProps;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
export type HeaderSecondLevel = BackProps &
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { IconButton } from "../buttons";
|
|
3
3
|
|
|
4
|
-
export type
|
|
4
|
+
export type HeaderActionProps = Pick<
|
|
5
5
|
React.ComponentProps<typeof IconButton>,
|
|
6
6
|
"icon" | "onPress" | "accessibilityLabel" | "accessibilityHint" | "testID"
|
|
7
7
|
>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
2
|
+
import { IOSpacingScale, IOVisualCostants } from "../../../core";
|
|
3
|
+
|
|
4
|
+
/* Extra bottom margin for iPhone bottom handle because
|
|
5
|
+
ButtonLink doesn't have a fixed height */
|
|
6
|
+
const extraSafeAreaMargin: IOSpacingScale = 8;
|
|
7
|
+
|
|
8
|
+
export const useBottomMargins = (
|
|
9
|
+
withSecondaryAction: boolean = false,
|
|
10
|
+
excludeSafeAreaMargins: boolean = false
|
|
11
|
+
) => {
|
|
12
|
+
const insets = useSafeAreaInsets();
|
|
13
|
+
const needSafeAreaMargin = insets.bottom !== 0;
|
|
14
|
+
|
|
15
|
+
/* Check if the iPhone bottom handle is present.
|
|
16
|
+
If not, or if you don't need safe area insets,
|
|
17
|
+
add a default margin to prevent the button
|
|
18
|
+
from sticking to the bottom. */
|
|
19
|
+
const bottomMargin =
|
|
20
|
+
!needSafeAreaMargin || excludeSafeAreaMargins
|
|
21
|
+
? IOVisualCostants.appMarginDefault
|
|
22
|
+
: insets.bottom;
|
|
23
|
+
|
|
24
|
+
/* When the secondary action is visible, add extra margin
|
|
25
|
+
to avoid little space from iPhone bottom handle */
|
|
26
|
+
const extraBottomMargin =
|
|
27
|
+
withSecondaryAction && needSafeAreaMargin ? extraSafeAreaMargin : 0;
|
|
28
|
+
|
|
29
|
+
return { bottomMargin, extraBottomMargin };
|
|
30
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { FooterActionsInlineMeasurements } from "../FooterActionsInline";
|
|
3
|
+
|
|
4
|
+
type UseFooterActionsInlineMeasurementsProps = {
|
|
5
|
+
footerActionsInlineMeasurements: FooterActionsInlineMeasurements;
|
|
6
|
+
handleFooterActionsInlineMeasurements: (
|
|
7
|
+
values: FooterActionsInlineMeasurements
|
|
8
|
+
) => void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Custom hook to handle the `FooterActions` measurements
|
|
12
|
+
* @returns
|
|
13
|
+
* - `footerActionsInlineMeasurements`
|
|
14
|
+
* Object containing the `FooterActionsInline` measurements
|
|
15
|
+
* - `handleFooterActionsInlineMeasurements`
|
|
16
|
+
* Function to update the footer actions measurements
|
|
17
|
+
* (to be applied to `onMeasure` prop of `FooterActionsInline`)
|
|
18
|
+
*/
|
|
19
|
+
export const useFooterActionsInlineMeasurements =
|
|
20
|
+
(): UseFooterActionsInlineMeasurementsProps => {
|
|
21
|
+
const [
|
|
22
|
+
footerActionsInlineMeasurements,
|
|
23
|
+
setFooterActionsInlineMeasurements
|
|
24
|
+
] = useState<FooterActionsInlineMeasurements>({
|
|
25
|
+
safeBottomAreaHeight: 0
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const handleFooterActionsInlineMeasurements = (
|
|
29
|
+
values: FooterActionsInlineMeasurements
|
|
30
|
+
) => {
|
|
31
|
+
setFooterActionsInlineMeasurements(values);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
footerActionsInlineMeasurements,
|
|
36
|
+
handleFooterActionsInlineMeasurements
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { FooterActionsMeasurements } from "../FooterActions";
|
|
3
|
+
|
|
4
|
+
type UseFooterActionsMeasurementsProps = {
|
|
5
|
+
footerActionsMeasurements: FooterActionsMeasurements;
|
|
6
|
+
handleFooterActionsMeasurements: (values: FooterActionsMeasurements) => void;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Custom hook to handle the `FooterActions` measurements
|
|
10
|
+
* @returns
|
|
11
|
+
* - `footerActionsMeasurements`
|
|
12
|
+
* Object containing the `FooterActions` measurements
|
|
13
|
+
* - `handleFooterActionsMeasurements`
|
|
14
|
+
* Function to update the footer actions measurements
|
|
15
|
+
* (to be applied to `onMeasure` prop of `FooterActions`)
|
|
16
|
+
*/
|
|
17
|
+
export const useFooterActionsMeasurements =
|
|
18
|
+
(): UseFooterActionsMeasurementsProps => {
|
|
19
|
+
const [footerActionsMeasurements, setFooterActionsMeasurements] =
|
|
20
|
+
useState<FooterActionsMeasurements>({
|
|
21
|
+
actionBlockHeight: 0,
|
|
22
|
+
safeBottomAreaHeight: 0
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const handleFooterActionsMeasurements = (
|
|
26
|
+
values: FooterActionsMeasurements
|
|
27
|
+
) => {
|
|
28
|
+
setFooterActionsMeasurements(values);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
footerActionsMeasurements,
|
|
33
|
+
handleFooterActionsMeasurements
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from "./BlockButtons";
|
|
2
|
+
export * from "./FooterActions";
|
|
3
|
+
export * from "./FooterActionsInline";
|
|
2
4
|
export * from "./FooterWithButtons";
|
|
3
5
|
export * from "./ForceScrollDownView";
|
|
4
6
|
export * from "./GradientBottomActions";
|
|
@@ -7,3 +9,4 @@ export * from "./HeaderFirstLevel";
|
|
|
7
9
|
export * from "./HeaderSecondLevel";
|
|
8
10
|
export * from "./ModalBSHeader";
|
|
9
11
|
export * from "./common";
|
|
12
|
+
export * from "./hooks";
|
package/src/core/IOColors.ts
CHANGED
|
@@ -276,6 +276,7 @@ export type IOTheme = {
|
|
|
276
276
|
"icon-decorative": IOColors;
|
|
277
277
|
// Layout
|
|
278
278
|
"divider-default": IOColors;
|
|
279
|
+
"divider-bottomBar": IOColors;
|
|
279
280
|
// Status
|
|
280
281
|
errorIcon: IOColors;
|
|
281
282
|
errorText: IOColors;
|
|
@@ -306,6 +307,7 @@ export const IOThemeLight: IOTheme = {
|
|
|
306
307
|
"icon-decorative": "grey-300",
|
|
307
308
|
// Layout
|
|
308
309
|
"divider-default": "grey-200",
|
|
310
|
+
"divider-bottomBar": "grey-200",
|
|
309
311
|
// Status
|
|
310
312
|
errorIcon: "error-600",
|
|
311
313
|
errorText: "error-600",
|
|
@@ -342,6 +344,7 @@ export const IOThemeDark: IOTheme = {
|
|
|
342
344
|
"icon-default": "grey-450",
|
|
343
345
|
// Layout
|
|
344
346
|
"divider-default": "grey-850",
|
|
347
|
+
"divider-bottomBar": "grey-850",
|
|
345
348
|
// Status
|
|
346
349
|
errorIcon: "error-400",
|
|
347
350
|
errorText: "error-400",
|
package/src/core/IOSpacing.ts
CHANGED
|
@@ -49,3 +49,17 @@ export const IOModuleIDPHSpacing: IOModuleIDPSpacing = 16;
|
|
|
49
49
|
export const IOModuleIDPVSpacing: IOModuleIDPSpacing = 16;
|
|
50
50
|
export const IOModuleIDPSavedVSpacing: IOModuleIDPSpacing = 24;
|
|
51
51
|
export const IOListItemLogoMargin: IOModuleIDPSpacing = 8;
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
░░░ SPACING CONSTANTS ░░░
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
const spacingConstantKeys = ["screenEndMargin"] as const;
|
|
58
|
+
|
|
59
|
+
export type IOSpacingConstants = {
|
|
60
|
+
[K in (typeof spacingConstantKeys)[number]]: IOSpacingScale;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const IOSpacing = {
|
|
64
|
+
screenEndMargin: 32
|
|
65
|
+
} as const satisfies IOSpacingConstants;
|
package/src/core/index.ts
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.IOStyleVariables = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* A collection of default style variables used within IO App.
|
|
9
|
-
*/
|
|
10
|
-
const IOStyleVariables = {
|
|
11
|
-
switchWidth: 51
|
|
12
|
-
};
|
|
13
|
-
exports.IOStyleVariables = IOStyleVariables;
|
|
14
|
-
//# sourceMappingURL=IOStyleVariables.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["IOStyleVariables","switchWidth","exports"],"sourceRoot":"../../../src","sources":["core/IOStyleVariables.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,MAAMA,gBAAgB,GAAG;EAC9BC,WAAW,EAAE;AACf,CAAC;AAACC,OAAA,CAAAF,gBAAA,GAAAA,gBAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["IOStyleVariables","switchWidth"],"sourceRoot":"../../../src","sources":["core/IOStyleVariables.ts"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAAG;EAC9BC,WAAW,EAAE;AACf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IOStyleVariables.d.ts","sourceRoot":"","sources":["../../../src/core/IOStyleVariables.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,gBAAgB;;CAE5B,CAAC"}
|