@medway-ui/native 1.9.1 → 1.10.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/README.md +2 -2
- package/lib/commonjs/components/Alert.js +36 -25
- package/lib/commonjs/components/Alert.js.map +1 -1
- package/lib/commonjs/components/AlertDialog.js +22 -23
- package/lib/commonjs/components/AlertDialog.js.map +1 -1
- package/lib/commonjs/components/Avatar.js +4 -4
- package/lib/commonjs/components/Badge.js +22 -15
- package/lib/commonjs/components/Badge.js.map +1 -1
- package/lib/commonjs/components/Button.js +56 -42
- package/lib/commonjs/components/Button.js.map +1 -1
- package/lib/commonjs/components/CardNews.js +18 -13
- package/lib/commonjs/components/CardNews.js.map +1 -1
- package/lib/commonjs/components/Carousel.js +12 -8
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/Checkbox.js +5 -5
- package/lib/commonjs/components/Checkbox.js.map +1 -1
- package/lib/commonjs/components/Chip.js +52 -23
- package/lib/commonjs/components/Chip.js.map +1 -1
- package/lib/commonjs/components/Choice.js +26 -12
- package/lib/commonjs/components/Choice.js.map +1 -1
- package/lib/commonjs/components/Dialog.js +16 -8
- package/lib/commonjs/components/Dialog.js.map +1 -1
- package/lib/commonjs/components/DropdownMenu.js +35 -14
- package/lib/commonjs/components/DropdownMenu.js.map +1 -1
- package/lib/commonjs/components/EmptyState.js +5 -5
- package/lib/commonjs/components/EmptyState.js.map +1 -1
- package/lib/commonjs/components/FallbackImage.js +42 -35
- package/lib/commonjs/components/FallbackImage.js.map +1 -1
- package/lib/commonjs/components/Feed.js +6 -5
- package/lib/commonjs/components/Feed.js.map +1 -1
- package/lib/commonjs/components/FeedNotice.js +3 -3
- package/lib/commonjs/components/Feedback.js +2 -4
- package/lib/commonjs/components/Feedback.js.map +1 -1
- package/lib/commonjs/components/Filter.js +6 -9
- package/lib/commonjs/components/Filter.js.map +1 -1
- package/lib/commonjs/components/IndexLevel.js +4 -4
- package/lib/commonjs/components/Input.js +25 -20
- package/lib/commonjs/components/Input.js.map +1 -1
- package/lib/commonjs/components/InvitePopover.js +19 -8
- package/lib/commonjs/components/InvitePopover.js.map +1 -1
- package/lib/commonjs/components/Label.js +2 -2
- package/lib/commonjs/components/LeaderboardCard.js +3 -2
- package/lib/commonjs/components/LeaderboardCard.js.map +1 -1
- package/lib/commonjs/components/Loading.js +18 -15
- package/lib/commonjs/components/Loading.js.map +1 -1
- package/lib/commonjs/components/LoadingOverlay.js +36 -43
- package/lib/commonjs/components/LoadingOverlay.js.map +1 -1
- package/lib/commonjs/components/MemberRow.js +7 -6
- package/lib/commonjs/components/MemberRow.js.map +1 -1
- package/lib/commonjs/components/PageHeader.js +3 -2
- package/lib/commonjs/components/PageHeader.js.map +1 -1
- package/lib/commonjs/components/Popover.js +1 -1
- package/lib/commonjs/components/PostForm.js +38 -24
- package/lib/commonjs/components/PostForm.js.map +1 -1
- package/lib/commonjs/components/PrizeCollection.js +5 -5
- package/lib/commonjs/components/PrizeCollection.js.map +1 -1
- package/lib/commonjs/components/RadioGroup.js +65 -15
- package/lib/commonjs/components/RadioGroup.js.map +1 -1
- package/lib/commonjs/components/SectionHeader.js +3 -2
- package/lib/commonjs/components/SectionHeader.js.map +1 -1
- package/lib/commonjs/components/SegmentControl.js +4 -4
- package/lib/commonjs/components/Select.js +7 -6
- package/lib/commonjs/components/Select.js.map +1 -1
- package/lib/commonjs/components/Separator.js +2 -2
- package/lib/commonjs/components/Separator.js.map +1 -1
- package/lib/commonjs/components/Sheet.js +17 -11
- package/lib/commonjs/components/Sheet.js.map +1 -1
- package/lib/commonjs/components/Skeleton.js +2 -2
- package/lib/commonjs/components/Skeleton.js.map +1 -1
- package/lib/commonjs/components/Switch.js +3 -3
- package/lib/commonjs/components/Tabs.js +3 -2
- package/lib/commonjs/components/Tabs.js.map +1 -1
- package/lib/commonjs/components/Tag.js +52 -32
- package/lib/commonjs/components/Tag.js.map +1 -1
- package/lib/commonjs/components/Text.js +1 -1
- package/lib/commonjs/components/ThemedIcon.js +1 -1
- package/lib/commonjs/components/Toast.js +12 -12
- package/lib/commonjs/components/Toast.js.map +1 -1
- package/lib/commonjs/components/Tooltip.js +2 -2
- package/lib/commonjs/editor/NoteEditor.js +190 -67
- package/lib/commonjs/editor/NoteEditor.js.map +1 -1
- package/lib/commonjs/editor/editorHtml.generated.js +1 -1
- package/lib/commonjs/editor/editorHtml.generated.js.map +1 -1
- package/lib/commonjs/editor/index.js.map +1 -1
- package/lib/commonjs/editor/protocol.js +1 -2
- package/lib/commonjs/editor/protocol.js.map +1 -1
- package/lib/commonjs/hooks/useThemeColor.js +41 -19
- package/lib/commonjs/hooks/useThemeColor.js.map +1 -1
- package/lib/commonjs/index.js +46 -46
- package/lib/commonjs/lib/backdrop.js +18 -0
- package/lib/commonjs/lib/backdrop.js.map +1 -0
- package/lib/commonjs/lib/overlay-host.js +5 -3
- package/lib/commonjs/lib/overlay-host.js.map +1 -1
- package/lib/commonjs/lib/raised-surface.js +1 -1
- package/lib/module/components/Alert.js +36 -25
- package/lib/module/components/Alert.js.map +1 -1
- package/lib/module/components/AlertDialog.js +21 -22
- package/lib/module/components/AlertDialog.js.map +1 -1
- package/lib/module/components/Avatar.js +4 -4
- package/lib/module/components/Badge.js +22 -15
- package/lib/module/components/Badge.js.map +1 -1
- package/lib/module/components/Button.js +56 -42
- package/lib/module/components/Button.js.map +1 -1
- package/lib/module/components/CardNews.js +18 -13
- package/lib/module/components/CardNews.js.map +1 -1
- package/lib/module/components/Carousel.js +12 -8
- package/lib/module/components/Carousel.js.map +1 -1
- package/lib/module/components/Checkbox.js +5 -5
- package/lib/module/components/Checkbox.js.map +1 -1
- package/lib/module/components/Chip.js +52 -23
- package/lib/module/components/Chip.js.map +1 -1
- package/lib/module/components/Choice.js +26 -12
- package/lib/module/components/Choice.js.map +1 -1
- package/lib/module/components/Dialog.js +16 -8
- package/lib/module/components/Dialog.js.map +1 -1
- package/lib/module/components/DropdownMenu.js +36 -15
- package/lib/module/components/DropdownMenu.js.map +1 -1
- package/lib/module/components/EmptyState.js +5 -5
- package/lib/module/components/EmptyState.js.map +1 -1
- package/lib/module/components/FallbackImage.js +42 -35
- package/lib/module/components/FallbackImage.js.map +1 -1
- package/lib/module/components/Feed.js +6 -5
- package/lib/module/components/Feed.js.map +1 -1
- package/lib/module/components/FeedNotice.js +3 -3
- package/lib/module/components/Feedback.js +2 -4
- package/lib/module/components/Feedback.js.map +1 -1
- package/lib/module/components/Filter.js +6 -9
- package/lib/module/components/Filter.js.map +1 -1
- package/lib/module/components/IndexLevel.js +4 -4
- package/lib/module/components/Input.js +24 -18
- package/lib/module/components/Input.js.map +1 -1
- package/lib/module/components/InvitePopover.js +20 -9
- package/lib/module/components/InvitePopover.js.map +1 -1
- package/lib/module/components/Label.js +2 -2
- package/lib/module/components/LeaderboardCard.js +3 -2
- package/lib/module/components/LeaderboardCard.js.map +1 -1
- package/lib/module/components/Loading.js +18 -15
- package/lib/module/components/Loading.js.map +1 -1
- package/lib/module/components/LoadingOverlay.js +37 -44
- package/lib/module/components/LoadingOverlay.js.map +1 -1
- package/lib/module/components/MemberRow.js +7 -6
- package/lib/module/components/MemberRow.js.map +1 -1
- package/lib/module/components/PageHeader.js +3 -2
- package/lib/module/components/PageHeader.js.map +1 -1
- package/lib/module/components/Popover.js +1 -1
- package/lib/module/components/PostForm.js +38 -24
- package/lib/module/components/PostForm.js.map +1 -1
- package/lib/module/components/PrizeCollection.js +5 -5
- package/lib/module/components/PrizeCollection.js.map +1 -1
- package/lib/module/components/RadioGroup.js +65 -15
- package/lib/module/components/RadioGroup.js.map +1 -1
- package/lib/module/components/SectionHeader.js +3 -2
- package/lib/module/components/SectionHeader.js.map +1 -1
- package/lib/module/components/SegmentControl.js +4 -4
- package/lib/module/components/Select.js +6 -5
- package/lib/module/components/Select.js.map +1 -1
- package/lib/module/components/Separator.js +2 -2
- package/lib/module/components/Separator.js.map +1 -1
- package/lib/module/components/Sheet.js +17 -11
- package/lib/module/components/Sheet.js.map +1 -1
- package/lib/module/components/Skeleton.js +2 -2
- package/lib/module/components/Skeleton.js.map +1 -1
- package/lib/module/components/Switch.js +3 -3
- package/lib/module/components/Tabs.js +3 -2
- package/lib/module/components/Tabs.js.map +1 -1
- package/lib/module/components/Tag.js +52 -32
- package/lib/module/components/Tag.js.map +1 -1
- package/lib/module/components/Text.js +1 -1
- package/lib/module/components/ThemedIcon.js +1 -1
- package/lib/module/components/Toast.js +12 -12
- package/lib/module/components/Toast.js.map +1 -1
- package/lib/module/components/Tooltip.js +2 -2
- package/lib/module/editor/NoteEditor.js +193 -69
- package/lib/module/editor/NoteEditor.js.map +1 -1
- package/lib/module/editor/editorHtml.generated.js +1 -1
- package/lib/module/editor/editorHtml.generated.js.map +1 -1
- package/lib/module/editor/index.js.map +1 -1
- package/lib/module/editor/protocol.js +1 -2
- package/lib/module/editor/protocol.js.map +1 -1
- package/lib/module/hooks/useThemeColor.js +41 -19
- package/lib/module/hooks/useThemeColor.js.map +1 -1
- package/lib/module/index.js +46 -46
- package/lib/module/lib/backdrop.js +15 -0
- package/lib/module/lib/backdrop.js.map +1 -0
- package/lib/module/lib/overlay-host.js +6 -4
- package/lib/module/lib/overlay-host.js.map +1 -1
- package/lib/module/lib/raised-surface.js +1 -1
- package/lib/typescript/components/Alert.d.ts +1 -1
- package/lib/typescript/components/Alert.d.ts.map +1 -1
- package/lib/typescript/components/AlertDialog.d.ts +1 -1
- package/lib/typescript/components/AlertDialog.d.ts.map +1 -1
- package/lib/typescript/components/Badge.d.ts.map +1 -1
- package/lib/typescript/components/Button.d.ts +1 -0
- package/lib/typescript/components/Button.d.ts.map +1 -1
- package/lib/typescript/components/CardNews.d.ts +7 -2
- package/lib/typescript/components/CardNews.d.ts.map +1 -1
- package/lib/typescript/components/Checkbox.d.ts +3 -1
- package/lib/typescript/components/Checkbox.d.ts.map +1 -1
- package/lib/typescript/components/Chip.d.ts.map +1 -1
- package/lib/typescript/components/Choice.d.ts +4 -1
- package/lib/typescript/components/Choice.d.ts.map +1 -1
- package/lib/typescript/components/Dialog.d.ts +2 -1
- package/lib/typescript/components/Dialog.d.ts.map +1 -1
- package/lib/typescript/components/DropdownMenu.d.ts +3 -2
- package/lib/typescript/components/DropdownMenu.d.ts.map +1 -1
- package/lib/typescript/components/FallbackImage.d.ts.map +1 -1
- package/lib/typescript/components/Feed.d.ts.map +1 -1
- package/lib/typescript/components/Feedback.d.ts.map +1 -1
- package/lib/typescript/components/Filter.d.ts.map +1 -1
- package/lib/typescript/components/IndexLevel.d.ts +1 -1
- package/lib/typescript/components/Input.d.ts +5 -5
- package/lib/typescript/components/Input.d.ts.map +1 -1
- package/lib/typescript/components/InvitePopover.d.ts +1 -1
- package/lib/typescript/components/InvitePopover.d.ts.map +1 -1
- package/lib/typescript/components/LeaderboardCard.d.ts.map +1 -1
- package/lib/typescript/components/Loading.d.ts +1 -1
- package/lib/typescript/components/Loading.d.ts.map +1 -1
- package/lib/typescript/components/LoadingOverlay.d.ts +9 -9
- package/lib/typescript/components/LoadingOverlay.d.ts.map +1 -1
- package/lib/typescript/components/PageHeader.d.ts.map +1 -1
- package/lib/typescript/components/PostForm.d.ts.map +1 -1
- package/lib/typescript/components/RadioGroup.d.ts +4 -2
- package/lib/typescript/components/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/components/SectionHeader.d.ts.map +1 -1
- package/lib/typescript/components/SegmentControl.d.ts +1 -1
- package/lib/typescript/components/Select.d.ts +2 -1
- package/lib/typescript/components/Select.d.ts.map +1 -1
- package/lib/typescript/components/Separator.d.ts.map +1 -1
- package/lib/typescript/components/Sheet.d.ts +2 -1
- package/lib/typescript/components/Sheet.d.ts.map +1 -1
- package/lib/typescript/components/Tabs.d.ts +4 -3
- package/lib/typescript/components/Tabs.d.ts.map +1 -1
- package/lib/typescript/components/Tag.d.ts +3 -1
- package/lib/typescript/components/Tag.d.ts.map +1 -1
- package/lib/typescript/components/ThemedIcon.d.ts +1 -1
- package/lib/typescript/components/Toast.d.ts +1 -1
- package/lib/typescript/components/Toast.d.ts.map +1 -1
- package/lib/typescript/editor/NoteEditor.d.ts +28 -8
- package/lib/typescript/editor/NoteEditor.d.ts.map +1 -1
- package/lib/typescript/editor/editorHtml.generated.d.ts.map +1 -1
- package/lib/typescript/editor/index.d.ts +1 -1
- package/lib/typescript/editor/index.d.ts.map +1 -1
- package/lib/typescript/editor/protocol.d.ts +4 -14
- package/lib/typescript/editor/protocol.d.ts.map +1 -1
- package/lib/typescript/hooks/use-toast.d.ts +1 -1
- package/lib/typescript/hooks/useThemeColor.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +91 -91
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/lib/backdrop.d.ts +4 -0
- package/lib/typescript/lib/backdrop.d.ts.map +1 -0
- package/lib/typescript/lib/overlay-host.d.ts +1 -0
- package/lib/typescript/lib/overlay-host.d.ts.map +1 -1
- package/package.json +9 -14
- package/setup/metro.js +26 -73
- package/setup/tailwind.js +16 -8
- package/setup/tokens.native.css +51 -20
- package/src/components/Alert.tsx +37 -20
- package/src/components/AlertDialog.tsx +18 -19
- package/src/components/Badge.tsx +16 -15
- package/src/components/Button.tsx +64 -31
- package/src/components/CardNews.tsx +17 -6
- package/src/components/Carousel.tsx +5 -5
- package/src/components/Checkbox.tsx +17 -7
- package/src/components/Chip.tsx +49 -21
- package/src/components/Choice.tsx +34 -14
- package/src/components/Dialog.tsx +15 -5
- package/src/components/DropdownMenu.tsx +62 -14
- package/src/components/EmptyState.tsx +3 -3
- package/src/components/FallbackImage.tsx +32 -23
- package/src/components/Feed.tsx +2 -1
- package/src/components/Feedback.tsx +0 -1
- package/src/components/Filter.tsx +2 -3
- package/src/components/Input.tsx +83 -64
- package/src/components/InvitePopover.tsx +11 -3
- package/src/components/LeaderboardCard.tsx +4 -1
- package/src/components/Loading.tsx +17 -14
- package/src/components/LoadingOverlay.tsx +33 -50
- package/src/components/MemberRow.tsx +3 -3
- package/src/components/PageHeader.tsx +4 -1
- package/src/components/PostForm.tsx +28 -16
- package/src/components/PrizeCollection.tsx +3 -3
- package/src/components/RadioGroup.tsx +69 -12
- package/src/components/SectionHeader.tsx +4 -1
- package/src/components/Select.tsx +4 -3
- package/src/components/Separator.tsx +2 -2
- package/src/components/Sheet.tsx +15 -8
- package/src/components/Skeleton.tsx +1 -1
- package/src/components/Tabs.tsx +5 -4
- package/src/components/Tag.tsx +56 -35
- package/src/components/Toast.tsx +10 -6
- package/src/editor/NoteEditor.tsx +246 -72
- package/src/editor/editorHtml.generated.ts +1 -1
- package/src/editor/index.ts +8 -4
- package/src/editor/protocol.ts +4 -12
- package/src/hooks/useThemeColor.ts +41 -19
- package/src/index.ts +1 -1
- package/src/lib/backdrop.ts +16 -0
- package/src/lib/overlay-host.tsx +5 -5
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { View } from "react-native";
|
|
1
2
|
import Svg, {
|
|
2
3
|
Defs,
|
|
3
4
|
RadialGradient,
|
|
@@ -20,37 +21,45 @@ interface FallbackImageProps extends SvgProps {
|
|
|
20
21
|
className?: string;
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
// react-native-svg isn't registered with NativeWind, so the classes go on a View and the Svg fills it.
|
|
23
25
|
function FallbackImage({
|
|
24
26
|
className,
|
|
25
27
|
label = "Medway",
|
|
26
28
|
...props
|
|
27
29
|
}: FallbackImageProps) {
|
|
30
|
+
const isDecorative = label === "";
|
|
31
|
+
|
|
28
32
|
return (
|
|
29
|
-
<
|
|
30
|
-
accessibilityRole="image"
|
|
31
|
-
accessibilityLabel={label}
|
|
32
|
-
viewBox="0 0 320 167"
|
|
33
|
-
preserveAspectRatio="xMidYMid slice"
|
|
33
|
+
<View
|
|
34
34
|
className={cn("size-full", className)}
|
|
35
|
-
{
|
|
35
|
+
accessibilityElementsHidden={isDecorative}
|
|
36
|
+
importantForAccessibility={isDecorative ? "no-hide-descendants" : "auto"}
|
|
36
37
|
>
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
<Svg
|
|
39
|
+
accessibilityRole="image"
|
|
40
|
+
accessibilityLabel={label}
|
|
41
|
+
viewBox="0 0 320 167"
|
|
42
|
+
preserveAspectRatio="xMidYMid slice"
|
|
43
|
+
{...props}
|
|
44
|
+
>
|
|
45
|
+
<Defs>
|
|
46
|
+
<RadialGradient
|
|
47
|
+
id={GRADIENT_ID}
|
|
48
|
+
cx="50%"
|
|
49
|
+
cy="42%"
|
|
50
|
+
r="78%"
|
|
51
|
+
>
|
|
52
|
+
<Stop offset="0%" stopColor="#15397A" />
|
|
53
|
+
<Stop offset="55%" stopColor="#06245E" />
|
|
54
|
+
<Stop offset="100%" stopColor="#021536" />
|
|
55
|
+
</RadialGradient>
|
|
56
|
+
</Defs>
|
|
57
|
+
<Rect width="320" height="167" fill={`url(#${GRADIENT_ID})`} />
|
|
58
|
+
<G transform="translate(85.5 62.7) scale(1.38)" fill="#FFFFFF">
|
|
59
|
+
<Path d={LOGO_PATH} />
|
|
60
|
+
</G>
|
|
61
|
+
</Svg>
|
|
62
|
+
</View>
|
|
54
63
|
);
|
|
55
64
|
}
|
|
56
65
|
|
package/src/components/Feed.tsx
CHANGED
|
@@ -5,6 +5,7 @@ import { Text } from "@/components/Text";
|
|
|
5
5
|
|
|
6
6
|
import { InputText, inputVariants } from "@/components/Input";
|
|
7
7
|
import { useTrackedText } from "@/hooks/useTrackedText";
|
|
8
|
+
import { fontFamilyMedium } from "@/lib/typography";
|
|
8
9
|
import { cn } from "@/lib/utils";
|
|
9
10
|
|
|
10
11
|
interface FeedProps extends ViewProps {
|
|
@@ -83,7 +84,7 @@ function FeedComposer({
|
|
|
83
84
|
)}
|
|
84
85
|
accessibilityLabel={placeholder}
|
|
85
86
|
{...props}
|
|
86
|
-
style={[{ fontFamily:
|
|
87
|
+
style={[{ fontFamily: fontFamilyMedium }, props.style]}
|
|
87
88
|
/>
|
|
88
89
|
</View>
|
|
89
90
|
<InputText className="text-right text-xs font-medium text-gray-foreground">
|
|
@@ -78,7 +78,6 @@ function Feedback({
|
|
|
78
78
|
|
|
79
79
|
const shouldRenderIcon = showIcon && !!icon;
|
|
80
80
|
|
|
81
|
-
// Aplica o tamanho do size ao ícone, sem sobrescrever width/height explícitos.
|
|
82
81
|
const sizedIcon = isValidElement<{ width?: number; height?: number }>(icon)
|
|
83
82
|
? cloneElement(icon, {
|
|
84
83
|
width: icon.props.width ?? sz.iconSize,
|
|
@@ -27,7 +27,7 @@ const SIZE_MAP: Record<
|
|
|
27
27
|
> = {
|
|
28
28
|
sm: { container: "gap-2 px-3 py-2", text: "text-xs", icon: 16 },
|
|
29
29
|
md: { container: "gap-2.5 px-3.5 py-2.5", text: "text-sm", icon: 20 },
|
|
30
|
-
lg: { container: "gap-3 px-4 py-3", text: "text-
|
|
30
|
+
lg: { container: "gap-3 px-4 py-3", text: "text-md", icon: 24 },
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
const SHADOW_STYLE = {
|
|
@@ -75,8 +75,7 @@ function Filter({
|
|
|
75
75
|
disabled={disabled}
|
|
76
76
|
accessibilityRole="button"
|
|
77
77
|
accessibilityState={{ selected, disabled }}
|
|
78
|
-
className={cn("rounded-md", outerBg, className)}
|
|
79
|
-
style={{ padding: 2 }}
|
|
78
|
+
className={cn("rounded-md p-0.5", outerBg, className)}
|
|
80
79
|
>
|
|
81
80
|
<View
|
|
82
81
|
className={cn(
|
package/src/components/Input.tsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
forwardRef,
|
|
2
3
|
useState,
|
|
3
4
|
useCallback,
|
|
4
5
|
useEffect,
|
|
@@ -315,18 +316,21 @@ function useInputFocus(onFocus?: FocusHandler, onBlur?: BlurHandler) {
|
|
|
315
316
|
return { focused, handleFocus, handleBlur };
|
|
316
317
|
}
|
|
317
318
|
|
|
318
|
-
function InputPassword(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
319
|
+
const InputPassword = forwardRef<TextInput, InputPasswordProps>(function InputPassword(
|
|
320
|
+
{
|
|
321
|
+
className,
|
|
322
|
+
size = "lg",
|
|
323
|
+
invalid = false,
|
|
324
|
+
label,
|
|
325
|
+
value,
|
|
326
|
+
defaultValue,
|
|
327
|
+
onFocus,
|
|
328
|
+
onBlur,
|
|
329
|
+
onChangeText,
|
|
330
|
+
...props
|
|
331
|
+
}: InputPasswordProps,
|
|
332
|
+
ref
|
|
333
|
+
) {
|
|
330
334
|
const [visible, setVisible] = useState(false);
|
|
331
335
|
const { focused, handleFocus, handleBlur } = useInputFocus(onFocus, onBlur);
|
|
332
336
|
const { text, handleChangeText } = useTrackedText(value, defaultValue, onChangeText);
|
|
@@ -360,6 +364,7 @@ function InputPassword({
|
|
|
360
364
|
</InputLabel>
|
|
361
365
|
)}
|
|
362
366
|
<TextInput
|
|
367
|
+
ref={ref}
|
|
363
368
|
secureTextEntry={!visible}
|
|
364
369
|
className={cn(
|
|
365
370
|
inputVariants({ size, invalid, focused, disabled: props.editable === false }),
|
|
@@ -395,24 +400,27 @@ function InputPassword({
|
|
|
395
400
|
</InputEndIcon>
|
|
396
401
|
</InputAdornment>
|
|
397
402
|
);
|
|
398
|
-
}
|
|
403
|
+
});
|
|
399
404
|
|
|
400
|
-
function InputNumeric(
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
405
|
+
const InputNumeric = forwardRef<TextInput, InputNumericProps>(function InputNumeric(
|
|
406
|
+
{
|
|
407
|
+
className,
|
|
408
|
+
size = "lg",
|
|
409
|
+
invalid = false,
|
|
410
|
+
iconLeft,
|
|
411
|
+
min,
|
|
412
|
+
value,
|
|
413
|
+
defaultValue,
|
|
414
|
+
onChangeText,
|
|
415
|
+
editable = true,
|
|
416
|
+
allowNegative = false,
|
|
417
|
+
label,
|
|
418
|
+
onFocus,
|
|
419
|
+
onBlur,
|
|
420
|
+
...props
|
|
421
|
+
}: InputNumericProps,
|
|
422
|
+
ref
|
|
423
|
+
) {
|
|
416
424
|
const [internalValue, setInternalValue] = useState(String(defaultValue ?? ""));
|
|
417
425
|
const isControlled = value !== undefined;
|
|
418
426
|
const displayValue = isControlled ? String(value ?? "") : internalValue;
|
|
@@ -456,6 +464,7 @@ function InputNumeric({
|
|
|
456
464
|
</InputLabel>
|
|
457
465
|
)}
|
|
458
466
|
<TextInput
|
|
467
|
+
ref={ref}
|
|
459
468
|
keyboardType={allowNegative ? "numbers-and-punctuation" : "numeric"}
|
|
460
469
|
value={displayValue}
|
|
461
470
|
onChangeText={(text) => {
|
|
@@ -517,24 +526,27 @@ function InputNumeric({
|
|
|
517
526
|
</InputEndIcon>
|
|
518
527
|
</InputAdornment>
|
|
519
528
|
);
|
|
520
|
-
}
|
|
529
|
+
});
|
|
521
530
|
|
|
522
|
-
function InputTextual(
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
531
|
+
const InputTextual = forwardRef<TextInput, InputProps>(function InputTextual(
|
|
532
|
+
{
|
|
533
|
+
className,
|
|
534
|
+
type = "text",
|
|
535
|
+
size = "lg",
|
|
536
|
+
invalid = false,
|
|
537
|
+
iconLeft,
|
|
538
|
+
iconRight,
|
|
539
|
+
label,
|
|
540
|
+
value,
|
|
541
|
+
defaultValue,
|
|
542
|
+
editable = true,
|
|
543
|
+
onFocus,
|
|
544
|
+
onBlur,
|
|
545
|
+
onChangeText,
|
|
546
|
+
...props
|
|
547
|
+
}: InputProps,
|
|
548
|
+
ref
|
|
549
|
+
) {
|
|
538
550
|
const { focused, handleFocus, handleBlur } = useInputFocus(onFocus, onBlur);
|
|
539
551
|
const { text, handleChangeText } = useTrackedText(value, defaultValue, onChangeText);
|
|
540
552
|
const isFloated = focused || text !== "";
|
|
@@ -580,6 +592,7 @@ function InputTextual({
|
|
|
580
592
|
</InputLabel>
|
|
581
593
|
)}
|
|
582
594
|
<TextInput
|
|
595
|
+
ref={ref}
|
|
583
596
|
keyboardType={type === "email" ? "email-address" : "default"}
|
|
584
597
|
value={value}
|
|
585
598
|
defaultValue={defaultValue}
|
|
@@ -608,27 +621,31 @@ function InputTextual({
|
|
|
608
621
|
)}
|
|
609
622
|
</InputAdornment>
|
|
610
623
|
);
|
|
611
|
-
}
|
|
624
|
+
});
|
|
612
625
|
|
|
613
|
-
function Input(
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
626
|
+
const Input = forwardRef<TextInput, InputProps>(function Input(
|
|
627
|
+
{
|
|
628
|
+
className,
|
|
629
|
+
type = "text",
|
|
630
|
+
size = "lg",
|
|
631
|
+
invalid = false,
|
|
632
|
+
iconLeft,
|
|
633
|
+
iconRight,
|
|
634
|
+
label,
|
|
635
|
+
value,
|
|
636
|
+
defaultValue,
|
|
637
|
+
editable = true,
|
|
638
|
+
onFocus,
|
|
639
|
+
onBlur,
|
|
640
|
+
onChangeText,
|
|
641
|
+
...props
|
|
642
|
+
}: InputProps,
|
|
643
|
+
ref
|
|
644
|
+
) {
|
|
629
645
|
if (type === "numeric") {
|
|
630
646
|
return (
|
|
631
647
|
<InputNumeric
|
|
648
|
+
ref={ref}
|
|
632
649
|
className={className}
|
|
633
650
|
size={size}
|
|
634
651
|
invalid={invalid}
|
|
@@ -648,6 +665,7 @@ function Input({
|
|
|
648
665
|
if (type === "password") {
|
|
649
666
|
return (
|
|
650
667
|
<InputPassword
|
|
668
|
+
ref={ref}
|
|
651
669
|
className={className}
|
|
652
670
|
size={size}
|
|
653
671
|
invalid={invalid}
|
|
@@ -665,6 +683,7 @@ function Input({
|
|
|
665
683
|
|
|
666
684
|
return (
|
|
667
685
|
<InputTextual
|
|
686
|
+
ref={ref}
|
|
668
687
|
className={className}
|
|
669
688
|
type={type}
|
|
670
689
|
size={size}
|
|
@@ -681,7 +700,7 @@ function Input({
|
|
|
681
700
|
{...props}
|
|
682
701
|
/>
|
|
683
702
|
);
|
|
684
|
-
}
|
|
703
|
+
});
|
|
685
704
|
|
|
686
705
|
export {
|
|
687
706
|
Input,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
|
-
import { View, type ViewProps } from "react-native";
|
|
2
|
+
import { StyleSheet, View, useWindowDimensions, type ViewProps } from "react-native";
|
|
3
3
|
|
|
4
4
|
import { Text } from "@/components/Text";
|
|
5
5
|
import * as PopoverPrimitive from "@rn-primitives/popover";
|
|
@@ -62,13 +62,20 @@ function InvitePopoverTrigger({
|
|
|
62
62
|
);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
const CONTENT_MAX_WIDTH = 370;
|
|
66
|
+
const CONTENT_WINDOW_GUTTER = 32;
|
|
67
|
+
|
|
65
68
|
function InvitePopoverContent({
|
|
66
69
|
className,
|
|
67
70
|
align = "end",
|
|
68
71
|
sideOffset = 8,
|
|
72
|
+
style,
|
|
69
73
|
children,
|
|
70
74
|
...props
|
|
71
75
|
}: InvitePopoverContentProps) {
|
|
76
|
+
const { width: windowWidth } = useWindowDimensions();
|
|
77
|
+
const contentWidth = Math.min(CONTENT_MAX_WIDTH, windowWidth - CONTENT_WINDOW_GUTTER);
|
|
78
|
+
|
|
72
79
|
return (
|
|
73
80
|
<PopoverPrimitive.Portal>
|
|
74
81
|
<PopoverPrimitive.Overlay className="absolute inset-0" />
|
|
@@ -76,9 +83,10 @@ function InvitePopoverContent({
|
|
|
76
83
|
align={align}
|
|
77
84
|
sideOffset={sideOffset}
|
|
78
85
|
className={cn(
|
|
79
|
-
"z-50
|
|
86
|
+
"z-50 border-0 bg-transparent p-0 shadow-none",
|
|
80
87
|
className
|
|
81
88
|
)}
|
|
89
|
+
style={{ ...StyleSheet.flatten(style), width: contentWidth }}
|
|
82
90
|
{...props}
|
|
83
91
|
>
|
|
84
92
|
{children}
|
|
@@ -111,7 +119,7 @@ function InvitePopoverCard({ className, children, ...props }: ViewProps) {
|
|
|
111
119
|
return (
|
|
112
120
|
<View
|
|
113
121
|
className={cn(
|
|
114
|
-
"gap-6 rounded-lg border border-gray-stroke-muted bg-
|
|
122
|
+
"gap-6 rounded-lg border border-gray-stroke-muted bg-surface-elevated p-4",
|
|
115
123
|
className
|
|
116
124
|
)}
|
|
117
125
|
{...props}
|
|
@@ -47,7 +47,10 @@ function LeaderboardCardHeader({
|
|
|
47
47
|
</View>
|
|
48
48
|
) : null}
|
|
49
49
|
<View className="min-w-0 flex-1 flex-row items-center justify-between gap-2">
|
|
50
|
-
<Text
|
|
50
|
+
<Text
|
|
51
|
+
accessibilityRole="header"
|
|
52
|
+
className="text-lg font-semibold text-primary-foreground"
|
|
53
|
+
>
|
|
51
54
|
{title}
|
|
52
55
|
</Text>
|
|
53
56
|
{typeof badge === "string" ? (
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
|
+
import { View } from "react-native";
|
|
2
3
|
import Svg, { Path } from "react-native-svg";
|
|
3
4
|
import Animated, {
|
|
4
5
|
useSharedValue,
|
|
@@ -44,20 +45,22 @@ function Loading({
|
|
|
44
45
|
}));
|
|
45
46
|
|
|
46
47
|
return (
|
|
47
|
-
<
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
<View className={cn(className)}>
|
|
49
|
+
<Animated.View style={animatedStyle}>
|
|
50
|
+
<Svg
|
|
51
|
+
width={size}
|
|
52
|
+
height={size}
|
|
53
|
+
viewBox="0 0 24 24"
|
|
54
|
+
fill="none"
|
|
55
|
+
stroke={stroke}
|
|
56
|
+
strokeWidth={2}
|
|
57
|
+
strokeLinecap="round"
|
|
58
|
+
strokeLinejoin="round"
|
|
59
|
+
>
|
|
60
|
+
<Path d="M21 12a9 9 0 1 1-6.219-8.56" />
|
|
61
|
+
</Svg>
|
|
62
|
+
</Animated.View>
|
|
63
|
+
</View>
|
|
61
64
|
);
|
|
62
65
|
}
|
|
63
66
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect, type ReactNode } from "react";
|
|
2
2
|
import { Modal, View, type ModalProps, type ViewProps } from "react-native";
|
|
3
|
-
import Svg, { Circle } from "react-native-svg";
|
|
3
|
+
import Svg, { Circle, Path } from "react-native-svg";
|
|
4
4
|
import Animated, {
|
|
5
5
|
cancelAnimation,
|
|
6
6
|
Easing,
|
|
@@ -16,20 +16,20 @@ import { useThemeColor, type ThemeColorToken } from "@/hooks/useThemeColor";
|
|
|
16
16
|
import { cn } from "@/lib/utils";
|
|
17
17
|
|
|
18
18
|
interface LoadingOverlaySpinnerProps {
|
|
19
|
-
/** Icon rendered at the center of the ring
|
|
19
|
+
/** Icon rendered at the center of the ring. Defaults to the Medway "m"; pass `null` to show only the ring. */
|
|
20
20
|
icon?: ReactNode;
|
|
21
21
|
/** Ring diameter in px. Defaults to 72. */
|
|
22
22
|
size?: number;
|
|
23
|
-
/** Ring stroke width in px. Defaults to 2. */
|
|
23
|
+
/** Ring stroke width in px. Defaults to 2.16. */
|
|
24
24
|
trackWidth?: number;
|
|
25
|
-
/** Theme token for the spinning arc. Defaults to `gray-stroke
|
|
25
|
+
/** Theme token for the spinning arc. Defaults to `gray-stroke`. */
|
|
26
26
|
colorToken?: ThemeColorToken;
|
|
27
27
|
/** Explicit arc color. Takes precedence over `colorToken`. */
|
|
28
28
|
color?: string;
|
|
29
|
-
/**
|
|
30
|
-
trackColorToken?: ThemeColorToken;
|
|
31
|
-
/** Pulses the center icon opacity. Defaults to true. */
|
|
29
|
+
/** Pulses the center icon opacity from 20% to 100% every 400ms. Defaults to true. */
|
|
32
30
|
pulse?: boolean;
|
|
31
|
+
/** @deprecated No effect: the ring has no track, as in Figma. Removed in the next major. */
|
|
32
|
+
trackColorToken?: ThemeColorToken;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
interface LoadingOverlayCardProps
|
|
@@ -60,39 +60,31 @@ interface LoadingOverlayProps extends LoadingOverlayCardProps {
|
|
|
60
60
|
modalProps?: Omit<ModalProps, "visible" | "onRequestClose" | "children">;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
strokeWidth: number;
|
|
73
|
-
colorToken: ThemeColorToken;
|
|
74
|
-
}) {
|
|
75
|
-
const color = useThemeColor(colorToken);
|
|
63
|
+
const SPIN_DURATION_MS = 1600;
|
|
64
|
+
const PULSE_TIMING = { duration: 400, easing: Easing.linear };
|
|
65
|
+
const PULSE_MIN_OPACITY = 0.2;
|
|
66
|
+
const LOGO_SHORT_GLYPH_VIEWBOX = "0 10.4159 59.65 41.85";
|
|
67
|
+
const LOGO_SHORT_GLYPH_PATH =
|
|
68
|
+
"M42.33 10.8959C37.32 10.8959 32.8 12.8259 29.64 15.8959C26.55 12.5459 21.96 10.4159 16.83 10.4159C8.54 10.4159 1.65 15.9859 0.25 23.3059C0.09 24.1959 0 25.1159 0 26.0459V50.4759C0 51.4659 0.8 52.2659 1.79 52.2659H9.76C10.75 52.2659 11.55 51.4659 11.55 50.4759V28.8559C11.55 25.8359 13.98 22.8859 16.97 22.4959C19.03 22.2259 20.91 22.9659 22.22 24.2759C23.35 25.4059 24.05 26.9659 24.05 28.6959V50.4759C24.05 51.4659 24.85 52.2659 25.84 52.2659H33.81C34.8 52.2659 35.6 51.4659 35.6 50.4759V28.8559C35.6 25.8359 38.03 22.8859 41.02 22.4959C43.08 22.2259 44.96 22.9659 46.27 24.2759C47.4 25.4059 48.1 26.9659 48.1 28.6959V50.4759C48.1 51.4659 48.9 52.2659 49.89 52.2659H57.86C58.85 52.2659 59.65 51.4659 59.65 50.4759V26.5259C59.65 25.0959 59.44 23.7159 59.04 22.3959C57.03 15.7659 50.31 10.8959 42.33 10.8959Z";
|
|
69
|
+
|
|
70
|
+
function LoadingOverlayMark() {
|
|
71
|
+
const color = useThemeColor("secondary-stroke-emphasis");
|
|
76
72
|
|
|
77
73
|
return (
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
r={radius}
|
|
82
|
-
stroke={color}
|
|
83
|
-
strokeWidth={strokeWidth}
|
|
84
|
-
fill="none"
|
|
85
|
-
/>
|
|
74
|
+
<Svg width={20} height={14} viewBox={LOGO_SHORT_GLYPH_VIEWBOX}>
|
|
75
|
+
<Path d={LOGO_SHORT_GLYPH_PATH} fill={color} />
|
|
76
|
+
</Svg>
|
|
86
77
|
);
|
|
87
78
|
}
|
|
88
79
|
|
|
80
|
+
const DEFAULT_ICON = <LoadingOverlayMark />;
|
|
81
|
+
|
|
89
82
|
function LoadingOverlaySpinner({
|
|
90
|
-
icon,
|
|
83
|
+
icon = DEFAULT_ICON,
|
|
91
84
|
size = 72,
|
|
92
|
-
trackWidth = 2,
|
|
93
|
-
colorToken = "gray-stroke
|
|
85
|
+
trackWidth = 2.16,
|
|
86
|
+
colorToken = "gray-stroke",
|
|
94
87
|
color,
|
|
95
|
-
trackColorToken,
|
|
96
88
|
pulse = true,
|
|
97
89
|
}: LoadingOverlaySpinnerProps) {
|
|
98
90
|
const themeColor = useThemeColor(colorToken);
|
|
@@ -104,7 +96,7 @@ function LoadingOverlaySpinner({
|
|
|
104
96
|
|
|
105
97
|
useEffect(() => {
|
|
106
98
|
rotation.value = withRepeat(
|
|
107
|
-
withTiming(360, { duration:
|
|
99
|
+
withTiming(360, { duration: SPIN_DURATION_MS, easing: Easing.linear }),
|
|
108
100
|
-1,
|
|
109
101
|
false
|
|
110
102
|
);
|
|
@@ -117,11 +109,11 @@ function LoadingOverlaySpinner({
|
|
|
117
109
|
opacity.value = 1;
|
|
118
110
|
return;
|
|
119
111
|
}
|
|
120
|
-
opacity.value =
|
|
112
|
+
opacity.value = PULSE_MIN_OPACITY;
|
|
121
113
|
opacity.value = withRepeat(
|
|
122
114
|
withSequence(
|
|
123
|
-
withTiming(1,
|
|
124
|
-
withTiming(
|
|
115
|
+
withTiming(1, PULSE_TIMING),
|
|
116
|
+
withTiming(PULSE_MIN_OPACITY, PULSE_TIMING)
|
|
125
117
|
),
|
|
126
118
|
-1,
|
|
127
119
|
false
|
|
@@ -147,14 +139,6 @@ function LoadingOverlaySpinner({
|
|
|
147
139
|
>
|
|
148
140
|
<Animated.View style={[{ position: "absolute" }, ringStyle]}>
|
|
149
141
|
<Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
|
|
150
|
-
{trackColorToken ? (
|
|
151
|
-
<SpinnerTrack
|
|
152
|
-
size={size}
|
|
153
|
-
radius={radius}
|
|
154
|
-
strokeWidth={trackWidth}
|
|
155
|
-
colorToken={trackColorToken}
|
|
156
|
-
/>
|
|
157
|
-
) : null}
|
|
158
142
|
<Circle
|
|
159
143
|
cx={size / 2}
|
|
160
144
|
cy={size / 2}
|
|
@@ -189,8 +173,8 @@ function LoadingOverlayCard({
|
|
|
189
173
|
trackWidth,
|
|
190
174
|
colorToken,
|
|
191
175
|
color,
|
|
192
|
-
trackColorToken,
|
|
193
176
|
pulse,
|
|
177
|
+
trackColorToken: _trackColorToken,
|
|
194
178
|
text = "Carregando...",
|
|
195
179
|
description,
|
|
196
180
|
children,
|
|
@@ -203,7 +187,7 @@ function LoadingOverlayCard({
|
|
|
203
187
|
return (
|
|
204
188
|
<View
|
|
205
189
|
className={cn(
|
|
206
|
-
"w-full min-h-[230px] items-center justify-center gap-6 rounded-
|
|
190
|
+
"w-full min-h-[230px] items-center justify-center gap-6 rounded-lg bg-surface-card p-10",
|
|
207
191
|
className
|
|
208
192
|
)}
|
|
209
193
|
{...props}
|
|
@@ -218,7 +202,7 @@ function LoadingOverlayCard({
|
|
|
218
202
|
}
|
|
219
203
|
accessibilityState={{ busy: true }}
|
|
220
204
|
accessibilityLiveRegion="polite"
|
|
221
|
-
className="w-full items-center gap-
|
|
205
|
+
className="w-full items-center gap-4"
|
|
222
206
|
>
|
|
223
207
|
<LoadingOverlaySpinner
|
|
224
208
|
icon={icon}
|
|
@@ -226,7 +210,6 @@ function LoadingOverlayCard({
|
|
|
226
210
|
trackWidth={trackWidth}
|
|
227
211
|
colorToken={colorToken}
|
|
228
212
|
color={color}
|
|
229
|
-
trackColorToken={trackColorToken}
|
|
230
213
|
pulse={pulse}
|
|
231
214
|
/>
|
|
232
215
|
|
|
@@ -235,7 +218,7 @@ function LoadingOverlayCard({
|
|
|
235
218
|
{text ? (
|
|
236
219
|
<Text
|
|
237
220
|
className={cn(
|
|
238
|
-
"text-center text-
|
|
221
|
+
"text-center text-xs font-semibold leading-xs text-content-title",
|
|
239
222
|
textClassName
|
|
240
223
|
)}
|
|
241
224
|
>
|
|
@@ -245,7 +228,7 @@ function LoadingOverlayCard({
|
|
|
245
228
|
{description ? (
|
|
246
229
|
<Text
|
|
247
230
|
className={cn(
|
|
248
|
-
"text-center text-
|
|
231
|
+
"text-center text-xs font-medium leading-xs text-content-paragraph",
|
|
249
232
|
descriptionClassName
|
|
250
233
|
)}
|
|
251
234
|
>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cva
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
2
|
import { type ReactNode } from "react";
|
|
3
3
|
import { View, type ViewProps } from "react-native";
|
|
4
4
|
|
|
@@ -11,7 +11,7 @@ import { cn } from "@/lib/utils";
|
|
|
11
11
|
const rankIndicatorVariants = cva("size-[22px] rounded-full", {
|
|
12
12
|
variants: {
|
|
13
13
|
rank: {
|
|
14
|
-
1: "bg-
|
|
14
|
+
1: "bg-feedback-warning-background-fill",
|
|
15
15
|
2: "bg-gray-background-fill",
|
|
16
16
|
3: "bg-bronze-background-fill",
|
|
17
17
|
},
|
|
@@ -102,7 +102,7 @@ function MemberRow({
|
|
|
102
102
|
{...props}
|
|
103
103
|
>
|
|
104
104
|
<View className="min-w-0 flex-1 flex-row items-center gap-4">
|
|
105
|
-
<RadioGroupItem value={value} size="md" />
|
|
105
|
+
<RadioGroupItem value={value} size="md" accessibilityLabel={name} />
|
|
106
106
|
<View className="min-w-0 flex-1 flex-row items-center gap-2">
|
|
107
107
|
<Avatar size="sm" alt={avatarAlt ?? name}>
|
|
108
108
|
{avatarSrc ? <AvatarImage src={avatarSrc} /> : null}
|
|
@@ -32,7 +32,10 @@ function PageHeader({
|
|
|
32
32
|
<View className="flex-row items-start gap-3">
|
|
33
33
|
{icon}
|
|
34
34
|
<View className="flex-1 gap-1">
|
|
35
|
-
<Text
|
|
35
|
+
<Text
|
|
36
|
+
accessibilityRole="header"
|
|
37
|
+
className="text-title-xs font-semibold text-primary-foreground"
|
|
38
|
+
>
|
|
36
39
|
{title}
|
|
37
40
|
</Text>
|
|
38
41
|
{description ? (
|