@swan-io/lake 4.10.1 → 5.0.1
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/package.json +2 -2
- package/src/components/Box.d.ts +27 -12
- package/src/components/Box.js +18 -8
- package/src/components/Filters.d.ts +1 -1
- package/src/components/Filters.js +11 -9
- package/src/components/FixedListViewCells.d.ts +3 -3
- package/src/components/LakeButton.js +1 -2
- package/src/components/LakeCombobox.js +1 -2
- package/src/components/LakeSelect.d.ts +5 -2
- package/src/components/LakeSelect.js +5 -5
- package/src/components/LakeSlider.d.ts +6 -6
- package/src/components/LakeSlider.js +7 -28
- package/src/components/LakeText.d.ts +1 -1
- package/src/components/LakeTooltip.d.ts +7 -3
- package/src/components/LakeTooltip.js +5 -6
- package/src/components/Stack.d.ts +3 -1
- package/src/components/Stack.js +3 -9
- package/src/utils/function.d.ts +0 -2
- package/src/utils/function.js +0 -5
- package/src/components/BorderedButton.d.ts +0 -16
- package/src/components/BorderedButton.js +0 -100
- package/src/components/Caption.d.ts +0 -6
- package/src/components/Caption.js +0 -11
- package/src/components/FailureIcon.d.ts +0 -7
- package/src/components/FailureIcon.js +0 -4
- package/src/components/Heading.d.ts +0 -158
- package/src/components/Heading.js +0 -27
- package/src/components/Input.d.ts +0 -34
- package/src/components/Input.js +0 -110
- package/src/components/Label.d.ts +0 -10
- package/src/components/Label.js +0 -19
- package/src/components/Modal.d.ts +0 -12
- package/src/components/Modal.js +0 -90
- package/src/components/Slider.d.ts +0 -11
- package/src/components/Slider.js +0 -136
- package/src/components/SuccessIcon.d.ts +0 -7
- package/src/components/SuccessIcon.js +0 -4
- package/src/components/Tooltip.d.ts +0 -18
- package/src/components/Tooltip.js +0 -160
- package/src/constants/colors.d.ts +0 -42
- package/src/constants/colors.js +0 -42
- package/src/constants/typography.d.ts +0 -26
- package/src/constants/typography.js +0 -54
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swan-io/lake",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=18.0.0",
|
|
6
6
|
"yarn": "^1.22.0"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"react-dom": "^18.2.0",
|
|
40
40
|
"react-native-web": "^0.19.10",
|
|
41
41
|
"react-popper": "^2.3.0",
|
|
42
|
-
"
|
|
42
|
+
"@swan-io/use-form": "^2.0.0-rc.2",
|
|
43
43
|
"rifm": "^0.12.1",
|
|
44
44
|
"three": "^0.161.0",
|
|
45
45
|
"ts-dedent": "^2.2.0",
|
package/src/components/Box.d.ts
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
import { StyleProp, View, ViewProps, ViewStyle } from "react-native";
|
|
3
|
-
declare const directionStyles: {
|
|
4
|
-
columnReverse: {
|
|
5
|
-
flexDirection: "column-reverse";
|
|
6
|
-
};
|
|
7
|
-
row: {
|
|
8
|
-
flexDirection: "row";
|
|
9
|
-
};
|
|
10
|
-
rowReverse: {
|
|
11
|
-
flexDirection: "row-reverse";
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
3
|
declare const alignItemsStyles: {
|
|
15
4
|
baseline: {
|
|
16
5
|
alignItems: "baseline";
|
|
@@ -25,6 +14,17 @@ declare const alignItemsStyles: {
|
|
|
25
14
|
alignItems: "flex-start";
|
|
26
15
|
};
|
|
27
16
|
};
|
|
17
|
+
declare const directionStyles: {
|
|
18
|
+
columnReverse: {
|
|
19
|
+
flexDirection: "column-reverse";
|
|
20
|
+
};
|
|
21
|
+
row: {
|
|
22
|
+
flexDirection: "row";
|
|
23
|
+
};
|
|
24
|
+
rowReverse: {
|
|
25
|
+
flexDirection: "row-reverse";
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
28
|
declare const justifyContentStyles: {
|
|
29
29
|
center: {
|
|
30
30
|
justifyContent: "center";
|
|
@@ -45,14 +45,26 @@ declare const justifyContentStyles: {
|
|
|
45
45
|
justifyContent: "space-evenly";
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
|
|
48
|
+
declare const wrapStyles: {
|
|
49
|
+
wrap: {
|
|
50
|
+
flexWrap: "wrap";
|
|
51
|
+
};
|
|
52
|
+
wrapReverse: {
|
|
53
|
+
flexWrap: "wrap-reverse";
|
|
54
|
+
};
|
|
55
|
+
};
|
|
49
56
|
type BoxAlignItems = keyof typeof alignItemsStyles | "stretch";
|
|
57
|
+
type BoxDirection = keyof typeof directionStyles | "column";
|
|
50
58
|
type BoxJustifyContent = keyof typeof justifyContentStyles | "normal";
|
|
59
|
+
type BoxWrap = keyof typeof wrapStyles | "nowrap";
|
|
51
60
|
export type BoxProps = ViewProps & {
|
|
52
61
|
alignItems?: BoxAlignItems;
|
|
53
62
|
children?: ReactNode;
|
|
54
63
|
direction?: BoxDirection;
|
|
55
64
|
justifyContent?: BoxJustifyContent;
|
|
65
|
+
wrap?: BoxWrap;
|
|
66
|
+
grow?: number;
|
|
67
|
+
shrink?: number;
|
|
56
68
|
style?: StyleProp<ViewStyle>;
|
|
57
69
|
};
|
|
58
70
|
export declare const Box: import("react").ForwardRefExoticComponent<ViewProps & {
|
|
@@ -60,6 +72,9 @@ export declare const Box: import("react").ForwardRefExoticComponent<ViewProps &
|
|
|
60
72
|
children?: ReactNode;
|
|
61
73
|
direction?: BoxDirection | undefined;
|
|
62
74
|
justifyContent?: BoxJustifyContent | undefined;
|
|
75
|
+
wrap?: BoxWrap | undefined;
|
|
76
|
+
grow?: number | undefined;
|
|
77
|
+
shrink?: number | undefined;
|
|
63
78
|
style?: StyleProp<ViewStyle>;
|
|
64
79
|
} & import("react").RefAttributes<View>>;
|
|
65
80
|
export {};
|
package/src/components/Box.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from "react";
|
|
3
3
|
import { StyleSheet, View } from "react-native";
|
|
4
|
-
/* eslint-disable react-native/no-unused-styles */
|
|
5
|
-
const directionStyles = StyleSheet.create({
|
|
6
|
-
columnReverse: { flexDirection: "column-reverse" },
|
|
7
|
-
row: { flexDirection: "row" },
|
|
8
|
-
rowReverse: { flexDirection: "row-reverse" },
|
|
9
|
-
});
|
|
10
4
|
const alignItemsStyles = StyleSheet.create({
|
|
11
5
|
baseline: { alignItems: "baseline" },
|
|
12
6
|
center: { alignItems: "center" },
|
|
13
7
|
end: { alignItems: "flex-end" },
|
|
14
8
|
start: { alignItems: "flex-start" },
|
|
15
9
|
});
|
|
10
|
+
const directionStyles = StyleSheet.create({
|
|
11
|
+
columnReverse: { flexDirection: "column-reverse" },
|
|
12
|
+
row: { flexDirection: "row" },
|
|
13
|
+
rowReverse: { flexDirection: "row-reverse" },
|
|
14
|
+
});
|
|
16
15
|
const justifyContentStyles = StyleSheet.create({
|
|
17
16
|
center: { justifyContent: "center" },
|
|
18
17
|
end: { justifyContent: "flex-end" },
|
|
@@ -21,11 +20,22 @@ const justifyContentStyles = StyleSheet.create({
|
|
|
21
20
|
spaceAround: { justifyContent: "space-around" },
|
|
22
21
|
spaceEvenly: { justifyContent: "space-evenly" },
|
|
23
22
|
});
|
|
23
|
+
const wrapStyles = StyleSheet.create({
|
|
24
|
+
wrap: { flexWrap: "wrap" },
|
|
25
|
+
wrapReverse: { flexWrap: "wrap-reverse" },
|
|
26
|
+
});
|
|
27
|
+
const otherStyles = StyleSheet.create({
|
|
28
|
+
grow1: { flexGrow: 1 },
|
|
29
|
+
shrink1: { flexShrink: 1 },
|
|
30
|
+
});
|
|
24
31
|
export const Box = forwardRef((
|
|
25
|
-
// Default <View /> styles https://github.com/necolas/react-native-web/blob/0.19.
|
|
26
|
-
{ alignItems = "stretch", direction = "column", justifyContent = "normal", style, ...props }, forwardedRef) => (_jsx(View, { ref: forwardedRef, ...props, style: [
|
|
32
|
+
// Default <View /> styles https://github.com/necolas/react-native-web/blob/0.19.10/packages/react-native-web/src/exports/View/index.js#L146
|
|
33
|
+
{ alignItems = "stretch", direction = "column", justifyContent = "normal", wrap = "nowrap", grow = 0, shrink = 0, style, ...props }, forwardedRef) => (_jsx(View, { ref: forwardedRef, ...props, style: [
|
|
27
34
|
alignItems !== "stretch" && alignItemsStyles[alignItems],
|
|
28
35
|
direction !== "column" && directionStyles[direction],
|
|
29
36
|
justifyContent !== "normal" && justifyContentStyles[justifyContent],
|
|
37
|
+
wrap !== "nowrap" && wrapStyles[wrap],
|
|
38
|
+
grow !== 0 && (grow === 1 ? otherStyles.grow1 : { flexGrow: grow }),
|
|
39
|
+
shrink !== 0 && (shrink === 1 ? otherStyles.shrink1 : { flexShrink: shrink }),
|
|
30
40
|
style,
|
|
31
41
|
] })));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DateFormat, DatePickerDate } from "@swan-io/shared-business/src/components/DatePicker";
|
|
2
|
-
import { ValidatorResult } from "
|
|
2
|
+
import { ValidatorResult } from "@swan-io/use-form";
|
|
3
3
|
import { Simplify } from "type-fest";
|
|
4
4
|
type Item<T> = {
|
|
5
5
|
label: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { DatePickerModal, } from "@swan-io/shared-business/src/components/DatePicker";
|
|
3
|
+
import { useForm } from "@swan-io/use-form";
|
|
3
4
|
import dayjs from "dayjs";
|
|
4
5
|
import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
6
|
import { FlatList, Pressable, StyleSheet, Text, View } from "react-native";
|
|
6
|
-
import { hasDefinedKeys, useForm } from "react-ux-form";
|
|
7
7
|
import { P, match } from "ts-pattern";
|
|
8
8
|
import { colors, shadows, spacings } from "../constants/design";
|
|
9
9
|
import { useDisclosure } from "../hooks/useDisclosure";
|
|
@@ -161,7 +161,7 @@ function FilterDate({ label, initialValue, noValueText, cancelText, submitText,
|
|
|
161
161
|
return (_jsxs(View, { style: styles.container, children: [_jsx(FilterTag, { label: label, onPress: toggle, ref: inputRef, onPressRemove: onPressRemove, isActive: visible, value: isNotNullish(initialValue) ? dayjs(initialValue).format(dateFormat) : noValueText }), _jsx(DatePickerModal, { visible: visible, format: dateFormat, firstWeekDay: "monday", label: label, cancelLabel: cancelText, confirmLabel: submitText, value: value, isSelectable: isSelectable, validate: validate, onChange: value => {
|
|
162
162
|
const formattedValue = dayjs(value, dateFormat, true).toJSON();
|
|
163
163
|
onSave(formattedValue);
|
|
164
|
-
},
|
|
164
|
+
}, onDismiss: close })] }));
|
|
165
165
|
}
|
|
166
166
|
function FilterInput({ label, initialValue = "", noValueText, submitText, autoOpen = false, placeholder, validate, onSave, onPressRemove, }) {
|
|
167
167
|
const inputRef = useRef(null);
|
|
@@ -174,12 +174,14 @@ function FilterInput({ label, initialValue = "", noValueText, submitText, autoOp
|
|
|
174
174
|
},
|
|
175
175
|
});
|
|
176
176
|
const onSubmit = () => {
|
|
177
|
-
submitForm(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
177
|
+
submitForm({
|
|
178
|
+
onSuccess: ({ input }) => {
|
|
179
|
+
if (input.isSome()) {
|
|
180
|
+
setValue(input.get());
|
|
181
|
+
onSave(input.get());
|
|
182
|
+
close();
|
|
183
|
+
}
|
|
184
|
+
},
|
|
183
185
|
});
|
|
184
186
|
};
|
|
185
187
|
return (_jsxs(View, { style: styles.container, children: [_jsx(FilterTag, { label: label, onPress: toggle, ref: inputRef, onPressRemove: onPressRemove, isActive: visible, value: value === "" ? noValueText : value }), _jsx(Popover, { role: "listbox", matchReferenceWidth: false, onDismiss: close, referenceRef: inputRef, returnFocus: false, visible: visible, children: _jsxs(View, { style: [styles.dropdown, styles.inputContent], children: [_jsx(Field, { name: "input", children: ({ error, value, onChange }) => (_jsx(LakeLabel, { label: label, render: id => (_jsx(LakeTextInput, { id: id, error: error, style: styles.input, placeholder: placeholder, value: value, onChangeText: onChange, onSubmitEditing: onSubmit })) })) }), _jsx(LakeButton, { size: "small", color: "current", onPress: onSubmit, children: submitText })] }) })] }));
|
|
@@ -197,7 +199,7 @@ export const FiltersStack = ({ filters, openedFilters, definition, onChangeOpene
|
|
|
197
199
|
if (openedFilters.length === 0) {
|
|
198
200
|
return null;
|
|
199
201
|
}
|
|
200
|
-
return (_jsx(Stack, { direction: "row", wrap:
|
|
202
|
+
return (_jsx(Stack, { direction: "row", wrap: "wrap", children: openedFilters.map(filterName => {
|
|
201
203
|
const filterDefinition = definition[filterName];
|
|
202
204
|
if (typeof filterName !== "string" || filterDefinition == null) {
|
|
203
205
|
return null;
|
|
@@ -31,7 +31,7 @@ export declare const SimpleTitleCell: ({ isHighlighted, text, tooltip, }: {
|
|
|
31
31
|
togglableOnFocus?: boolean | undefined;
|
|
32
32
|
containerStyle?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
33
33
|
disabled?: boolean | undefined;
|
|
34
|
-
}
|
|
34
|
+
} & import("react").RefAttributes<import("./LakeTooltip").TooltipRef>, "children"> | undefined;
|
|
35
35
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
36
36
|
export declare const SimpleRegularTextCell: ({ variant, text, textAlign, color, }: {
|
|
37
37
|
variant?: "light" | "medium" | "semibold" | "regular" | "smallSemibold" | "smallMedium" | "smallRegular" | undefined;
|
|
@@ -58,7 +58,7 @@ export declare const CopyableRegularTextCell: ({ variant, text, textToCopy, copy
|
|
|
58
58
|
togglableOnFocus?: boolean | undefined;
|
|
59
59
|
containerStyle?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
60
60
|
disabled?: boolean | undefined;
|
|
61
|
-
}
|
|
61
|
+
} & import("react").RefAttributes<import("./LakeTooltip").TooltipRef>, "children"> | undefined;
|
|
62
62
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
63
63
|
export declare const BalanceCell: ({ value, currency, originalValue, formatCurrency, textAlign, variant, }: {
|
|
64
64
|
value: number;
|
|
@@ -89,7 +89,7 @@ export declare const LinkCell: ({ children, external, onPress, variant, tooltip,
|
|
|
89
89
|
togglableOnFocus?: boolean | undefined;
|
|
90
90
|
containerStyle?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
91
91
|
disabled?: boolean | undefined;
|
|
92
|
-
}
|
|
92
|
+
} & import("react").RefAttributes<import("./LakeTooltip").TooltipRef>, "children"> | undefined;
|
|
93
93
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
94
94
|
export declare const StartAlignedCell: ({ children }: {
|
|
95
95
|
children: ReactNode;
|
|
@@ -100,7 +100,6 @@ const styles = StyleSheet.create({
|
|
|
100
100
|
right: -3,
|
|
101
101
|
},
|
|
102
102
|
});
|
|
103
|
-
const isReactText = (node) => ["string", "number"].includes(typeof node);
|
|
104
103
|
export const LakeButton = memo(forwardRef(({ ariaControls, ariaExpanded, ariaLabel, children, color = "gray", disabled = false, icon, grow = false, iconPosition = "start", loading = false, mode = "primary", onPress, size = "large", style, forceBackground = false, href, hrefAttrs, pill, }, forwardedRef) => {
|
|
105
104
|
const isSmall = size === "small";
|
|
106
105
|
const iconSize = isSmall ? 18 : 20;
|
|
@@ -158,7 +157,7 @@ export const LakeButton = memo(forwardRef(({ ariaControls, ariaExpanded, ariaLab
|
|
|
158
157
|
? colors[color][700]
|
|
159
158
|
: colors[color][600]
|
|
160
159
|
: colors[color].contrast;
|
|
161
|
-
return (_jsxs(_Fragment, { children: [hasIconStart && (_jsxs(_Fragment, { children: [_jsx(Icon, { color: textColor, name: icon, size: iconSize }), isNotNullish(children) && _jsx(Space, { width: isSmall ? 8 : 12 })] })),
|
|
160
|
+
return (_jsxs(_Fragment, { children: [hasIconStart && (_jsxs(_Fragment, { children: [_jsx(Icon, { color: textColor, name: icon, size: iconSize }), isNotNullish(children) && _jsx(Space, { width: isSmall ? 8 : 12 })] })), typeof children === "string" || typeof children === "number" ? (_jsx(LakeText, { numberOfLines: 1, userSelect: "none", style: [isSmall ? styles.textSmall : styles.text, { color: textColor }], children: children })) : (children), hasIconEnd && (_jsxs(_Fragment, { children: [isNotNullish(children) && _jsx(Space, { width: isSmall ? 8 : 12 }), _jsx(Icon, { color: textColor, name: icon, size: iconSize })] })), loading && (_jsx(View, { role: "none", style: [
|
|
162
161
|
styles.loaderContainer,
|
|
163
162
|
{
|
|
164
163
|
backgroundColor: mode === "secondary" || mode === "tertiary"
|
|
@@ -71,7 +71,6 @@ const styles = StyleSheet.create({
|
|
|
71
71
|
flexGrow: 1,
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
|
-
const isReactText = (node) => ["string", "number"].includes(typeof node);
|
|
75
74
|
const getItemLayout = (_data, index) => ({
|
|
76
75
|
length: DEFAULT_ELEMENT_HEIGHT,
|
|
77
76
|
offset: DEFAULT_ELEMENT_HEIGHT * index,
|
|
@@ -172,7 +171,7 @@ const LakeComboboxWithRef = ({ inputRef, value, items, itemHeight = DEFAULT_ELEM
|
|
|
172
171
|
setIsFetchingAdditionalInfo(false);
|
|
173
172
|
dismiss();
|
|
174
173
|
});
|
|
175
|
-
}, children:
|
|
174
|
+
}, children: typeof rendered === "string" || typeof rendered === "number" ? (_jsx(LakeText, { numberOfLines: 1, style: styles.itemText, children: rendered })) : (rendered) }));
|
|
176
175
|
} })), ListFooterComponent, isFetchingAdditionalInfo ? (_jsxs(View, { style: styles.loaderAdditional, children: [_jsx(View, { style: styles.loaderAdditionalUnderlay }), _jsx(LoadingView, {})] })) : null] })),
|
|
177
176
|
}),
|
|
178
177
|
}) }) })] }));
|
|
@@ -21,14 +21,17 @@ export type SelectProps<V> = {
|
|
|
21
21
|
disabled?: boolean;
|
|
22
22
|
value?: V;
|
|
23
23
|
onValueChange: (value: V) => void;
|
|
24
|
-
|
|
24
|
+
disabledItems?: {
|
|
25
|
+
value: V;
|
|
26
|
+
message?: string;
|
|
27
|
+
}[];
|
|
25
28
|
hideErrors?: boolean;
|
|
26
29
|
id?: string;
|
|
27
30
|
error?: string;
|
|
28
31
|
readOnly?: boolean;
|
|
29
32
|
style?: StyleProp<ViewStyle>;
|
|
30
33
|
};
|
|
31
|
-
declare const LakeSelectWithRef: <V>({ title, items, valueStyle, size, color, disabled, mode, placeholder, readOnly, id, matchReferenceWidth, value, error, hideErrors, icon, onValueChange,
|
|
34
|
+
declare const LakeSelectWithRef: <V>({ title, items, valueStyle, size, color, disabled, mode, placeholder, readOnly, id, matchReferenceWidth, value, error, hideErrors, icon, onValueChange, disabledItems, PopoverFooter, style, }: SelectProps<V>, forwardedRef: ForwardedRef<View>) => import("react/jsx-runtime").JSX.Element;
|
|
32
35
|
export declare const LakeSelect: <I>(props: SelectProps<I> & {
|
|
33
36
|
ref?: ForwardedRef<View> | undefined;
|
|
34
37
|
}) => ReturnType<typeof LakeSelectWithRef>;
|
|
@@ -6,7 +6,7 @@ import { colors, invariantColors, radii, shadows, spacings, texts, } from "../co
|
|
|
6
6
|
import { useDisclosure } from "../hooks/useDisclosure";
|
|
7
7
|
import { useMergeRefs } from "../hooks/useMergeRefs";
|
|
8
8
|
import { getFocusableElements } from "../utils/a11y";
|
|
9
|
-
import { isNotNullish } from "../utils/nullish";
|
|
9
|
+
import { isNotNullish, isNullishOrEmpty } from "../utils/nullish";
|
|
10
10
|
import { Box } from "./Box";
|
|
11
11
|
import { Fill } from "./Fill";
|
|
12
12
|
import { Icon } from "./Icon";
|
|
@@ -111,7 +111,7 @@ const styles = StyleSheet.create({
|
|
|
111
111
|
borderColor: colors.negative[500],
|
|
112
112
|
},
|
|
113
113
|
});
|
|
114
|
-
const LakeSelectWithRef = ({ title, items, valueStyle, size, color = "current", disabled = false, mode = "normal", placeholder, readOnly = false, id, matchReferenceWidth = true, value, error, hideErrors = false, icon, onValueChange,
|
|
114
|
+
const LakeSelectWithRef = ({ title, items, valueStyle, size, color = "current", disabled = false, mode = "normal", placeholder, readOnly = false, id, matchReferenceWidth = true, value, error, hideErrors = false, icon, onValueChange, disabledItems = [], PopoverFooter, style, }, forwardedRef) => {
|
|
115
115
|
var _a;
|
|
116
116
|
const inputRef = useRef(null);
|
|
117
117
|
const listRef = useRef(null);
|
|
@@ -188,12 +188,12 @@ const LakeSelectWithRef = ({ title, items, valueStyle, size, color = "current",
|
|
|
188
188
|
}
|
|
189
189
|
}, keyExtractor: (_, index) => `select-item-${index}`, renderItem: ({ item, index }) => {
|
|
190
190
|
const isSelected = value === item.value;
|
|
191
|
-
const
|
|
192
|
-
return (_jsx(LakeTooltip, { placement: "right", content:
|
|
191
|
+
const disablement = disabledItems.find(({ value }) => value === item.value);
|
|
192
|
+
return (_jsx(LakeTooltip, { placement: "right", content: disablement === null || disablement === void 0 ? void 0 : disablement.message, disabled: isNullishOrEmpty(disablement === null || disablement === void 0 ? void 0 : disablement.message), children: _jsxs(Pressable, { ref: element => (listItemRefs.current[index] = element), onKeyDown: onKeyDown, disabled: isNotNullish(disablement), style: ({ hovered, focused }) => [
|
|
193
193
|
styles.item,
|
|
194
194
|
(hovered || isSelected) && styles.itemHighlighted,
|
|
195
195
|
focused && styles.itemFocused,
|
|
196
|
-
|
|
196
|
+
isNotNullish(disablement) && styles.itemDisabled,
|
|
197
197
|
], role: "option", "aria-selected": true, onPress: () => {
|
|
198
198
|
onValueChange(item.value);
|
|
199
199
|
close();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
value: number;
|
|
1
|
+
import { ViewProps } from "react-native";
|
|
2
|
+
type Props = {
|
|
4
3
|
min: number;
|
|
5
4
|
max: number;
|
|
5
|
+
value: number;
|
|
6
6
|
step: number;
|
|
7
|
-
unit: string;
|
|
8
7
|
disabled?: boolean;
|
|
8
|
+
style?: ViewProps["style"];
|
|
9
9
|
onChange: (value: number) => void;
|
|
10
10
|
};
|
|
11
|
-
export declare const
|
|
12
|
-
export
|
|
11
|
+
export declare const LakeSlider: ({ min, max, value, step, disabled, style, onChange }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
2
|
-
import { useCallback
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
3
|
import { StyleSheet, View } from "react-native";
|
|
4
4
|
import { commonStyles } from "../constants/commonStyles";
|
|
5
|
-
import { breakpoints } from "../constants/design";
|
|
6
|
-
import { Box } from "./Box";
|
|
7
|
-
import { LakeLabel } from "./LakeLabel";
|
|
8
|
-
import { LakeTextInput } from "./LakeTextInput";
|
|
9
|
-
import { ResponsiveContainer } from "./ResponsiveContainer";
|
|
10
5
|
const styles = StyleSheet.create({
|
|
11
6
|
container: {
|
|
7
|
+
paddingHorizontal: 10, // the slider thumb has a 20px size
|
|
12
8
|
zIndex: 1,
|
|
13
9
|
},
|
|
14
|
-
input: {
|
|
15
|
-
maxWidth: 120,
|
|
16
|
-
zIndex: 1,
|
|
17
|
-
position: "relative",
|
|
18
|
-
},
|
|
19
10
|
});
|
|
20
|
-
export const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
setDirtyValue(String(value));
|
|
25
|
-
}, [value]);
|
|
26
|
-
const sanitizeInput = useCallback(() => {
|
|
27
|
-
const cleanValue = Math.max(Math.min(Number(dirtyValue), max), min);
|
|
28
|
-
setDirtyValue(String(cleanValue));
|
|
29
|
-
onChange(cleanValue);
|
|
30
|
-
}, [min, max, dirtyValue, onChange]);
|
|
31
|
-
return (_jsx(ResponsiveContainer, { breakpoint: sliderBreakpoint, style: styles.container, children: ({ large }) => (_jsx(_Fragment, { children: large ? (_jsxs(_Fragment, { children: [_jsx(Box, { direction: "row", justifyContent: "end", children: _jsx(View, { children: _jsx(LakeTextInput, { style: styles.input, unit: unit, value: dirtyValue, onChangeText: setDirtyValue, onBlur: sanitizeInput, inputMode: "decimal", disabled: disabled }) }) }), _jsx("input", { type: "range", min: min, max: max, step: step, value: value, disabled: disabled, onChange: event => onChange(Number(event.target.value)), style: {
|
|
32
|
-
backgroundSize: `${((value - min) / (max - min)) * 100}% 100%`,
|
|
33
|
-
...(disabled ? commonStyles.disabled : {}),
|
|
34
|
-
} })] })) : (_jsx(LakeLabel, { label: label, render: id => (_jsx(LakeTextInput, { id: id, unit: unit, value: dirtyValue, onChangeText: setDirtyValue, onBlur: sanitizeInput, inputMode: "decimal", disabled: disabled })) })) })) }));
|
|
35
|
-
};
|
|
11
|
+
export const LakeSlider = ({ min, max, value, step, disabled = false, style, onChange }) => (_jsx(View, { style: [styles.container, style], children: _jsx("input", { type: "range", min: min, max: max, value: value, step: step, disabled: disabled, onChange: useCallback((event) => onChange(Number(event.target.value)), [onChange]), style: {
|
|
12
|
+
backgroundSize: `${((value - min) / (max - min)) * 100}% 100%`,
|
|
13
|
+
...(disabled ? commonStyles.disabled : {}),
|
|
14
|
+
} }) }));
|
|
@@ -29,6 +29,6 @@ export declare const LakeText: import("react").ForwardRefExoticComponent<TextPro
|
|
|
29
29
|
togglableOnFocus?: boolean | undefined;
|
|
30
30
|
containerStyle?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
31
31
|
disabled?: boolean | undefined;
|
|
32
|
-
}
|
|
32
|
+
} & import("react").RefAttributes<import("./LakeTooltip").TooltipRef>, "children"> | undefined;
|
|
33
33
|
} & import("react").RefAttributes<Text>>;
|
|
34
34
|
export {};
|
|
@@ -14,8 +14,12 @@ type Props = {
|
|
|
14
14
|
containerStyle?: ViewProps["style"];
|
|
15
15
|
disabled?: boolean;
|
|
16
16
|
};
|
|
17
|
-
export
|
|
18
|
-
|
|
17
|
+
export type TooltipRef = {
|
|
18
|
+
show: () => void;
|
|
19
|
+
hide: () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const LakeTooltip: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<TooltipRef>>;
|
|
22
|
+
export declare const InformationTooltip: import("react").ForwardRefExoticComponent<{
|
|
19
23
|
text: string;
|
|
20
|
-
}
|
|
24
|
+
} & import("react").RefAttributes<TooltipRef>>;
|
|
21
25
|
export {};
|
|
@@ -81,14 +81,13 @@ const styles = StyleSheet.create({
|
|
|
81
81
|
flexGrow: 0,
|
|
82
82
|
},
|
|
83
83
|
});
|
|
84
|
-
const isReactText = (node) => ["string", "number"].includes(typeof node);
|
|
85
84
|
const MAX_WIDTH = "calc(100vw - 20px)";
|
|
86
|
-
export const LakeTooltip = ({ content, children, ...rest }) => {
|
|
85
|
+
export const LakeTooltip = forwardRef(({ content, children, ...rest }, forwardedRef) => {
|
|
87
86
|
if (isNullishOrEmpty(content)) {
|
|
88
87
|
return children;
|
|
89
88
|
}
|
|
90
|
-
return (_jsx(Tooltip, { content: content, ...rest, children: children }));
|
|
91
|
-
};
|
|
89
|
+
return (_jsx(Tooltip, { ref: forwardedRef, content: content, ...rest, children: children }));
|
|
90
|
+
});
|
|
92
91
|
const Tooltip = memo(forwardRef(({ children, content, describedBy, matchReferenceWidth = false, hideArrow = false, onHide, onShow, placement, width, togglableOnFocus = false, containerStyle, disabled = false, }, forwardedRef) => {
|
|
93
92
|
var _a, _b;
|
|
94
93
|
const referenceRef = useRef(null);
|
|
@@ -170,7 +169,7 @@ const Tooltip = memo(forwardRef(({ children, content, describedBy, matchReferenc
|
|
|
170
169
|
(state === null || state === void 0 ? void 0 : state.placement) === "bottom" && styles.baseBottom,
|
|
171
170
|
(state === null || state === void 0 ? void 0 : state.placement) === "right" && styles.baseRight,
|
|
172
171
|
(state === null || state === void 0 ? void 0 : state.placement) === "left" && styles.baseLeft,
|
|
173
|
-
], children: [_jsx(View, { style: [styles.content, { width, maxWidth: MAX_WIDTH }], children:
|
|
172
|
+
], children: [_jsx(View, { style: [styles.content, { width, maxWidth: MAX_WIDTH }], children: typeof content === "string" || typeof content === "number" ? (_jsx(LakeText, { align: "center", color: colors.gray.contrast, children: content })) : (content) }), !hideArrow && (_jsx(View, { role: "none", style: [
|
|
174
173
|
(state === null || state === void 0 ? void 0 : state.placement) === "right" || (state === null || state === void 0 ? void 0 : state.placement) === "left"
|
|
175
174
|
? styles.arrowContainerHorizontal
|
|
176
175
|
: styles.arrowContainer,
|
|
@@ -187,4 +186,4 @@ const Tooltip = memo(forwardRef(({ children, content, describedBy, matchReferenc
|
|
|
187
186
|
},
|
|
188
187
|
], children: _jsx(View, { style: styles.arrow }) }))] }) }) }))] }));
|
|
189
188
|
}));
|
|
190
|
-
export const InformationTooltip = ({ text }) => (_jsx(LakeTooltip, { describedBy: "copy", placement: "bottom", togglableOnFocus: true, width: 300, content: text, children: _jsx(View, { style: styles.info, children: _jsx(Icon, { name: "info-regular", size: 24, color: colors.gray[900] }) }) }));
|
|
189
|
+
export const InformationTooltip = forwardRef(({ text }, forwardedRef) => (_jsx(LakeTooltip, { ref: forwardedRef, describedBy: "copy", placement: "bottom", togglableOnFocus: true, width: 300, content: text, children: _jsx(View, { style: styles.info, children: _jsx(Icon, { name: "info-regular", size: 24, color: colors.gray[900] }) }) })));
|
|
@@ -5,8 +5,10 @@ export declare const Stack: import("react").ForwardRefExoticComponent<import("re
|
|
|
5
5
|
children?: import("react").ReactNode;
|
|
6
6
|
direction?: ("row" | "column" | "columnReverse" | "rowReverse") | undefined;
|
|
7
7
|
justifyContent?: ("end" | "start" | "normal" | "center" | "spaceBetween" | "spaceAround" | "spaceEvenly") | undefined;
|
|
8
|
+
wrap?: ("nowrap" | "wrap" | "wrapReverse") | undefined;
|
|
9
|
+
grow?: number | undefined;
|
|
10
|
+
shrink?: number | undefined;
|
|
8
11
|
style?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
9
12
|
} & {
|
|
10
13
|
space?: 4 | 16 | 8 | 12 | 20 | 24 | 32 | 40 | 48 | 72 | 96 | undefined;
|
|
11
|
-
wrap?: boolean | undefined;
|
|
12
14
|
} & import("react").RefAttributes<View>>;
|
package/src/components/Stack.js
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Children, forwardRef, Fragment } from "react";
|
|
3
|
-
import { StyleSheet } from "react-native";
|
|
4
3
|
import { isNullish } from "../utils/nullish";
|
|
5
4
|
import { Box } from "./Box";
|
|
6
5
|
import { Space } from "./Space";
|
|
7
|
-
const styles = StyleSheet.create({
|
|
8
|
-
wrap: {
|
|
9
|
-
flexWrap: "wrap",
|
|
10
|
-
},
|
|
11
|
-
});
|
|
12
6
|
export const Stack = forwardRef(
|
|
13
|
-
// Default <View /> styles https://github.com/necolas/react-native-web/blob/0.19.
|
|
14
|
-
({ children, space,
|
|
7
|
+
// Default <View /> styles https://github.com/necolas/react-native-web/blob/0.19.10/packages/react-native-web/src/exports/View/index.js#L146
|
|
8
|
+
({ children, space, ...props }, forwardedRef) => {
|
|
15
9
|
const { direction = "column" } = props;
|
|
16
10
|
const horizontal = direction === "row" || direction === "rowReverse";
|
|
17
|
-
return (_jsx(Box, {
|
|
11
|
+
return (_jsx(Box, { ref: forwardedRef, ...props, children: Children.map(children, (child, index) => {
|
|
18
12
|
if (isNullish(child)) {
|
|
19
13
|
return child;
|
|
20
14
|
}
|
package/src/utils/function.d.ts
CHANGED
|
@@ -2,8 +2,6 @@ export declare const identity: <T>(value: T) => T;
|
|
|
2
2
|
export declare const noop: () => void;
|
|
3
3
|
export declare const stubFalse: () => false;
|
|
4
4
|
export declare const stubTrue: () => true;
|
|
5
|
-
export declare const unionToArray: <T extends PropertyKey>(object: Record<T, true>) => T[];
|
|
6
|
-
export declare const getUnionGuard: <T extends PropertyKey>(object: Record<T, true>) => (value: unknown) => value is T;
|
|
7
5
|
export declare const deriveUnion: <T extends PropertyKey>(object: Record<T, true>) => {
|
|
8
6
|
array: T[];
|
|
9
7
|
set: Set<T>;
|
package/src/utils/function.js
CHANGED
|
@@ -4,11 +4,6 @@ export const identity = (value) => value;
|
|
|
4
4
|
export const noop = () => { };
|
|
5
5
|
export const stubFalse = () => false;
|
|
6
6
|
export const stubTrue = () => true;
|
|
7
|
-
export const unionToArray = (object) => Dict.keys(object);
|
|
8
|
-
export const getUnionGuard = (object) => {
|
|
9
|
-
const set = new Set(unionToArray(object));
|
|
10
|
-
return (value) => set.has(value);
|
|
11
|
-
};
|
|
12
7
|
export const deriveUnion = (object) => {
|
|
13
8
|
const array = Dict.keys(object);
|
|
14
9
|
const set = new Set(array);
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ReactText } from "react";
|
|
2
|
-
import { GestureResponderEvent, StyleProp, View, ViewStyle } from "react-native";
|
|
3
|
-
import { IconName } from "./Icon";
|
|
4
|
-
type Props = {
|
|
5
|
-
ariaLabel?: string;
|
|
6
|
-
children?: ReactText;
|
|
7
|
-
color?: string;
|
|
8
|
-
disabled?: boolean;
|
|
9
|
-
loading?: boolean;
|
|
10
|
-
icon?: IconName;
|
|
11
|
-
onPress?: (event: GestureResponderEvent) => void;
|
|
12
|
-
size?: "large" | "small";
|
|
13
|
-
style?: StyleProp<ViewStyle>;
|
|
14
|
-
};
|
|
15
|
-
export declare const BorderedButton: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<View>>>;
|
|
16
|
-
export {};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef, memo } from "react";
|
|
3
|
-
import { ActivityIndicator, Pressable, StyleSheet, Text, View, } from "react-native";
|
|
4
|
-
import { colors } from "../constants/colors";
|
|
5
|
-
import { typography } from "../constants/typography";
|
|
6
|
-
import { isNotNullish } from "../utils/nullish";
|
|
7
|
-
import { Icon } from "./Icon";
|
|
8
|
-
import { Space } from "./Space";
|
|
9
|
-
const styles = StyleSheet.create({
|
|
10
|
-
base: {
|
|
11
|
-
alignItems: "center",
|
|
12
|
-
backgroundColor: colors.white,
|
|
13
|
-
borderColor: colors.gray[10],
|
|
14
|
-
borderRadius: 4,
|
|
15
|
-
borderWidth: 1,
|
|
16
|
-
flexDirection: "row",
|
|
17
|
-
flexShrink: 1,
|
|
18
|
-
height: 48,
|
|
19
|
-
justifyContent: "center",
|
|
20
|
-
overflow: "hidden",
|
|
21
|
-
paddingLeft: 20,
|
|
22
|
-
paddingRight: 20,
|
|
23
|
-
transitionDuration: "150ms",
|
|
24
|
-
transitionProperty: "background-color",
|
|
25
|
-
},
|
|
26
|
-
small: {
|
|
27
|
-
height: 40,
|
|
28
|
-
paddingLeft: 16,
|
|
29
|
-
paddingRight: 16,
|
|
30
|
-
},
|
|
31
|
-
withIcon: {
|
|
32
|
-
paddingLeft: 18,
|
|
33
|
-
},
|
|
34
|
-
withIconSmall: {
|
|
35
|
-
paddingLeft: 14,
|
|
36
|
-
},
|
|
37
|
-
iconOnly: {
|
|
38
|
-
paddingLeft: 13,
|
|
39
|
-
paddingRight: 13,
|
|
40
|
-
},
|
|
41
|
-
iconOnlySmall: {
|
|
42
|
-
paddingLeft: 10,
|
|
43
|
-
paddingRight: 10,
|
|
44
|
-
},
|
|
45
|
-
hovered: {
|
|
46
|
-
backgroundColor: colors.gray[3],
|
|
47
|
-
},
|
|
48
|
-
pressed: {
|
|
49
|
-
backgroundColor: colors.gray[10],
|
|
50
|
-
},
|
|
51
|
-
disabled: {
|
|
52
|
-
backgroundColor: colors.gray[3],
|
|
53
|
-
borderColor: colors.gray[3],
|
|
54
|
-
cursor: "not-allowed",
|
|
55
|
-
},
|
|
56
|
-
text: {
|
|
57
|
-
...typography.bodyLarge,
|
|
58
|
-
fontWeight: typography.fontWeights.demi,
|
|
59
|
-
lineHeight: 48,
|
|
60
|
-
userSelect: "none",
|
|
61
|
-
},
|
|
62
|
-
textSmall: {
|
|
63
|
-
...typography.bodySmall,
|
|
64
|
-
fontWeight: typography.fontWeights.demi,
|
|
65
|
-
lineHeight: 40,
|
|
66
|
-
userSelect: "none",
|
|
67
|
-
},
|
|
68
|
-
textDisabled: {
|
|
69
|
-
color: colors.gray[50],
|
|
70
|
-
},
|
|
71
|
-
loaderContainer: {
|
|
72
|
-
...StyleSheet.absoluteFillObject,
|
|
73
|
-
alignItems: "center",
|
|
74
|
-
backgroundColor: colors.white,
|
|
75
|
-
justifyContent: "center",
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
export const BorderedButton = memo(forwardRef(({ ariaLabel, children = "", color = colors.gray[100], disabled = false, loading = false, icon, onPress, size = "large", style, }, forwardedRef) => {
|
|
79
|
-
const hasText = children !== "";
|
|
80
|
-
const isSmall = size === "small";
|
|
81
|
-
const iconSize = isSmall ? 18 : 20;
|
|
82
|
-
return (_jsxs(Pressable, { role: "button", "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": disabled, disabled: loading || disabled, ref: forwardedRef, onPress: onPress, style: ({ hovered, pressed }) => [
|
|
83
|
-
styles.base,
|
|
84
|
-
isSmall && styles.small,
|
|
85
|
-
isNotNullish(icon) && (isSmall ? styles.withIconSmall : styles.withIcon),
|
|
86
|
-
!hasText && (isSmall ? styles.iconOnlySmall : styles.iconOnly),
|
|
87
|
-
disabled
|
|
88
|
-
? styles.disabled
|
|
89
|
-
: pressed
|
|
90
|
-
? styles.pressed
|
|
91
|
-
: hovered
|
|
92
|
-
? styles.hovered
|
|
93
|
-
: false,
|
|
94
|
-
style,
|
|
95
|
-
], children: [icon && _jsx(Icon, { color: color, name: icon, size: iconSize }), hasText && isNotNullish(icon) && _jsx(Space, { width: isSmall ? 8 : 12 }), hasText && (_jsx(Text, { numberOfLines: 1, style: [
|
|
96
|
-
isSmall ? styles.textSmall : styles.text,
|
|
97
|
-
disabled ? styles.textDisabled : { color },
|
|
98
|
-
], children: children })), loading && (_jsx(View, { role: "none", style: styles.loaderContainer, children: _jsx(ActivityIndicator, { color: disabled ? colors.gray[50] : colors.gray[100], size: iconSize }) }))] }));
|
|
99
|
-
}));
|
|
100
|
-
BorderedButton.displayName = "BorderedButton";
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { ReactText } from "react";
|
|
2
|
-
import { Text, TextProps } from "react-native";
|
|
3
|
-
export declare const Caption: import("react").ForwardRefExoticComponent<TextProps & {
|
|
4
|
-
align?: "left" | "right" | "center" | undefined;
|
|
5
|
-
children: ReactText;
|
|
6
|
-
} & import("react").RefAttributes<Text>>;
|