radix-native-ui 0.1.0 → 0.1.2
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/LICENSE +21 -0
- package/README.md +4 -2
- package/dist/index.cjs +1419 -465
- package/dist/index.d.cts +348 -94
- package/dist/index.d.mts +323 -69
- package/dist/index.mjs +1415 -465
- package/package.json +31 -28
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
//#region \0rolldown/runtime.js
|
|
2
3
|
var __create = Object.create;
|
|
3
4
|
var __defProp = Object.defineProperty;
|
|
4
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -3144,7 +3145,7 @@ const ToastRoot = (0, react.forwardRef)(({ toast, onDismiss, config, index, styl
|
|
|
3144
3145
|
opacity,
|
|
3145
3146
|
transform: [{ translateY }, { translateX }],
|
|
3146
3147
|
backgroundColor: colors.backgroundColor,
|
|
3147
|
-
borderColor:
|
|
3148
|
+
borderColor: "transparent",
|
|
3148
3149
|
borderWidth: 1,
|
|
3149
3150
|
borderRadius: theme.radii.large,
|
|
3150
3151
|
padding: theme.space[4],
|
|
@@ -3169,23 +3170,23 @@ const ToastRoot = (0, react.forwardRef)(({ toast, onDismiss, config, index, styl
|
|
|
3169
3170
|
accessibilityLiveRegion: "polite",
|
|
3170
3171
|
accessibilityLabel: toast.accessibilityLabel || toast.title,
|
|
3171
3172
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
3172
|
-
style: [styles$
|
|
3173
|
+
style: [styles$34.contentContainer, { alignItems: toast.description ? "flex-start" : "center" }],
|
|
3173
3174
|
children: [
|
|
3174
3175
|
toast.icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
3175
|
-
style: styles$
|
|
3176
|
+
style: styles$34.iconContainer,
|
|
3176
3177
|
children: toast.icon
|
|
3177
3178
|
}),
|
|
3178
3179
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
3179
|
-
style: styles$
|
|
3180
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3181
|
-
style: [styles$
|
|
3180
|
+
style: styles$34.textContainer,
|
|
3181
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3182
|
+
style: [styles$34.title, {
|
|
3182
3183
|
color: colors.textColor,
|
|
3183
3184
|
fontSize: theme.typography.fontSizes[3].fontSize
|
|
3184
3185
|
}],
|
|
3185
3186
|
numberOfLines: 1,
|
|
3186
3187
|
children: toast.title
|
|
3187
|
-
}), toast.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3188
|
-
style: [styles$
|
|
3188
|
+
}), toast.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3189
|
+
style: [styles$34.description, {
|
|
3189
3190
|
fontSize: theme.typography.fontSizes[2].fontSize,
|
|
3190
3191
|
lineHeight: theme.typography.fontSizes[2].fontSize * 1.5,
|
|
3191
3192
|
opacity: .8
|
|
@@ -3196,14 +3197,14 @@ const ToastRoot = (0, react.forwardRef)(({ toast, onDismiss, config, index, styl
|
|
|
3196
3197
|
}),
|
|
3197
3198
|
toast.action && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
3198
3199
|
onPress: toast.action.onPress,
|
|
3199
|
-
style: ({ pressed }) => [styles$
|
|
3200
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3201
|
-
style: [styles$
|
|
3200
|
+
style: ({ pressed }) => [styles$34.actionButton, { opacity: pressed ? .7 : 1 }],
|
|
3201
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3202
|
+
style: [styles$34.actionText, { color: colors.accentColor }],
|
|
3202
3203
|
children: toast.action.label
|
|
3203
3204
|
})
|
|
3204
3205
|
}),
|
|
3205
3206
|
toast.showClose && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
3206
|
-
|
|
3207
|
+
color: getVariantColorName(toast.variant),
|
|
3207
3208
|
radius: "large",
|
|
3208
3209
|
size: 1,
|
|
3209
3210
|
onPress: () => handleDismiss(true),
|
|
@@ -3222,10 +3223,10 @@ const ToastViewport = (0, react.forwardRef)(({ style }, ref) => {
|
|
|
3222
3223
|
if (toasts.length === 0) return null;
|
|
3223
3224
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
3224
3225
|
ref,
|
|
3225
|
-
style: [styles$
|
|
3226
|
+
style: [styles$34.viewport, style],
|
|
3226
3227
|
pointerEvents: "box-none",
|
|
3227
3228
|
children: [topToasts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.SafeAreaView, {
|
|
3228
|
-
style: styles$
|
|
3229
|
+
style: styles$34.topContainer,
|
|
3229
3230
|
pointerEvents: "box-none",
|
|
3230
3231
|
children: topToasts.map((toast, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastRoot, {
|
|
3231
3232
|
toast,
|
|
@@ -3234,7 +3235,7 @@ const ToastViewport = (0, react.forwardRef)(({ style }, ref) => {
|
|
|
3234
3235
|
index
|
|
3235
3236
|
}, toast.id))
|
|
3236
3237
|
}), bottomToasts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.SafeAreaView, {
|
|
3237
|
-
style: styles$
|
|
3238
|
+
style: styles$34.bottomContainer,
|
|
3238
3239
|
pointerEvents: "box-none",
|
|
3239
3240
|
children: bottomToasts.map((toast, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToastRoot, {
|
|
3240
3241
|
toast,
|
|
@@ -3248,10 +3249,10 @@ const ToastViewport = (0, react.forwardRef)(({ style }, ref) => {
|
|
|
3248
3249
|
ToastViewport.displayName = "Toast.Viewport";
|
|
3249
3250
|
const ToastTitle = (0, react.forwardRef)(({ children, style }, ref) => {
|
|
3250
3251
|
const theme = useTheme$1();
|
|
3251
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3252
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3252
3253
|
ref,
|
|
3253
3254
|
style: [
|
|
3254
|
-
styles$
|
|
3255
|
+
styles$34.title,
|
|
3255
3256
|
{ fontSize: theme.typography.fontSizes[2].fontSize },
|
|
3256
3257
|
style
|
|
3257
3258
|
],
|
|
@@ -3261,10 +3262,10 @@ const ToastTitle = (0, react.forwardRef)(({ children, style }, ref) => {
|
|
|
3261
3262
|
ToastTitle.displayName = "Toast.Title";
|
|
3262
3263
|
const ToastDescription = (0, react.forwardRef)(({ children, style }, ref) => {
|
|
3263
3264
|
const theme = useTheme$1();
|
|
3264
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3265
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3265
3266
|
ref,
|
|
3266
3267
|
style: [
|
|
3267
|
-
styles$
|
|
3268
|
+
styles$34.description,
|
|
3268
3269
|
{ fontSize: theme.typography.fontSizes[1].fontSize },
|
|
3269
3270
|
style
|
|
3270
3271
|
],
|
|
@@ -3277,7 +3278,7 @@ const ToastClose = (0, react.forwardRef)(({ children, onPress, style }, ref) =>
|
|
|
3277
3278
|
ref,
|
|
3278
3279
|
onPress,
|
|
3279
3280
|
style: ({ pressed }) => [
|
|
3280
|
-
styles$
|
|
3281
|
+
styles$34.closeButton,
|
|
3281
3282
|
{ opacity: pressed ? .7 : 1 },
|
|
3282
3283
|
style
|
|
3283
3284
|
],
|
|
@@ -3287,7 +3288,7 @@ const ToastClose = (0, react.forwardRef)(({ children, onPress, style }, ref) =>
|
|
|
3287
3288
|
left: 8,
|
|
3288
3289
|
right: 8
|
|
3289
3290
|
},
|
|
3290
|
-
children: children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3291
|
+
children: children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, { children: "✕" })
|
|
3291
3292
|
});
|
|
3292
3293
|
});
|
|
3293
3294
|
ToastClose.displayName = "Toast.Close";
|
|
@@ -3297,18 +3298,18 @@ const ToastAction = (0, react.forwardRef)(({ label, onPress, style }, ref) => {
|
|
|
3297
3298
|
ref,
|
|
3298
3299
|
onPress,
|
|
3299
3300
|
style: ({ pressed }) => [
|
|
3300
|
-
styles$
|
|
3301
|
+
styles$34.actionButton,
|
|
3301
3302
|
{ opacity: pressed ? .7 : 1 },
|
|
3302
3303
|
style
|
|
3303
3304
|
],
|
|
3304
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
3305
|
-
style: [styles$
|
|
3305
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
3306
|
+
style: [styles$34.actionText, { color: theme.accentColor === "indigo" ? theme.colors.indigo[9] : theme.colors[theme.accentColor]?.[9] || theme.colors.indigo[9] }],
|
|
3306
3307
|
children: label
|
|
3307
3308
|
})
|
|
3308
3309
|
});
|
|
3309
3310
|
});
|
|
3310
3311
|
ToastAction.displayName = "Toast.Action";
|
|
3311
|
-
const styles$
|
|
3312
|
+
const styles$34 = react_native.StyleSheet.create({
|
|
3312
3313
|
viewport: {
|
|
3313
3314
|
...react_native.StyleSheet.absoluteFillObject,
|
|
3314
3315
|
pointerEvents: "box-none"
|
|
@@ -3342,7 +3343,7 @@ const styles$32 = react_native.StyleSheet.create({
|
|
|
3342
3343
|
},
|
|
3343
3344
|
title: { fontWeight: "500" },
|
|
3344
3345
|
description: {
|
|
3345
|
-
marginTop:
|
|
3346
|
+
marginTop: 1,
|
|
3346
3347
|
opacity: .8
|
|
3347
3348
|
},
|
|
3348
3349
|
actionButton: {
|
|
@@ -3408,7 +3409,7 @@ const useThemeContext = () => {
|
|
|
3408
3409
|
* 2. themeOptions object (legacy support)
|
|
3409
3410
|
* 3. Default values
|
|
3410
3411
|
*/
|
|
3411
|
-
const ThemeProvider = ({ children, accentColor, grayColor, radius, scaling, panelBackground, mode: initialMode, appearance, forcedMode, onModeChange, themeOptions = {}, toastConfig: userToastConfig }) => {
|
|
3412
|
+
const ThemeProvider = ({ children, accentColor, grayColor, radius, scaling, panelBackground, mode: initialMode, appearance, forcedMode, onModeChange, themeOptions = {}, toastConfig: userToastConfig, haptics: globalHaptics }) => {
|
|
3412
3413
|
const parentContext = (0, react.useContext)(ThemeContext);
|
|
3413
3414
|
const deviceColorScheme = useDeviceColorScheme();
|
|
3414
3415
|
const resolvedInitialMode = appearance === "inherit" ? void 0 : appearance ?? initialMode;
|
|
@@ -3426,9 +3427,10 @@ const ThemeProvider = ({ children, accentColor, grayColor, radius, scaling, pane
|
|
|
3426
3427
|
parentContext?.mode,
|
|
3427
3428
|
deviceColorScheme
|
|
3428
3429
|
]);
|
|
3429
|
-
const handleSetMode = (
|
|
3430
|
-
setMode(
|
|
3431
|
-
|
|
3430
|
+
const handleSetMode = (newAppearance) => {
|
|
3431
|
+
if (newAppearance === "inherit") setMode(deviceColorScheme ?? "light");
|
|
3432
|
+
else setMode(newAppearance);
|
|
3433
|
+
onModeChange?.(newAppearance === "inherit" ? deviceColorScheme ?? "light" : newAppearance);
|
|
3432
3434
|
};
|
|
3433
3435
|
const toggleMode = () => {
|
|
3434
3436
|
handleSetMode(mode === "light" ? "dark" : "light");
|
|
@@ -3499,11 +3501,14 @@ const ThemeProvider = ({ children, accentColor, grayColor, radius, scaling, pane
|
|
|
3499
3501
|
...options
|
|
3500
3502
|
} : t));
|
|
3501
3503
|
}, []);
|
|
3504
|
+
const resolvedHaptics = globalHaptics ?? true;
|
|
3502
3505
|
const value = (0, react.useMemo)(() => ({
|
|
3503
3506
|
theme,
|
|
3504
3507
|
mode,
|
|
3508
|
+
appearance: appearance ?? "inherit",
|
|
3505
3509
|
setMode: handleSetMode,
|
|
3506
3510
|
toggleMode,
|
|
3511
|
+
haptics: resolvedHaptics,
|
|
3507
3512
|
toastConfig,
|
|
3508
3513
|
toasts,
|
|
3509
3514
|
showToast,
|
|
@@ -3513,7 +3518,9 @@ const ThemeProvider = ({ children, accentColor, grayColor, radius, scaling, pane
|
|
|
3513
3518
|
}), [
|
|
3514
3519
|
theme,
|
|
3515
3520
|
mode,
|
|
3521
|
+
appearance,
|
|
3516
3522
|
toggleMode,
|
|
3523
|
+
resolvedHaptics,
|
|
3517
3524
|
toastConfig,
|
|
3518
3525
|
toasts,
|
|
3519
3526
|
showToast,
|
|
@@ -3542,14 +3549,22 @@ const useThemeMode = () => {
|
|
|
3542
3549
|
* Hook to access theme mode setter and toggle
|
|
3543
3550
|
*/
|
|
3544
3551
|
const useThemeActions = () => {
|
|
3545
|
-
const { setMode, toggleMode, mode } = useThemeContext();
|
|
3552
|
+
const { setMode, toggleMode, mode, appearance } = useThemeContext();
|
|
3546
3553
|
return {
|
|
3547
3554
|
setMode,
|
|
3548
3555
|
toggleMode,
|
|
3549
|
-
mode
|
|
3556
|
+
mode,
|
|
3557
|
+
appearance
|
|
3550
3558
|
};
|
|
3551
3559
|
};
|
|
3552
3560
|
/**
|
|
3561
|
+
* Hook to access the global haptics setting
|
|
3562
|
+
* @returns boolean - whether haptics are enabled globally
|
|
3563
|
+
*/
|
|
3564
|
+
const useHaptics = () => {
|
|
3565
|
+
return useThemeContext().haptics;
|
|
3566
|
+
};
|
|
3567
|
+
/**
|
|
3553
3568
|
* Hook to access toast functionality
|
|
3554
3569
|
*/
|
|
3555
3570
|
const useToast = () => {
|
|
@@ -3621,6 +3636,15 @@ const useThemeColors = () => {
|
|
|
3621
3636
|
panel: isDark ? theme.colors.gray.dark[2] : "#ffffff"
|
|
3622
3637
|
};
|
|
3623
3638
|
};
|
|
3639
|
+
/**
|
|
3640
|
+
* Hook to access the global haptics setting
|
|
3641
|
+
* @returns boolean - whether haptics are enabled globally
|
|
3642
|
+
*/
|
|
3643
|
+
const useHaptics$1 = () => {
|
|
3644
|
+
const context = (0, react.useContext)(ThemeContext);
|
|
3645
|
+
if (!context) throw new Error("useHaptics must be used within a ThemeProvider");
|
|
3646
|
+
return context.haptics;
|
|
3647
|
+
};
|
|
3624
3648
|
|
|
3625
3649
|
//#endregion
|
|
3626
3650
|
//#region src/components/primitives/View.tsx
|
|
@@ -3638,7 +3662,6 @@ const RnView = react.default.memo(react.default.forwardRef(({ style, wrap, ...re
|
|
|
3638
3662
|
});
|
|
3639
3663
|
}));
|
|
3640
3664
|
RnView.displayName = "RnView";
|
|
3641
|
-
var View_default = RnView;
|
|
3642
3665
|
|
|
3643
3666
|
//#endregion
|
|
3644
3667
|
//#region src/components/primitives/Text.tsx
|
|
@@ -3690,7 +3713,6 @@ const RnPressable = react.default.memo(react.default.forwardRef(({ style, onPres
|
|
|
3690
3713
|
});
|
|
3691
3714
|
}));
|
|
3692
3715
|
RnPressable.displayName = "RnPressable";
|
|
3693
|
-
var Pressable_default = RnPressable;
|
|
3694
3716
|
|
|
3695
3717
|
//#endregion
|
|
3696
3718
|
//#region src/components/primitives/TouchableOpacity.tsx
|
|
@@ -3810,10 +3832,67 @@ const RnActivityIndicator = react.default.memo(react.default.forwardRef(({ color
|
|
|
3810
3832
|
}));
|
|
3811
3833
|
RnActivityIndicator.displayName = "RnActivityIndicator";
|
|
3812
3834
|
|
|
3835
|
+
//#endregion
|
|
3836
|
+
//#region src/utils/haptics.ts
|
|
3837
|
+
/**
|
|
3838
|
+
* Try to import expo-haptics, fallback to null if not available
|
|
3839
|
+
*/
|
|
3840
|
+
let Haptics = null;
|
|
3841
|
+
(async () => {
|
|
3842
|
+
try {
|
|
3843
|
+
Haptics = await import("expo-haptics");
|
|
3844
|
+
} catch {}
|
|
3845
|
+
})();
|
|
3846
|
+
/**
|
|
3847
|
+
* Triggers haptic feedback with graceful fallback
|
|
3848
|
+
*
|
|
3849
|
+
* On iOS with expo-haptics:
|
|
3850
|
+
* - Uses Taptic Engine for precise, varied feedback (10-20ms)
|
|
3851
|
+
*
|
|
3852
|
+
* On Android or without expo-haptics:
|
|
3853
|
+
* - Falls back to basic vibration (10ms on Android, 400ms on iOS)
|
|
3854
|
+
*
|
|
3855
|
+
* @param type - The type of haptic feedback to trigger (default: 'selection')
|
|
3856
|
+
*/
|
|
3857
|
+
const triggerHaptic = (type = "selection") => {
|
|
3858
|
+
if (Haptics) try {
|
|
3859
|
+
switch (type) {
|
|
3860
|
+
case "selection":
|
|
3861
|
+
Haptics.selectionAsync();
|
|
3862
|
+
break;
|
|
3863
|
+
case "press":
|
|
3864
|
+
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
|
3865
|
+
break;
|
|
3866
|
+
case "impactLight":
|
|
3867
|
+
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
|
|
3868
|
+
break;
|
|
3869
|
+
case "impactMedium":
|
|
3870
|
+
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
|
|
3871
|
+
break;
|
|
3872
|
+
case "impactHeavy":
|
|
3873
|
+
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy);
|
|
3874
|
+
break;
|
|
3875
|
+
case "notificationSuccess":
|
|
3876
|
+
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
|
|
3877
|
+
break;
|
|
3878
|
+
case "notificationWarning":
|
|
3879
|
+
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Warning);
|
|
3880
|
+
break;
|
|
3881
|
+
case "notificationError":
|
|
3882
|
+
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);
|
|
3883
|
+
break;
|
|
3884
|
+
}
|
|
3885
|
+
} catch (error) {
|
|
3886
|
+
react_native.Platform.OS === "android" && react_native.Vibration.vibrate(10);
|
|
3887
|
+
}
|
|
3888
|
+
else react_native.Platform.OS === "android" && react_native.Vibration.vibrate(10);
|
|
3889
|
+
};
|
|
3890
|
+
|
|
3813
3891
|
//#endregion
|
|
3814
3892
|
//#region src/components/primitives/AnimatedPressable.tsx
|
|
3815
|
-
const AnimatedPressableComponent = react_native.Animated.createAnimatedComponent(
|
|
3893
|
+
const AnimatedPressableComponent = react_native.Animated.createAnimatedComponent(RnPressable);
|
|
3816
3894
|
const AnimatedPressable = react.default.memo(react.default.forwardRef(({ children, onPressIn, onPressOut, disabled, pressedScale = .97, pressedOpacity = .9, animationDuration = 100, hapticFeedback = true, style, ...rest }, ref) => {
|
|
3895
|
+
const globalHaptics = useHaptics$1();
|
|
3817
3896
|
const scaleAnim = (0, react.useRef)(new react_native.Animated.Value(1)).current;
|
|
3818
3897
|
const opacityAnim = (0, react.useRef)(new react_native.Animated.Value(1)).current;
|
|
3819
3898
|
const animatePressIn = (0, react.useCallback)(() => {
|
|
@@ -3853,12 +3932,13 @@ const AnimatedPressable = react.default.memo(react.default.forwardRef(({ childre
|
|
|
3853
3932
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressableComponent, {
|
|
3854
3933
|
ref,
|
|
3855
3934
|
onPressIn: (0, react.useCallback)((event) => {
|
|
3856
|
-
if (hapticFeedback && !disabled)
|
|
3935
|
+
if (globalHaptics && hapticFeedback && !disabled) triggerHaptic("press");
|
|
3857
3936
|
animatePressIn();
|
|
3858
3937
|
onPressIn?.(event);
|
|
3859
3938
|
}, [
|
|
3860
3939
|
animatePressIn,
|
|
3861
3940
|
onPressIn,
|
|
3941
|
+
globalHaptics,
|
|
3862
3942
|
hapticFeedback,
|
|
3863
3943
|
disabled
|
|
3864
3944
|
]),
|
|
@@ -3877,15 +3957,14 @@ const AnimatedPressable = react.default.memo(react.default.forwardRef(({ childre
|
|
|
3877
3957
|
});
|
|
3878
3958
|
}));
|
|
3879
3959
|
AnimatedPressable.displayName = "AnimatedPressable";
|
|
3880
|
-
var AnimatedPressable_default = AnimatedPressable;
|
|
3881
3960
|
|
|
3882
3961
|
//#endregion
|
|
3883
3962
|
//#region src/components/layout/Box.tsx
|
|
3884
3963
|
const areEqual$12 = (prevProps, nextProps) => {
|
|
3885
|
-
if (prevProps.children === nextProps.children && prevProps.style === nextProps.style && prevProps.backgroundColor === nextProps.backgroundColor && prevProps.display === nextProps.display && prevProps.flexDirection === nextProps.flexDirection && prevProps.opacity === nextProps.opacity && prevProps.radius === nextProps.radius) return true;
|
|
3964
|
+
if (prevProps.children === nextProps.children && prevProps.style === nextProps.style && prevProps.backgroundColor === nextProps.backgroundColor && prevProps.display === nextProps.display && prevProps.flexDirection === nextProps.flexDirection && prevProps.flex === nextProps.flex && prevProps.opacity === nextProps.opacity && prevProps.radius === nextProps.radius) return true;
|
|
3886
3965
|
return false;
|
|
3887
3966
|
};
|
|
3888
|
-
const Box = react.default.memo(react.default.forwardRef(({ asChild = false, children, style, backgroundColor, radius, display, flexDirection, justifyContent, alignItems, flexWrap, flexGrow, flexShrink, flexBasis, alignSelf, width, height, minWidth, maxWidth, minHeight, maxHeight, position, top, right, bottom, left, zIndex, overflow, margin, marginTop, marginBottom, marginLeft, marginRight, marginHorizontal, marginVertical, padding, paddingTop, paddingBottom, paddingLeft, paddingRight, paddingHorizontal, paddingVertical, borderWidth, borderRadius: borderRadiusProp, borderColor, opacity, elevation, ...rest }, ref) => {
|
|
3967
|
+
const Box = react.default.memo(react.default.forwardRef(({ asChild = false, children, style, backgroundColor, radius, display, flexDirection, justifyContent, alignItems, flexWrap, flex, flexGrow, flexShrink, flexBasis, alignSelf, width, height, minWidth, maxWidth, minHeight, maxHeight, position, top, right, bottom, left, zIndex, overflow, margin, marginTop, marginBottom, marginLeft, marginRight, marginHorizontal, marginVertical, padding, paddingTop, paddingBottom, paddingLeft, paddingRight, paddingHorizontal, paddingVertical, borderWidth, borderRadius: borderRadiusProp, borderColor, opacity, elevation, ...rest }, ref) => {
|
|
3889
3968
|
const theme = useTheme$1();
|
|
3890
3969
|
const colors = theme.colors.gray;
|
|
3891
3970
|
const radii = theme.radii;
|
|
@@ -3909,6 +3988,7 @@ const Box = react.default.memo(react.default.forwardRef(({ asChild = false, chil
|
|
|
3909
3988
|
justifyContent,
|
|
3910
3989
|
alignItems,
|
|
3911
3990
|
flexWrap,
|
|
3991
|
+
flex,
|
|
3912
3992
|
flexGrow,
|
|
3913
3993
|
flexShrink,
|
|
3914
3994
|
flexBasis,
|
|
@@ -3951,6 +4031,7 @@ const Box = react.default.memo(react.default.forwardRef(({ asChild = false, chil
|
|
|
3951
4031
|
justifyContent,
|
|
3952
4032
|
alignItems,
|
|
3953
4033
|
flexWrap,
|
|
4034
|
+
flex,
|
|
3954
4035
|
flexGrow,
|
|
3955
4036
|
flexShrink,
|
|
3956
4037
|
flexBasis,
|
|
@@ -4749,12 +4830,12 @@ const Strong = react.default.memo(react.default.forwardRef(({ children, style =
|
|
|
4749
4830
|
const colors = useThemeMode$1() === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
4750
4831
|
const strongFont = theme.typography.fonts.strong;
|
|
4751
4832
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
4833
|
+
color,
|
|
4752
4834
|
ref,
|
|
4753
4835
|
style: [(0, react.useMemo)(() => ({
|
|
4754
4836
|
fontFamily: strongFont.fontFamily,
|
|
4755
4837
|
fontWeight: strongFont.fontWeight,
|
|
4756
|
-
fontStyle: strongFont.fontStyle
|
|
4757
|
-
color: color || colors[12]
|
|
4838
|
+
fontStyle: strongFont.fontStyle
|
|
4758
4839
|
}), [
|
|
4759
4840
|
strongFont,
|
|
4760
4841
|
color,
|
|
@@ -5015,7 +5096,7 @@ const areEqual = (prevProps, nextProps) => {
|
|
|
5015
5096
|
if (prevProps.children === nextProps.children && prevProps.style === nextProps.style && prevProps.variant === nextProps.variant && prevProps.color === nextProps.color && prevProps.radius === nextProps.radius && prevProps.size === nextProps.size && prevProps.disabled === nextProps.disabled && prevProps.loading === nextProps.loading && prevProps.onPress === nextProps.onPress && prevProps.onLongPress === nextProps.onLongPress && prevProps.delayLongPress === nextProps.delayLongPress && prevProps.width === nextProps.width && prevProps.highContrast === nextProps.highContrast) return true;
|
|
5016
5097
|
return false;
|
|
5017
5098
|
};
|
|
5018
|
-
const Button = react.default.memo(react.default.forwardRef(({ children, style, variant = "
|
|
5099
|
+
const Button = react.default.memo(react.default.forwardRef(({ children, style, variant = "solid", color, radius, size = 2, disabled, loading, onPress, accessibilityLabel, width, highContrast, hapticFeedback, ...rest }, ref) => {
|
|
5019
5100
|
const theme = useTheme$1();
|
|
5020
5101
|
const mode = useThemeMode$1();
|
|
5021
5102
|
const isDark = mode === "dark";
|
|
@@ -5169,7 +5250,7 @@ const Button = react.default.memo(react.default.forwardRef(({ children, style, v
|
|
|
5169
5250
|
children: labelProps.children
|
|
5170
5251
|
}, "label");
|
|
5171
5252
|
};
|
|
5172
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
5253
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
5173
5254
|
ref,
|
|
5174
5255
|
style: [buttonStyle, style],
|
|
5175
5256
|
onPress: handlePress,
|
|
@@ -5202,52 +5283,48 @@ Button.Label = ButtonLabel;
|
|
|
5202
5283
|
|
|
5203
5284
|
//#endregion
|
|
5204
5285
|
//#region src/components/forms/IconButton.tsx
|
|
5205
|
-
const IconButton = react.default.forwardRef(({ children, style = {}, variant = "
|
|
5286
|
+
const IconButton = react.default.forwardRef(({ children, style = {}, variant = "solid", color, size = 2, radius, asChild = false, disabled, loading, onPress, accessibilityLabel, highContrast, hapticFeedback, ...rest }, ref) => {
|
|
5206
5287
|
const theme = useTheme$1();
|
|
5207
5288
|
const mode = useThemeMode$1();
|
|
5208
5289
|
mode === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
5209
5290
|
const grayAlpha = getGrayAlpha(theme);
|
|
5210
5291
|
getAccentColor(theme, mode);
|
|
5211
5292
|
getAccentAlpha(theme);
|
|
5212
|
-
const radii = theme.radii;
|
|
5213
|
-
const
|
|
5214
|
-
const
|
|
5215
|
-
if (radius) return radius === "full" ? 9999 : radii[radius];
|
|
5216
|
-
};
|
|
5217
|
-
const variantColors = getVariantColors(theme, activeColor, mode, variant, highContrast);
|
|
5293
|
+
const radii = theme.radii[radius || theme.radius] ?? theme.radii.medium;
|
|
5294
|
+
const selectedRadius = radius || theme.radius;
|
|
5295
|
+
const variantColors = getVariantColors(theme, color || theme.accentColor, mode, variant, highContrast);
|
|
5218
5296
|
const getSizeValues = () => {
|
|
5219
5297
|
switch (size) {
|
|
5220
5298
|
case 1: return {
|
|
5221
5299
|
size: 32,
|
|
5222
5300
|
iconSize: 16,
|
|
5223
|
-
borderRadius: radii
|
|
5301
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
5224
5302
|
};
|
|
5225
5303
|
case 3: return {
|
|
5226
5304
|
size: 56,
|
|
5227
5305
|
iconSize: 24,
|
|
5228
|
-
borderRadius: radii
|
|
5306
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
5229
5307
|
};
|
|
5230
5308
|
case 4: return {
|
|
5231
5309
|
size: 64,
|
|
5232
5310
|
iconSize: 28,
|
|
5233
|
-
borderRadius: radii
|
|
5311
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
5234
5312
|
};
|
|
5235
5313
|
default: return {
|
|
5236
5314
|
size: 40,
|
|
5237
5315
|
iconSize: 20,
|
|
5238
|
-
borderRadius: radii
|
|
5316
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
5239
5317
|
};
|
|
5240
5318
|
}
|
|
5241
5319
|
};
|
|
5242
5320
|
const sizeValues = getSizeValues();
|
|
5243
|
-
const customBorderRadius = getBorderRadius();
|
|
5244
5321
|
const buttonStyle = {
|
|
5245
5322
|
width: sizeValues.size,
|
|
5246
5323
|
height: sizeValues.size,
|
|
5247
5324
|
backgroundColor: disabled ? grayAlpha["3"] : variantColors.backgroundColor,
|
|
5248
5325
|
borderColor: variantColors.borderColor,
|
|
5249
5326
|
borderWidth: variant === "outline" ? 1 : 0,
|
|
5250
|
-
borderRadius:
|
|
5327
|
+
borderRadius: sizeValues.borderRadius,
|
|
5251
5328
|
opacity: disabled ? .5 : 1,
|
|
5252
5329
|
alignItems: "center",
|
|
5253
5330
|
justifyContent: "center"
|
|
@@ -5270,7 +5347,7 @@ const IconButton = react.default.forwardRef(({ children, style = {}, variant = "
|
|
|
5270
5347
|
...child.props
|
|
5271
5348
|
});
|
|
5272
5349
|
}
|
|
5273
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
5350
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
5274
5351
|
ref,
|
|
5275
5352
|
style: [buttonStyle, style],
|
|
5276
5353
|
onPress,
|
|
@@ -5287,8 +5364,8 @@ const IconButton = react.default.forwardRef(({ children, style = {}, variant = "
|
|
|
5287
5364
|
size: "small",
|
|
5288
5365
|
color: variantColors.textColor
|
|
5289
5366
|
}) : react.default.isValidElement(children) ? react.default.cloneElement(children, {
|
|
5290
|
-
size: sizeValues.iconSize,
|
|
5291
|
-
color: variantColors.textColor
|
|
5367
|
+
size: children.props?.size || sizeValues.iconSize,
|
|
5368
|
+
color: children.props?.color || variantColors.textColor
|
|
5292
5369
|
}) : children
|
|
5293
5370
|
});
|
|
5294
5371
|
});
|
|
@@ -5418,7 +5495,6 @@ const TextFieldRoot = react.default.forwardRef(({ children, ...props }, ref) =>
|
|
|
5418
5495
|
};
|
|
5419
5496
|
const inputContainerStyle = {
|
|
5420
5497
|
width: "100%",
|
|
5421
|
-
flex: 1,
|
|
5422
5498
|
flexDirection: "row",
|
|
5423
5499
|
alignItems: "center",
|
|
5424
5500
|
justifyContent: "space-between",
|
|
@@ -5442,7 +5518,8 @@ const TextFieldRoot = react.default.forwardRef(({ children, ...props }, ref) =>
|
|
|
5442
5518
|
paddingHorizontal: sizeValues.paddingHorizontal / 2,
|
|
5443
5519
|
minHeight: multiline ? sizeValues.height : void 0,
|
|
5444
5520
|
height: multiline ? void 0 : sizeValues.height,
|
|
5445
|
-
textAlignVertical: multiline ? "top" : "center"
|
|
5521
|
+
textAlignVertical: multiline ? "top" : "center",
|
|
5522
|
+
borderRadius: sizeValues.borderRadius
|
|
5446
5523
|
};
|
|
5447
5524
|
const errorStyle = {
|
|
5448
5525
|
color: theme.colors.ruby[10],
|
|
@@ -5468,7 +5545,7 @@ const TextFieldRoot = react.default.forwardRef(({ children, ...props }, ref) =>
|
|
|
5468
5545
|
};
|
|
5469
5546
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
5470
5547
|
style: [
|
|
5471
|
-
styles$
|
|
5548
|
+
styles$33.container,
|
|
5472
5549
|
containerStyle,
|
|
5473
5550
|
style
|
|
5474
5551
|
],
|
|
@@ -5486,7 +5563,7 @@ const TextFieldRoot = react.default.forwardRef(({ children, ...props }, ref) =>
|
|
|
5486
5563
|
style: inputInnerContainerStyle,
|
|
5487
5564
|
children: [
|
|
5488
5565
|
leftSlots.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
5489
|
-
style: [styles$
|
|
5566
|
+
style: [styles$33.leftSlots, slotWrapperStyle],
|
|
5490
5567
|
children: leftSlots.map((child, index) => (0, react.isValidElement)(child) ? react.default.cloneElement(child, {
|
|
5491
5568
|
key: index,
|
|
5492
5569
|
side: "left"
|
|
@@ -5497,11 +5574,11 @@ const TextFieldRoot = react.default.forwardRef(({ children, ...props }, ref) =>
|
|
|
5497
5574
|
style: { flex: 1 },
|
|
5498
5575
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnTextInput, {
|
|
5499
5576
|
...commonInputProps,
|
|
5500
|
-
style: [styles$
|
|
5577
|
+
style: [styles$33.input, inputStyle]
|
|
5501
5578
|
})
|
|
5502
5579
|
}),
|
|
5503
5580
|
rightSlots.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
5504
|
-
style: [styles$
|
|
5581
|
+
style: [styles$33.rightSlots, slotWrapperStyle],
|
|
5505
5582
|
children: rightSlots.map((child, index) => (0, react.isValidElement)(child) ? react.default.cloneElement(child, {
|
|
5506
5583
|
key: index,
|
|
5507
5584
|
side: "right"
|
|
@@ -5527,11 +5604,8 @@ const TextField = react.default.forwardRef((props, ref) => {
|
|
|
5527
5604
|
TextField.displayName = "TextField";
|
|
5528
5605
|
TextField.Root = TextFieldRoot;
|
|
5529
5606
|
TextField.Slot = TextFieldSlot;
|
|
5530
|
-
const styles$
|
|
5531
|
-
container: {
|
|
5532
|
-
flex: 1,
|
|
5533
|
-
width: "100%"
|
|
5534
|
-
},
|
|
5607
|
+
const styles$33 = react_native.StyleSheet.create({
|
|
5608
|
+
container: { width: "100%" },
|
|
5535
5609
|
leftSlots: {
|
|
5536
5610
|
flexDirection: "row",
|
|
5537
5611
|
alignItems: "center"
|
|
@@ -5543,25 +5617,73 @@ const styles$31 = react_native.StyleSheet.create({
|
|
|
5543
5617
|
input: {
|
|
5544
5618
|
flexDirection: "row",
|
|
5545
5619
|
width: "100%",
|
|
5546
|
-
minWidth: "100%"
|
|
5547
|
-
flex: 1
|
|
5620
|
+
minWidth: "100%"
|
|
5548
5621
|
}
|
|
5549
5622
|
});
|
|
5550
5623
|
|
|
5551
5624
|
//#endregion
|
|
5552
5625
|
//#region src/components/forms/TextArea.tsx
|
|
5553
|
-
const
|
|
5626
|
+
const TextAreaSlot = react.default.forwardRef(({ side, color, gap, paddingHorizontal, paddingLeft, paddingRight, children, ...props }, ref) => {
|
|
5627
|
+
const theme = useTheme$1();
|
|
5628
|
+
const isDark = useThemeMode$1() === "dark";
|
|
5629
|
+
const slotStyle = {
|
|
5630
|
+
...props.style,
|
|
5631
|
+
gap: gap !== void 0 ? gap : void 0,
|
|
5632
|
+
paddingHorizontal: paddingHorizontal !== void 0 ? paddingHorizontal : void 0,
|
|
5633
|
+
paddingLeft: paddingLeft !== void 0 ? paddingLeft : void 0,
|
|
5634
|
+
paddingRight: paddingRight !== void 0 ? paddingRight : void 0
|
|
5635
|
+
};
|
|
5636
|
+
const coloredChild = (0, react.useMemo)(() => {
|
|
5637
|
+
if (!color || !(0, react.isValidElement)(children)) return children;
|
|
5638
|
+
return react.default.cloneElement(children, { color: theme.colors[color][9] });
|
|
5639
|
+
}, [
|
|
5640
|
+
children,
|
|
5641
|
+
color,
|
|
5642
|
+
theme,
|
|
5643
|
+
isDark
|
|
5644
|
+
]);
|
|
5645
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Slot, {
|
|
5646
|
+
ref,
|
|
5647
|
+
style: slotStyle,
|
|
5648
|
+
...props,
|
|
5649
|
+
children: coloredChild
|
|
5650
|
+
});
|
|
5651
|
+
});
|
|
5652
|
+
TextAreaSlot.displayName = "TextAreaSlot";
|
|
5653
|
+
const TextAreaRoot = react.default.forwardRef(({ children, ...props }, ref) => {
|
|
5554
5654
|
const theme = useTheme$1();
|
|
5555
5655
|
const mode = useThemeMode$1();
|
|
5556
5656
|
const isDark = mode === "dark";
|
|
5557
5657
|
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
5558
5658
|
const grayAlpha = getGrayAlpha(theme);
|
|
5559
5659
|
const { value, onChangeText, placeholder, label, error, disabled = false, color = "gray", highContrast = false, radius = "medium", size = "2", variant = "outline", rows = 4, autoGrow = false, accessibilityLabel, accessibilityHint, style, ...rest } = props;
|
|
5660
|
+
const { leftSlots, rightSlots } = (0, react.useMemo)(() => {
|
|
5661
|
+
const slotChildren = [];
|
|
5662
|
+
react.Children.forEach(children, (child) => {
|
|
5663
|
+
if (!(0, react.isValidElement)(child)) return;
|
|
5664
|
+
if (child.type?.displayName === "TextAreaSlot") slotChildren.push(child);
|
|
5665
|
+
});
|
|
5666
|
+
const leftSlots = [];
|
|
5667
|
+
const rightSlots = [];
|
|
5668
|
+
slotChildren.forEach((child) => {
|
|
5669
|
+
if (!(0, react.isValidElement)(child)) return;
|
|
5670
|
+
const explicitSide = child.props.side;
|
|
5671
|
+
if (explicitSide === "left") leftSlots.push(child);
|
|
5672
|
+
else if (explicitSide === "right") rightSlots.push(child);
|
|
5673
|
+
else if (slotChildren.filter((c) => (0, react.isValidElement)(c) && !c.props?.side).indexOf(child) === 0) leftSlots.push(child);
|
|
5674
|
+
else rightSlots.push(child);
|
|
5675
|
+
});
|
|
5676
|
+
return {
|
|
5677
|
+
leftSlots,
|
|
5678
|
+
rightSlots
|
|
5679
|
+
};
|
|
5680
|
+
}, [children]);
|
|
5560
5681
|
const [isFocused, setIsFocused] = (0, react.useState)(false);
|
|
5561
5682
|
const activeColor = color || theme.accentColor;
|
|
5562
5683
|
const radii = theme.radii[radius] ?? theme.radii.medium;
|
|
5563
5684
|
const selectedRadius = radius || theme.radius;
|
|
5564
5685
|
const variantColors = getVariantColors(theme, activeColor, mode, variant, highContrast);
|
|
5686
|
+
const accentColorScale = getColorScale(theme, activeColor, mode);
|
|
5565
5687
|
const getSizeValues = () => {
|
|
5566
5688
|
switch (size) {
|
|
5567
5689
|
case "1": return {
|
|
@@ -5590,10 +5712,10 @@ const TextAreaRoot = react.default.forwardRef((props, ref) => {
|
|
|
5590
5712
|
};
|
|
5591
5713
|
const inputContainerBorderColor = () => {
|
|
5592
5714
|
if (error) return theme.colors.ruby[9];
|
|
5593
|
-
else return isFocused ?
|
|
5715
|
+
else return isFocused ? accentColorScale["8"] : "transparent";
|
|
5594
5716
|
};
|
|
5595
5717
|
const inputContainerBackgroundColor = () => {
|
|
5596
|
-
if (disabled) return isDark ? grayAlpha["
|
|
5718
|
+
if (disabled) return isDark ? grayAlpha["2"] : grayAlpha["2"];
|
|
5597
5719
|
else return variantColors.backgroundColor;
|
|
5598
5720
|
};
|
|
5599
5721
|
const inputBorderColor = () => {
|
|
@@ -5602,16 +5724,21 @@ const TextAreaRoot = react.default.forwardRef((props, ref) => {
|
|
|
5602
5724
|
};
|
|
5603
5725
|
const inputContainerStyle = {
|
|
5604
5726
|
width: "100%",
|
|
5605
|
-
|
|
5727
|
+
flexDirection: "row",
|
|
5728
|
+
alignItems: "flex-start",
|
|
5729
|
+
justifyContent: "space-between",
|
|
5730
|
+
borderWidth: variant === "soft" ? 1.4 : 2,
|
|
5606
5731
|
borderColor: inputContainerBorderColor(),
|
|
5607
5732
|
backgroundColor: inputContainerBackgroundColor(),
|
|
5608
5733
|
borderRadius: selectedRadius === "full" ? theme.radii.large : radii,
|
|
5609
5734
|
opacity: disabled ? .6 : 1
|
|
5610
5735
|
};
|
|
5611
|
-
const
|
|
5736
|
+
const inputInnerContainerStyle = {
|
|
5612
5737
|
borderWidth: 1,
|
|
5613
5738
|
borderColor: inputBorderColor(),
|
|
5614
|
-
borderRadius: selectedRadius === "full" ? theme.radii.large : radii
|
|
5739
|
+
borderRadius: selectedRadius === "full" ? theme.radii.large : radii
|
|
5740
|
+
};
|
|
5741
|
+
const inputStyle = {
|
|
5615
5742
|
fontSize: sizeValues.fontSize,
|
|
5616
5743
|
color: color !== "gray" ? variantColors.textColor : grayScale[12],
|
|
5617
5744
|
padding: sizeValues.padding,
|
|
@@ -5625,7 +5752,7 @@ const TextAreaRoot = react.default.forwardRef((props, ref) => {
|
|
|
5625
5752
|
};
|
|
5626
5753
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
5627
5754
|
style: [
|
|
5628
|
-
styles$
|
|
5755
|
+
styles$32.container,
|
|
5629
5756
|
containerStyle,
|
|
5630
5757
|
style
|
|
5631
5758
|
],
|
|
@@ -5637,21 +5764,47 @@ const TextAreaRoot = react.default.forwardRef((props, ref) => {
|
|
|
5637
5764
|
}),
|
|
5638
5765
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
5639
5766
|
style: inputContainerStyle,
|
|
5640
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.
|
|
5641
|
-
|
|
5642
|
-
|
|
5643
|
-
|
|
5644
|
-
|
|
5645
|
-
|
|
5646
|
-
|
|
5647
|
-
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5767
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Flex, {
|
|
5768
|
+
align: "stretch",
|
|
5769
|
+
direction: "row",
|
|
5770
|
+
style: inputInnerContainerStyle,
|
|
5771
|
+
children: [
|
|
5772
|
+
leftSlots.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
5773
|
+
style: styles$32.leftSlots,
|
|
5774
|
+
children: leftSlots.map((child, index) => (0, react.isValidElement)(child) ? react.default.cloneElement(child, {
|
|
5775
|
+
key: index,
|
|
5776
|
+
side: "left"
|
|
5777
|
+
}) : child)
|
|
5778
|
+
}),
|
|
5779
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Flex, {
|
|
5780
|
+
direction: "row",
|
|
5781
|
+
style: { flex: 1 },
|
|
5782
|
+
wrap: "wrap",
|
|
5783
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnTextInput, {
|
|
5784
|
+
ref,
|
|
5785
|
+
value,
|
|
5786
|
+
onChangeText,
|
|
5787
|
+
placeholder,
|
|
5788
|
+
placeholderTextColor: color !== "gray" ? theme.colors[color][12] + "99" : theme.colors.gray[9],
|
|
5789
|
+
editable: !disabled,
|
|
5790
|
+
multiline: true,
|
|
5791
|
+
accessibilityLabel: accessibilityLabel || label,
|
|
5792
|
+
accessibilityHint,
|
|
5793
|
+
accessibilityState: { disabled },
|
|
5794
|
+
style: [styles$32.input, inputStyle],
|
|
5795
|
+
onFocus: () => setIsFocused(true),
|
|
5796
|
+
onBlur: () => setIsFocused(false),
|
|
5797
|
+
...rest
|
|
5798
|
+
})
|
|
5799
|
+
}),
|
|
5800
|
+
rightSlots.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
5801
|
+
style: styles$32.rightSlots,
|
|
5802
|
+
children: rightSlots.map((child, index) => (0, react.isValidElement)(child) ? react.default.cloneElement(child, {
|
|
5803
|
+
key: index,
|
|
5804
|
+
side: "right"
|
|
5805
|
+
}) : child)
|
|
5806
|
+
})
|
|
5807
|
+
]
|
|
5655
5808
|
})
|
|
5656
5809
|
}),
|
|
5657
5810
|
error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnText, {
|
|
@@ -5669,12 +5822,19 @@ const TextArea = react.default.forwardRef((props, ref) => {
|
|
|
5669
5822
|
});
|
|
5670
5823
|
});
|
|
5671
5824
|
TextArea.displayName = "TextArea";
|
|
5672
|
-
|
|
5825
|
+
TextArea.Root = TextAreaRoot;
|
|
5826
|
+
TextArea.Slot = TextAreaSlot;
|
|
5827
|
+
const styles$32 = react_native.StyleSheet.create({
|
|
5673
5828
|
container: { width: "100%" },
|
|
5674
|
-
|
|
5675
|
-
|
|
5676
|
-
|
|
5677
|
-
}
|
|
5829
|
+
leftSlots: {
|
|
5830
|
+
flexDirection: "row",
|
|
5831
|
+
alignItems: "flex-start"
|
|
5832
|
+
},
|
|
5833
|
+
rightSlots: {
|
|
5834
|
+
flexDirection: "row",
|
|
5835
|
+
alignItems: "flex-start"
|
|
5836
|
+
},
|
|
5837
|
+
input: { minWidth: "100%" }
|
|
5678
5838
|
});
|
|
5679
5839
|
|
|
5680
5840
|
//#endregion
|
|
@@ -5685,6 +5845,7 @@ const Checkbox = react.default.forwardRef(({ checked, defaultChecked = false, on
|
|
|
5685
5845
|
const isChecked = isControlled ? checked : internalChecked;
|
|
5686
5846
|
const theme = useTheme$1();
|
|
5687
5847
|
const mode = useThemeMode$1();
|
|
5848
|
+
const globalHaptics = useHaptics$1();
|
|
5688
5849
|
const isDark = mode === "dark";
|
|
5689
5850
|
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
5690
5851
|
const grayAlpha = getGrayAlpha(theme);
|
|
@@ -5730,7 +5891,7 @@ const Checkbox = react.default.forwardRef(({ checked, defaultChecked = false, on
|
|
|
5730
5891
|
setInternalChecked(newChecked);
|
|
5731
5892
|
onCheckedChange?.(newChecked);
|
|
5732
5893
|
}
|
|
5733
|
-
if (hapticFeedback)
|
|
5894
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
5734
5895
|
}
|
|
5735
5896
|
};
|
|
5736
5897
|
const boxStyle = {
|
|
@@ -5752,9 +5913,9 @@ const Checkbox = react.default.forwardRef(({ checked, defaultChecked = false, on
|
|
|
5752
5913
|
color: theme.colors.gray || grayScale[12],
|
|
5753
5914
|
fontSize: sizeValues.fontSize
|
|
5754
5915
|
};
|
|
5755
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
5916
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
5756
5917
|
ref,
|
|
5757
|
-
style: styles$
|
|
5918
|
+
style: styles$31.container,
|
|
5758
5919
|
onPress: handlePress,
|
|
5759
5920
|
disabled,
|
|
5760
5921
|
accessibilityRole: "checkbox",
|
|
@@ -5770,9 +5931,9 @@ const Checkbox = react.default.forwardRef(({ checked, defaultChecked = false, on
|
|
|
5770
5931
|
hapticFeedback: false,
|
|
5771
5932
|
...rest,
|
|
5772
5933
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
5773
|
-
style: [styles$
|
|
5934
|
+
style: [styles$31.checkbox, boxStyle],
|
|
5774
5935
|
children: (isChecked || indeterminate) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
5775
|
-
style: [styles$
|
|
5936
|
+
style: [styles$31.icon, iconStyle],
|
|
5776
5937
|
children: indeterminate ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: {
|
|
5777
5938
|
width: sizeValues.iconSize * .9,
|
|
5778
5939
|
height: 2.8,
|
|
@@ -5803,13 +5964,13 @@ const Checkbox = react.default.forwardRef(({ checked, defaultChecked = false, on
|
|
|
5803
5964
|
} })] })
|
|
5804
5965
|
})
|
|
5805
5966
|
}), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
5806
|
-
style: [styles$
|
|
5967
|
+
style: [styles$31.label, labelStyle],
|
|
5807
5968
|
children: label
|
|
5808
5969
|
})]
|
|
5809
5970
|
});
|
|
5810
5971
|
});
|
|
5811
5972
|
Checkbox.displayName = "Checkbox";
|
|
5812
|
-
const styles$
|
|
5973
|
+
const styles$31 = react_native.StyleSheet.create({
|
|
5813
5974
|
container: {
|
|
5814
5975
|
flexDirection: "row",
|
|
5815
5976
|
alignItems: "center"
|
|
@@ -5839,7 +6000,7 @@ const CheckboxGroup = react.default.forwardRef(({ value, onValueChange, items, d
|
|
|
5839
6000
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
5840
6001
|
ref,
|
|
5841
6002
|
style: [
|
|
5842
|
-
styles$
|
|
6003
|
+
styles$30.container,
|
|
5843
6004
|
containerStyle,
|
|
5844
6005
|
style
|
|
5845
6006
|
],
|
|
@@ -5858,7 +6019,7 @@ const CheckboxGroup = react.default.forwardRef(({ value, onValueChange, items, d
|
|
|
5858
6019
|
});
|
|
5859
6020
|
});
|
|
5860
6021
|
CheckboxGroup.displayName = "CheckboxGroup";
|
|
5861
|
-
const styles$
|
|
6022
|
+
const styles$30 = react_native.StyleSheet.create({ container: { width: "100%" } });
|
|
5862
6023
|
|
|
5863
6024
|
//#endregion
|
|
5864
6025
|
//#region src/components/forms/CheckboxCards.tsx
|
|
@@ -5896,7 +6057,7 @@ const CheckboxCardsRoot = react.default.forwardRef(({ value: controlledValue, de
|
|
|
5896
6057
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
5897
6058
|
ref,
|
|
5898
6059
|
style: [
|
|
5899
|
-
styles$
|
|
6060
|
+
styles$29.rootContainer,
|
|
5900
6061
|
containerStyle,
|
|
5901
6062
|
style
|
|
5902
6063
|
],
|
|
@@ -5910,6 +6071,7 @@ const CheckboxCardsItem = react.default.forwardRef(({ value, side: itemSide, dis
|
|
|
5910
6071
|
const context = useCheckboxCardsContext();
|
|
5911
6072
|
const theme = useTheme$1();
|
|
5912
6073
|
const mode = useThemeMode$1();
|
|
6074
|
+
const globalHaptics = useHaptics$1();
|
|
5913
6075
|
const isDark = mode === "dark";
|
|
5914
6076
|
const { value: selectedValues, onValueChange, variant, size, color, highContrast, radius, side: rootSide, disabled: rootDisabled } = context;
|
|
5915
6077
|
const isChecked = selectedValues.includes(value);
|
|
@@ -5949,7 +6111,7 @@ const CheckboxCardsItem = react.default.forwardRef(({ value, side: itemSide, dis
|
|
|
5949
6111
|
if (!isDisabled) {
|
|
5950
6112
|
if (isChecked) onValueChange(selectedValues.filter((v) => v !== value));
|
|
5951
6113
|
else onValueChange([...selectedValues, value]);
|
|
5952
|
-
|
|
6114
|
+
if (globalHaptics) triggerHaptic("press");
|
|
5953
6115
|
}
|
|
5954
6116
|
};
|
|
5955
6117
|
const cardStyle = {
|
|
@@ -5964,10 +6126,10 @@ const CheckboxCardsItem = react.default.forwardRef(({ value, side: itemSide, dis
|
|
|
5964
6126
|
gap: theme.space[3]
|
|
5965
6127
|
};
|
|
5966
6128
|
sizeValues.indicatorSize, sizeValues.indicatorSize, sizeValues.borderWidth, isChecked ? variantColors.borderColor : grayAlpha["8"], isChecked && variantColors.backgroundColor;
|
|
5967
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
6129
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
5968
6130
|
ref,
|
|
5969
6131
|
style: [
|
|
5970
|
-
styles$
|
|
6132
|
+
styles$29.itemContainer,
|
|
5971
6133
|
cardStyle,
|
|
5972
6134
|
style
|
|
5973
6135
|
],
|
|
@@ -5994,13 +6156,13 @@ const CheckboxCardsItem = react.default.forwardRef(({ value, side: itemSide, dis
|
|
|
5994
6156
|
size,
|
|
5995
6157
|
onCheckedChange: handlePress
|
|
5996
6158
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
5997
|
-
style: styles$
|
|
6159
|
+
style: styles$29.content,
|
|
5998
6160
|
children
|
|
5999
6161
|
})]
|
|
6000
6162
|
});
|
|
6001
6163
|
});
|
|
6002
6164
|
CheckboxCardsItem.displayName = "CheckboxCards.Item";
|
|
6003
|
-
const styles$
|
|
6165
|
+
const styles$29 = react_native.StyleSheet.create({
|
|
6004
6166
|
rootContainer: { width: "100%" },
|
|
6005
6167
|
itemContainer: { flex: 1 },
|
|
6006
6168
|
content: { flex: 1 }
|
|
@@ -6015,6 +6177,7 @@ const CheckboxCards = {
|
|
|
6015
6177
|
const Radio = react.default.forwardRef(({ defaultChecked, value, selected, onSelect, disabled = false, size = "2", variant = "solid", color, label, children, highContrast = false, accessibilityLabel, accessibilityHint, hapticFeedback = true, ...rest }, ref) => {
|
|
6016
6178
|
const theme = useTheme$1();
|
|
6017
6179
|
const mode = useThemeMode$1();
|
|
6180
|
+
const globalHaptics = useHaptics$1();
|
|
6018
6181
|
const grayScale = mode === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
6019
6182
|
getGrayAlpha(theme);
|
|
6020
6183
|
const accentScale = getAccentColor(theme, mode);
|
|
@@ -6054,7 +6217,7 @@ const Radio = react.default.forwardRef(({ defaultChecked, value, selected, onSel
|
|
|
6054
6217
|
if (!disabled) {
|
|
6055
6218
|
if (onSelect) onSelect(value);
|
|
6056
6219
|
if (selected === void 0) setIsInternallySelected(true);
|
|
6057
|
-
if (hapticFeedback)
|
|
6220
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
6058
6221
|
}
|
|
6059
6222
|
};
|
|
6060
6223
|
const outerStyle = {
|
|
@@ -6078,9 +6241,9 @@ const Radio = react.default.forwardRef(({ defaultChecked, value, selected, onSel
|
|
|
6078
6241
|
color: grayScale[12],
|
|
6079
6242
|
fontSize: sizeValues.fontSize
|
|
6080
6243
|
};
|
|
6081
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
6244
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
6082
6245
|
ref,
|
|
6083
|
-
style: styles$
|
|
6246
|
+
style: styles$28.container,
|
|
6084
6247
|
onPress: handlePress,
|
|
6085
6248
|
disabled,
|
|
6086
6249
|
accessibilityRole: "radio",
|
|
@@ -6096,19 +6259,19 @@ const Radio = react.default.forwardRef(({ defaultChecked, value, selected, onSel
|
|
|
6096
6259
|
hapticFeedback: false,
|
|
6097
6260
|
...rest,
|
|
6098
6261
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6099
|
-
style: [styles$
|
|
6100
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$
|
|
6262
|
+
style: [styles$28.radioOuter, outerStyle],
|
|
6263
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$28.radioInner, innerStyle] })
|
|
6101
6264
|
}), children ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6102
|
-
style: styles$
|
|
6265
|
+
style: styles$28.content,
|
|
6103
6266
|
children
|
|
6104
6267
|
}) : label ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
6105
|
-
style: [styles$
|
|
6268
|
+
style: [styles$28.label, labelStyle],
|
|
6106
6269
|
children: label
|
|
6107
6270
|
}) : null]
|
|
6108
6271
|
});
|
|
6109
6272
|
});
|
|
6110
6273
|
Radio.displayName = "Radio";
|
|
6111
|
-
const styles$
|
|
6274
|
+
const styles$28 = react_native.StyleSheet.create({
|
|
6112
6275
|
container: {
|
|
6113
6276
|
flexDirection: "row",
|
|
6114
6277
|
alignItems: "center"
|
|
@@ -6159,7 +6322,7 @@ const RadioGroupRoot = react.default.forwardRef(({ value: controlledValue, defau
|
|
|
6159
6322
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6160
6323
|
ref,
|
|
6161
6324
|
style: [
|
|
6162
|
-
styles$
|
|
6325
|
+
styles$27.container,
|
|
6163
6326
|
containerStyle,
|
|
6164
6327
|
style
|
|
6165
6328
|
],
|
|
@@ -6190,7 +6353,7 @@ const RadioGroupItem = react.default.forwardRef(({ value, disabled: itemDisabled
|
|
|
6190
6353
|
});
|
|
6191
6354
|
});
|
|
6192
6355
|
RadioGroupItem.displayName = "RadioGroup.Item";
|
|
6193
|
-
const styles$
|
|
6356
|
+
const styles$27 = react_native.StyleSheet.create({ container: { width: "100%" } });
|
|
6194
6357
|
const RadioGroup = {
|
|
6195
6358
|
Root: RadioGroupRoot,
|
|
6196
6359
|
Item: RadioGroupItem
|
|
@@ -6232,7 +6395,7 @@ const RadioCardsRoot = react.default.forwardRef(({ value: controlledValue, defau
|
|
|
6232
6395
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6233
6396
|
ref,
|
|
6234
6397
|
style: [
|
|
6235
|
-
styles$
|
|
6398
|
+
styles$26.rootContainer,
|
|
6236
6399
|
containerStyle,
|
|
6237
6400
|
style
|
|
6238
6401
|
],
|
|
@@ -6246,6 +6409,7 @@ const RadioCardsItem = react.default.forwardRef(({ value, side: itemSide, disabl
|
|
|
6246
6409
|
const context = useRadioCardsContext();
|
|
6247
6410
|
const theme = useTheme$1();
|
|
6248
6411
|
const mode = useThemeMode$1();
|
|
6412
|
+
const globalHaptics = useHaptics$1();
|
|
6249
6413
|
const isDark = mode === "dark";
|
|
6250
6414
|
const { value: selectedValue, onValueChange, variant, size, color, highContrast, radius, side: rootSide, disabled: rootDisabled } = context;
|
|
6251
6415
|
const isSelected = selectedValue === value;
|
|
@@ -6281,14 +6445,14 @@ const RadioCardsItem = react.default.forwardRef(({ value, side: itemSide, disabl
|
|
|
6281
6445
|
const handlePress = () => {
|
|
6282
6446
|
if (!isDisabled) {
|
|
6283
6447
|
onValueChange(value);
|
|
6284
|
-
|
|
6448
|
+
if (globalHaptics) triggerHaptic("press");
|
|
6285
6449
|
}
|
|
6286
6450
|
};
|
|
6287
6451
|
const cardStyle = {
|
|
6288
6452
|
padding: sizeValues.padding,
|
|
6289
6453
|
borderRadius: radius === "full" ? 9999 : radii,
|
|
6290
6454
|
borderWidth: isSelected ? 1.5 : 1,
|
|
6291
|
-
borderColor: isSelected ? variantColors.borderColor : isDark ? grayAlpha["6"] : grayAlpha["6"],
|
|
6455
|
+
borderColor: isSelected ? variantColors.borderColor : ["outline", "surface"].includes(variant) ? isDark ? grayAlpha["6"] : grayAlpha["6"] : "transparent",
|
|
6292
6456
|
backgroundColor: isSelected ? variantColors.backgroundColor : isDark ? grayAlpha["2"] : grayAlpha["2"],
|
|
6293
6457
|
opacity: isDisabled ? .5 : 1,
|
|
6294
6458
|
flexDirection: indicatorSide === "left" ? "row" : "row-reverse",
|
|
@@ -6311,10 +6475,10 @@ const RadioCardsItem = react.default.forwardRef(({ value, side: itemSide, disabl
|
|
|
6311
6475
|
borderRadius: sizeValues.innerIndicatorSize / 2,
|
|
6312
6476
|
backgroundColor: variantColors.textColor
|
|
6313
6477
|
};
|
|
6314
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
6478
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
6315
6479
|
ref,
|
|
6316
6480
|
style: [
|
|
6317
|
-
styles$
|
|
6481
|
+
styles$26.itemContainer,
|
|
6318
6482
|
cardStyle,
|
|
6319
6483
|
style
|
|
6320
6484
|
],
|
|
@@ -6339,15 +6503,15 @@ const RadioCardsItem = react.default.forwardRef(({ value, side: itemSide, disabl
|
|
|
6339
6503
|
style: indicatorStyle,
|
|
6340
6504
|
children: isSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: innerDotStyle })
|
|
6341
6505
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6342
|
-
style: styles$
|
|
6506
|
+
style: styles$26.content,
|
|
6343
6507
|
children
|
|
6344
6508
|
})]
|
|
6345
6509
|
});
|
|
6346
6510
|
});
|
|
6347
6511
|
RadioCardsItem.displayName = "RadioCards.Item";
|
|
6348
|
-
const styles$
|
|
6512
|
+
const styles$26 = react_native.StyleSheet.create({
|
|
6349
6513
|
rootContainer: { width: "100%" },
|
|
6350
|
-
itemContainer: {
|
|
6514
|
+
itemContainer: {},
|
|
6351
6515
|
content: { flex: 1 }
|
|
6352
6516
|
});
|
|
6353
6517
|
const RadioCards = {
|
|
@@ -6360,6 +6524,7 @@ const RadioCards = {
|
|
|
6360
6524
|
const Switch = react.default.forwardRef(({ defaultChecked, checked, onCheckedChange, disabled = false, radius = "full", size = "2", color, variant = "solid", thumbColor, label, highContrast, accessibilityLabel, accessibilityHint, hapticFeedback = true, ...rest }, ref) => {
|
|
6361
6525
|
const theme = useTheme$1();
|
|
6362
6526
|
const mode = useThemeMode$1();
|
|
6527
|
+
const globalHaptics = useHaptics$1();
|
|
6363
6528
|
const isDark = mode === "dark";
|
|
6364
6529
|
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
6365
6530
|
const grayAlpha = getGrayAlpha(theme);
|
|
@@ -6377,7 +6542,7 @@ const Switch = react.default.forwardRef(({ defaultChecked, checked, onCheckedCha
|
|
|
6377
6542
|
const setChecked = (value) => {
|
|
6378
6543
|
if (checked === void 0) setInternalChecked(value);
|
|
6379
6544
|
if (onCheckedChange) onCheckedChange(value);
|
|
6380
|
-
if (hapticFeedback && !disabled)
|
|
6545
|
+
if (globalHaptics && hapticFeedback && !disabled) triggerHaptic("press");
|
|
6381
6546
|
};
|
|
6382
6547
|
const animatedValue = (0, react.useRef)(new react_native.Animated.Value(isChecked ? 1 : 0));
|
|
6383
6548
|
(0, react.useEffect)(() => {
|
|
@@ -6443,9 +6608,9 @@ const Switch = react.default.forwardRef(({ defaultChecked, checked, onCheckedCha
|
|
|
6443
6608
|
color: grayScale[12],
|
|
6444
6609
|
fontSize: sizeValues.fontSize
|
|
6445
6610
|
};
|
|
6446
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
6611
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
6447
6612
|
ref,
|
|
6448
|
-
style: styles$
|
|
6613
|
+
style: styles$25.container,
|
|
6449
6614
|
onPress: handlePress,
|
|
6450
6615
|
disabled,
|
|
6451
6616
|
accessibilityRole: "switch",
|
|
@@ -6461,16 +6626,16 @@ const Switch = react.default.forwardRef(({ defaultChecked, checked, onCheckedCha
|
|
|
6461
6626
|
hapticFeedback: false,
|
|
6462
6627
|
...rest,
|
|
6463
6628
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
6464
|
-
style: [styles$
|
|
6465
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: [styles$
|
|
6629
|
+
style: [styles$25.track, trackStyle],
|
|
6630
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: [styles$25.thumb, thumbStyle] })
|
|
6466
6631
|
}), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
6467
|
-
style: [styles$
|
|
6632
|
+
style: [styles$25.label, labelStyle],
|
|
6468
6633
|
children: label
|
|
6469
6634
|
})]
|
|
6470
6635
|
});
|
|
6471
6636
|
});
|
|
6472
6637
|
Switch.displayName = "Switch";
|
|
6473
|
-
const styles$
|
|
6638
|
+
const styles$25 = react_native.StyleSheet.create({
|
|
6474
6639
|
container: {
|
|
6475
6640
|
flexDirection: "row",
|
|
6476
6641
|
alignItems: "center"
|
|
@@ -6668,25 +6833,25 @@ function calculateContextMenuPosition(touchPoint, contentSize, screenSize, side
|
|
|
6668
6833
|
* ChevronDownIcon - A chevron pointing down using React Native View
|
|
6669
6834
|
* Can be rotated to point in different directions
|
|
6670
6835
|
*/
|
|
6671
|
-
const ChevronDownIcon
|
|
6836
|
+
const ChevronDownIcon = react.default.forwardRef(({ width = 9, height = 9, style, color = "currentColor" }, _forwardedRef) => {
|
|
6672
6837
|
const armWidth = width * .55;
|
|
6673
6838
|
const armHeight = 2;
|
|
6674
6839
|
const armOffset = width * .22;
|
|
6675
6840
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
6676
6841
|
style: [
|
|
6677
|
-
styles$
|
|
6842
|
+
styles$24.chevronContainer,
|
|
6678
6843
|
{
|
|
6679
6844
|
width,
|
|
6680
6845
|
height
|
|
6681
6846
|
},
|
|
6682
6847
|
style
|
|
6683
6848
|
],
|
|
6684
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6849
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.chevronArm, {
|
|
6685
6850
|
width: armWidth,
|
|
6686
6851
|
height: armHeight,
|
|
6687
6852
|
backgroundColor: color,
|
|
6688
6853
|
transform: [{ rotate: "45deg" }, { translateX: -armOffset }]
|
|
6689
|
-
}] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6854
|
+
}] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.chevronArm, {
|
|
6690
6855
|
width: armWidth,
|
|
6691
6856
|
height: armHeight,
|
|
6692
6857
|
backgroundColor: color,
|
|
@@ -6694,7 +6859,7 @@ const ChevronDownIcon$1 = react.default.forwardRef(({ width = 9, height = 9, sty
|
|
|
6694
6859
|
}] })]
|
|
6695
6860
|
});
|
|
6696
6861
|
});
|
|
6697
|
-
ChevronDownIcon
|
|
6862
|
+
ChevronDownIcon.displayName = "ChevronDownIcon";
|
|
6698
6863
|
/**
|
|
6699
6864
|
* ThickChevronRightIcon - A thick chevron pointing right using React Native View
|
|
6700
6865
|
*/
|
|
@@ -6703,19 +6868,19 @@ const ThickChevronRightIcon = react.default.forwardRef(({ width = 9, height = 9,
|
|
|
6703
6868
|
const armHeight = 2.5;
|
|
6704
6869
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
6705
6870
|
style: [
|
|
6706
|
-
styles$
|
|
6871
|
+
styles$24.chevronContainer,
|
|
6707
6872
|
{
|
|
6708
6873
|
width,
|
|
6709
6874
|
height
|
|
6710
6875
|
},
|
|
6711
6876
|
style
|
|
6712
6877
|
],
|
|
6713
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6878
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.chevronArm, {
|
|
6714
6879
|
width: armWidth,
|
|
6715
6880
|
height: armHeight,
|
|
6716
6881
|
backgroundColor: color,
|
|
6717
6882
|
transform: [{ rotate: "45deg" }, { translateY: -1 }]
|
|
6718
|
-
}] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6883
|
+
}] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.chevronArm, {
|
|
6719
6884
|
width: armWidth,
|
|
6720
6885
|
height: armHeight,
|
|
6721
6886
|
backgroundColor: color,
|
|
@@ -6730,14 +6895,14 @@ ThickChevronRightIcon.displayName = "ThickChevronRightIcon";
|
|
|
6730
6895
|
const ThickCheckIcon = react.default.forwardRef(({ width = 9, height = 9, style, color = "currentColor" }, _forwardedRef) => {
|
|
6731
6896
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
6732
6897
|
style: [
|
|
6733
|
-
styles$
|
|
6898
|
+
styles$24.checkContainer,
|
|
6734
6899
|
{
|
|
6735
6900
|
width,
|
|
6736
6901
|
height
|
|
6737
6902
|
},
|
|
6738
6903
|
style
|
|
6739
6904
|
],
|
|
6740
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6905
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.checkShortArm, { backgroundColor: color }] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.checkLongArm, { backgroundColor: color }] })]
|
|
6741
6906
|
});
|
|
6742
6907
|
});
|
|
6743
6908
|
ThickCheckIcon.displayName = "ThickCheckIcon";
|
|
@@ -6747,21 +6912,21 @@ ThickCheckIcon.displayName = "ThickCheckIcon";
|
|
|
6747
6912
|
const ThickDividerHorizontalIcon = react.default.forwardRef(({ width = 9, height = 9, style, color = "currentColor" }, _forwardedRef) => {
|
|
6748
6913
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
6749
6914
|
style: [
|
|
6750
|
-
styles$
|
|
6915
|
+
styles$24.dividerContainer,
|
|
6751
6916
|
{
|
|
6752
6917
|
width,
|
|
6753
6918
|
height
|
|
6754
6919
|
},
|
|
6755
6920
|
style
|
|
6756
6921
|
],
|
|
6757
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
6922
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$24.dividerLine, {
|
|
6758
6923
|
width: width * .9,
|
|
6759
6924
|
backgroundColor: color
|
|
6760
6925
|
}] })
|
|
6761
6926
|
});
|
|
6762
6927
|
});
|
|
6763
6928
|
ThickDividerHorizontalIcon.displayName = "ThickDividerHorizontalIcon";
|
|
6764
|
-
const styles$
|
|
6929
|
+
const styles$24 = react_native.StyleSheet.create({
|
|
6765
6930
|
chevronContainer: {
|
|
6766
6931
|
alignItems: "center",
|
|
6767
6932
|
justifyContent: "center"
|
|
@@ -6915,10 +7080,11 @@ const SelectRoot = ({ defaultValue, value: controlledValue, onValueChange, open:
|
|
|
6915
7080
|
};
|
|
6916
7081
|
const SelectTrigger = ({ children, asChild = false }) => {
|
|
6917
7082
|
const { onOpenChange, open, anchorRef, measureAnchor, disabled } = useSelect();
|
|
7083
|
+
const globalHaptics = useHaptics$1();
|
|
6918
7084
|
const handlePress = () => {
|
|
6919
7085
|
measureAnchor();
|
|
6920
7086
|
onOpenChange(!open);
|
|
6921
|
-
|
|
7087
|
+
if (globalHaptics) triggerHaptic("press");
|
|
6922
7088
|
};
|
|
6923
7089
|
if (asChild && react.default.isValidElement(children)) {
|
|
6924
7090
|
const child = children;
|
|
@@ -6971,7 +7137,7 @@ const SelectValue = ({ placeholder = "Select an option", style }) => {
|
|
|
6971
7137
|
flexShrink: 1
|
|
6972
7138
|
}, style || {}],
|
|
6973
7139
|
children: selectedText || placeholder
|
|
6974
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon
|
|
7140
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon, {
|
|
6975
7141
|
color: selectedText ? variantColors.textColor : grayAlpha[9],
|
|
6976
7142
|
width: sizeStyles(),
|
|
6977
7143
|
height: sizeStyles(),
|
|
@@ -6995,7 +7161,7 @@ const SelectOverlay = ({ style }) => {
|
|
|
6995
7161
|
const { onOpenChange } = useSelect();
|
|
6996
7162
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
6997
7163
|
onPress: () => onOpenChange(false),
|
|
6998
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
7164
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$23.overlay, style] })
|
|
6999
7165
|
});
|
|
7000
7166
|
};
|
|
7001
7167
|
const SelectContent = ({ children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, avoidCollisions = true, size = 2, style }) => {
|
|
@@ -7080,7 +7246,7 @@ const SelectContent = ({ children, side = "bottom", sideOffset = 4, align = "sta
|
|
|
7080
7246
|
ref: contentRef,
|
|
7081
7247
|
onLayout: handleLayout,
|
|
7082
7248
|
style: [
|
|
7083
|
-
styles$
|
|
7249
|
+
styles$23.content,
|
|
7084
7250
|
{
|
|
7085
7251
|
backgroundColor: isDark ? colors[3] : colors[1],
|
|
7086
7252
|
borderRadius: radii.medium,
|
|
@@ -7117,6 +7283,7 @@ const SelectItem = ({ children, value: itemValue, disabled = false, style }) =>
|
|
|
7117
7283
|
const { value, onValueChange, colors, onOpenChange, size, registerItem, unregisterItem, setSelectedItemText, color } = useSelect();
|
|
7118
7284
|
const theme = useTheme$1();
|
|
7119
7285
|
const mode = useThemeMode$1();
|
|
7286
|
+
const globalHaptics = useHaptics$1();
|
|
7120
7287
|
const isSelected = value === itemValue;
|
|
7121
7288
|
const extractText = (0, react.useCallback)((node) => {
|
|
7122
7289
|
if (typeof node === "string") return node;
|
|
@@ -7197,7 +7364,7 @@ const SelectItem = ({ children, value: itemValue, disabled = false, style }) =>
|
|
|
7197
7364
|
if (!disabled) {
|
|
7198
7365
|
setSelectedItemText(extractText(children));
|
|
7199
7366
|
onValueChange(itemValue);
|
|
7200
|
-
|
|
7367
|
+
if (globalHaptics) triggerHaptic("press");
|
|
7201
7368
|
}
|
|
7202
7369
|
};
|
|
7203
7370
|
const itemPadding = getItemPadding();
|
|
@@ -7212,8 +7379,8 @@ const SelectItem = ({ children, value: itemValue, disabled = false, style }) =>
|
|
|
7212
7379
|
onPress: handlePress,
|
|
7213
7380
|
disabled,
|
|
7214
7381
|
style: [
|
|
7215
|
-
styles$
|
|
7216
|
-
disabled && styles$
|
|
7382
|
+
styles$23.item,
|
|
7383
|
+
disabled && styles$23.itemDisabled,
|
|
7217
7384
|
itemPadding,
|
|
7218
7385
|
style,
|
|
7219
7386
|
{
|
|
@@ -7277,7 +7444,7 @@ const SelectItem = ({ children, value: itemValue, disabled = false, style }) =>
|
|
|
7277
7444
|
const SelectSeparator = ({ style }) => {
|
|
7278
7445
|
const { colors } = useSelect();
|
|
7279
7446
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
7280
|
-
styles$
|
|
7447
|
+
styles$23.separator,
|
|
7281
7448
|
{ backgroundColor: colors[6] },
|
|
7282
7449
|
style
|
|
7283
7450
|
] });
|
|
@@ -7321,7 +7488,7 @@ const SelectLabel = ({ children, style = {} }) => {
|
|
|
7321
7488
|
children
|
|
7322
7489
|
});
|
|
7323
7490
|
};
|
|
7324
|
-
const styles$
|
|
7491
|
+
const styles$23 = react_native.StyleSheet.create({
|
|
7325
7492
|
overlay: {
|
|
7326
7493
|
flex: 1,
|
|
7327
7494
|
backgroundColor: "rgba(0, 0, 0, 0.01)"
|
|
@@ -7379,6 +7546,7 @@ const isRangeValue = (value) => {
|
|
|
7379
7546
|
const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue, onValueChange, onValueChangeEnd, min = 0, max = 100, step = 1, disabled = false, size = "2", variant = "solid", color, radius = "full", highContrast = false, minStepsBetweenThumbs = 0, label, showValueLabel = false, valueLabelFormatter = (v) => v.toString(), accessibilityLabel, accessibilityHint, style, hapticFeedback = true, ...rest }, ref) => {
|
|
7380
7547
|
const theme = useTheme$1();
|
|
7381
7548
|
const mode = useThemeMode$1();
|
|
7549
|
+
const globalHaptics = useHaptics$1();
|
|
7382
7550
|
const isDark = mode === "dark";
|
|
7383
7551
|
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
7384
7552
|
const grayAlpha = getGrayAlpha(theme);
|
|
@@ -7527,7 +7695,7 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7527
7695
|
const touchX = event.nativeEvent.locationX;
|
|
7528
7696
|
const position = Math.max(0, Math.min(1, touchX / currentTrackLayout.width));
|
|
7529
7697
|
const newValue = positionToValue(position);
|
|
7530
|
-
if (hapticFeedback)
|
|
7698
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
7531
7699
|
if (valuesRef.current.length === 1) {
|
|
7532
7700
|
updateValue([newValue]);
|
|
7533
7701
|
handleValueChangeEnd([newValue]);
|
|
@@ -7583,7 +7751,7 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7583
7751
|
const nearestIndex = getNearestThumbIndex(Math.max(0, Math.min(1, touchX / trackLayoutRef2.current.width)));
|
|
7584
7752
|
setActiveThumbIndex(nearestIndex);
|
|
7585
7753
|
activeThumbIndexRef.current = nearestIndex;
|
|
7586
|
-
if (hapticFeedback)
|
|
7754
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
7587
7755
|
},
|
|
7588
7756
|
onPanResponderMove: (_event, gestureState) => {
|
|
7589
7757
|
if (activeThumbIndexRef.current !== null) handleDrag(gestureState, activeThumbIndexRef.current);
|
|
@@ -7592,13 +7760,13 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7592
7760
|
setActiveThumbIndex(null);
|
|
7593
7761
|
activeThumbIndexRef.current = null;
|
|
7594
7762
|
handleValueChangeEnd(valuesRef.current);
|
|
7595
|
-
if (hapticFeedback)
|
|
7763
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
7596
7764
|
},
|
|
7597
7765
|
onPanResponderTerminate: () => {
|
|
7598
7766
|
setActiveThumbIndex(null);
|
|
7599
7767
|
activeThumbIndexRef.current = null;
|
|
7600
7768
|
handleValueChangeEnd(valuesRef.current);
|
|
7601
|
-
if (hapticFeedback)
|
|
7769
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
7602
7770
|
},
|
|
7603
7771
|
onPanResponderTerminationRequest: () => false
|
|
7604
7772
|
})).current;
|
|
@@ -7744,7 +7912,7 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7744
7912
|
]);
|
|
7745
7913
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RnView, {
|
|
7746
7914
|
ref,
|
|
7747
|
-
style: [styles$
|
|
7915
|
+
style: [styles$22.container, style],
|
|
7748
7916
|
accessibilityRole: "adjustable",
|
|
7749
7917
|
accessibilityLabel: accessibilityLabel || label || "Slider",
|
|
7750
7918
|
accessibilityHint: accessibilityHint || `Value: ${formatValueLabel()}, range: ${min} to ${max}`,
|
|
@@ -7752,17 +7920,17 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7752
7920
|
accessibilityState: { disabled },
|
|
7753
7921
|
...rest,
|
|
7754
7922
|
children: [(label || showValueLabel) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RnView, {
|
|
7755
|
-
style: styles$
|
|
7923
|
+
style: styles$22.labelContainer,
|
|
7756
7924
|
children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
7757
|
-
style: [styles$
|
|
7925
|
+
style: [styles$22.label, labelStyle],
|
|
7758
7926
|
children: label
|
|
7759
7927
|
}), showValueLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
7760
|
-
style: [styles$
|
|
7928
|
+
style: [styles$22.valueLabel, labelStyle],
|
|
7761
7929
|
children: formatValueLabel()
|
|
7762
7930
|
})]
|
|
7763
7931
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RnView, {
|
|
7764
7932
|
ref: trackLayoutRef,
|
|
7765
|
-
style: [styles$
|
|
7933
|
+
style: [styles$22.track, {
|
|
7766
7934
|
height: sizeValues.trackHeight,
|
|
7767
7935
|
borderRadius,
|
|
7768
7936
|
backgroundColor: trackBackgroundColor,
|
|
@@ -7775,15 +7943,15 @@ const Slider = react.default.forwardRef(({ value: controlledValue, defaultValue,
|
|
|
7775
7943
|
values.length === 1 && thumbAnimations[0] && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: getFilledTrackStyle(thumbAnimations[0], 0) }),
|
|
7776
7944
|
values.length === 2 && thumbAnimations[0] && thumbAnimations[1] && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: getFilledTrackStyle(thumbAnimations[1], 1) }),
|
|
7777
7945
|
thumbAnimations.slice(0, values.length).map((animatedValue, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, {
|
|
7778
|
-
style: [styles$
|
|
7779
|
-
children: !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$
|
|
7946
|
+
style: [styles$22.thumb, getThumbStyle(animatedValue)],
|
|
7947
|
+
children: !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$22.thumbInner, thumbInnerStyle] })
|
|
7780
7948
|
}, index))
|
|
7781
7949
|
]
|
|
7782
7950
|
})]
|
|
7783
7951
|
});
|
|
7784
7952
|
});
|
|
7785
7953
|
Slider.displayName = "Slider";
|
|
7786
|
-
const styles$
|
|
7954
|
+
const styles$22 = react_native.StyleSheet.create({
|
|
7787
7955
|
container: { width: "100%" },
|
|
7788
7956
|
labelContainer: {
|
|
7789
7957
|
flexDirection: "row",
|
|
@@ -7863,7 +8031,7 @@ const DialogOverlay = ({ style }) => {
|
|
|
7863
8031
|
const { grayAlpha } = useDialog();
|
|
7864
8032
|
const overlayColor = useThemeMode$1() === "dark" ? "rgba(0, 0, 0, 0.6)" : "rgba(10, 10, 10, 0.6)";
|
|
7865
8033
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
7866
|
-
styles$
|
|
8034
|
+
styles$21.overlay,
|
|
7867
8035
|
{ backgroundColor: overlayColor },
|
|
7868
8036
|
style
|
|
7869
8037
|
] }) });
|
|
@@ -7905,7 +8073,7 @@ const DialogContent = ({ children, style, hideCloseButton = false, size = 2 }) =
|
|
|
7905
8073
|
const maxWidth = size <= 2 ? Math.min(screenWidth - 64, 400) : Math.min(screenWidth - 64, 500);
|
|
7906
8074
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
7907
8075
|
style: [
|
|
7908
|
-
styles$
|
|
8076
|
+
styles$21.content,
|
|
7909
8077
|
{
|
|
7910
8078
|
backgroundColor: isDark ? theme.colors.gray.dark[2] : "#ffffff",
|
|
7911
8079
|
borderRadius: sizeStyles.radius,
|
|
@@ -7919,14 +8087,14 @@ const DialogContent = ({ children, style, hideCloseButton = false, size = 2 }) =
|
|
|
7919
8087
|
style
|
|
7920
8088
|
],
|
|
7921
8089
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ScrollView, {
|
|
7922
|
-
style: styles$
|
|
7923
|
-
contentContainerStyle: styles$
|
|
8090
|
+
style: styles$21.scrollContent,
|
|
8091
|
+
contentContainerStyle: styles$21.scrollContentContainer,
|
|
7924
8092
|
showsVerticalScrollIndicator: true,
|
|
7925
8093
|
bounces: true,
|
|
7926
8094
|
children
|
|
7927
8095
|
}), !hideCloseButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
7928
8096
|
onPress: handleClose,
|
|
7929
|
-
style: [styles$
|
|
8097
|
+
style: [styles$21.closeButton, { backgroundColor: isDark ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)" }],
|
|
7930
8098
|
accessibilityRole: "button",
|
|
7931
8099
|
accessibilityLabel: "Close dialog",
|
|
7932
8100
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
@@ -8011,7 +8179,7 @@ const DialogAction = ({ children, onPress, ...buttonProps }) => {
|
|
|
8011
8179
|
children
|
|
8012
8180
|
});
|
|
8013
8181
|
};
|
|
8014
|
-
const styles$
|
|
8182
|
+
const styles$21 = react_native.StyleSheet.create({
|
|
8015
8183
|
overlay: {
|
|
8016
8184
|
flex: 1,
|
|
8017
8185
|
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
@@ -8108,7 +8276,7 @@ const AlertDialogPortal = ({ children, hostId }) => {
|
|
|
8108
8276
|
const AlertDialogOverlay = ({ style }) => {
|
|
8109
8277
|
const overlayColor = useThemeMode$1() === "dark" ? "rgba(0, 0, 0, 0.6)" : "rgba(10, 10, 10, 0.6)";
|
|
8110
8278
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
8111
|
-
styles$
|
|
8279
|
+
styles$20.overlay,
|
|
8112
8280
|
{ backgroundColor: overlayColor },
|
|
8113
8281
|
style
|
|
8114
8282
|
] }) });
|
|
@@ -8149,7 +8317,7 @@ const AlertDialogContent = ({ children, style, hideCloseButton = true, size = 2
|
|
|
8149
8317
|
};
|
|
8150
8318
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
8151
8319
|
style: [
|
|
8152
|
-
styles$
|
|
8320
|
+
styles$20.content,
|
|
8153
8321
|
{
|
|
8154
8322
|
backgroundColor: isDark ? theme.colors.gray.dark[2] : theme.colors.gray[1],
|
|
8155
8323
|
borderRadius: sizeStyles.radius,
|
|
@@ -8163,14 +8331,14 @@ const AlertDialogContent = ({ children, style, hideCloseButton = true, size = 2
|
|
|
8163
8331
|
style
|
|
8164
8332
|
],
|
|
8165
8333
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ScrollView, {
|
|
8166
|
-
style: styles$
|
|
8167
|
-
contentContainerStyle: styles$
|
|
8334
|
+
style: styles$20.scrollContent,
|
|
8335
|
+
contentContainerStyle: styles$20.scrollContentContainer,
|
|
8168
8336
|
showsVerticalScrollIndicator: true,
|
|
8169
8337
|
bounces: true,
|
|
8170
8338
|
children
|
|
8171
8339
|
}), !hideCloseButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
8172
8340
|
onPress: handleClose,
|
|
8173
|
-
style: [styles$
|
|
8341
|
+
style: [styles$20.closeButton, { backgroundColor: isDark ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)" }],
|
|
8174
8342
|
accessibilityRole: "button",
|
|
8175
8343
|
accessibilityLabel: "Close dialog",
|
|
8176
8344
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
@@ -8260,7 +8428,7 @@ const AlertDialog = ({ open, onOpenChange, title, description, cancel, action, c
|
|
|
8260
8428
|
description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertDialogDescription, { children: description }),
|
|
8261
8429
|
children,
|
|
8262
8430
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
8263
|
-
style: styles$
|
|
8431
|
+
style: styles$20.actionRow,
|
|
8264
8432
|
children: [cancel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AlertDialogCancel, {
|
|
8265
8433
|
variant: "ghost",
|
|
8266
8434
|
children: cancel.label || "Cancel"
|
|
@@ -8274,7 +8442,7 @@ const AlertDialog = ({ open, onOpenChange, title, description, cancel, action, c
|
|
|
8274
8442
|
] })] })
|
|
8275
8443
|
});
|
|
8276
8444
|
};
|
|
8277
|
-
const styles$
|
|
8445
|
+
const styles$20 = react_native.StyleSheet.create({
|
|
8278
8446
|
overlay: {
|
|
8279
8447
|
flex: 1,
|
|
8280
8448
|
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
@@ -8468,7 +8636,7 @@ const PopoverOverlay = ({ style }) => {
|
|
|
8468
8636
|
const { onOpenChange } = usePopover();
|
|
8469
8637
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
8470
8638
|
onPress: () => onOpenChange(false),
|
|
8471
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
8639
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$19.overlay, style] })
|
|
8472
8640
|
});
|
|
8473
8641
|
};
|
|
8474
8642
|
const PopoverContent = ({ children, side = "bottom", sideOffset = 4, align = "center", alignOffset = 0, avoidCollisions = true, size = 2, style }) => {
|
|
@@ -8537,7 +8705,7 @@ const PopoverContent = ({ children, side = "bottom", sideOffset = 4, align = "ce
|
|
|
8537
8705
|
ref: contentRef,
|
|
8538
8706
|
onLayout: handleLayout,
|
|
8539
8707
|
style: [
|
|
8540
|
-
styles$
|
|
8708
|
+
styles$19.content,
|
|
8541
8709
|
{
|
|
8542
8710
|
backgroundColor: colors["1"] || grayAlpha["12"],
|
|
8543
8711
|
borderRadius: radii.medium,
|
|
@@ -8603,7 +8771,7 @@ const PopoverClose = ({ children, ariaLabel = "Close popover" }) => {
|
|
|
8603
8771
|
const { onOpenChange, colors } = usePopover();
|
|
8604
8772
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
8605
8773
|
onPress: () => onOpenChange(false),
|
|
8606
|
-
style: styles$
|
|
8774
|
+
style: styles$19.closeButton,
|
|
8607
8775
|
accessibilityLabel: ariaLabel,
|
|
8608
8776
|
accessibilityRole: "button",
|
|
8609
8777
|
children: children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
@@ -8615,7 +8783,7 @@ const PopoverClose = ({ children, ariaLabel = "Close popover" }) => {
|
|
|
8615
8783
|
})
|
|
8616
8784
|
});
|
|
8617
8785
|
};
|
|
8618
|
-
const styles$
|
|
8786
|
+
const styles$19 = react_native.StyleSheet.create({
|
|
8619
8787
|
overlay: {
|
|
8620
8788
|
flex: 1,
|
|
8621
8789
|
backgroundColor: "rgba(0, 0, 0, 0.01)"
|
|
@@ -8776,7 +8944,7 @@ const TooltipPortal = ({ children }) => {
|
|
|
8776
8944
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
8777
8945
|
onPress: () => onOpenChange(false),
|
|
8778
8946
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
8779
|
-
style: styles$
|
|
8947
|
+
style: styles$18.overlay,
|
|
8780
8948
|
children
|
|
8781
8949
|
})
|
|
8782
8950
|
})
|
|
@@ -8837,7 +9005,7 @@ const TooltipContent = ({ children, side = "top", sideOffset = 8, align = "cente
|
|
|
8837
9005
|
ref: contentRef,
|
|
8838
9006
|
onLayout: handleLayout,
|
|
8839
9007
|
style: [
|
|
8840
|
-
styles$
|
|
9008
|
+
styles$18.content,
|
|
8841
9009
|
{
|
|
8842
9010
|
backgroundColor: tooltipBackground,
|
|
8843
9011
|
borderRadius,
|
|
@@ -8863,15 +9031,15 @@ const TooltipContent = ({ children, side = "top", sideOffset = 8, align = "cente
|
|
|
8863
9031
|
},
|
|
8864
9032
|
children
|
|
8865
9033
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
8866
|
-
styles$
|
|
8867
|
-
actualSide === "top" && [styles$
|
|
8868
|
-
actualSide === "bottom" && [styles$
|
|
8869
|
-
actualSide === "left" && [styles$
|
|
9034
|
+
styles$18.arrow,
|
|
9035
|
+
actualSide === "top" && [styles$18.arrowBottom, { borderTopColor: arrowColor }],
|
|
9036
|
+
actualSide === "bottom" && [styles$18.arrowTop, { borderBottomColor: arrowColor }],
|
|
9037
|
+
actualSide === "left" && [styles$18.arrowRight, {
|
|
8870
9038
|
borderLeftColor: arrowColor,
|
|
8871
9039
|
borderTopColor: "transparent",
|
|
8872
9040
|
borderBottomColor: "transparent"
|
|
8873
9041
|
}],
|
|
8874
|
-
actualSide === "right" && [styles$
|
|
9042
|
+
actualSide === "right" && [styles$18.arrowLeft, {
|
|
8875
9043
|
borderRightColor: arrowColor,
|
|
8876
9044
|
borderTopColor: "transparent",
|
|
8877
9045
|
borderBottomColor: "transparent"
|
|
@@ -8910,7 +9078,7 @@ const Tooltip = ({ children, content, side = "top", sideOffset = 8, align = "cen
|
|
|
8910
9078
|
}) })]
|
|
8911
9079
|
});
|
|
8912
9080
|
};
|
|
8913
|
-
const styles$
|
|
9081
|
+
const styles$18 = react_native.StyleSheet.create({
|
|
8914
9082
|
overlay: {
|
|
8915
9083
|
flex: 1,
|
|
8916
9084
|
backgroundColor: "rgba(0, 0, 0, 0.01)"
|
|
@@ -9021,10 +9189,11 @@ const DropdownMenuRoot = ({ children, open: controlledOpen, onOpenChange, defaul
|
|
|
9021
9189
|
};
|
|
9022
9190
|
const DropdownMenuTrigger = ({ children, asChild = false, hapticFeedback = true }) => {
|
|
9023
9191
|
const { onOpenChange, open, anchorRef, measureAnchor } = useDropdownMenu();
|
|
9192
|
+
const globalHaptics = useHaptics$1();
|
|
9024
9193
|
const handlePress = () => {
|
|
9025
9194
|
measureAnchor();
|
|
9026
9195
|
onOpenChange(!open);
|
|
9027
|
-
if (hapticFeedback)
|
|
9196
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9028
9197
|
};
|
|
9029
9198
|
if (asChild && react.default.isValidElement(children)) {
|
|
9030
9199
|
const child = children;
|
|
@@ -9036,7 +9205,7 @@ const DropdownMenuTrigger = ({ children, asChild = false, hapticFeedback = true
|
|
|
9036
9205
|
}
|
|
9037
9206
|
});
|
|
9038
9207
|
}
|
|
9039
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
9208
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
9040
9209
|
ref: anchorRef,
|
|
9041
9210
|
onPress: handlePress,
|
|
9042
9211
|
pressedScale: .98,
|
|
@@ -9046,18 +9215,6 @@ const DropdownMenuTrigger = ({ children, asChild = false, hapticFeedback = true
|
|
|
9046
9215
|
children
|
|
9047
9216
|
});
|
|
9048
9217
|
};
|
|
9049
|
-
/**
|
|
9050
|
-
* Default down chevron icon for dropdown menu trigger
|
|
9051
|
-
* Uses Unicode character for React Native compatibility
|
|
9052
|
-
*/
|
|
9053
|
-
const ChevronDownIcon = ({ size, color }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
9054
|
-
style: {
|
|
9055
|
-
fontSize: size || 16,
|
|
9056
|
-
color: color || "currentColor",
|
|
9057
|
-
lineHeight: size ? size + 2 : 18
|
|
9058
|
-
},
|
|
9059
|
-
children: "▾"
|
|
9060
|
-
});
|
|
9061
9218
|
const DropdownMenuTriggerIcon = ({ icon, variant = "ghost", color, size = 2, disabled, accessibilityLabel = "Open menu", highContrast, style }) => {
|
|
9062
9219
|
const { onOpenChange, open, anchorRef, measureAnchor } = useDropdownMenu();
|
|
9063
9220
|
const handlePress = () => {
|
|
@@ -9093,7 +9250,7 @@ const DropdownMenuOverlay = ({ style }) => {
|
|
|
9093
9250
|
const { onOpenChange } = useDropdownMenu();
|
|
9094
9251
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
9095
9252
|
onPress: () => onOpenChange(false),
|
|
9096
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
9253
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$17.overlay, style] })
|
|
9097
9254
|
});
|
|
9098
9255
|
};
|
|
9099
9256
|
const DropdownMenuContent = ({ children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, avoidCollisions = true, size = 2, style }) => {
|
|
@@ -9177,7 +9334,7 @@ const DropdownMenuContent = ({ children, side = "bottom", sideOffset = 4, align
|
|
|
9177
9334
|
ref: contentRef,
|
|
9178
9335
|
onLayout: handleLayout,
|
|
9179
9336
|
style: [
|
|
9180
|
-
styles$
|
|
9337
|
+
styles$17.content,
|
|
9181
9338
|
{
|
|
9182
9339
|
backgroundColor: colors[1],
|
|
9183
9340
|
borderRadius: radii.medium,
|
|
@@ -9208,6 +9365,7 @@ const DropdownMenuGroup = ({ children }) => {
|
|
|
9208
9365
|
};
|
|
9209
9366
|
const DropdownMenuItem = ({ children, color, onSelect, disabled = false, shortcut, style, hapticFeedback = true }) => {
|
|
9210
9367
|
const { colors, onOpenChange, size } = useDropdownMenu();
|
|
9368
|
+
const globalHaptics = useHaptics$1();
|
|
9211
9369
|
const theme = useTheme$1();
|
|
9212
9370
|
const mode = useThemeMode$1();
|
|
9213
9371
|
const activeColor = color || theme.accentColor;
|
|
@@ -9252,17 +9410,17 @@ const DropdownMenuItem = ({ children, color, onSelect, disabled = false, shortcu
|
|
|
9252
9410
|
if (!disabled) {
|
|
9253
9411
|
onSelect?.();
|
|
9254
9412
|
onOpenChange(false);
|
|
9255
|
-
if (hapticFeedback)
|
|
9413
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9256
9414
|
}
|
|
9257
9415
|
};
|
|
9258
9416
|
const itemPadding = getItemPadding();
|
|
9259
9417
|
const fontSize = getFontSize();
|
|
9260
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
9418
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
9261
9419
|
onPress: handlePress,
|
|
9262
9420
|
disabled,
|
|
9263
9421
|
style: [
|
|
9264
|
-
styles$
|
|
9265
|
-
disabled && styles$
|
|
9422
|
+
styles$17.item,
|
|
9423
|
+
disabled && styles$17.itemDisabled,
|
|
9266
9424
|
{ backgroundColor: disabled ? "transparent" : "transparent" },
|
|
9267
9425
|
itemPadding,
|
|
9268
9426
|
style
|
|
@@ -9292,7 +9450,7 @@ const DropdownMenuItem = ({ children, color, onSelect, disabled = false, shortcu
|
|
|
9292
9450
|
const DropdownMenuSeparator = ({ style }) => {
|
|
9293
9451
|
const { colors } = useDropdownMenu();
|
|
9294
9452
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
9295
|
-
styles$
|
|
9453
|
+
styles$17.separator,
|
|
9296
9454
|
{ backgroundColor: colors[6] },
|
|
9297
9455
|
style
|
|
9298
9456
|
] });
|
|
@@ -9365,7 +9523,7 @@ const DropdownMenuCheckboxItem = ({ children, checked, onCheckedChange, disabled
|
|
|
9365
9523
|
alignItems: "center"
|
|
9366
9524
|
},
|
|
9367
9525
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
9368
|
-
style: [styles$
|
|
9526
|
+
style: [styles$17.checkbox, {
|
|
9369
9527
|
width: checkboxSize,
|
|
9370
9528
|
height: checkboxSize,
|
|
9371
9529
|
borderColor: colors[9],
|
|
@@ -9392,6 +9550,7 @@ const DropdownMenuCheckboxItem = ({ children, checked, onCheckedChange, disabled
|
|
|
9392
9550
|
};
|
|
9393
9551
|
const DropdownMenuRadioItem = ({ children, value, checked, onCheckedChange, disabled = false, hapticFeedback = true }) => {
|
|
9394
9552
|
const { colors, size } = useDropdownMenu();
|
|
9553
|
+
const globalHaptics = useHaptics$1();
|
|
9395
9554
|
const theme = useTheme$1();
|
|
9396
9555
|
const getFontSize = (0, react.useCallback)(() => {
|
|
9397
9556
|
switch (size) {
|
|
@@ -9412,7 +9571,7 @@ const DropdownMenuRadioItem = ({ children, value, checked, onCheckedChange, disa
|
|
|
9412
9571
|
const handlePress = () => {
|
|
9413
9572
|
if (!disabled) {
|
|
9414
9573
|
onCheckedChange(value);
|
|
9415
|
-
if (hapticFeedback)
|
|
9574
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9416
9575
|
}
|
|
9417
9576
|
};
|
|
9418
9577
|
const itemPadding = (0, react.useCallback)(() => {
|
|
@@ -9431,12 +9590,12 @@ const DropdownMenuRadioItem = ({ children, value, checked, onCheckedChange, disa
|
|
|
9431
9590
|
};
|
|
9432
9591
|
}
|
|
9433
9592
|
}, [size, theme.space])();
|
|
9434
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
9593
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
9435
9594
|
onPress: handlePress,
|
|
9436
9595
|
disabled,
|
|
9437
9596
|
style: [
|
|
9438
|
-
styles$
|
|
9439
|
-
disabled && styles$
|
|
9597
|
+
styles$17.item,
|
|
9598
|
+
disabled && styles$17.itemDisabled,
|
|
9440
9599
|
itemPadding
|
|
9441
9600
|
],
|
|
9442
9601
|
accessibilityRole: "menuitem",
|
|
@@ -9455,7 +9614,7 @@ const DropdownMenuRadioItem = ({ children, value, checked, onCheckedChange, disa
|
|
|
9455
9614
|
flex: 1
|
|
9456
9615
|
},
|
|
9457
9616
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
9458
|
-
style: [styles$
|
|
9617
|
+
style: [styles$17.radio, {
|
|
9459
9618
|
width: radioSize,
|
|
9460
9619
|
height: radioSize,
|
|
9461
9620
|
borderRadius: radioSize / 2,
|
|
@@ -9484,6 +9643,7 @@ const DropdownMenuSub = ({ children }) => {
|
|
|
9484
9643
|
};
|
|
9485
9644
|
const DropdownMenuSubTrigger = ({ children, hapticFeedback = true }) => {
|
|
9486
9645
|
const { colors, openSubmenu, onOpenSubmenu, size } = useDropdownMenu();
|
|
9646
|
+
const globalHaptics = useHaptics$1();
|
|
9487
9647
|
const theme = useTheme$1();
|
|
9488
9648
|
const submenuId = "submenu";
|
|
9489
9649
|
const getFontSize = (0, react.useCallback)(() => {
|
|
@@ -9511,13 +9671,13 @@ const DropdownMenuSubTrigger = ({ children, hapticFeedback = true }) => {
|
|
|
9511
9671
|
}, [size, theme.space]);
|
|
9512
9672
|
const handlePress = () => {
|
|
9513
9673
|
onOpenSubmenu(openSubmenu === submenuId ? null : submenuId);
|
|
9514
|
-
if (hapticFeedback)
|
|
9674
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9515
9675
|
};
|
|
9516
9676
|
const itemPadding = getItemPadding();
|
|
9517
9677
|
const fontSize = getFontSize();
|
|
9518
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
9678
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
9519
9679
|
onPress: handlePress,
|
|
9520
|
-
style: [styles$
|
|
9680
|
+
style: [styles$17.item, itemPadding],
|
|
9521
9681
|
pressedScale: .98,
|
|
9522
9682
|
pressedOpacity: .95,
|
|
9523
9683
|
animationDuration: 100,
|
|
@@ -9558,7 +9718,7 @@ const DropdownMenuSubContent = ({ children }) => {
|
|
|
9558
9718
|
}
|
|
9559
9719
|
}, [size, theme.space])();
|
|
9560
9720
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
9561
|
-
style: [styles$
|
|
9721
|
+
style: [styles$17.content, {
|
|
9562
9722
|
backgroundColor: colors[1],
|
|
9563
9723
|
borderRadius: radii.medium,
|
|
9564
9724
|
borderWidth: 1,
|
|
@@ -9573,7 +9733,7 @@ const DropdownMenuSubContent = ({ children }) => {
|
|
|
9573
9733
|
children
|
|
9574
9734
|
});
|
|
9575
9735
|
};
|
|
9576
|
-
const styles$
|
|
9736
|
+
const styles$17 = react_native.StyleSheet.create({
|
|
9577
9737
|
overlay: {
|
|
9578
9738
|
flex: 1,
|
|
9579
9739
|
backgroundColor: "rgba(0, 0, 0, 0.01)"
|
|
@@ -9667,6 +9827,7 @@ const ContextMenuRoot = ({ children, open: controlledOpen, onOpenChange, default
|
|
|
9667
9827
|
};
|
|
9668
9828
|
const ContextMenuTrigger = ({ children, onLongPress, asChild = false, hapticFeedback = true }) => {
|
|
9669
9829
|
const { setPosition, onOpenChange } = useContextMenuContext();
|
|
9830
|
+
const globalHaptics = useHaptics$1();
|
|
9670
9831
|
const handleLongPress = (event) => {
|
|
9671
9832
|
const { pageX, pageY } = event.nativeEvent;
|
|
9672
9833
|
setPosition({
|
|
@@ -9675,7 +9836,7 @@ const ContextMenuTrigger = ({ children, onLongPress, asChild = false, hapticFeed
|
|
|
9675
9836
|
});
|
|
9676
9837
|
onOpenChange(true);
|
|
9677
9838
|
onLongPress?.(event);
|
|
9678
|
-
if (hapticFeedback)
|
|
9839
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9679
9840
|
};
|
|
9680
9841
|
if (asChild && react.default.isValidElement(children)) {
|
|
9681
9842
|
const child = children;
|
|
@@ -9684,7 +9845,7 @@ const ContextMenuTrigger = ({ children, onLongPress, asChild = false, hapticFeed
|
|
|
9684
9845
|
handleLongPress(e);
|
|
9685
9846
|
} });
|
|
9686
9847
|
}
|
|
9687
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
9848
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
9688
9849
|
onLongPress: handleLongPress,
|
|
9689
9850
|
pressedScale: .98,
|
|
9690
9851
|
pressedOpacity: .95,
|
|
@@ -9709,7 +9870,7 @@ const ContextMenuOverlay = ({ style }) => {
|
|
|
9709
9870
|
const { onOpenChange } = useContextMenuContext();
|
|
9710
9871
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
9711
9872
|
onPress: () => onOpenChange(false),
|
|
9712
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$
|
|
9873
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [styles$16.overlay, style] })
|
|
9713
9874
|
});
|
|
9714
9875
|
};
|
|
9715
9876
|
/**
|
|
@@ -9746,6 +9907,7 @@ const getSizeStyles$2 = (size, theme) => {
|
|
|
9746
9907
|
const ContextMenuContent = ({ children, side = "bottom", sideOffset = 4, align = "start", alignOffset = 0, avoidCollisions = true, size = 2, style }) => {
|
|
9747
9908
|
const { colors, radii, position } = useContextMenuContext();
|
|
9748
9909
|
const theme = useTheme$1();
|
|
9910
|
+
const mode = useThemeMode$1();
|
|
9749
9911
|
const contentRef = (0, react.useRef)(null);
|
|
9750
9912
|
const [contentSize, setContentSize] = (0, react.useState)({
|
|
9751
9913
|
width: 0,
|
|
@@ -9791,12 +9953,11 @@ const ContextMenuContent = ({ children, side = "bottom", sideOffset = 4, align =
|
|
|
9791
9953
|
ref: contentRef,
|
|
9792
9954
|
onLayout: handleLayout,
|
|
9793
9955
|
style: [
|
|
9794
|
-
styles$
|
|
9956
|
+
styles$16.content,
|
|
9795
9957
|
{
|
|
9796
|
-
backgroundColor: colors[1],
|
|
9797
|
-
borderRadius: radii.medium,
|
|
9798
|
-
|
|
9799
|
-
borderColor: colors[6],
|
|
9958
|
+
backgroundColor: mode === "dark" ? colors[3] : colors[1],
|
|
9959
|
+
borderRadius: theme.radii[theme.radius] || radii.medium,
|
|
9960
|
+
borderColor: colors[2],
|
|
9800
9961
|
paddingVertical: sizeStyles.paddingVertical,
|
|
9801
9962
|
paddingHorizontal: sizeStyles.paddingHorizontal,
|
|
9802
9963
|
minWidth: sizeStyles.minWidth,
|
|
@@ -9826,11 +9987,12 @@ const ContextMenuGroup = ({ children }) => {
|
|
|
9826
9987
|
const ContextMenuItem = ({ children, color, onSelect, disabled = false, destructive = false, icon, shortcut, style, hapticFeedback = true }) => {
|
|
9827
9988
|
const { colors, onOpenChange, size } = useContextMenuContext();
|
|
9828
9989
|
const theme = useTheme$1();
|
|
9990
|
+
const globalHaptics = useHaptics$1();
|
|
9829
9991
|
const handlePress = () => {
|
|
9830
9992
|
if (!disabled) {
|
|
9831
9993
|
onSelect?.();
|
|
9832
9994
|
onOpenChange(false);
|
|
9833
|
-
if (hapticFeedback)
|
|
9995
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
9834
9996
|
}
|
|
9835
9997
|
};
|
|
9836
9998
|
const getFontSize = (0, react.useCallback)(() => {
|
|
@@ -9865,12 +10027,12 @@ const ContextMenuItem = ({ children, color, onSelect, disabled = false, destruct
|
|
|
9865
10027
|
const itemPadding = getItemPadding();
|
|
9866
10028
|
const destructiveColor = theme.colors.red[11];
|
|
9867
10029
|
const textColor = disabled ? colors[8] : destructive ? destructiveColor : colors[12];
|
|
9868
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
10030
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
9869
10031
|
onPress: handlePress,
|
|
9870
10032
|
disabled,
|
|
9871
10033
|
style: [
|
|
9872
|
-
styles$
|
|
9873
|
-
disabled && styles$
|
|
10034
|
+
styles$16.item,
|
|
10035
|
+
disabled && styles$16.itemDisabled,
|
|
9874
10036
|
itemPadding,
|
|
9875
10037
|
style
|
|
9876
10038
|
],
|
|
@@ -9906,7 +10068,7 @@ const ContextMenuItem = ({ children, color, onSelect, disabled = false, destruct
|
|
|
9906
10068
|
const ContextMenuSeparator = ({ style }) => {
|
|
9907
10069
|
const { colors } = useContextMenuContext();
|
|
9908
10070
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
9909
|
-
styles$
|
|
10071
|
+
styles$16.separator,
|
|
9910
10072
|
{ backgroundColor: colors[6] },
|
|
9911
10073
|
style
|
|
9912
10074
|
] });
|
|
@@ -9980,7 +10142,7 @@ const ContextMenuCheckboxItem = ({ children, checked, onCheckedChange, disabled
|
|
|
9980
10142
|
flex: 1
|
|
9981
10143
|
},
|
|
9982
10144
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
9983
|
-
style: [styles$
|
|
10145
|
+
style: [styles$16.checkbox, {
|
|
9984
10146
|
width: checkboxSize,
|
|
9985
10147
|
height: checkboxSize,
|
|
9986
10148
|
borderColor: colors[9],
|
|
@@ -10005,9 +10167,10 @@ const ContextMenuCheckboxItem = ({ children, checked, onCheckedChange, disabled
|
|
|
10005
10167
|
})
|
|
10006
10168
|
});
|
|
10007
10169
|
};
|
|
10008
|
-
const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disabled = false }) => {
|
|
10170
|
+
const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disabled = false, hapticFeedback = true }) => {
|
|
10009
10171
|
const { colors, size } = useContextMenuContext();
|
|
10010
10172
|
const theme = useTheme$1();
|
|
10173
|
+
const globalHaptics = useHaptics$1();
|
|
10011
10174
|
const getFontSize = (0, react.useCallback)(() => {
|
|
10012
10175
|
switch (size) {
|
|
10013
10176
|
case 1: return theme.typography.fontSizes[1].fontSize;
|
|
@@ -10027,7 +10190,7 @@ const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disab
|
|
|
10027
10190
|
const handlePress = () => {
|
|
10028
10191
|
if (!disabled) {
|
|
10029
10192
|
onCheckedChange(value);
|
|
10030
|
-
|
|
10193
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
10031
10194
|
}
|
|
10032
10195
|
};
|
|
10033
10196
|
const itemPadding = (0, react.useCallback)(() => {
|
|
@@ -10046,12 +10209,12 @@ const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disab
|
|
|
10046
10209
|
};
|
|
10047
10210
|
}
|
|
10048
10211
|
}, [size, theme.space])();
|
|
10049
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
10212
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
10050
10213
|
onPress: handlePress,
|
|
10051
10214
|
disabled,
|
|
10052
10215
|
style: [
|
|
10053
|
-
styles$
|
|
10054
|
-
disabled && styles$
|
|
10216
|
+
styles$16.item,
|
|
10217
|
+
disabled && styles$16.itemDisabled,
|
|
10055
10218
|
itemPadding
|
|
10056
10219
|
],
|
|
10057
10220
|
accessibilityRole: "menuitem",
|
|
@@ -10070,7 +10233,7 @@ const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disab
|
|
|
10070
10233
|
flex: 1
|
|
10071
10234
|
},
|
|
10072
10235
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
10073
|
-
style: [styles$
|
|
10236
|
+
style: [styles$16.radio, {
|
|
10074
10237
|
width: radioSize,
|
|
10075
10238
|
height: radioSize,
|
|
10076
10239
|
borderRadius: radioSize / 2,
|
|
@@ -10094,7 +10257,7 @@ const ContextMenuRadioItem = ({ children, value, checked, onCheckedChange, disab
|
|
|
10094
10257
|
})
|
|
10095
10258
|
});
|
|
10096
10259
|
};
|
|
10097
|
-
const styles$
|
|
10260
|
+
const styles$16 = react_native.StyleSheet.create({
|
|
10098
10261
|
overlay: {
|
|
10099
10262
|
flex: 1,
|
|
10100
10263
|
backgroundColor: "rgba(0, 0, 0, 0.01)"
|
|
@@ -10259,7 +10422,7 @@ const BottomSheetRoot = ({ children, open: controlledOpen, onOpenChange, snapPoi
|
|
|
10259
10422
|
},
|
|
10260
10423
|
onPanResponderRelease: (_, gestureState) => {
|
|
10261
10424
|
if (gestureState.dy > 100 || gestureState.vy > 500 / 1e3) {
|
|
10262
|
-
|
|
10425
|
+
if (globalHaptics) triggerHaptic("selection");
|
|
10263
10426
|
react_native.Animated.timing(translateY, {
|
|
10264
10427
|
toValue: targetSnapHeight,
|
|
10265
10428
|
duration: 200,
|
|
@@ -10291,7 +10454,9 @@ const BottomSheetRoot = ({ children, open: controlledOpen, onOpenChange, snapPoi
|
|
|
10291
10454
|
}
|
|
10292
10455
|
}, [open]);
|
|
10293
10456
|
const theme = useTheme$1();
|
|
10294
|
-
const
|
|
10457
|
+
const mode = useThemeMode$1();
|
|
10458
|
+
const globalHaptics = useHaptics$1();
|
|
10459
|
+
const colors = mode === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
10295
10460
|
const grayAlpha = getGrayAlpha(theme);
|
|
10296
10461
|
const radii = theme.radii;
|
|
10297
10462
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BottomSheetContext.Provider, {
|
|
@@ -10315,15 +10480,16 @@ const BottomSheetRoot = ({ children, open: controlledOpen, onOpenChange, snapPoi
|
|
|
10315
10480
|
};
|
|
10316
10481
|
const BottomSheetTrigger = ({ children, asChild = true, hapticFeedback = false }) => {
|
|
10317
10482
|
const { onOpenChange, open } = useBottomSheet();
|
|
10483
|
+
const globalHaptics = useHaptics$1();
|
|
10318
10484
|
const handlePress = () => {
|
|
10319
10485
|
onOpenChange(true);
|
|
10320
|
-
if (hapticFeedback)
|
|
10486
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
10321
10487
|
};
|
|
10322
10488
|
if (asChild && react.default.isValidElement(children)) return react.default.cloneElement(children, { onPress: (e) => {
|
|
10323
10489
|
children.props?.onPress?.(e);
|
|
10324
10490
|
handlePress();
|
|
10325
10491
|
} });
|
|
10326
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
10492
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
10327
10493
|
onPress: handlePress,
|
|
10328
10494
|
pressedScale: .98,
|
|
10329
10495
|
pressedOpacity: .95,
|
|
@@ -10345,15 +10511,17 @@ const BottomSheetPortal = ({ children, hostId }) => {
|
|
|
10345
10511
|
};
|
|
10346
10512
|
const BottomSheetOverlay = ({ style, hapticFeedback = true }) => {
|
|
10347
10513
|
const { onOpenChange } = useBottomSheet();
|
|
10348
|
-
const
|
|
10514
|
+
const mode = useThemeMode$1();
|
|
10515
|
+
const globalHaptics = useHaptics$1();
|
|
10516
|
+
const overlayColor = mode === "dark" ? "rgba(0, 0, 0, 0.6)" : "rgba(10, 10, 10, 0.6)";
|
|
10349
10517
|
const handlePress = () => {
|
|
10350
10518
|
onOpenChange(false);
|
|
10351
|
-
if (hapticFeedback)
|
|
10519
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
10352
10520
|
};
|
|
10353
10521
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
10354
10522
|
onPress: handlePress,
|
|
10355
10523
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
10356
|
-
styles$
|
|
10524
|
+
styles$15.overlay,
|
|
10357
10525
|
{ backgroundColor: overlayColor },
|
|
10358
10526
|
style
|
|
10359
10527
|
] })
|
|
@@ -10364,10 +10532,10 @@ const BottomSheetHandle = ({ style }) => {
|
|
|
10364
10532
|
const theme = useTheme$1();
|
|
10365
10533
|
const handleColor = useThemeMode$1() === "dark" ? theme.colors.gray.dark[8] : theme.colors.gray[8];
|
|
10366
10534
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
10367
|
-
style: styles$
|
|
10535
|
+
style: styles$15.handleContainer,
|
|
10368
10536
|
...panHandlers,
|
|
10369
10537
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
10370
|
-
styles$
|
|
10538
|
+
styles$15.handle,
|
|
10371
10539
|
{ backgroundColor: handleColor },
|
|
10372
10540
|
style
|
|
10373
10541
|
] })
|
|
@@ -10377,7 +10545,9 @@ const BottomSheetContent = ({ children, style, snapPoints: localSnapPoints, size
|
|
|
10377
10545
|
const { radii, snapPoints: contextSnapPoints, currentSnapIndex, translateY, snapHeights, panHandlers } = useBottomSheet();
|
|
10378
10546
|
const theme = useTheme$1();
|
|
10379
10547
|
const isDark = useThemeMode$1() === "dark";
|
|
10548
|
+
const effectiveSnapPoints = localSnapPoints || contextSnapPoints;
|
|
10380
10549
|
const targetSnapHeight = snapHeights[currentSnapIndex] || snapHeights[0];
|
|
10550
|
+
const maxTargetSnapHeight = snapHeights[effectiveSnapPoints.length - 1] || snapHeights[0];
|
|
10381
10551
|
const sizeStyles = getSizeStyles$1(size, theme.space, radii);
|
|
10382
10552
|
const shadow = getShadow(6, isDark);
|
|
10383
10553
|
const backgroundColor = isDark ? theme.colors.gray.dark[2] : "#ffffff";
|
|
@@ -10385,27 +10555,22 @@ const BottomSheetContent = ({ children, style, snapPoints: localSnapPoints, size
|
|
|
10385
10555
|
const borderTopRightRadius = radii.large;
|
|
10386
10556
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.Animated.View, {
|
|
10387
10557
|
style: [
|
|
10388
|
-
styles$
|
|
10558
|
+
styles$15.content,
|
|
10389
10559
|
{
|
|
10390
10560
|
backgroundColor,
|
|
10391
10561
|
borderTopLeftRadius,
|
|
10392
10562
|
borderTopRightRadius,
|
|
10393
10563
|
flex: 1,
|
|
10394
10564
|
paddingHorizontal: sizeStyles.paddingHorizontal,
|
|
10395
|
-
|
|
10565
|
+
minHeight: targetSnapHeight,
|
|
10566
|
+
maxHeight: maxTargetSnapHeight,
|
|
10396
10567
|
transform: [{ translateY }],
|
|
10397
10568
|
...shadow || {}
|
|
10398
10569
|
},
|
|
10399
10570
|
style
|
|
10400
10571
|
],
|
|
10401
10572
|
...panHandlers,
|
|
10402
|
-
children: [!hideHandle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BottomSheetHandle, {}),
|
|
10403
|
-
style: styles$13.scrollContent,
|
|
10404
|
-
contentContainerStyle: styles$13.scrollContentContainer,
|
|
10405
|
-
showsVerticalScrollIndicator: true,
|
|
10406
|
-
bounces: true,
|
|
10407
|
-
children
|
|
10408
|
-
})]
|
|
10573
|
+
children: [!hideHandle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BottomSheetHandle, {}), children]
|
|
10409
10574
|
});
|
|
10410
10575
|
};
|
|
10411
10576
|
const BottomSheetTitle = ({ children, style = {}, size = 4, weight = "bold", align, color, truncate, numberOfLines, fontFamily, opacity, asChild = false, ...rest }) => {
|
|
@@ -10455,7 +10620,7 @@ const BottomSheetFooter = ({ children, style, withBorder = true, withPadding = t
|
|
|
10455
10620
|
const borderColor = useThemeMode$1() === "dark" ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)";
|
|
10456
10621
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
10457
10622
|
style: [
|
|
10458
|
-
styles$
|
|
10623
|
+
styles$15.footer,
|
|
10459
10624
|
withBorder && {
|
|
10460
10625
|
borderTopWidth: 1,
|
|
10461
10626
|
borderTopColor: borderColor
|
|
@@ -10467,16 +10632,17 @@ const BottomSheetFooter = ({ children, style, withBorder = true, withPadding = t
|
|
|
10467
10632
|
style
|
|
10468
10633
|
],
|
|
10469
10634
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
10470
|
-
style: styles$
|
|
10635
|
+
style: styles$15.footerContent,
|
|
10471
10636
|
children
|
|
10472
10637
|
})
|
|
10473
10638
|
});
|
|
10474
10639
|
};
|
|
10475
10640
|
const BottomSheetClose = ({ children, asChild = true, hapticFeedback = false, ...buttonProps }) => {
|
|
10476
10641
|
const { onOpenChange } = useBottomSheet();
|
|
10642
|
+
const globalHaptics = useHaptics$1();
|
|
10477
10643
|
const handlePress = () => {
|
|
10478
10644
|
onOpenChange(false);
|
|
10479
|
-
if (hapticFeedback)
|
|
10645
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
10480
10646
|
};
|
|
10481
10647
|
if (asChild && children && react.default.isValidElement(children)) return react.default.cloneElement(children, { onPress: (e) => {
|
|
10482
10648
|
children.props?.onPress?.(e);
|
|
@@ -10491,10 +10657,11 @@ const BottomSheetClose = ({ children, asChild = true, hapticFeedback = false, ..
|
|
|
10491
10657
|
};
|
|
10492
10658
|
const BottomSheetAction = ({ children, onPress, hapticFeedback = true, ...buttonProps }) => {
|
|
10493
10659
|
const { onOpenChange } = useBottomSheet();
|
|
10660
|
+
const globalHaptics = useHaptics$1();
|
|
10494
10661
|
const handlePress = () => {
|
|
10495
10662
|
onPress?.();
|
|
10496
10663
|
onOpenChange(false);
|
|
10497
|
-
if (hapticFeedback)
|
|
10664
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
10498
10665
|
};
|
|
10499
10666
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
10500
10667
|
...buttonProps,
|
|
@@ -10502,7 +10669,7 @@ const BottomSheetAction = ({ children, onPress, hapticFeedback = true, ...button
|
|
|
10502
10669
|
children
|
|
10503
10670
|
});
|
|
10504
10671
|
};
|
|
10505
|
-
const styles$
|
|
10672
|
+
const styles$15 = react_native.StyleSheet.create({
|
|
10506
10673
|
overlay: {
|
|
10507
10674
|
flex: 1,
|
|
10508
10675
|
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
@@ -10512,7 +10679,8 @@ const styles$13 = react_native.StyleSheet.create({
|
|
|
10512
10679
|
left: 0,
|
|
10513
10680
|
right: 0,
|
|
10514
10681
|
bottom: 0,
|
|
10515
|
-
elevation: 4
|
|
10682
|
+
elevation: 4,
|
|
10683
|
+
paddingBottom: 16
|
|
10516
10684
|
},
|
|
10517
10685
|
handleContainer: {
|
|
10518
10686
|
alignItems: "center",
|
|
@@ -10531,8 +10699,7 @@ const styles$13 = react_native.StyleSheet.create({
|
|
|
10531
10699
|
footer: {
|
|
10532
10700
|
flexDirection: "row",
|
|
10533
10701
|
justifyContent: "flex-end",
|
|
10534
|
-
alignItems: "center"
|
|
10535
|
-
marginTop: 8
|
|
10702
|
+
alignItems: "center"
|
|
10536
10703
|
},
|
|
10537
10704
|
footerContent: {
|
|
10538
10705
|
flexDirection: "row",
|
|
@@ -10554,49 +10721,617 @@ const BottomSheet = {
|
|
|
10554
10721
|
};
|
|
10555
10722
|
|
|
10556
10723
|
//#endregion
|
|
10557
|
-
//#region src/components/
|
|
10558
|
-
const
|
|
10559
|
-
|
|
10560
|
-
const
|
|
10561
|
-
|
|
10562
|
-
|
|
10563
|
-
|
|
10564
|
-
|
|
10565
|
-
|
|
10566
|
-
const
|
|
10567
|
-
const
|
|
10568
|
-
const
|
|
10569
|
-
|
|
10570
|
-
|
|
10571
|
-
|
|
10572
|
-
|
|
10573
|
-
|
|
10574
|
-
|
|
10575
|
-
|
|
10576
|
-
|
|
10577
|
-
|
|
10578
|
-
|
|
10579
|
-
|
|
10580
|
-
|
|
10581
|
-
|
|
10582
|
-
|
|
10583
|
-
|
|
10584
|
-
|
|
10585
|
-
|
|
10586
|
-
|
|
10587
|
-
|
|
10588
|
-
|
|
10589
|
-
}
|
|
10590
|
-
|
|
10591
|
-
|
|
10592
|
-
|
|
10593
|
-
|
|
10594
|
-
|
|
10595
|
-
|
|
10596
|
-
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
|
|
10724
|
+
//#region src/components/overlays/Sidebar.tsx
|
|
10725
|
+
const SidebarContext = (0, react.createContext)(null);
|
|
10726
|
+
const useSidebar = () => {
|
|
10727
|
+
const context = (0, react.useContext)(SidebarContext);
|
|
10728
|
+
if (!context) throw new Error("Sidebar components must be used within a Sidebar.Root");
|
|
10729
|
+
return context;
|
|
10730
|
+
};
|
|
10731
|
+
const { width: SCREEN_WIDTH } = react_native.Dimensions.get("window");
|
|
10732
|
+
const SidebarRoot = ({ children, open: controlledOpen, onOpenChange, side = "left", variant = "overlay", width = 280, animationDuration = 300 }) => {
|
|
10733
|
+
const [internalOpen, setInternalOpen] = (0, react.useState)(false);
|
|
10734
|
+
const open = controlledOpen !== void 0 ? controlledOpen : internalOpen;
|
|
10735
|
+
const initialTranslateX = side === "left" ? -width : width;
|
|
10736
|
+
const translateX = (0, react.useRef)(new react_native.Animated.Value(open ? 0 : initialTranslateX)).current;
|
|
10737
|
+
const mainTranslateX = (0, react.useRef)(new react_native.Animated.Value(0)).current;
|
|
10738
|
+
const skipAnimationRef = (0, react.useRef)(false);
|
|
10739
|
+
const swipeDistance = (0, react.useRef)(0);
|
|
10740
|
+
const isSwiping = (0, react.useRef)(false);
|
|
10741
|
+
const startX = (0, react.useRef)(0);
|
|
10742
|
+
const handleOpenChange = (0, react.useCallback)((newOpen, skipAnimation = false) => {
|
|
10743
|
+
skipAnimationRef.current = skipAnimation;
|
|
10744
|
+
if (controlledOpen === void 0) setInternalOpen(newOpen);
|
|
10745
|
+
onOpenChange?.(newOpen);
|
|
10746
|
+
}, [controlledOpen, onOpenChange]);
|
|
10747
|
+
const panResponder = (0, react.useMemo)(() => {
|
|
10748
|
+
return react_native.PanResponder.create({
|
|
10749
|
+
onStartShouldSetPanResponder: () => false,
|
|
10750
|
+
onMoveShouldSetPanResponder: (_, gestureState) => {
|
|
10751
|
+
return Math.abs(gestureState.dx) > 10 && Math.abs(gestureState.dx) > Math.abs(gestureState.dy);
|
|
10752
|
+
},
|
|
10753
|
+
onPanResponderGrant: () => {
|
|
10754
|
+
startX.current = 0;
|
|
10755
|
+
isSwiping.current = true;
|
|
10756
|
+
},
|
|
10757
|
+
onPanResponderMove: (_, gestureState) => {
|
|
10758
|
+
isSwiping.current = true;
|
|
10759
|
+
swipeDistance.current = gestureState.dx;
|
|
10760
|
+
if (side === "left") {
|
|
10761
|
+
const newTranslateX = initialTranslateX + gestureState.dx;
|
|
10762
|
+
const clampedValue = Math.max(-width, Math.min(0, newTranslateX));
|
|
10763
|
+
translateX.setValue(clampedValue);
|
|
10764
|
+
} else {
|
|
10765
|
+
const newTranslateX = initialTranslateX + gestureState.dx;
|
|
10766
|
+
const clampedValue = Math.max(0, Math.min(width, newTranslateX));
|
|
10767
|
+
translateX.setValue(clampedValue);
|
|
10768
|
+
}
|
|
10769
|
+
},
|
|
10770
|
+
onPanResponderRelease: (_, gestureState) => {
|
|
10771
|
+
const threshold = width * .25;
|
|
10772
|
+
const velocityThreshold = 500;
|
|
10773
|
+
if (side === "left") if (gestureState.dx > threshold || gestureState.vx > velocityThreshold / 1e3) react_native.Animated.timing(translateX, {
|
|
10774
|
+
toValue: 0,
|
|
10775
|
+
duration: animationDuration,
|
|
10776
|
+
useNativeDriver: true
|
|
10777
|
+
}).start();
|
|
10778
|
+
else if (gestureState.dx < -threshold || gestureState.vx < -velocityThreshold / 1e3) {
|
|
10779
|
+
if (globalHaptics) triggerHaptic("selection");
|
|
10780
|
+
react_native.Animated.timing(translateX, {
|
|
10781
|
+
toValue: -width,
|
|
10782
|
+
duration: animationDuration,
|
|
10783
|
+
useNativeDriver: true
|
|
10784
|
+
}).start();
|
|
10785
|
+
} else react_native.Animated.spring(translateX, {
|
|
10786
|
+
toValue: open ? 0 : -width,
|
|
10787
|
+
tension: 65,
|
|
10788
|
+
friction: 11,
|
|
10789
|
+
useNativeDriver: true
|
|
10790
|
+
}).start();
|
|
10791
|
+
else if (gestureState.dx < -threshold || gestureState.vx < -velocityThreshold / 1e3) react_native.Animated.timing(translateX, {
|
|
10792
|
+
toValue: 0,
|
|
10793
|
+
duration: animationDuration,
|
|
10794
|
+
useNativeDriver: true
|
|
10795
|
+
}).start();
|
|
10796
|
+
else if (gestureState.dx > threshold || gestureState.vx > velocityThreshold / 1e3) {
|
|
10797
|
+
if (globalHaptics) triggerHaptic("selection");
|
|
10798
|
+
react_native.Animated.timing(translateX, {
|
|
10799
|
+
toValue: width,
|
|
10800
|
+
duration: animationDuration,
|
|
10801
|
+
useNativeDriver: true
|
|
10802
|
+
}).start();
|
|
10803
|
+
} else react_native.Animated.spring(translateX, {
|
|
10804
|
+
toValue: open ? 0 : width,
|
|
10805
|
+
tension: 65,
|
|
10806
|
+
friction: 11,
|
|
10807
|
+
useNativeDriver: true
|
|
10808
|
+
}).start();
|
|
10809
|
+
isSwiping.current = false;
|
|
10810
|
+
}
|
|
10811
|
+
});
|
|
10812
|
+
}, [
|
|
10813
|
+
translateX,
|
|
10814
|
+
width,
|
|
10815
|
+
side,
|
|
10816
|
+
open,
|
|
10817
|
+
initialTranslateX,
|
|
10818
|
+
handleOpenChange,
|
|
10819
|
+
globalHaptics
|
|
10820
|
+
]);
|
|
10821
|
+
(0, react.useEffect)(() => {
|
|
10822
|
+
if (skipAnimationRef.current) {
|
|
10823
|
+
skipAnimationRef.current = false;
|
|
10824
|
+
return;
|
|
10825
|
+
}
|
|
10826
|
+
if (open) {
|
|
10827
|
+
translateX.setValue(side === "left" ? -width : width);
|
|
10828
|
+
react_native.Animated.timing(translateX, {
|
|
10829
|
+
toValue: 0,
|
|
10830
|
+
duration: animationDuration,
|
|
10831
|
+
useNativeDriver: true
|
|
10832
|
+
}).start();
|
|
10833
|
+
} else react_native.Animated.timing(translateX, {
|
|
10834
|
+
toValue: side === "left" ? -width : width,
|
|
10835
|
+
duration: animationDuration,
|
|
10836
|
+
useNativeDriver: true
|
|
10837
|
+
}).start();
|
|
10838
|
+
}, [
|
|
10839
|
+
open,
|
|
10840
|
+
width,
|
|
10841
|
+
side,
|
|
10842
|
+
translateX,
|
|
10843
|
+
animationDuration
|
|
10844
|
+
]);
|
|
10845
|
+
(0, react.useEffect)(() => {
|
|
10846
|
+
if (skipAnimationRef.current) return;
|
|
10847
|
+
if (variant === "push") if (open) react_native.Animated.timing(mainTranslateX, {
|
|
10848
|
+
toValue: side === "left" ? width : -width,
|
|
10849
|
+
duration: animationDuration,
|
|
10850
|
+
useNativeDriver: true
|
|
10851
|
+
}).start();
|
|
10852
|
+
else react_native.Animated.timing(mainTranslateX, {
|
|
10853
|
+
toValue: 0,
|
|
10854
|
+
duration: animationDuration,
|
|
10855
|
+
useNativeDriver: true
|
|
10856
|
+
}).start();
|
|
10857
|
+
}, [
|
|
10858
|
+
open,
|
|
10859
|
+
width,
|
|
10860
|
+
side,
|
|
10861
|
+
variant,
|
|
10862
|
+
mainTranslateX,
|
|
10863
|
+
animationDuration
|
|
10864
|
+
]);
|
|
10865
|
+
const theme = useTheme$1();
|
|
10866
|
+
const mode = useThemeMode$1();
|
|
10867
|
+
const globalHaptics = useHaptics$1();
|
|
10868
|
+
const colors = mode === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
10869
|
+
const grayAlpha = getGrayAlpha(theme);
|
|
10870
|
+
const radii = theme.radii;
|
|
10871
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarContext.Provider, {
|
|
10872
|
+
value: {
|
|
10873
|
+
open,
|
|
10874
|
+
onOpenChange: handleOpenChange,
|
|
10875
|
+
side,
|
|
10876
|
+
variant,
|
|
10877
|
+
width,
|
|
10878
|
+
animationDuration,
|
|
10879
|
+
colors,
|
|
10880
|
+
grayAlpha,
|
|
10881
|
+
radii,
|
|
10882
|
+
translateX,
|
|
10883
|
+
mainTranslateX,
|
|
10884
|
+
panHandlers: panResponder.panHandlers,
|
|
10885
|
+
globalHaptics
|
|
10886
|
+
},
|
|
10887
|
+
children
|
|
10888
|
+
});
|
|
10889
|
+
};
|
|
10890
|
+
const SidebarTrigger = ({ children, asChild = true, hapticFeedback = false }) => {
|
|
10891
|
+
const { onOpenChange, globalHaptics } = useSidebar();
|
|
10892
|
+
const handlePress = () => {
|
|
10893
|
+
onOpenChange(true);
|
|
10894
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
10895
|
+
};
|
|
10896
|
+
if (asChild && react.default.isValidElement(children)) return react.default.cloneElement(children, { onPress: (e) => {
|
|
10897
|
+
children.props?.onPress?.(e);
|
|
10898
|
+
handlePress();
|
|
10899
|
+
} });
|
|
10900
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
10901
|
+
onPress: handlePress,
|
|
10902
|
+
pressedScale: .98,
|
|
10903
|
+
pressedOpacity: .95,
|
|
10904
|
+
animationDuration: 100,
|
|
10905
|
+
hapticFeedback: false,
|
|
10906
|
+
children
|
|
10907
|
+
});
|
|
10908
|
+
};
|
|
10909
|
+
const SidebarPortal = ({ children }) => {
|
|
10910
|
+
const { open, variant } = useSidebar();
|
|
10911
|
+
if (variant === "push") return null;
|
|
10912
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Modal, {
|
|
10913
|
+
transparent: true,
|
|
10914
|
+
visible: open,
|
|
10915
|
+
animationType: "none",
|
|
10916
|
+
supportedOrientations: ["portrait", "landscape"],
|
|
10917
|
+
onRequestClose: () => {},
|
|
10918
|
+
children
|
|
10919
|
+
});
|
|
10920
|
+
};
|
|
10921
|
+
const SidebarOverlay = ({ style, hapticFeedback = true }) => {
|
|
10922
|
+
const { onOpenChange, variant, globalHaptics } = useSidebar();
|
|
10923
|
+
const isDark = useThemeMode$1() === "dark";
|
|
10924
|
+
if (variant === "push") return null;
|
|
10925
|
+
const overlayColor = isDark ? "rgba(0, 0, 0, 0.6)" : "rgba(10, 10, 10, 0.6)";
|
|
10926
|
+
const handlePress = () => {
|
|
10927
|
+
onOpenChange(false);
|
|
10928
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
10929
|
+
};
|
|
10930
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
10931
|
+
onPress: handlePress,
|
|
10932
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
10933
|
+
styles$14.overlay,
|
|
10934
|
+
{ backgroundColor: overlayColor },
|
|
10935
|
+
style
|
|
10936
|
+
] })
|
|
10937
|
+
});
|
|
10938
|
+
};
|
|
10939
|
+
const SidebarContent = ({ children, style }) => {
|
|
10940
|
+
const { side, variant, width, translateX, panHandlers, radii, colors } = useSidebar();
|
|
10941
|
+
const theme = useTheme$1();
|
|
10942
|
+
const isDark = useThemeMode$1() === "dark";
|
|
10943
|
+
const backgroundColor = isDark ? theme.colors.gray.dark[2] : "#ffffff";
|
|
10944
|
+
const shadow = getShadow(6, isDark);
|
|
10945
|
+
const borderRadius = side === "left" ? {
|
|
10946
|
+
borderTopRightRadius: radii.large,
|
|
10947
|
+
borderBottomRightRadius: radii.large
|
|
10948
|
+
} : {
|
|
10949
|
+
borderTopLeftRadius: radii.large,
|
|
10950
|
+
borderBottomLeftRadius: radii.large
|
|
10951
|
+
};
|
|
10952
|
+
if (variant === "push") {
|
|
10953
|
+
const positionStyle = side === "left" ? { marginRight: -width } : { marginLeft: -width };
|
|
10954
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, {
|
|
10955
|
+
style: [{
|
|
10956
|
+
backgroundColor,
|
|
10957
|
+
width,
|
|
10958
|
+
...borderRadius,
|
|
10959
|
+
transform: [{ translateX }],
|
|
10960
|
+
...shadow || {},
|
|
10961
|
+
...positionStyle
|
|
10962
|
+
}, style],
|
|
10963
|
+
...panHandlers,
|
|
10964
|
+
children
|
|
10965
|
+
});
|
|
10966
|
+
}
|
|
10967
|
+
const positionStyle = side === "left" ? { left: 0 } : { right: 0 };
|
|
10968
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, {
|
|
10969
|
+
style: [
|
|
10970
|
+
styles$14.content,
|
|
10971
|
+
{
|
|
10972
|
+
backgroundColor,
|
|
10973
|
+
width,
|
|
10974
|
+
...borderRadius,
|
|
10975
|
+
...positionStyle,
|
|
10976
|
+
transform: [{ translateX }],
|
|
10977
|
+
...shadow || {}
|
|
10978
|
+
},
|
|
10979
|
+
style
|
|
10980
|
+
],
|
|
10981
|
+
...panHandlers,
|
|
10982
|
+
children
|
|
10983
|
+
});
|
|
10984
|
+
};
|
|
10985
|
+
const SidebarHeader = ({ children, style }) => {
|
|
10986
|
+
const theme = useTheme$1();
|
|
10987
|
+
const borderColor = useThemeMode$1() === "dark" ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)";
|
|
10988
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
10989
|
+
style: [
|
|
10990
|
+
styles$14.header,
|
|
10991
|
+
{
|
|
10992
|
+
paddingHorizontal: theme.space[4],
|
|
10993
|
+
paddingVertical: theme.space[3],
|
|
10994
|
+
borderBottomWidth: 1,
|
|
10995
|
+
borderBottomColor: borderColor
|
|
10996
|
+
},
|
|
10997
|
+
style
|
|
10998
|
+
],
|
|
10999
|
+
children
|
|
11000
|
+
});
|
|
11001
|
+
};
|
|
11002
|
+
const SidebarItem = ({ children, onPress, style, hapticFeedback = true }) => {
|
|
11003
|
+
const { onOpenChange, globalHaptics } = useSidebar();
|
|
11004
|
+
const theme = useTheme$1();
|
|
11005
|
+
const isDark = useThemeMode$1() === "dark";
|
|
11006
|
+
const handlePress = () => {
|
|
11007
|
+
onPress?.();
|
|
11008
|
+
onOpenChange(false);
|
|
11009
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
11010
|
+
};
|
|
11011
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Pressable, {
|
|
11012
|
+
style: ({ pressed }) => [
|
|
11013
|
+
styles$14.item,
|
|
11014
|
+
{
|
|
11015
|
+
paddingHorizontal: theme.space[4],
|
|
11016
|
+
paddingVertical: theme.space[3],
|
|
11017
|
+
backgroundColor: pressed ? isDark ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.05)" : "transparent"
|
|
11018
|
+
},
|
|
11019
|
+
style
|
|
11020
|
+
],
|
|
11021
|
+
onPress: handlePress,
|
|
11022
|
+
children
|
|
11023
|
+
});
|
|
11024
|
+
};
|
|
11025
|
+
const SidebarSeparator = ({ style }) => {
|
|
11026
|
+
const theme = useTheme$1();
|
|
11027
|
+
const borderColor = useThemeMode$1() === "dark" ? "rgba(255, 255, 255, 0.1)" : "rgba(0, 0, 0, 0.1)";
|
|
11028
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, { style: [
|
|
11029
|
+
styles$14.separator,
|
|
11030
|
+
{
|
|
11031
|
+
marginHorizontal: theme.space[4],
|
|
11032
|
+
borderBottomWidth: 1,
|
|
11033
|
+
borderBottomColor: borderColor
|
|
11034
|
+
},
|
|
11035
|
+
style
|
|
11036
|
+
] });
|
|
11037
|
+
};
|
|
11038
|
+
const SidebarBackdrop = ({ style, hapticFeedback = true }) => {
|
|
11039
|
+
const { onOpenChange, variant, globalHaptics } = useSidebar();
|
|
11040
|
+
const isDark = useThemeMode$1() === "dark";
|
|
11041
|
+
if (variant === "overlay") return null;
|
|
11042
|
+
const overlayColor = isDark ? "rgba(0, 0, 0, 0.3)" : "rgba(0, 0, 0, 0.2)";
|
|
11043
|
+
const handlePress = () => {
|
|
11044
|
+
onOpenChange(false);
|
|
11045
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
11046
|
+
};
|
|
11047
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TouchableWithoutFeedback, {
|
|
11048
|
+
onPress: handlePress,
|
|
11049
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: [
|
|
11050
|
+
styles$14.backdrop,
|
|
11051
|
+
{ backgroundColor: overlayColor },
|
|
11052
|
+
style
|
|
11053
|
+
] })
|
|
11054
|
+
});
|
|
11055
|
+
};
|
|
11056
|
+
const SidebarContainer = ({ children }) => {
|
|
11057
|
+
const { animationDuration, variant, side, width, open, onOpenChange, translateX, mainTranslateX } = useSidebar();
|
|
11058
|
+
if (variant !== "push") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children });
|
|
11059
|
+
const containerPanResponder = (0, react.useMemo)(() => {
|
|
11060
|
+
return react_native.PanResponder.create({
|
|
11061
|
+
onStartShouldSetPanResponder: () => false,
|
|
11062
|
+
onMoveShouldSetPanResponder: (_, gestureState) => {
|
|
11063
|
+
if (Math.abs(gestureState.dx) <= 10 || Math.abs(gestureState.dx) <= Math.abs(gestureState.dy)) return false;
|
|
11064
|
+
if (!open) if (side === "left") return gestureState.dx > 10;
|
|
11065
|
+
else return gestureState.dx < -10;
|
|
11066
|
+
return true;
|
|
11067
|
+
},
|
|
11068
|
+
onPanResponderGrant: () => {},
|
|
11069
|
+
onPanResponderMove: (_, gestureState) => {
|
|
11070
|
+
if (side === "left") if (open) {
|
|
11071
|
+
const newTranslateX = gestureState.dx;
|
|
11072
|
+
const clampedValue = Math.max(-width, Math.min(0, newTranslateX));
|
|
11073
|
+
translateX.setValue(clampedValue);
|
|
11074
|
+
mainTranslateX.setValue(clampedValue + width);
|
|
11075
|
+
} else {
|
|
11076
|
+
const newTranslateX = -width + gestureState.dx;
|
|
11077
|
+
const clampedValue = Math.max(-width, Math.min(0, newTranslateX));
|
|
11078
|
+
translateX.setValue(clampedValue);
|
|
11079
|
+
mainTranslateX.setValue(gestureState.dx);
|
|
11080
|
+
}
|
|
11081
|
+
else if (open) {
|
|
11082
|
+
const newTranslateX = width + gestureState.dx;
|
|
11083
|
+
const clampedValue = Math.max(0, Math.min(width, newTranslateX));
|
|
11084
|
+
translateX.setValue(clampedValue);
|
|
11085
|
+
mainTranslateX.setValue(clampedValue - width);
|
|
11086
|
+
} else {
|
|
11087
|
+
const newTranslateX = width + gestureState.dx;
|
|
11088
|
+
const clampedValue = Math.max(0, Math.min(width, newTranslateX));
|
|
11089
|
+
translateX.setValue(clampedValue);
|
|
11090
|
+
mainTranslateX.setValue(gestureState.dx);
|
|
11091
|
+
}
|
|
11092
|
+
},
|
|
11093
|
+
onPanResponderRelease: (_, gestureState) => {
|
|
11094
|
+
const threshold = width * .25;
|
|
11095
|
+
const velocityThreshold = 500;
|
|
11096
|
+
if (side === "left") if (open) if (gestureState.dx < -threshold || gestureState.vx < -velocityThreshold / 1e3) {
|
|
11097
|
+
triggerHaptic("selection");
|
|
11098
|
+
onOpenChange(false, true);
|
|
11099
|
+
react_native.Animated.timing(translateX, {
|
|
11100
|
+
toValue: -width,
|
|
11101
|
+
duration: animationDuration,
|
|
11102
|
+
useNativeDriver: true
|
|
11103
|
+
}).start();
|
|
11104
|
+
react_native.Animated.timing(mainTranslateX, {
|
|
11105
|
+
toValue: 0,
|
|
11106
|
+
duration: animationDuration,
|
|
11107
|
+
useNativeDriver: true
|
|
11108
|
+
}).start();
|
|
11109
|
+
} else {
|
|
11110
|
+
react_native.Animated.spring(translateX, {
|
|
11111
|
+
toValue: 0,
|
|
11112
|
+
tension: 65,
|
|
11113
|
+
friction: 11,
|
|
11114
|
+
useNativeDriver: true
|
|
11115
|
+
}).start();
|
|
11116
|
+
react_native.Animated.spring(mainTranslateX, {
|
|
11117
|
+
toValue: width,
|
|
11118
|
+
tension: 65,
|
|
11119
|
+
friction: 11,
|
|
11120
|
+
useNativeDriver: true
|
|
11121
|
+
}).start();
|
|
11122
|
+
}
|
|
11123
|
+
else if (gestureState.dx > threshold || gestureState.vx > velocityThreshold / 1e3) {
|
|
11124
|
+
react_native.Animated.timing(translateX, {
|
|
11125
|
+
toValue: 0,
|
|
11126
|
+
duration: animationDuration,
|
|
11127
|
+
useNativeDriver: true
|
|
11128
|
+
}).start();
|
|
11129
|
+
react_native.Animated.timing(mainTranslateX, {
|
|
11130
|
+
toValue: width,
|
|
11131
|
+
duration: animationDuration,
|
|
11132
|
+
useNativeDriver: true
|
|
11133
|
+
}).start();
|
|
11134
|
+
onOpenChange(true, true);
|
|
11135
|
+
} else {
|
|
11136
|
+
react_native.Animated.spring(translateX, {
|
|
11137
|
+
toValue: -width,
|
|
11138
|
+
tension: 65,
|
|
11139
|
+
friction: 11,
|
|
11140
|
+
useNativeDriver: true
|
|
11141
|
+
}).start();
|
|
11142
|
+
react_native.Animated.spring(mainTranslateX, {
|
|
11143
|
+
toValue: 0,
|
|
11144
|
+
tension: 65,
|
|
11145
|
+
friction: 11,
|
|
11146
|
+
useNativeDriver: true
|
|
11147
|
+
}).start();
|
|
11148
|
+
}
|
|
11149
|
+
else if (open) if (gestureState.dx > threshold || gestureState.vx > velocityThreshold / 1e3) {
|
|
11150
|
+
triggerHaptic("selection");
|
|
11151
|
+
onOpenChange(false, true);
|
|
11152
|
+
react_native.Animated.timing(translateX, {
|
|
11153
|
+
toValue: width,
|
|
11154
|
+
duration: animationDuration,
|
|
11155
|
+
useNativeDriver: true
|
|
11156
|
+
}).start();
|
|
11157
|
+
react_native.Animated.timing(mainTranslateX, {
|
|
11158
|
+
toValue: 0,
|
|
11159
|
+
duration: animationDuration,
|
|
11160
|
+
useNativeDriver: true
|
|
11161
|
+
}).start();
|
|
11162
|
+
} else {
|
|
11163
|
+
react_native.Animated.spring(translateX, {
|
|
11164
|
+
toValue: 0,
|
|
11165
|
+
tension: 65,
|
|
11166
|
+
friction: 11,
|
|
11167
|
+
useNativeDriver: true
|
|
11168
|
+
}).start();
|
|
11169
|
+
react_native.Animated.spring(mainTranslateX, {
|
|
11170
|
+
toValue: -width,
|
|
11171
|
+
tension: 65,
|
|
11172
|
+
friction: 11,
|
|
11173
|
+
useNativeDriver: true
|
|
11174
|
+
}).start();
|
|
11175
|
+
}
|
|
11176
|
+
else if (gestureState.dx < -threshold || gestureState.vx < -velocityThreshold / 1e3) {
|
|
11177
|
+
react_native.Animated.timing(translateX, {
|
|
11178
|
+
toValue: 0,
|
|
11179
|
+
duration: animationDuration,
|
|
11180
|
+
useNativeDriver: true
|
|
11181
|
+
}).start();
|
|
11182
|
+
react_native.Animated.timing(mainTranslateX, {
|
|
11183
|
+
toValue: -width,
|
|
11184
|
+
duration: animationDuration,
|
|
11185
|
+
useNativeDriver: true
|
|
11186
|
+
}).start();
|
|
11187
|
+
onOpenChange(true, true);
|
|
11188
|
+
} else {
|
|
11189
|
+
react_native.Animated.spring(translateX, {
|
|
11190
|
+
toValue: width,
|
|
11191
|
+
tension: 65,
|
|
11192
|
+
friction: 11,
|
|
11193
|
+
useNativeDriver: true
|
|
11194
|
+
}).start();
|
|
11195
|
+
react_native.Animated.spring(mainTranslateX, {
|
|
11196
|
+
toValue: 0,
|
|
11197
|
+
tension: 65,
|
|
11198
|
+
friction: 11,
|
|
11199
|
+
useNativeDriver: true
|
|
11200
|
+
}).start();
|
|
11201
|
+
}
|
|
11202
|
+
}
|
|
11203
|
+
});
|
|
11204
|
+
}, [
|
|
11205
|
+
side,
|
|
11206
|
+
width,
|
|
11207
|
+
open,
|
|
11208
|
+
onOpenChange,
|
|
11209
|
+
translateX,
|
|
11210
|
+
mainTranslateX,
|
|
11211
|
+
animationDuration
|
|
11212
|
+
]);
|
|
11213
|
+
const childArray = react.default.Children.toArray(children);
|
|
11214
|
+
let contentChild = null;
|
|
11215
|
+
let mainChild = null;
|
|
11216
|
+
childArray.forEach((child) => {
|
|
11217
|
+
if (react.default.isValidElement(child) && child.type === SidebarContent) contentChild = child;
|
|
11218
|
+
else if (react.default.isValidElement(child) && child.type === SidebarMain) mainChild = child;
|
|
11219
|
+
});
|
|
11220
|
+
if (side === "right" && mainChild && contentChild) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
11221
|
+
style: styles$14.container,
|
|
11222
|
+
...containerPanResponder.panHandlers,
|
|
11223
|
+
children: [mainChild, contentChild]
|
|
11224
|
+
});
|
|
11225
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
11226
|
+
style: styles$14.container,
|
|
11227
|
+
...containerPanResponder.panHandlers,
|
|
11228
|
+
children
|
|
11229
|
+
});
|
|
11230
|
+
};
|
|
11231
|
+
const SidebarMain = ({ children, style }) => {
|
|
11232
|
+
const { side, variant, width, open, mainTranslateX } = useSidebar();
|
|
11233
|
+
useTheme$1();
|
|
11234
|
+
if (variant === "push") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, {
|
|
11235
|
+
style: [
|
|
11236
|
+
styles$14.mainContent,
|
|
11237
|
+
{
|
|
11238
|
+
flex: 1,
|
|
11239
|
+
transform: [{ translateX: mainTranslateX }]
|
|
11240
|
+
},
|
|
11241
|
+
style
|
|
11242
|
+
],
|
|
11243
|
+
children
|
|
11244
|
+
});
|
|
11245
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children });
|
|
11246
|
+
};
|
|
11247
|
+
const styles$14 = react_native.StyleSheet.create({
|
|
11248
|
+
container: {
|
|
11249
|
+
flexDirection: "row",
|
|
11250
|
+
flex: 1
|
|
11251
|
+
},
|
|
11252
|
+
overlay: {
|
|
11253
|
+
...react_native.StyleSheet.absoluteFillObject,
|
|
11254
|
+
zIndex: 1
|
|
11255
|
+
},
|
|
11256
|
+
backdrop: {
|
|
11257
|
+
...react_native.StyleSheet.absoluteFillObject,
|
|
11258
|
+
zIndex: 1
|
|
11259
|
+
},
|
|
11260
|
+
content: {
|
|
11261
|
+
position: "absolute",
|
|
11262
|
+
top: 0,
|
|
11263
|
+
bottom: 0,
|
|
11264
|
+
zIndex: 2,
|
|
11265
|
+
elevation: 4
|
|
11266
|
+
},
|
|
11267
|
+
scrollContent: { flex: 1 },
|
|
11268
|
+
scrollContentContainer: {
|
|
11269
|
+
flexGrow: 1,
|
|
11270
|
+
paddingBottom: 4
|
|
11271
|
+
},
|
|
11272
|
+
header: {},
|
|
11273
|
+
item: {},
|
|
11274
|
+
separator: { height: 1 },
|
|
11275
|
+
mainContent: {}
|
|
11276
|
+
});
|
|
11277
|
+
const Sidebar = {
|
|
11278
|
+
Root: SidebarRoot,
|
|
11279
|
+
Trigger: SidebarTrigger,
|
|
11280
|
+
Portal: SidebarPortal,
|
|
11281
|
+
Overlay: SidebarOverlay,
|
|
11282
|
+
Content: SidebarContent,
|
|
11283
|
+
Header: SidebarHeader,
|
|
11284
|
+
Item: SidebarItem,
|
|
11285
|
+
Separator: SidebarSeparator,
|
|
11286
|
+
Main: SidebarMain,
|
|
11287
|
+
Backdrop: SidebarBackdrop,
|
|
11288
|
+
Container: SidebarContainer
|
|
11289
|
+
};
|
|
11290
|
+
|
|
11291
|
+
//#endregion
|
|
11292
|
+
//#region src/components/data-display/Avatar.tsx
|
|
11293
|
+
const Avatar = react.default.forwardRef(({ src, alt = "Avatar", color, variant = "solid", highContrast, radius, size = 2, fallback, fallbackBehavior = "character", style, accessibilityLabel, children }, ref) => {
|
|
11294
|
+
const theme = useTheme$1();
|
|
11295
|
+
const mode = useThemeMode$1();
|
|
11296
|
+
const isDark = mode === "dark";
|
|
11297
|
+
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
11298
|
+
const grayAlpha = getGrayAlpha(theme);
|
|
11299
|
+
const activeColor = color || theme.accentColor;
|
|
11300
|
+
const radii = theme.radii[radius] ?? theme.radii.medium;
|
|
11301
|
+
const selectedRadius = radius || theme.radius;
|
|
11302
|
+
const [imageError, setImageError] = (0, react.useState)(false);
|
|
11303
|
+
const variantColors = (0, react.useMemo)(() => getVariantColors(theme, activeColor, mode, variant, highContrast), [
|
|
11304
|
+
getVariantColors,
|
|
11305
|
+
color,
|
|
11306
|
+
variant,
|
|
11307
|
+
highContrast,
|
|
11308
|
+
isDark,
|
|
11309
|
+
theme
|
|
11310
|
+
]);
|
|
11311
|
+
const getSizeValues = () => {
|
|
11312
|
+
switch (size) {
|
|
11313
|
+
case 1: return {
|
|
11314
|
+
size: 24,
|
|
11315
|
+
fontSize: 10,
|
|
11316
|
+
borderWidth: 0,
|
|
11317
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
11318
|
+
};
|
|
11319
|
+
case 2: return {
|
|
11320
|
+
size: 32,
|
|
11321
|
+
fontSize: 12,
|
|
11322
|
+
borderWidth: 0,
|
|
11323
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
11324
|
+
};
|
|
11325
|
+
case 3: return {
|
|
11326
|
+
size: 48,
|
|
11327
|
+
fontSize: 18,
|
|
11328
|
+
borderWidth: 0,
|
|
11329
|
+
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
11330
|
+
};
|
|
11331
|
+
case 4: return {
|
|
11332
|
+
size: 64,
|
|
11333
|
+
fontSize: 24,
|
|
11334
|
+
borderWidth: 0,
|
|
10600
11335
|
borderRadius: selectedRadius === "full" ? 9999 : radii
|
|
10601
11336
|
};
|
|
10602
11337
|
case 5: return {
|
|
@@ -10648,10 +11383,10 @@ const Avatar = react.default.forwardRef(({ src, alt = "Avatar", color, variant =
|
|
|
10648
11383
|
if (!trimmed) return null;
|
|
10649
11384
|
return trimmed.split(/\s+/).map((word) => word[0]).join("").slice(0, 2).toUpperCase() || null;
|
|
10650
11385
|
})();
|
|
10651
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
11386
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RnView, {
|
|
10652
11387
|
ref,
|
|
10653
11388
|
style: [
|
|
10654
|
-
styles$
|
|
11389
|
+
styles$13.avatar,
|
|
10655
11390
|
{
|
|
10656
11391
|
width: sizeValues.size,
|
|
10657
11392
|
height: sizeValues.size,
|
|
@@ -10676,8 +11411,8 @@ const Avatar = react.default.forwardRef(({ src, alt = "Avatar", color, variant =
|
|
|
10676
11411
|
onError: () => setImageError(true),
|
|
10677
11412
|
accessibilityLabel: alt,
|
|
10678
11413
|
testID: "avatar-image"
|
|
10679
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
10680
|
-
style: [styles$
|
|
11414
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11415
|
+
style: [styles$13.fallback, {
|
|
10681
11416
|
backgroundColor: variantColors.backgroundColor,
|
|
10682
11417
|
flex: 1,
|
|
10683
11418
|
width: "100%",
|
|
@@ -10701,7 +11436,7 @@ const AvatarFallback = ({ children }) => {
|
|
|
10701
11436
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children });
|
|
10702
11437
|
};
|
|
10703
11438
|
Avatar.Fallback = AvatarFallback;
|
|
10704
|
-
const styles$
|
|
11439
|
+
const styles$13 = react_native.StyleSheet.create({
|
|
10705
11440
|
avatar: {
|
|
10706
11441
|
alignItems: "center",
|
|
10707
11442
|
justifyContent: "center"
|
|
@@ -10769,7 +11504,7 @@ const Badge = react.default.forwardRef(({ children, variant = "soft", color, rad
|
|
|
10769
11504
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
10770
11505
|
ref,
|
|
10771
11506
|
style: [
|
|
10772
|
-
styles$
|
|
11507
|
+
styles$12.badge,
|
|
10773
11508
|
badgeStyle,
|
|
10774
11509
|
style
|
|
10775
11510
|
],
|
|
@@ -10777,13 +11512,13 @@ const Badge = react.default.forwardRef(({ children, variant = "soft", color, rad
|
|
|
10777
11512
|
accessibilityRole: "none",
|
|
10778
11513
|
...rest,
|
|
10779
11514
|
children: typeof children === "string" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
10780
|
-
style: [styles$
|
|
11515
|
+
style: [styles$12.text, textStyle],
|
|
10781
11516
|
children
|
|
10782
11517
|
}) : children
|
|
10783
11518
|
});
|
|
10784
11519
|
});
|
|
10785
11520
|
Badge.displayName = "Badge";
|
|
10786
|
-
const styles$
|
|
11521
|
+
const styles$12 = react_native.StyleSheet.create({
|
|
10787
11522
|
badge: {
|
|
10788
11523
|
flexDirection: "row",
|
|
10789
11524
|
alignItems: "center"
|
|
@@ -11019,14 +11754,14 @@ const Card = react.default.forwardRef(({ asChild = false, children, color, radiu
|
|
|
11019
11754
|
style,
|
|
11020
11755
|
...rest,
|
|
11021
11756
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11022
|
-
style: [styles$
|
|
11757
|
+
style: [styles$11.card, cardStyle],
|
|
11023
11758
|
children
|
|
11024
11759
|
})
|
|
11025
11760
|
});
|
|
11026
11761
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11027
11762
|
ref,
|
|
11028
11763
|
style: [
|
|
11029
|
-
styles$
|
|
11764
|
+
styles$11.card,
|
|
11030
11765
|
cardStyle,
|
|
11031
11766
|
style
|
|
11032
11767
|
],
|
|
@@ -11040,7 +11775,7 @@ const CardFooter = ({ children, separate = true }) => {
|
|
|
11040
11775
|
useThemeMode$1();
|
|
11041
11776
|
const grayAlpha = getGrayAlpha(theme);
|
|
11042
11777
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11043
|
-
style: [styles$
|
|
11778
|
+
style: [styles$11.footer, separate && {
|
|
11044
11779
|
borderTopWidth: 1,
|
|
11045
11780
|
borderTopColor: grayAlpha["6"],
|
|
11046
11781
|
marginTop: theme.space[4],
|
|
@@ -11050,7 +11785,7 @@ const CardFooter = ({ children, separate = true }) => {
|
|
|
11050
11785
|
});
|
|
11051
11786
|
};
|
|
11052
11787
|
Card.Footer = CardFooter;
|
|
11053
|
-
const styles$
|
|
11788
|
+
const styles$11 = react_native.StyleSheet.create({
|
|
11054
11789
|
card: { overflow: "hidden" },
|
|
11055
11790
|
footer: {
|
|
11056
11791
|
flexDirection: "row",
|
|
@@ -11097,7 +11832,7 @@ const DataListRoot = ({ children, orientation = "horizontal", size = 2, trim = "
|
|
|
11097
11832
|
},
|
|
11098
11833
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
11099
11834
|
style: [
|
|
11100
|
-
styles$
|
|
11835
|
+
styles$10.root,
|
|
11101
11836
|
rootStyle,
|
|
11102
11837
|
trimStyles,
|
|
11103
11838
|
style
|
|
@@ -11121,7 +11856,7 @@ const DataListItem = ({ children, align = "baseline", style }) => {
|
|
|
11121
11856
|
};
|
|
11122
11857
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
11123
11858
|
style: [
|
|
11124
|
-
styles$
|
|
11859
|
+
styles$10.item,
|
|
11125
11860
|
itemStyle,
|
|
11126
11861
|
style
|
|
11127
11862
|
],
|
|
@@ -11191,7 +11926,7 @@ const DataListValue = ({ children, style }) => {
|
|
|
11191
11926
|
});
|
|
11192
11927
|
};
|
|
11193
11928
|
DataListValue.displayName = "DataList.Value";
|
|
11194
|
-
const styles$
|
|
11929
|
+
const styles$10 = react_native.StyleSheet.create({
|
|
11195
11930
|
root: { width: "100%" },
|
|
11196
11931
|
item: { width: "100%" }
|
|
11197
11932
|
});
|
|
@@ -11213,7 +11948,7 @@ const FancyList = ({ data, renderItem, keyExtractor, style, showDividers = true,
|
|
|
11213
11948
|
const backgroundColor = isDark ? grayAlpha["2"] : grayAlpha["1"];
|
|
11214
11949
|
const defaultKeyExtractor = (item, index) => {
|
|
11215
11950
|
if (keyExtractor) return keyExtractor(item, index);
|
|
11216
|
-
if ("id" in item) return String(item.id);
|
|
11951
|
+
if (item && typeof item === "object" && "id" in item) return String(item.id);
|
|
11217
11952
|
return String(index);
|
|
11218
11953
|
};
|
|
11219
11954
|
const renderListItem = (info) => {
|
|
@@ -11223,7 +11958,7 @@ const FancyList = ({ data, renderItem, keyExtractor, style, showDividers = true,
|
|
|
11223
11958
|
borderBottomColor: dividerColor
|
|
11224
11959
|
};
|
|
11225
11960
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11226
|
-
style: [styles$
|
|
11961
|
+
style: [styles$9.item, itemStyle],
|
|
11227
11962
|
children: renderItem({
|
|
11228
11963
|
item: info.item,
|
|
11229
11964
|
index: info.index,
|
|
@@ -11238,14 +11973,14 @@ const FancyList = ({ data, renderItem, keyExtractor, style, showDividers = true,
|
|
|
11238
11973
|
};
|
|
11239
11974
|
if (!scrollable) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(RnView, {
|
|
11240
11975
|
style: [
|
|
11241
|
-
styles$
|
|
11976
|
+
styles$9.container,
|
|
11242
11977
|
listContainerStyle,
|
|
11243
11978
|
style
|
|
11244
11979
|
],
|
|
11245
11980
|
children: [
|
|
11246
11981
|
ListHeaderComponent,
|
|
11247
11982
|
data.map((item, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11248
|
-
style: styles$
|
|
11983
|
+
style: styles$9.nonScrollableItem,
|
|
11249
11984
|
children: renderItem({
|
|
11250
11985
|
item,
|
|
11251
11986
|
index,
|
|
@@ -11256,28 +11991,28 @@ const FancyList = ({ data, renderItem, keyExtractor, style, showDividers = true,
|
|
|
11256
11991
|
]
|
|
11257
11992
|
});
|
|
11258
11993
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11259
|
-
style: [styles$
|
|
11994
|
+
style: [styles$9.container, style],
|
|
11260
11995
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnFlatList, {
|
|
11261
11996
|
data,
|
|
11262
11997
|
renderItem: renderListItem,
|
|
11263
11998
|
keyExtractor: defaultKeyExtractor,
|
|
11264
|
-
style: [styles$
|
|
11265
|
-
contentContainerStyle: styles$
|
|
11999
|
+
style: [styles$9.flatList, listContainerStyle],
|
|
12000
|
+
contentContainerStyle: styles$9.contentContainer,
|
|
11266
12001
|
showsVerticalScrollIndicator: true,
|
|
11267
12002
|
ListEmptyComponent,
|
|
11268
12003
|
ListHeaderComponent,
|
|
11269
12004
|
ListFooterComponent,
|
|
11270
|
-
ItemSeparatorComponent: () => showDividers ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$
|
|
12005
|
+
ItemSeparatorComponent: () => showDividers ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, { style: [styles$9.divider, {
|
|
11271
12006
|
backgroundColor: dividerColor,
|
|
11272
12007
|
marginHorizontal: theme.space[4]
|
|
11273
12008
|
}] }) : null,
|
|
11274
|
-
ListHeaderComponentStyle: styles$
|
|
11275
|
-
ListFooterComponentStyle: styles$
|
|
12009
|
+
ListHeaderComponentStyle: styles$9.listHeaderFooter,
|
|
12010
|
+
ListFooterComponentStyle: styles$9.listHeaderFooter
|
|
11276
12011
|
})
|
|
11277
12012
|
});
|
|
11278
12013
|
};
|
|
11279
12014
|
FancyList.displayName = "FancyList";
|
|
11280
|
-
const styles$
|
|
12015
|
+
const styles$9 = react_native.StyleSheet.create({
|
|
11281
12016
|
container: { width: "100%" },
|
|
11282
12017
|
flatList: { flex: 1 },
|
|
11283
12018
|
contentContainer: { flexGrow: 1 },
|
|
@@ -11381,7 +12116,7 @@ const Progress = (0, react.forwardRef)(({ value, max = 100, size = 2, variant =
|
|
|
11381
12116
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11382
12117
|
ref,
|
|
11383
12118
|
style: [
|
|
11384
|
-
styles$
|
|
12119
|
+
styles$8.track,
|
|
11385
12120
|
{
|
|
11386
12121
|
backgroundColor: trackBackgroundColor,
|
|
11387
12122
|
borderColor: trackBorder.borderColor,
|
|
@@ -11400,7 +12135,7 @@ const Progress = (0, react.forwardRef)(({ value, max = 100, size = 2, variant =
|
|
|
11400
12135
|
},
|
|
11401
12136
|
accessibilityRole: "progressbar",
|
|
11402
12137
|
testID,
|
|
11403
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: [styles$
|
|
12138
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, { style: [styles$8.indicator, {
|
|
11404
12139
|
width: animatedWidth,
|
|
11405
12140
|
backgroundColor: indicatorColor,
|
|
11406
12141
|
borderRadius: selectedRadius
|
|
@@ -11408,7 +12143,7 @@ const Progress = (0, react.forwardRef)(({ value, max = 100, size = 2, variant =
|
|
|
11408
12143
|
});
|
|
11409
12144
|
});
|
|
11410
12145
|
Progress.displayName = "Progress";
|
|
11411
|
-
const styles$
|
|
12146
|
+
const styles$8 = react_native.StyleSheet.create({
|
|
11412
12147
|
track: {
|
|
11413
12148
|
width: "100%",
|
|
11414
12149
|
overflow: "hidden"
|
|
@@ -11441,7 +12176,7 @@ const Spinner = react.default.forwardRef(({ size = "medium", color, highContrast
|
|
|
11441
12176
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11442
12177
|
ref,
|
|
11443
12178
|
style: [
|
|
11444
|
-
styles$
|
|
12179
|
+
styles$7.container,
|
|
11445
12180
|
{
|
|
11446
12181
|
width: sizeConfig.dimension,
|
|
11447
12182
|
height: sizeConfig.dimension
|
|
@@ -11458,148 +12193,312 @@ const Spinner = react.default.forwardRef(({ size = "medium", color, highContrast
|
|
|
11458
12193
|
});
|
|
11459
12194
|
});
|
|
11460
12195
|
Spinner.displayName = "Spinner";
|
|
11461
|
-
const styles$
|
|
12196
|
+
const styles$7 = react_native.StyleSheet.create({ container: {
|
|
11462
12197
|
justifyContent: "center",
|
|
11463
12198
|
alignItems: "center"
|
|
11464
12199
|
} });
|
|
11465
12200
|
|
|
12201
|
+
//#endregion
|
|
12202
|
+
//#region src/components/data-display/Skeleton.tsx
|
|
12203
|
+
const PULSE_ANIMATION = {
|
|
12204
|
+
duration: 1e3,
|
|
12205
|
+
useNativeDriver: true
|
|
12206
|
+
};
|
|
12207
|
+
const SKELEON_COLORS = {
|
|
12208
|
+
light: "#E5E7EB",
|
|
12209
|
+
dark: "#D1D5DB"
|
|
12210
|
+
};
|
|
12211
|
+
const Skeleton = react.default.forwardRef(({ children, loading = true, style, textStyle, width, height, accessibilityLabel = "Loading", testID }, ref) => {
|
|
12212
|
+
const pulseAnim = (0, react.useRef)(new react_native.Animated.Value(0)).current;
|
|
12213
|
+
(0, react.useEffect)(() => {
|
|
12214
|
+
const animation = react_native.Animated.loop(react_native.Animated.sequence([react_native.Animated.timing(pulseAnim, {
|
|
12215
|
+
toValue: 1,
|
|
12216
|
+
...PULSE_ANIMATION
|
|
12217
|
+
}), react_native.Animated.timing(pulseAnim, {
|
|
12218
|
+
toValue: 0,
|
|
12219
|
+
...PULSE_ANIMATION
|
|
12220
|
+
})]));
|
|
12221
|
+
animation.start();
|
|
12222
|
+
return () => {
|
|
12223
|
+
animation.stop();
|
|
12224
|
+
};
|
|
12225
|
+
}, [pulseAnim]);
|
|
12226
|
+
const pulseStyle = { backgroundColor: pulseAnim.interpolate({
|
|
12227
|
+
inputRange: [0, 1],
|
|
12228
|
+
outputRange: [SKELEON_COLORS.light, SKELEON_COLORS.dark]
|
|
12229
|
+
}) };
|
|
12230
|
+
if (!loading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children });
|
|
12231
|
+
if (!react.default.isValidElement(children) && typeof children === "string") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.Text, {
|
|
12232
|
+
ref,
|
|
12233
|
+
style: [
|
|
12234
|
+
textStyle,
|
|
12235
|
+
pulseStyle,
|
|
12236
|
+
width !== void 0 ? { width } : void 0,
|
|
12237
|
+
height !== void 0 ? { height } : void 0
|
|
12238
|
+
],
|
|
12239
|
+
accessibilityLabel,
|
|
12240
|
+
accessibilityRole: "progressbar",
|
|
12241
|
+
testID,
|
|
12242
|
+
children
|
|
12243
|
+
});
|
|
12244
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.Animated.View, {
|
|
12245
|
+
ref,
|
|
12246
|
+
style: [
|
|
12247
|
+
styles$6.blockContainer,
|
|
12248
|
+
pulseStyle,
|
|
12249
|
+
width !== void 0 ? { width } : void 0,
|
|
12250
|
+
height !== void 0 ? { height } : void 0,
|
|
12251
|
+
style
|
|
12252
|
+
],
|
|
12253
|
+
accessibilityLabel,
|
|
12254
|
+
accessibilityRole: "progressbar",
|
|
12255
|
+
testID,
|
|
12256
|
+
children: children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12257
|
+
style: styles$6.hiddenChildren,
|
|
12258
|
+
pointerEvents: "none",
|
|
12259
|
+
children
|
|
12260
|
+
})
|
|
12261
|
+
});
|
|
12262
|
+
});
|
|
12263
|
+
Skeleton.displayName = "Skeleton";
|
|
12264
|
+
const styles$6 = react_native.StyleSheet.create({
|
|
12265
|
+
inlineText: {
|
|
12266
|
+
color: "transparent",
|
|
12267
|
+
fontSize: 14,
|
|
12268
|
+
lineHeight: 20,
|
|
12269
|
+
overflow: "hidden"
|
|
12270
|
+
},
|
|
12271
|
+
blockContainer: {
|
|
12272
|
+
minHeight: 20,
|
|
12273
|
+
overflow: "hidden"
|
|
12274
|
+
},
|
|
12275
|
+
hiddenChildren: { opacity: 0 }
|
|
12276
|
+
});
|
|
12277
|
+
|
|
11466
12278
|
//#endregion
|
|
11467
12279
|
//#region src/components/data-display/Table.tsx
|
|
11468
|
-
const
|
|
12280
|
+
const TableContext = (0, react.createContext)(null);
|
|
12281
|
+
const useTableContext = () => {
|
|
12282
|
+
const context = (0, react.useContext)(TableContext);
|
|
12283
|
+
if (!context) throw new Error("Table sub-components must be used within Table.Root");
|
|
12284
|
+
return context;
|
|
12285
|
+
};
|
|
12286
|
+
const TableRoot = react.default.forwardRef(({ children, size = "2", scrollable = true, style }, ref) => {
|
|
11469
12287
|
const theme = useTheme$1();
|
|
11470
|
-
useThemeMode$1()
|
|
11471
|
-
|
|
12288
|
+
const mode = useThemeMode$1();
|
|
12289
|
+
const isDark = mode === "dark";
|
|
12290
|
+
const grayAlpha = getGrayAlpha(theme, mode);
|
|
11472
12291
|
const tableStyle = {
|
|
11473
12292
|
borderRadius: theme.radii.medium,
|
|
11474
|
-
overflow: "hidden"
|
|
12293
|
+
overflow: "hidden",
|
|
12294
|
+
backgroundColor: isDark ? grayAlpha["2"] : grayAlpha["1"]
|
|
12295
|
+
};
|
|
12296
|
+
const contextValue = {
|
|
12297
|
+
size,
|
|
12298
|
+
isRoot: true
|
|
11475
12299
|
};
|
|
11476
|
-
const
|
|
11477
|
-
|
|
11478
|
-
children:
|
|
11479
|
-
|
|
11480
|
-
|
|
11481
|
-
|
|
11482
|
-
|
|
11483
|
-
|
|
11484
|
-
|
|
11485
|
-
|
|
11486
|
-
|
|
11487
|
-
|
|
11488
|
-
|
|
11489
|
-
});
|
|
11490
|
-
if (scrollable) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnScrollView, {
|
|
12300
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableContext.Provider, {
|
|
12301
|
+
value: contextValue,
|
|
12302
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12303
|
+
ref,
|
|
12304
|
+
style: [
|
|
12305
|
+
styles$5.root,
|
|
12306
|
+
tableStyle,
|
|
12307
|
+
style
|
|
12308
|
+
],
|
|
12309
|
+
children
|
|
12310
|
+
})
|
|
12311
|
+
});
|
|
12312
|
+
if (scrollable) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ScrollView, {
|
|
11491
12313
|
horizontal: true,
|
|
11492
|
-
style: [styles$5.scrollContainer, style],
|
|
11493
12314
|
showsHorizontalScrollIndicator: false,
|
|
11494
|
-
|
|
11495
|
-
|
|
11496
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
11497
|
-
style: [styles$5.container, style],
|
|
11498
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableContent, {})
|
|
12315
|
+
contentContainerStyle: styles$5.scrollContent,
|
|
12316
|
+
children: content
|
|
11499
12317
|
});
|
|
11500
|
-
|
|
11501
|
-
|
|
11502
|
-
|
|
11503
|
-
|
|
11504
|
-
|
|
12318
|
+
return content;
|
|
12319
|
+
});
|
|
12320
|
+
TableRoot.displayName = "Table.Root";
|
|
12321
|
+
const TableHeader = react.default.forwardRef(({ children, style }, ref) => {
|
|
12322
|
+
const theme = useTheme$1();
|
|
12323
|
+
const mode = useThemeMode$1();
|
|
12324
|
+
const isDark = mode === "dark";
|
|
12325
|
+
const grayAlpha = getGrayAlpha(theme, mode);
|
|
12326
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12327
|
+
ref,
|
|
12328
|
+
style: [
|
|
12329
|
+
styles$5.header,
|
|
12330
|
+
{
|
|
12331
|
+
backgroundColor: isDark ? grayAlpha["3"] : grayAlpha["2"],
|
|
12332
|
+
borderBottomWidth: 0,
|
|
12333
|
+
borderBottomColor: isDark ? grayAlpha["6"] : grayAlpha["5"]
|
|
12334
|
+
},
|
|
12335
|
+
style
|
|
12336
|
+
],
|
|
11505
12337
|
children
|
|
11506
12338
|
});
|
|
11507
|
-
};
|
|
11508
|
-
|
|
11509
|
-
|
|
11510
|
-
|
|
12339
|
+
});
|
|
12340
|
+
TableHeader.displayName = "Table.Header";
|
|
12341
|
+
const TableBody = react.default.forwardRef(({ children, style }, ref) => {
|
|
12342
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12343
|
+
ref,
|
|
12344
|
+
style: [styles$5.body, style],
|
|
11511
12345
|
children
|
|
11512
12346
|
});
|
|
11513
|
-
};
|
|
11514
|
-
|
|
12347
|
+
});
|
|
12348
|
+
TableBody.displayName = "Table.Body";
|
|
12349
|
+
const TableRow = react.default.forwardRef(({ children, style }, ref) => {
|
|
11515
12350
|
const theme = useTheme$1();
|
|
11516
|
-
const
|
|
11517
|
-
isDark
|
|
11518
|
-
const grayAlpha = getGrayAlpha(theme);
|
|
11519
|
-
|
|
11520
|
-
|
|
11521
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RnView, {
|
|
12351
|
+
const mode = useThemeMode$1();
|
|
12352
|
+
const isDark = mode === "dark";
|
|
12353
|
+
const grayAlpha = getGrayAlpha(theme, mode);
|
|
12354
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12355
|
+
ref,
|
|
11522
12356
|
style: [
|
|
11523
|
-
styles$5.
|
|
11524
|
-
|
|
11525
|
-
|
|
12357
|
+
styles$5.row,
|
|
12358
|
+
{
|
|
12359
|
+
flex: 1,
|
|
11526
12360
|
borderBottomWidth: 1,
|
|
11527
|
-
borderBottomColor:
|
|
12361
|
+
borderBottomColor: isDark ? grayAlpha["6"] : grayAlpha["5"]
|
|
11528
12362
|
},
|
|
11529
|
-
|
|
11530
|
-
borderBottomWidth: 1,
|
|
11531
|
-
borderBottomColor: borderColor
|
|
11532
|
-
}
|
|
12363
|
+
style
|
|
11533
12364
|
],
|
|
11534
12365
|
children
|
|
11535
12366
|
});
|
|
11536
|
-
};
|
|
11537
|
-
|
|
12367
|
+
});
|
|
12368
|
+
TableRow.displayName = "Table.Row";
|
|
12369
|
+
const TableColumnHeaderCell = react.default.forwardRef(({ children, width, align = "left", style }, ref) => {
|
|
12370
|
+
const context = useTableContext();
|
|
11538
12371
|
const theme = useTheme$1();
|
|
11539
12372
|
const grayScale = useThemeMode$1() === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
11540
|
-
const
|
|
11541
|
-
|
|
12373
|
+
const getSizePadding = () => {
|
|
12374
|
+
switch (context.size) {
|
|
12375
|
+
case "1": return {
|
|
12376
|
+
paddingVertical: theme.space[2],
|
|
12377
|
+
paddingHorizontal: theme.space[3]
|
|
12378
|
+
};
|
|
12379
|
+
case "3": return {
|
|
12380
|
+
paddingVertical: theme.space[4],
|
|
12381
|
+
paddingHorizontal: theme.space[5]
|
|
12382
|
+
};
|
|
12383
|
+
default: return {
|
|
12384
|
+
paddingVertical: theme.space[3],
|
|
12385
|
+
paddingHorizontal: theme.space[4]
|
|
12386
|
+
};
|
|
12387
|
+
}
|
|
12388
|
+
};
|
|
12389
|
+
const getSizeFont = () => {
|
|
12390
|
+
switch (context.size) {
|
|
12391
|
+
case "1": return { fontSize: theme.typography.fontSizes[1].fontSize };
|
|
12392
|
+
case "3": return { fontSize: theme.typography.fontSizes[3].fontSize };
|
|
12393
|
+
default: return { fontSize: theme.typography.fontSizes[2].fontSize };
|
|
12394
|
+
}
|
|
12395
|
+
};
|
|
12396
|
+
const padding = getSizePadding();
|
|
12397
|
+
const fontSize = getSizeFont();
|
|
12398
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12399
|
+
ref,
|
|
11542
12400
|
style: [
|
|
11543
|
-
styles$5.
|
|
11544
|
-
|
|
11545
|
-
|
|
12401
|
+
styles$5.cell,
|
|
12402
|
+
{
|
|
12403
|
+
width,
|
|
12404
|
+
alignItems: {
|
|
12405
|
+
left: "flex-start",
|
|
12406
|
+
center: "center",
|
|
12407
|
+
right: "flex-end"
|
|
12408
|
+
}[align],
|
|
12409
|
+
...padding
|
|
12410
|
+
},
|
|
12411
|
+
style
|
|
11546
12412
|
],
|
|
11547
12413
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
11548
12414
|
style: {
|
|
11549
12415
|
color: grayScale[12],
|
|
11550
12416
|
fontWeight: "600",
|
|
11551
|
-
fontSize
|
|
12417
|
+
...fontSize
|
|
11552
12418
|
},
|
|
11553
12419
|
children
|
|
11554
12420
|
})
|
|
11555
12421
|
});
|
|
11556
|
-
};
|
|
11557
|
-
|
|
12422
|
+
});
|
|
12423
|
+
TableColumnHeaderCell.displayName = "Table.ColumnHeaderCell";
|
|
12424
|
+
const TableCell = react.default.forwardRef(({ children, align = "left", style }, ref) => {
|
|
12425
|
+
const context = useTableContext();
|
|
11558
12426
|
const theme = useTheme$1();
|
|
11559
12427
|
const grayScale = useThemeMode$1() === "dark" ? theme.colors.gray.dark : theme.colors.gray;
|
|
11560
|
-
|
|
11561
|
-
|
|
12428
|
+
const getSizePadding = () => {
|
|
12429
|
+
switch (context.size) {
|
|
12430
|
+
case "1": return {
|
|
12431
|
+
paddingVertical: theme.space[2],
|
|
12432
|
+
paddingHorizontal: theme.space[3]
|
|
12433
|
+
};
|
|
12434
|
+
case "3": return {
|
|
12435
|
+
paddingVertical: theme.space[4],
|
|
12436
|
+
paddingHorizontal: theme.space[5]
|
|
12437
|
+
};
|
|
12438
|
+
default: return {
|
|
12439
|
+
paddingVertical: theme.space[3],
|
|
12440
|
+
paddingHorizontal: theme.space[4]
|
|
12441
|
+
};
|
|
12442
|
+
}
|
|
12443
|
+
};
|
|
12444
|
+
const getSizeFont = () => {
|
|
12445
|
+
switch (context.size) {
|
|
12446
|
+
case "1": return { fontSize: theme.typography.fontSizes[1].fontSize };
|
|
12447
|
+
case "3": return { fontSize: theme.typography.fontSizes[3].fontSize };
|
|
12448
|
+
default: return { fontSize: theme.typography.fontSizes[2].fontSize };
|
|
12449
|
+
}
|
|
12450
|
+
};
|
|
12451
|
+
const padding = getSizePadding();
|
|
12452
|
+
const fontSize = getSizeFont();
|
|
12453
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
12454
|
+
ref,
|
|
12455
|
+
style: [
|
|
12456
|
+
styles$5.cell,
|
|
12457
|
+
{
|
|
12458
|
+
alignItems: {
|
|
12459
|
+
left: "flex-start",
|
|
12460
|
+
center: "center",
|
|
12461
|
+
right: "flex-end"
|
|
12462
|
+
}[align],
|
|
12463
|
+
...padding
|
|
12464
|
+
},
|
|
12465
|
+
style
|
|
12466
|
+
],
|
|
11562
12467
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
11563
12468
|
style: {
|
|
11564
12469
|
color: grayScale[11],
|
|
11565
|
-
fontSize
|
|
12470
|
+
...fontSize
|
|
11566
12471
|
},
|
|
11567
12472
|
children
|
|
11568
12473
|
})
|
|
11569
12474
|
});
|
|
11570
|
-
};
|
|
11571
|
-
|
|
11572
|
-
left: { justifyContent: "flex-start" },
|
|
11573
|
-
center: { justifyContent: "center" },
|
|
11574
|
-
right: { justifyContent: "flex-end" }
|
|
11575
|
-
};
|
|
11576
|
-
Table.Thead = Thead;
|
|
11577
|
-
Table.Tbody = Tbody;
|
|
11578
|
-
Table.Tr = Tr;
|
|
11579
|
-
Table.Th = Th;
|
|
11580
|
-
Table.Td = Td;
|
|
12475
|
+
});
|
|
12476
|
+
TableCell.displayName = "Table.Cell";
|
|
11581
12477
|
const styles$5 = react_native.StyleSheet.create({
|
|
11582
|
-
|
|
11583
|
-
|
|
11584
|
-
|
|
11585
|
-
thead: { flexDirection: "row" },
|
|
11586
|
-
tbody: { flexDirection: "column" },
|
|
11587
|
-
tr: {
|
|
12478
|
+
scrollContent: { flexGrow: 1 },
|
|
12479
|
+
root: { minWidth: "100%" },
|
|
12480
|
+
header: {
|
|
11588
12481
|
flexDirection: "row",
|
|
11589
|
-
minHeight: 44,
|
|
11590
|
-
alignItems: "center",
|
|
11591
|
-
borderBottomWidth: 1,
|
|
11592
|
-
borderBottomColor: "transparent"
|
|
11593
|
-
},
|
|
11594
|
-
th: {
|
|
11595
|
-
padding: 12,
|
|
11596
12482
|
minHeight: 44
|
|
11597
12483
|
},
|
|
11598
|
-
|
|
11599
|
-
|
|
12484
|
+
body: { flexDirection: "column" },
|
|
12485
|
+
row: {
|
|
12486
|
+
flexDirection: "row",
|
|
11600
12487
|
minHeight: 44
|
|
12488
|
+
},
|
|
12489
|
+
cell: {
|
|
12490
|
+
flex: 1,
|
|
12491
|
+
minWidth: 80
|
|
11601
12492
|
}
|
|
11602
12493
|
});
|
|
12494
|
+
const Table = {
|
|
12495
|
+
Root: TableRoot,
|
|
12496
|
+
Header: TableHeader,
|
|
12497
|
+
Body: TableBody,
|
|
12498
|
+
Row: TableRow,
|
|
12499
|
+
ColumnHeaderCell: TableColumnHeaderCell,
|
|
12500
|
+
Cell: TableCell
|
|
12501
|
+
};
|
|
11603
12502
|
|
|
11604
12503
|
//#endregion
|
|
11605
12504
|
//#region src/components/navigation/SegmentedControl.tsx
|
|
@@ -11609,19 +12508,57 @@ function useSegmentedControlContext() {
|
|
|
11609
12508
|
if (!context) throw new Error("SegmentedControl.Item must be used within SegmentedControl.Root");
|
|
11610
12509
|
return context;
|
|
11611
12510
|
}
|
|
12511
|
+
const SegmentedControlValue = ({ children }) => {
|
|
12512
|
+
const { value: selectedValue, color, isDark, grayScale, activeColor, solidVariantColors, softVariantColors, sizeValues, theme, itemValue, isItemSelected, itemDisabled } = useSegmentedControlContext();
|
|
12513
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
12514
|
+
style: {
|
|
12515
|
+
color: itemDisabled ? grayScale["9"] : color ? isItemSelected ? solidVariantColors.textColor : softVariantColors.textColor : isItemSelected ? grayScale[12] : grayScale[10],
|
|
12516
|
+
fontWeight: isItemSelected ? theme.typography.fontWeights.semibold : theme.typography.fontWeights.regular,
|
|
12517
|
+
fontSize: sizeValues.fontSize
|
|
12518
|
+
},
|
|
12519
|
+
children
|
|
12520
|
+
});
|
|
12521
|
+
};
|
|
12522
|
+
SegmentedControlValue.displayName = "SegmentedControlValue";
|
|
12523
|
+
const SegmentedControlIcon = ({ children }) => {
|
|
12524
|
+
const { color, isDark, grayScale, activeColor, solidVariantColors, softVariantColors, sizeValues, itemValue, isItemSelected, itemDisabled } = useSegmentedControlContext();
|
|
12525
|
+
const iconColor = itemDisabled ? grayScale["9"] : color ? isItemSelected ? solidVariantColors.textColor : softVariantColors.textColor : isItemSelected ? grayScale[12] : grayScale[10];
|
|
12526
|
+
const iconSize = sizeValues.fontSize;
|
|
12527
|
+
return react.default.cloneElement(children, {
|
|
12528
|
+
...children.props,
|
|
12529
|
+
color: iconColor,
|
|
12530
|
+
size: children.props.size ?? iconSize
|
|
12531
|
+
});
|
|
12532
|
+
};
|
|
12533
|
+
SegmentedControlIcon.displayName = "SegmentedControlIcon";
|
|
12534
|
+
const SegmentedControlItemContext = (0, react.createContext)(null);
|
|
11612
12535
|
const SegmentedControlItem = ({ value, disabled: itemDisabled, children }) => {
|
|
11613
|
-
const { value: selectedValue, onValueChange, disabled, sizeValues, isDark, grayScale, grayAlpha, activeColor, radii, selectedRadius, softVariantColors, solidVariantColors, color, onItemLayout, theme, pillBackgroundColor, hapticFeedback } = useSegmentedControlContext();
|
|
12536
|
+
const { value: selectedValue, onValueChange, disabled, sizeValues, isDark, grayScale, grayAlpha, activeColor, radii, selectedRadius, softVariantColors, solidVariantColors, color, onItemLayout, theme, pillBackgroundColor, hapticFeedback, globalHaptics } = useSegmentedControlContext();
|
|
11614
12537
|
const isSelected = value === selectedValue;
|
|
11615
12538
|
const isDisabled = disabled || itemDisabled;
|
|
12539
|
+
const hasValueChild = (0, react.isValidElement)(children) && children.type?.displayName === "SegmentedControlValue";
|
|
12540
|
+
const hasIconChild = (0, react.isValidElement)(children) && children.type?.displayName === "SegmentedControlIcon";
|
|
12541
|
+
const itemContextValue = {
|
|
12542
|
+
itemValue: value,
|
|
12543
|
+
isSelected,
|
|
12544
|
+
isDisabled
|
|
12545
|
+
};
|
|
12546
|
+
const mergedContext = {
|
|
12547
|
+
...useSegmentedControlContext(),
|
|
12548
|
+
itemValue: value,
|
|
12549
|
+
isItemSelected: isSelected,
|
|
12550
|
+
itemDisabled: isDisabled
|
|
12551
|
+
};
|
|
11616
12552
|
const handlePress = (0, react.useCallback)(() => {
|
|
11617
12553
|
if (!isDisabled) {
|
|
11618
12554
|
onValueChange(value);
|
|
11619
|
-
if (hapticFeedback)
|
|
12555
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("press");
|
|
11620
12556
|
}
|
|
11621
12557
|
}, [
|
|
11622
12558
|
isDisabled,
|
|
11623
12559
|
onValueChange,
|
|
11624
12560
|
value,
|
|
12561
|
+
globalHaptics,
|
|
11625
12562
|
hapticFeedback
|
|
11626
12563
|
]);
|
|
11627
12564
|
const handleLayout = (0, react.useCallback)((event) => {
|
|
@@ -11641,23 +12578,29 @@ const SegmentedControlItem = ({ value, disabled: itemDisabled, children }) => {
|
|
|
11641
12578
|
fontWeight: isSelected ? theme.typography.fontWeights.semibold : theme.typography.fontWeights.regular,
|
|
11642
12579
|
fontSize: sizeValues.fontSize
|
|
11643
12580
|
};
|
|
11644
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
11645
|
-
|
|
11646
|
-
|
|
11647
|
-
|
|
11648
|
-
|
|
11649
|
-
|
|
11650
|
-
|
|
11651
|
-
|
|
11652
|
-
|
|
11653
|
-
|
|
11654
|
-
|
|
11655
|
-
|
|
11656
|
-
|
|
11657
|
-
|
|
11658
|
-
|
|
11659
|
-
|
|
11660
|
-
|
|
12581
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SegmentedControlItemContext.Provider, {
|
|
12582
|
+
value: itemContextValue,
|
|
12583
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SegmentedControlContext.Provider, {
|
|
12584
|
+
value: mergedContext,
|
|
12585
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedPressable, {
|
|
12586
|
+
style: optionStyle,
|
|
12587
|
+
onPress: handlePress,
|
|
12588
|
+
onLayout: handleLayout,
|
|
12589
|
+
disabled: isDisabled,
|
|
12590
|
+
accessibilityRole: "radio",
|
|
12591
|
+
accessibilityState: {
|
|
12592
|
+
checked: isSelected,
|
|
12593
|
+
disabled: isDisabled
|
|
12594
|
+
},
|
|
12595
|
+
pressedScale: .975,
|
|
12596
|
+
pressedOpacity: .9,
|
|
12597
|
+
animationDuration: 100,
|
|
12598
|
+
hapticFeedback: false,
|
|
12599
|
+
children: hasValueChild || hasIconChild ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TextComponent, {
|
|
12600
|
+
style: textStyle,
|
|
12601
|
+
children
|
|
12602
|
+
})
|
|
12603
|
+
})
|
|
11661
12604
|
})
|
|
11662
12605
|
});
|
|
11663
12606
|
};
|
|
@@ -11665,6 +12608,7 @@ SegmentedControlItem.displayName = "SegmentedControlItem";
|
|
|
11665
12608
|
const SegmentedControlRoot = ({ defaultValue, value: controlledValue, onValueChange, disabled = false, color, radius, size = 3, style, highContrast = false, children, hapticFeedback = true }) => {
|
|
11666
12609
|
const theme = useTheme$1();
|
|
11667
12610
|
const mode = useThemeMode$1();
|
|
12611
|
+
const globalHaptics = useHaptics$1();
|
|
11668
12612
|
const isDark = mode === "dark";
|
|
11669
12613
|
const grayScale = isDark ? theme.colors.gray.dark : theme.colors.gray;
|
|
11670
12614
|
const grayAlpha = getGrayAlpha(theme);
|
|
@@ -11761,7 +12705,11 @@ const SegmentedControlRoot = ({ defaultValue, value: controlledValue, onValueCha
|
|
|
11761
12705
|
onItemLayout: handleItemLayout,
|
|
11762
12706
|
theme,
|
|
11763
12707
|
pillBackgroundColor,
|
|
11764
|
-
hapticFeedback
|
|
12708
|
+
hapticFeedback,
|
|
12709
|
+
globalHaptics,
|
|
12710
|
+
itemValue: null,
|
|
12711
|
+
isItemSelected: false,
|
|
12712
|
+
itemDisabled: false
|
|
11765
12713
|
};
|
|
11766
12714
|
const pillWidth = itemLayouts[currentValue]?.width || 0;
|
|
11767
12715
|
const pillInnerRadius = selectedRadius === "full" ? 9999 : radii;
|
|
@@ -11790,7 +12738,9 @@ const SegmentedControlRoot = ({ defaultValue, value: controlledValue, onValueCha
|
|
|
11790
12738
|
SegmentedControlRoot.displayName = "SegmentedControlRoot";
|
|
11791
12739
|
const SegmentedControl = {
|
|
11792
12740
|
Item: SegmentedControlItem,
|
|
11793
|
-
Root: SegmentedControlRoot
|
|
12741
|
+
Root: SegmentedControlRoot,
|
|
12742
|
+
Value: SegmentedControlValue,
|
|
12743
|
+
Icon: SegmentedControlIcon
|
|
11794
12744
|
};
|
|
11795
12745
|
const styles$4 = react_native.StyleSheet.create({
|
|
11796
12746
|
container: {
|
|
@@ -12149,6 +13099,7 @@ const AccordionTrigger = react.default.forwardRef(({ children, style, icon, hapt
|
|
|
12149
13099
|
const itemContext = useAccordionItemContext();
|
|
12150
13100
|
const theme = useTheme$1();
|
|
12151
13101
|
const mode = useThemeMode$1();
|
|
13102
|
+
const globalHaptics = useHaptics$1();
|
|
12152
13103
|
const { value, open, disabled } = itemContext;
|
|
12153
13104
|
const { size, dir, collapsible, type, onValueChange } = accordionContext;
|
|
12154
13105
|
const grayAlpha = getGrayAlpha(theme, mode);
|
|
@@ -12196,7 +13147,7 @@ const AccordionTrigger = react.default.forwardRef(({ children, style, icon, hapt
|
|
|
12196
13147
|
if (open) onValueChange(currentValue.filter((v) => v !== value));
|
|
12197
13148
|
else onValueChange([...currentValue, value]);
|
|
12198
13149
|
}
|
|
12199
|
-
if (hapticFeedback)
|
|
13150
|
+
if (globalHaptics && hapticFeedback) triggerHaptic("selection");
|
|
12200
13151
|
};
|
|
12201
13152
|
const rtlRotationInterpolate = rotationAnim.interpolate({
|
|
12202
13153
|
inputRange: [0, 1],
|
|
@@ -12216,7 +13167,7 @@ const AccordionTrigger = react.default.forwardRef(({ children, style, icon, hapt
|
|
|
12216
13167
|
const getIconColor = () => {
|
|
12217
13168
|
return grayAlpha["11"];
|
|
12218
13169
|
};
|
|
12219
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
13170
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedPressable, {
|
|
12220
13171
|
ref,
|
|
12221
13172
|
style: [triggerStyle, style],
|
|
12222
13173
|
onPress: handlePress,
|
|
@@ -12254,7 +13205,7 @@ const AccordionTrigger = react.default.forwardRef(({ children, style, icon, hapt
|
|
|
12254
13205
|
transform: [{ rotate: rtlRotationInterpolate }],
|
|
12255
13206
|
marginLeft: theme.space[2]
|
|
12256
13207
|
},
|
|
12257
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon
|
|
13208
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronDownIcon, {
|
|
12258
13209
|
width: sizeStyles.iconSize,
|
|
12259
13210
|
height: sizeStyles.iconSize,
|
|
12260
13211
|
color: getIconColor()
|
|
@@ -12486,6 +13437,8 @@ exports.SelectSeparator = SelectSeparator;
|
|
|
12486
13437
|
exports.SelectTrigger = SelectTrigger;
|
|
12487
13438
|
exports.SelectValue = SelectValue;
|
|
12488
13439
|
exports.Separator = Separator;
|
|
13440
|
+
exports.Sidebar = Sidebar;
|
|
13441
|
+
exports.Skeleton = Skeleton;
|
|
12489
13442
|
exports.Slider = Slider;
|
|
12490
13443
|
exports.Slot = Slot;
|
|
12491
13444
|
exports.Spacer = Spacer;
|
|
@@ -12612,6 +13565,7 @@ exports.tomatoAlpha = tomatoAlpha;
|
|
|
12612
13565
|
exports.typography = typography;
|
|
12613
13566
|
exports.useAnchorPosition = useAnchorPosition;
|
|
12614
13567
|
exports.useDeviceColorScheme = useDeviceColorScheme;
|
|
13568
|
+
exports.useHaptics = useHaptics;
|
|
12615
13569
|
exports.usePortal = usePortal;
|
|
12616
13570
|
exports.useResponsive = useResponsive;
|
|
12617
13571
|
exports.useTheme = useTheme;
|