@beyondcorp/beyond-ui-native 0.1.6 → 0.1.7

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/dist/index.js CHANGED
@@ -62,6 +62,7 @@ __export(src_exports, {
62
62
  CardHeader: () => CardHeader,
63
63
  CardTitle: () => CardTitle,
64
64
  Checkbox: () => Checkbox,
65
+ DashboardLayout: () => DashboardLayout,
65
66
  DashboardTemplate: () => DashboardTemplate,
66
67
  DataTable: () => DataTable,
67
68
  Dialog: () => Dialog,
@@ -78,6 +79,14 @@ __export(src_exports, {
78
79
  ForgotPasswordTemplate: () => ForgotPasswordTemplate,
79
80
  Heading: () => Heading,
80
81
  Input: () => Input,
82
+ Modal: () => Modal4,
83
+ ModalContent: () => ModalContent,
84
+ ModalContext: () => ModalContext,
85
+ ModalDescription: () => ModalDescription,
86
+ ModalFooter: () => ModalFooter,
87
+ ModalHeader: () => ModalHeader,
88
+ ModalTitle: () => ModalTitle,
89
+ NightModeSwitch: () => NightModeSwitch,
81
90
  Pressable: () => Pressable,
82
91
  Radio: () => Radio,
83
92
  RadioGroup: () => RadioGroup,
@@ -120,10 +129,13 @@ __export(src_exports, {
120
129
  headingVariants: () => headingVariants,
121
130
  inputVariants: () => inputVariants,
122
131
  joinA11yLabels: () => joinA11yLabels,
132
+ modalVariants: () => modalVariants,
133
+ nightModeSwitchVariants: () => nightModeSwitchVariants,
123
134
  textVariants: () => textVariants,
124
135
  tokens: () => tokens,
125
136
  useBeyondUI: () => useBeyondUI,
126
137
  useDialogContext: () => useDialogContext,
138
+ useModalContext: () => useModalContext,
127
139
  useTabsContext: () => useTabsContext,
128
140
  useToast: () => useToast
129
141
  });
@@ -2543,10 +2555,533 @@ function DataTable({
2543
2555
  ] });
2544
2556
  }
2545
2557
 
2546
- // src/templates/auth/SignInTemplate.tsx
2558
+ // src/components/modal/modal.tsx
2547
2559
  var React23 = __toESM(require("react"));
2548
2560
  var import_react_native26 = require("react-native");
2561
+ var import_class_variance_authority11 = require("class-variance-authority");
2549
2562
  var import_jsx_runtime26 = require("react/jsx-runtime");
2563
+ var modalVariants = (0, import_class_variance_authority11.cva)(
2564
+ "w-full rounded-2xl border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 p-6 shadow-2xl relative",
2565
+ {
2566
+ variants: {
2567
+ size: {
2568
+ sm: "max-w-xs",
2569
+ md: "max-w-md",
2570
+ lg: "max-w-lg",
2571
+ xl: "max-w-xl",
2572
+ full: "max-w-[95%] max-h-[90%]"
2573
+ }
2574
+ },
2575
+ defaultVariants: {
2576
+ size: "md"
2577
+ }
2578
+ }
2579
+ );
2580
+ var ModalContext = React23.createContext(null);
2581
+ function useModalContext() {
2582
+ const context = React23.useContext(ModalContext);
2583
+ if (!context) {
2584
+ throw new Error("Modal compound components must be used within a Modal component");
2585
+ }
2586
+ return context;
2587
+ }
2588
+ function Modal4({
2589
+ open: controlledOpen,
2590
+ visible,
2591
+ onOpenChange,
2592
+ onRequestClose,
2593
+ showCloseButton = true,
2594
+ closeOnOverlayPress = true,
2595
+ size = "md",
2596
+ children,
2597
+ className,
2598
+ overlayClassName
2599
+ }) {
2600
+ const isOpen = (controlledOpen !== void 0 ? controlledOpen : visible) ?? false;
2601
+ const handleClose = React23.useCallback(() => {
2602
+ onOpenChange?.(false);
2603
+ onRequestClose?.();
2604
+ }, [onOpenChange, onRequestClose]);
2605
+ if (!isOpen) return null;
2606
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ModalContext.Provider, { value: { open: isOpen, onOpenChange: (o) => !o && handleClose() }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2607
+ import_react_native26.Modal,
2608
+ {
2609
+ transparent: true,
2610
+ visible: isOpen,
2611
+ animationType: "fade",
2612
+ onRequestClose: handleClose,
2613
+ statusBarTranslucent: true,
2614
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2615
+ import_react_native26.KeyboardAvoidingView,
2616
+ {
2617
+ behavior: import_react_native26.Platform.OS === "ios" ? "padding" : void 0,
2618
+ style: import_react_native26.StyleSheet.absoluteFill,
2619
+ children: [
2620
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2621
+ import_react_native26.Pressable,
2622
+ {
2623
+ style: import_react_native26.StyleSheet.absoluteFill,
2624
+ className: cn("bg-black/60", overlayClassName),
2625
+ onPress: closeOnOverlayPress ? handleClose : void 0,
2626
+ accessibilityRole: "button",
2627
+ accessibilityLabel: "Close modal overlay"
2628
+ }
2629
+ ),
2630
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2631
+ import_react_native26.View,
2632
+ {
2633
+ pointerEvents: "box-none",
2634
+ style: import_react_native26.StyleSheet.absoluteFill,
2635
+ className: "items-center justify-center p-4 z-50",
2636
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2637
+ import_react_native26.View,
2638
+ {
2639
+ role: "dialog",
2640
+ "aria-modal": true,
2641
+ className: cn(modalVariants({ size }), className),
2642
+ children: [
2643
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2644
+ import_react_native26.Pressable,
2645
+ {
2646
+ onPress: handleClose,
2647
+ hitSlop: { top: 12, right: 12, bottom: 12, left: 12 },
2648
+ className: "absolute right-4 top-4 z-50 w-8 h-8 rounded-full bg-neutral-100 dark:bg-neutral-800 items-center justify-center active:opacity-70",
2649
+ accessibilityRole: "button",
2650
+ accessibilityLabel: "Close modal",
2651
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.Text, { className: "text-neutral-500 dark:text-neutral-400 text-sm font-semibold leading-none", children: "\u2715" })
2652
+ }
2653
+ ),
2654
+ children
2655
+ ]
2656
+ }
2657
+ )
2658
+ }
2659
+ )
2660
+ ]
2661
+ }
2662
+ )
2663
+ }
2664
+ ) });
2665
+ }
2666
+ Modal4.displayName = "Modal";
2667
+ function ModalHeader({
2668
+ className,
2669
+ ...props
2670
+ }) {
2671
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2672
+ import_react_native26.View,
2673
+ {
2674
+ className: cn("flex-col space-y-1.5 pr-8", className),
2675
+ ...props
2676
+ }
2677
+ );
2678
+ }
2679
+ ModalHeader.displayName = "ModalHeader";
2680
+ var ModalTitle = React23.forwardRef(
2681
+ function ModalTitle2({ className, ...props }, ref) {
2682
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2683
+ import_react_native26.Text,
2684
+ {
2685
+ ref,
2686
+ role: "heading",
2687
+ "aria-level": 2,
2688
+ className: cn(
2689
+ "text-lg font-bold tracking-tight text-neutral-900 dark:text-neutral-50",
2690
+ className
2691
+ ),
2692
+ ...props
2693
+ }
2694
+ );
2695
+ }
2696
+ );
2697
+ ModalTitle.displayName = "ModalTitle";
2698
+ var ModalDescription = React23.forwardRef(
2699
+ function ModalDescription2({ className, ...props }, ref) {
2700
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2701
+ import_react_native26.Text,
2702
+ {
2703
+ ref,
2704
+ className: cn(
2705
+ "text-sm text-neutral-500 dark:text-neutral-400 mt-1",
2706
+ className
2707
+ ),
2708
+ ...props
2709
+ }
2710
+ );
2711
+ }
2712
+ );
2713
+ ModalDescription.displayName = "ModalDescription";
2714
+ function ModalContent({
2715
+ className,
2716
+ children,
2717
+ scrollable = false,
2718
+ ...props
2719
+ }) {
2720
+ if (scrollable) {
2721
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2722
+ import_react_native26.ScrollView,
2723
+ {
2724
+ showsVerticalScrollIndicator: false,
2725
+ className: cn("py-3 max-h-[70vh]", className),
2726
+ ...props,
2727
+ children
2728
+ }
2729
+ );
2730
+ }
2731
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.View, { className: cn("py-3", className), ...props, children });
2732
+ }
2733
+ ModalContent.displayName = "ModalContent";
2734
+ function ModalFooter({
2735
+ className,
2736
+ ...props
2737
+ }) {
2738
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2739
+ import_react_native26.View,
2740
+ {
2741
+ className: cn(
2742
+ "flex-row flex-wrap items-center justify-end gap-2 pt-3 border-t border-neutral-100 dark:border-neutral-800 mt-2",
2743
+ className
2744
+ ),
2745
+ ...props
2746
+ }
2747
+ );
2748
+ }
2749
+ ModalFooter.displayName = "ModalFooter";
2750
+
2751
+ // src/components/night-mode-switch/night-mode-switch.tsx
2752
+ var React25 = __toESM(require("react"));
2753
+ var import_react_native28 = require("react-native");
2754
+ var import_class_variance_authority12 = require("class-variance-authority");
2755
+
2756
+ // src/providers/BeyondUIProvider.tsx
2757
+ var React24 = __toESM(require("react"));
2758
+ var import_react_native27 = require("react-native");
2759
+ var import_nativewind = require("nativewind");
2760
+ var import_portal = require("@rn-primitives/portal");
2761
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2762
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
2763
+ try {
2764
+ const { LogBox } = require("react-native");
2765
+ LogBox?.ignoreLogs?.([
2766
+ "You are setting the style `{ shadowOffset: ... }` as a prop",
2767
+ "You are setting the style"
2768
+ ]);
2769
+ if (!Boolean(console.error?.__beyond_ui_filtered)) {
2770
+ const originalError = console.error;
2771
+ const filteredError = (...args) => {
2772
+ const fullMessage = args.map((arg) => typeof arg === "string" ? arg : "").join(" ");
2773
+ if (fullMessage.includes("shadowOffset") || fullMessage.includes("You are setting the style")) {
2774
+ return;
2775
+ }
2776
+ originalError(...args);
2777
+ };
2778
+ filteredError.__beyond_ui_filtered = true;
2779
+ console.error = filteredError;
2780
+ }
2781
+ } catch (_) {
2782
+ }
2783
+ }
2784
+ var BeyondUIContext = React24.createContext({
2785
+ colorScheme: "light",
2786
+ setColorScheme: () => {
2787
+ },
2788
+ toggleColorScheme: () => {
2789
+ }
2790
+ });
2791
+ function useBeyondUI() {
2792
+ return React24.useContext(BeyondUIContext);
2793
+ }
2794
+ function BeyondUIProvider({
2795
+ children,
2796
+ defaultColorScheme = "system"
2797
+ }) {
2798
+ const systemScheme = (0, import_react_native27.useColorScheme)() ?? "light";
2799
+ const [selectedScheme, setSelectedScheme] = React24.useState(defaultColorScheme);
2800
+ const [toasts, setToasts] = React24.useState([]);
2801
+ const activeScheme = selectedScheme === "system" ? systemScheme : selectedScheme;
2802
+ React24.useEffect(() => {
2803
+ try {
2804
+ import_nativewind.colorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
2805
+ } catch (_) {
2806
+ }
2807
+ }, [selectedScheme, activeScheme]);
2808
+ const handleSetColorScheme = React24.useCallback((scheme) => {
2809
+ setSelectedScheme(scheme);
2810
+ try {
2811
+ import_nativewind.colorScheme.set(scheme === "system" ? "system" : scheme);
2812
+ } catch (_) {
2813
+ }
2814
+ }, []);
2815
+ const toggleColorScheme = React24.useCallback(() => {
2816
+ setSelectedScheme((prev) => {
2817
+ const current = prev === "system" ? systemScheme : prev;
2818
+ const next = current === "dark" ? "light" : "dark";
2819
+ try {
2820
+ import_nativewind.colorScheme.set(next);
2821
+ } catch (_) {
2822
+ }
2823
+ return next;
2824
+ });
2825
+ }, [systemScheme]);
2826
+ const dismissToast = React24.useCallback((id) => {
2827
+ setToasts((prev) => prev.filter((t) => t.id !== id));
2828
+ }, []);
2829
+ const showToast = React24.useCallback((toast) => {
2830
+ const id = Math.random().toString(36).substring(2, 9);
2831
+ setToasts((prev) => [...prev, { ...toast, id }]);
2832
+ return id;
2833
+ }, []);
2834
+ const toastContextValue = React24.useMemo(
2835
+ () => ({
2836
+ toasts,
2837
+ show: showToast,
2838
+ dismiss: dismissToast,
2839
+ success: (title, description) => showToast({ title, description, variant: "success" }),
2840
+ danger: (title, description) => showToast({ title, description, variant: "danger" }),
2841
+ error: (title, description) => showToast({ title, description, variant: "danger" }),
2842
+ warning: (title, description) => showToast({ title, description, variant: "warning" }),
2843
+ info: (title, description) => showToast({ title, description, variant: "info" })
2844
+ }),
2845
+ [toasts, showToast, dismissToast]
2846
+ );
2847
+ const contextValue = React24.useMemo(
2848
+ () => ({
2849
+ colorScheme: activeScheme,
2850
+ setColorScheme: handleSetColorScheme,
2851
+ toggleColorScheme
2852
+ }),
2853
+ [activeScheme, handleSetColorScheme, toggleColorScheme]
2854
+ );
2855
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BeyondUIContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ToastContext.Provider, { value: toastContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2856
+ import_react_native27.View,
2857
+ {
2858
+ style: { flex: 1 },
2859
+ className: activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white",
2860
+ children: [
2861
+ children,
2862
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_portal.PortalHost, {}),
2863
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ToastContainer, { toasts, onDismiss: dismissToast })
2864
+ ]
2865
+ }
2866
+ ) }) });
2867
+ }
2868
+
2869
+ // src/components/night-mode-switch/night-mode-switch.tsx
2870
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2871
+ var nightModeSwitchVariants = (0, import_class_variance_authority12.cva)(
2872
+ "inline-flex items-center justify-center rounded-full active:opacity-75",
2873
+ {
2874
+ variants: {
2875
+ variant: {
2876
+ primary: "bg-primary-600 dark:bg-primary-500",
2877
+ secondary: "bg-secondary-600 dark:bg-secondary-500",
2878
+ ghost: "bg-transparent active:bg-neutral-100 dark:active:bg-neutral-800"
2879
+ },
2880
+ size: {
2881
+ sm: "w-8 h-8",
2882
+ md: "w-10 h-10",
2883
+ lg: "w-12 h-12"
2884
+ }
2885
+ },
2886
+ defaultVariants: {
2887
+ variant: "ghost",
2888
+ size: "md"
2889
+ }
2890
+ }
2891
+ );
2892
+ var NightModeSwitch = React25.forwardRef(
2893
+ function NightModeSwitch2({
2894
+ className,
2895
+ textClassName,
2896
+ variant,
2897
+ size,
2898
+ ariaLabel = "Toggle dark mode",
2899
+ onPress,
2900
+ ...props
2901
+ }, ref) {
2902
+ const { colorScheme, toggleColorScheme } = useBeyondUI();
2903
+ const isDark = colorScheme === "dark";
2904
+ const handlePress = (e) => {
2905
+ toggleColorScheme();
2906
+ onPress?.(e);
2907
+ };
2908
+ const iconSizeClasses = {
2909
+ sm: "text-base",
2910
+ md: "text-lg",
2911
+ lg: "text-xl"
2912
+ }[size || "md"];
2913
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2914
+ import_react_native28.Pressable,
2915
+ {
2916
+ ref,
2917
+ role: "button",
2918
+ accessibilityRole: "button",
2919
+ accessibilityLabel: ariaLabel,
2920
+ accessibilityState: { checked: isDark },
2921
+ className: cn(nightModeSwitchVariants({ variant, size }), className),
2922
+ onPress: handlePress,
2923
+ ...props,
2924
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2925
+ import_react_native28.Text,
2926
+ {
2927
+ className: cn(
2928
+ iconSizeClasses,
2929
+ variant === "ghost" ? "text-neutral-700 dark:text-neutral-200" : "text-white",
2930
+ textClassName
2931
+ ),
2932
+ children: isDark ? "\u{1F319}" : "\u2600\uFE0F"
2933
+ }
2934
+ )
2935
+ }
2936
+ );
2937
+ }
2938
+ );
2939
+ NightModeSwitch.displayName = "NightModeSwitch";
2940
+
2941
+ // src/components/dashboard-layout/dashboard-layout.tsx
2942
+ var React26 = __toESM(require("react"));
2943
+ var import_react_native29 = require("react-native");
2944
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2945
+ var DashboardLayout = ({
2946
+ title,
2947
+ subtitle,
2948
+ breadcrumbs,
2949
+ user,
2950
+ onProfilePress,
2951
+ onNotificationPress,
2952
+ unreadNotificationsCount = 0,
2953
+ showSearch = false,
2954
+ searchPlaceholder = "Search...",
2955
+ searchValue,
2956
+ onSearchChange,
2957
+ showNightModeSwitch = true,
2958
+ onBackPress,
2959
+ backIcon,
2960
+ headerActions,
2961
+ footer,
2962
+ scrollable = true,
2963
+ refreshing = false,
2964
+ onRefresh,
2965
+ contentClassName,
2966
+ className,
2967
+ children,
2968
+ ...props
2969
+ }) => {
2970
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2971
+ import_react_native29.View,
2972
+ {
2973
+ className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
2974
+ ...props,
2975
+ children: [
2976
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "px-5 pt-3 pb-3 border-b border-neutral-200 dark:border-neutral-800 bg-white/90 dark:bg-neutral-900/90 flex-row items-center justify-between z-10", children: [
2977
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-row items-center gap-3 flex-1 mr-2", children: [
2978
+ onBackPress && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2979
+ import_react_native29.Pressable,
2980
+ {
2981
+ onPress: onBackPress,
2982
+ className: "w-9 h-9 rounded-full bg-neutral-100 dark:bg-neutral-800 items-center justify-center active:opacity-70",
2983
+ accessibilityRole: "button",
2984
+ accessibilityLabel: "Back",
2985
+ children: backIcon || /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-neutral-700 dark:text-neutral-200 font-bold text-base leading-none", children: "\u2190" })
2986
+ }
2987
+ ),
2988
+ user && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2989
+ import_react_native29.Pressable,
2990
+ {
2991
+ onPress: onProfilePress,
2992
+ className: "flex-row items-center gap-2 active:opacity-80",
2993
+ accessibilityRole: "button",
2994
+ accessibilityLabel: `User profile: ${user.name || "User"}`,
2995
+ children: [
2996
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Avatar, { size: "sm", children: [
2997
+ user.avatarUrl && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarImage, { source: { uri: user.avatarUrl } }),
2998
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarFallback, { text: (user.name || "U").slice(0, 2).toUpperCase() })
2999
+ ] }),
3000
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "hidden sm:flex", children: [
3001
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs font-semibold text-neutral-800 dark:text-neutral-200 leading-tight", children: user.name }),
3002
+ user.role && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-[10px] text-neutral-500 dark:text-neutral-400 leading-tight", children: user.role })
3003
+ ] })
3004
+ ]
3005
+ }
3006
+ ),
3007
+ (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-1", children: [
3008
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "flex-row items-center gap-1 mb-0.5", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(React26.Fragment, { children: [
3009
+ idx > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-[11px] text-neutral-400 dark:text-neutral-500", children: "/" }),
3010
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3011
+ Text2,
3012
+ {
3013
+ onPress: crumb.onPress,
3014
+ className: cn(
3015
+ "text-[11px]",
3016
+ crumb.onPress ? "text-primary-600 dark:text-primary-400 font-medium" : "text-neutral-500 dark:text-neutral-400"
3017
+ ),
3018
+ children: crumb.label
3019
+ }
3020
+ )
3021
+ ] }, idx)) }),
3022
+ title && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3023
+ Heading,
3024
+ {
3025
+ level: 3,
3026
+ className: "text-lg font-bold text-neutral-900 dark:text-neutral-50 leading-tight",
3027
+ children: title
3028
+ }
3029
+ ),
3030
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 leading-tight", children: subtitle })
3031
+ ] })
3032
+ ] }),
3033
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-row items-center gap-2", children: [
3034
+ headerActions,
3035
+ showNightModeSwitch && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(NightModeSwitch, { size: "sm", variant: "ghost" }),
3036
+ onNotificationPress && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3037
+ import_react_native29.Pressable,
3038
+ {
3039
+ onPress: onNotificationPress,
3040
+ className: "w-9 h-9 rounded-full bg-neutral-100 dark:bg-neutral-800 items-center justify-center relative active:opacity-70",
3041
+ accessibilityRole: "button",
3042
+ accessibilityLabel: "Notifications",
3043
+ children: [
3044
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-sm", children: "\u{1F514}" }),
3045
+ unreadNotificationsCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "absolute -top-0.5 -right-0.5 min-w-[16px] h-4 px-1 rounded-full bg-danger items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-[9px] font-bold text-white leading-none", children: unreadNotificationsCount > 9 ? "9+" : unreadNotificationsCount }) })
3046
+ ]
3047
+ }
3048
+ )
3049
+ ] })
3050
+ ] }),
3051
+ showSearch && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "px-5 py-2 border-b border-neutral-100 dark:border-neutral-800/60 bg-neutral-50/50 dark:bg-neutral-900/50", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-row items-center bg-white dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 rounded-xl px-3 py-2", children: [
3052
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-neutral-400 mr-2 text-sm", children: "\u{1F50D}" }),
3053
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3054
+ import_react_native29.TextInput,
3055
+ {
3056
+ value: searchValue,
3057
+ onChangeText: onSearchChange,
3058
+ placeholder: searchPlaceholder,
3059
+ placeholderTextColor: "#9ca3af",
3060
+ className: "flex-1 text-sm text-neutral-900 dark:text-neutral-100 p-0"
3061
+ }
3062
+ )
3063
+ ] }) }),
3064
+ scrollable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3065
+ import_react_native29.ScrollView,
3066
+ {
3067
+ className: cn("flex-1", contentClassName),
3068
+ contentContainerStyle: { paddingBottom: 32 },
3069
+ showsVerticalScrollIndicator: false,
3070
+ refreshControl: onRefresh ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.RefreshControl, { refreshing, onRefresh }) : void 0,
3071
+ children
3072
+ }
3073
+ ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: cn("flex-1", contentClassName), children }),
3074
+ footer
3075
+ ]
3076
+ }
3077
+ );
3078
+ };
3079
+ DashboardLayout.displayName = "DashboardLayout";
3080
+
3081
+ // src/templates/auth/SignInTemplate.tsx
3082
+ var React27 = __toESM(require("react"));
3083
+ var import_react_native30 = require("react-native");
3084
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2550
3085
  var SignInTemplate = ({
2551
3086
  title = "Welcome Back",
2552
3087
  subtitle = "Sign in to your Beyond account to continue",
@@ -2560,12 +3095,12 @@ var SignInTemplate = ({
2560
3095
  error,
2561
3096
  className
2562
3097
  }) => {
2563
- const [email, setEmail] = React23.useState("");
2564
- const [password, setPassword] = React23.useState("");
2565
- const [showPassword, setShowPassword] = React23.useState(false);
2566
- const [rememberMe, setRememberMe] = React23.useState(false);
2567
- const [emailError, setEmailError] = React23.useState();
2568
- const [passwordError, setPasswordError] = React23.useState();
3098
+ const [email, setEmail] = React27.useState("");
3099
+ const [password, setPassword] = React27.useState("");
3100
+ const [showPassword, setShowPassword] = React27.useState(false);
3101
+ const [rememberMe, setRememberMe] = React27.useState(false);
3102
+ const [emailError, setEmailError] = React27.useState();
3103
+ const [passwordError, setPasswordError] = React27.useState();
2569
3104
  const handleSubmit = () => {
2570
3105
  let valid = true;
2571
3106
  setEmailError(void 0);
@@ -2582,29 +3117,29 @@ var SignInTemplate = ({
2582
3117
  onSubmit?.({ email, password, rememberMe });
2583
3118
  }
2584
3119
  };
2585
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2586
- import_react_native26.KeyboardAvoidingView,
3120
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3121
+ import_react_native30.KeyboardAvoidingView,
2587
3122
  {
2588
- behavior: import_react_native26.Platform.OS === "ios" ? "padding" : "height",
3123
+ behavior: import_react_native30.Platform.OS === "ios" ? "padding" : "height",
2589
3124
  style: { flex: 1 },
2590
3125
  className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
2591
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2592
- import_react_native26.ScrollView,
3126
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3127
+ import_react_native30.ScrollView,
2593
3128
  {
2594
3129
  style: { flex: 1 },
2595
3130
  contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
2596
3131
  className: "px-6 py-8",
2597
3132
  keyboardShouldPersistTaps: "handled",
2598
3133
  showsVerticalScrollIndicator: false,
2599
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "w-full max-w-md mx-auto gap-6", children: [
2600
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "items-center gap-2", children: [
2601
- logo && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.View, { className: "mb-2", children: logo }),
2602
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
2603
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
3134
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "w-full max-w-md mx-auto gap-6", children: [
3135
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "items-center gap-2", children: [
3136
+ logo && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_native30.View, { className: "mb-2", children: logo }),
3137
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
3138
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
2604
3139
  ] }),
2605
- error && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AlertDescription, { children: error }) }),
2606
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "gap-4", children: [
2607
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3140
+ error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(AlertDescription, { children: error }) }),
3141
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "gap-4", children: [
3142
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2608
3143
  Input,
2609
3144
  {
2610
3145
  label: "Email Address",
@@ -2620,7 +3155,7 @@ var SignInTemplate = ({
2620
3155
  error: emailError
2621
3156
  }
2622
3157
  ),
2623
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.View, { className: "gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3158
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_native30.View, { className: "gap-1", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2624
3159
  Input,
2625
3160
  {
2626
3161
  label: "Password",
@@ -2632,17 +3167,17 @@ var SignInTemplate = ({
2632
3167
  if (passwordError) setPasswordError(void 0);
2633
3168
  },
2634
3169
  error: passwordError,
2635
- rightElement: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.Pressable, { onPress: () => setShowPassword((p) => !p), className: "p-1", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-semibold", children: showPassword ? "HIDE" : "SHOW" }) })
3170
+ rightElement: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_native30.Pressable, { onPress: () => setShowPassword((p) => !p), className: "p-1", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-semibold", children: showPassword ? "HIDE" : "SHOW" }) })
2636
3171
  }
2637
3172
  ) }),
2638
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "flex-row items-center justify-between py-1", children: [
2639
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "flex-row items-center gap-2", children: [
2640
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Checkbox, { checked: rememberMe, onCheckedChange: setRememberMe }),
2641
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100", children: "Remember me" })
3173
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row items-center justify-between py-1", children: [
3174
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row items-center gap-2", children: [
3175
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Checkbox, { checked: rememberMe, onCheckedChange: setRememberMe }),
3176
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100", children: "Remember me" })
2642
3177
  ] }),
2643
- onForgotPassword && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.Pressable, { onPress: onForgotPassword, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Forgot password?" }) })
3178
+ onForgotPassword && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_native30.Pressable, { onPress: onForgotPassword, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Forgot password?" }) })
2644
3179
  ] }),
2645
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3180
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2646
3181
  Button,
2647
3182
  {
2648
3183
  variant: "primary",
@@ -2654,14 +3189,14 @@ var SignInTemplate = ({
2654
3189
  }
2655
3190
  )
2656
3191
  ] }),
2657
- (onGooglePress || onApplePress) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "gap-4", children: [
2658
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "flex-row items-center gap-3", children: [
2659
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Separator, { className: "flex-1" }),
2660
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
2661
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Separator, { className: "flex-1" })
3192
+ (onGooglePress || onApplePress) && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "gap-4", children: [
3193
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row items-center gap-3", children: [
3194
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Separator, { className: "flex-1" }),
3195
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
3196
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Separator, { className: "flex-1" })
2662
3197
  ] }),
2663
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "flex-row gap-3", children: [
2664
- onGooglePress && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3198
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row gap-3", children: [
3199
+ onGooglePress && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2665
3200
  Button,
2666
3201
  {
2667
3202
  variant: "outline",
@@ -2670,7 +3205,7 @@ var SignInTemplate = ({
2670
3205
  children: "Google"
2671
3206
  }
2672
3207
  ),
2673
- onApplePress && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3208
+ onApplePress && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2674
3209
  Button,
2675
3210
  {
2676
3211
  variant: "outline",
@@ -2681,9 +3216,9 @@ var SignInTemplate = ({
2681
3216
  )
2682
3217
  ] })
2683
3218
  ] }),
2684
- onSignUpPress && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_native26.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
2685
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Don't have an account?" }),
2686
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native26.Pressable, { onPress: onSignUpPress, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign Up" }) })
3219
+ onSignUpPress && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
3220
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Don't have an account?" }),
3221
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_native30.Pressable, { onPress: onSignUpPress, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign Up" }) })
2687
3222
  ] })
2688
3223
  ] })
2689
3224
  }
@@ -2693,9 +3228,9 @@ var SignInTemplate = ({
2693
3228
  };
2694
3229
 
2695
3230
  // src/templates/auth/SignUpTemplate.tsx
2696
- var React24 = __toESM(require("react"));
2697
- var import_react_native27 = require("react-native");
2698
- var import_jsx_runtime27 = require("react/jsx-runtime");
3231
+ var React28 = __toESM(require("react"));
3232
+ var import_react_native31 = require("react-native");
3233
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2699
3234
  var SignUpTemplate = ({
2700
3235
  title = "Create Account",
2701
3236
  subtitle = "Get started with your free Beyond account",
@@ -2708,14 +3243,14 @@ var SignUpTemplate = ({
2708
3243
  error,
2709
3244
  className
2710
3245
  }) => {
2711
- const [fullName, setFullName] = React24.useState("");
2712
- const [email, setEmail] = React24.useState("");
2713
- const [password, setPassword] = React24.useState("");
2714
- const [agreeToTerms, setAgreeToTerms] = React24.useState(false);
2715
- const [nameError, setNameError] = React24.useState();
2716
- const [emailError, setEmailError] = React24.useState();
2717
- const [passwordError, setPasswordError] = React24.useState();
2718
- const [termsError, setTermsError] = React24.useState();
3246
+ const [fullName, setFullName] = React28.useState("");
3247
+ const [email, setEmail] = React28.useState("");
3248
+ const [password, setPassword] = React28.useState("");
3249
+ const [agreeToTerms, setAgreeToTerms] = React28.useState(false);
3250
+ const [nameError, setNameError] = React28.useState();
3251
+ const [emailError, setEmailError] = React28.useState();
3252
+ const [passwordError, setPasswordError] = React28.useState();
3253
+ const [termsError, setTermsError] = React28.useState();
2719
3254
  const handleSubmit = () => {
2720
3255
  let valid = true;
2721
3256
  setNameError(void 0);
@@ -2742,29 +3277,29 @@ var SignUpTemplate = ({
2742
3277
  onSubmit?.({ fullName, email, password, agreeToTerms });
2743
3278
  }
2744
3279
  };
2745
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2746
- import_react_native27.KeyboardAvoidingView,
3280
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3281
+ import_react_native31.KeyboardAvoidingView,
2747
3282
  {
2748
- behavior: import_react_native27.Platform.OS === "ios" ? "padding" : "height",
3283
+ behavior: import_react_native31.Platform.OS === "ios" ? "padding" : "height",
2749
3284
  style: { flex: 1 },
2750
3285
  className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
2751
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2752
- import_react_native27.ScrollView,
3286
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3287
+ import_react_native31.ScrollView,
2753
3288
  {
2754
3289
  style: { flex: 1 },
2755
3290
  contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
2756
3291
  className: "px-6 py-8",
2757
3292
  keyboardShouldPersistTaps: "handled",
2758
3293
  showsVerticalScrollIndicator: false,
2759
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "w-full max-w-md mx-auto gap-6", children: [
2760
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "items-center gap-2", children: [
2761
- logo && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_native27.View, { className: "mb-2", children: logo }),
2762
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
2763
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
3294
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "w-full max-w-md mx-auto gap-6", children: [
3295
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "items-center gap-2", children: [
3296
+ logo && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_native31.View, { className: "mb-2", children: logo }),
3297
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
3298
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
2764
3299
  ] }),
2765
- error && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AlertDescription, { children: error }) }),
2766
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "gap-4", children: [
2767
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3300
+ error && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(AlertDescription, { children: error }) }),
3301
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "gap-4", children: [
3302
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2768
3303
  Input,
2769
3304
  {
2770
3305
  label: "Full Name",
@@ -2777,7 +3312,7 @@ var SignUpTemplate = ({
2777
3312
  error: nameError
2778
3313
  }
2779
3314
  ),
2780
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3315
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2781
3316
  Input,
2782
3317
  {
2783
3318
  label: "Email Address",
@@ -2792,7 +3327,7 @@ var SignUpTemplate = ({
2792
3327
  error: emailError
2793
3328
  }
2794
3329
  ),
2795
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3330
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2796
3331
  Input,
2797
3332
  {
2798
3333
  label: "Password",
@@ -2806,9 +3341,9 @@ var SignUpTemplate = ({
2806
3341
  error: passwordError
2807
3342
  }
2808
3343
  ),
2809
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "gap-1", children: [
2810
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "flex-row items-center gap-2 pt-1", children: [
2811
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3344
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "gap-1", children: [
3345
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "flex-row items-center gap-2 pt-1", children: [
3346
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2812
3347
  Checkbox,
2813
3348
  {
2814
3349
  checked: agreeToTerms,
@@ -2818,11 +3353,11 @@ var SignUpTemplate = ({
2818
3353
  }
2819
3354
  }
2820
3355
  ),
2821
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100 flex-1", children: "I agree to the Terms of Service & Privacy Policy" })
3356
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100 flex-1", children: "I agree to the Terms of Service & Privacy Policy" })
2822
3357
  ] }),
2823
- termsError && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-xs text-danger font-medium", children: termsError })
3358
+ termsError && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-xs text-danger font-medium", children: termsError })
2824
3359
  ] }),
2825
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3360
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2826
3361
  Button,
2827
3362
  {
2828
3363
  variant: "primary",
@@ -2834,14 +3369,14 @@ var SignUpTemplate = ({
2834
3369
  }
2835
3370
  )
2836
3371
  ] }),
2837
- (onGooglePress || onApplePress) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "gap-4", children: [
2838
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "flex-row items-center gap-3", children: [
2839
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Separator, { className: "flex-1" }),
2840
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
2841
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Separator, { className: "flex-1" })
3372
+ (onGooglePress || onApplePress) && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "gap-4", children: [
3373
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "flex-row items-center gap-3", children: [
3374
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Separator, { className: "flex-1" }),
3375
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
3376
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Separator, { className: "flex-1" })
2842
3377
  ] }),
2843
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "flex-row gap-3", children: [
2844
- onGooglePress && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3378
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "flex-row gap-3", children: [
3379
+ onGooglePress && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2845
3380
  Button,
2846
3381
  {
2847
3382
  variant: "outline",
@@ -2850,7 +3385,7 @@ var SignUpTemplate = ({
2850
3385
  children: "Google"
2851
3386
  }
2852
3387
  ),
2853
- onApplePress && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3388
+ onApplePress && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2854
3389
  Button,
2855
3390
  {
2856
3391
  variant: "outline",
@@ -2861,9 +3396,9 @@ var SignUpTemplate = ({
2861
3396
  )
2862
3397
  ] })
2863
3398
  ] }),
2864
- onSignInPress && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_native27.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
2865
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Already have an account?" }),
2866
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_native27.Pressable, { onPress: onSignInPress, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign In" }) })
3399
+ onSignInPress && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_react_native31.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
3400
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Already have an account?" }),
3401
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_native31.Pressable, { onPress: onSignInPress, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign In" }) })
2867
3402
  ] })
2868
3403
  ] })
2869
3404
  }
@@ -2873,9 +3408,9 @@ var SignUpTemplate = ({
2873
3408
  };
2874
3409
 
2875
3410
  // src/templates/auth/ForgotPasswordTemplate.tsx
2876
- var React25 = __toESM(require("react"));
2877
- var import_react_native28 = require("react-native");
2878
- var import_jsx_runtime28 = require("react/jsx-runtime");
3411
+ var React29 = __toESM(require("react"));
3412
+ var import_react_native32 = require("react-native");
3413
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2879
3414
  var ForgotPasswordTemplate = ({
2880
3415
  title = "Reset Password",
2881
3416
  subtitle = "Enter your email address and we'll send you recovery instructions",
@@ -2886,8 +3421,8 @@ var ForgotPasswordTemplate = ({
2886
3421
  error,
2887
3422
  className
2888
3423
  }) => {
2889
- const [email, setEmail] = React25.useState("");
2890
- const [emailError, setEmailError] = React25.useState();
3424
+ const [email, setEmail] = React29.useState("");
3425
+ const [emailError, setEmailError] = React29.useState();
2891
3426
  const handleSubmit = () => {
2892
3427
  if (!email || !email.includes("@")) {
2893
3428
  setEmailError("Please enter a valid email address");
@@ -2896,31 +3431,31 @@ var ForgotPasswordTemplate = ({
2896
3431
  setEmailError(void 0);
2897
3432
  onSubmit?.({ email });
2898
3433
  };
2899
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2900
- import_react_native28.KeyboardAvoidingView,
3434
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3435
+ import_react_native32.KeyboardAvoidingView,
2901
3436
  {
2902
- behavior: import_react_native28.Platform.OS === "ios" ? "padding" : "height",
3437
+ behavior: import_react_native32.Platform.OS === "ios" ? "padding" : "height",
2903
3438
  style: { flex: 1 },
2904
3439
  className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
2905
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2906
- import_react_native28.ScrollView,
3440
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3441
+ import_react_native32.ScrollView,
2907
3442
  {
2908
3443
  style: { flex: 1 },
2909
3444
  contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
2910
3445
  className: "px-6 py-8",
2911
3446
  keyboardShouldPersistTaps: "handled",
2912
3447
  showsVerticalScrollIndicator: false,
2913
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { className: "w-full max-w-md mx-auto gap-6", children: [
2914
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { className: "items-center gap-2", children: [
2915
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
2916
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
3448
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native32.View, { className: "w-full max-w-md mx-auto gap-6", children: [
3449
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native32.View, { className: "items-center gap-2", children: [
3450
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
3451
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
2917
3452
  ] }),
2918
- error && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(AlertDescription, { children: error }) }),
2919
- isSuccess ? /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { className: "gap-4", children: [
2920
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Alert, { variant: "success", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(AlertDescription, { children: "Password reset link sent! Check your email inbox." }) }),
2921
- onBackToSignIn && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button, { variant: "primary", size: "lg", onPress: onBackToSignIn, children: "Back to Sign In" })
2922
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_native28.View, { className: "gap-4", children: [
2923
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3453
+ error && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Alert, { variant: "danger", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(AlertDescription, { children: error }) }),
3454
+ isSuccess ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native32.View, { className: "gap-4", children: [
3455
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Alert, { variant: "success", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(AlertDescription, { children: "Password reset link sent! Check your email inbox." }) }),
3456
+ onBackToSignIn && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { variant: "primary", size: "lg", onPress: onBackToSignIn, children: "Back to Sign In" })
3457
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_react_native32.View, { className: "gap-4", children: [
3458
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2924
3459
  Input,
2925
3460
  {
2926
3461
  label: "Email Address",
@@ -2935,7 +3470,7 @@ var ForgotPasswordTemplate = ({
2935
3470
  error: emailError
2936
3471
  }
2937
3472
  ),
2938
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3473
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2939
3474
  Button,
2940
3475
  {
2941
3476
  variant: "primary",
@@ -2946,7 +3481,7 @@ var ForgotPasswordTemplate = ({
2946
3481
  children: "Send Reset Link"
2947
3482
  }
2948
3483
  ),
2949
- onBackToSignIn && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native28.Pressable, { onPress: onBackToSignIn, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Back to Sign In" }) }) })
3484
+ onBackToSignIn && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native32.View, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native32.Pressable, { onPress: onBackToSignIn, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Back to Sign In" }) }) })
2950
3485
  ] })
2951
3486
  ] })
2952
3487
  }
@@ -2956,8 +3491,8 @@ var ForgotPasswordTemplate = ({
2956
3491
  };
2957
3492
 
2958
3493
  // src/templates/dashboard/DashboardTemplate.tsx
2959
- var import_react_native29 = require("react-native");
2960
- var import_jsx_runtime29 = require("react/jsx-runtime");
3494
+ var import_react_native33 = require("react-native");
3495
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2961
3496
  var DashboardTemplate = ({
2962
3497
  userName,
2963
3498
  userRole = "Administrator",
@@ -2971,8 +3506,8 @@ var DashboardTemplate = ({
2971
3506
  className,
2972
3507
  ...props
2973
3508
  }) => {
2974
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2975
- import_react_native29.ScrollView,
3509
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
3510
+ import_react_native33.ScrollView,
2976
3511
  {
2977
3512
  ...props,
2978
3513
  style: [{ flex: 1 }, props.style],
@@ -2980,43 +3515,43 @@ var DashboardTemplate = ({
2980
3515
  contentContainerStyle: { paddingBottom: 40 },
2981
3516
  showsVerticalScrollIndicator: false,
2982
3517
  children: [
2983
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "px-6 pt-6 pb-4 flex-row items-center justify-between border-b border-neutral-200 dark:border-neutral-800", children: [
2984
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-row items-center gap-3", children: [
2985
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Avatar, { size: "lg", children: [
2986
- userAvatarUrl && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarImage, { source: { uri: userAvatarUrl } }),
2987
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarFallback, { text: userName.slice(0, 2).toUpperCase() })
3518
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "px-6 pt-6 pb-4 flex-row items-center justify-between border-b border-neutral-200 dark:border-neutral-800", children: [
3519
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "flex-row items-center gap-3", children: [
3520
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Avatar, { size: "lg", children: [
3521
+ userAvatarUrl && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(AvatarImage, { source: { uri: userAvatarUrl } }),
3522
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(AvatarFallback, { text: userName.slice(0, 2).toUpperCase() })
2988
3523
  ] }),
2989
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { children: [
2990
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-medium uppercase tracking-wider", children: userRole }),
2991
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Heading, { level: 3, className: "text-xl font-bold text-neutral-900 dark:text-neutral-50", children: [
3524
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { children: [
3525
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-medium uppercase tracking-wider", children: userRole }),
3526
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Heading, { level: 3, className: "text-xl font-bold text-neutral-900 dark:text-neutral-50", children: [
2992
3527
  "Hello, ",
2993
3528
  userName,
2994
3529
  " \u{1F44B}"
2995
3530
  ] })
2996
3531
  ] })
2997
3532
  ] }),
2998
- onNotificationPress && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2999
- import_react_native29.Pressable,
3533
+ onNotificationPress && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
3534
+ import_react_native33.Pressable,
3000
3535
  {
3001
3536
  onPress: onNotificationPress,
3002
3537
  className: "w-10 h-10 rounded-full border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 items-center justify-center relative active:opacity-70",
3003
3538
  children: [
3004
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-base text-neutral-900 dark:text-neutral-100", children: "\u{1F514}" }),
3005
- unreadNotificationsCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "absolute -top-1 -right-1 w-5 h-5 rounded-full bg-danger items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-[10px] font-bold text-white", children: unreadNotificationsCount > 9 ? "9+" : unreadNotificationsCount }) })
3539
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-base text-neutral-900 dark:text-neutral-100", children: "\u{1F514}" }),
3540
+ unreadNotificationsCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native33.View, { className: "absolute -top-1 -right-1 w-5 h-5 rounded-full bg-danger items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-[10px] font-bold text-white", children: unreadNotificationsCount > 9 ? "9+" : unreadNotificationsCount }) })
3006
3541
  ]
3007
3542
  }
3008
3543
  )
3009
3544
  ] }),
3010
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "px-6 pt-6 gap-6", children: [
3011
- quickActions && quickActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "gap-2", children: [
3012
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Quick Actions" }),
3013
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3014
- import_react_native29.ScrollView,
3545
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "px-6 pt-6 gap-6", children: [
3546
+ quickActions && quickActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "gap-2", children: [
3547
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Quick Actions" }),
3548
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3549
+ import_react_native33.ScrollView,
3015
3550
  {
3016
3551
  horizontal: true,
3017
3552
  showsHorizontalScrollIndicator: false,
3018
3553
  className: "-mx-6 px-6",
3019
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "flex-row gap-3", children: quickActions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3554
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native33.View, { className: "flex-row gap-3", children: quickActions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3020
3555
  Button,
3021
3556
  {
3022
3557
  variant: "outline",
@@ -3029,42 +3564,42 @@ var DashboardTemplate = ({
3029
3564
  }
3030
3565
  )
3031
3566
  ] }),
3032
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "gap-3", children: [
3033
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Overview Performance" }),
3034
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.View, { className: "gap-3", children: metrics.map((metric) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(StatsCard, { ...metric }, metric.id)) })
3567
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "gap-3", children: [
3568
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Overview Performance" }),
3569
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native33.View, { className: "gap-3", children: metrics.map((metric) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StatsCard, { ...metric }, metric.id)) })
3035
3570
  ] }),
3036
- recentActivities && recentActivities.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Card, { className: "gap-2", children: [
3037
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(CardHeader, { className: "flex-row items-center justify-between pb-2", children: [
3038
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CardTitle, { className: "text-base font-bold", children: "Recent Activity" }),
3039
- onViewAllActivities && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_native29.Pressable, { onPress: onViewAllActivities, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-xs font-semibold text-primary-600 dark:text-primary-400", children: "View all" }) })
3571
+ recentActivities && recentActivities.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Card, { className: "gap-2", children: [
3572
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(CardHeader, { className: "flex-row items-center justify-between pb-2", children: [
3573
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CardTitle, { className: "text-base font-bold", children: "Recent Activity" }),
3574
+ onViewAllActivities && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_native33.Pressable, { onPress: onViewAllActivities, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-xs font-semibold text-primary-600 dark:text-primary-400", children: "View all" }) })
3040
3575
  ] }),
3041
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CardContent, { className: "gap-3 pt-0", children: recentActivities.map((act) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3042
- import_react_native29.View,
3576
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CardContent, { className: "gap-3 pt-0", children: recentActivities.map((act) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
3577
+ import_react_native33.View,
3043
3578
  {
3044
3579
  className: "flex-row items-center justify-between py-2 border-b border-neutral-200 dark:border-neutral-800 last:border-b-0",
3045
3580
  children: [
3046
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-row items-center gap-3 flex-1 pr-2", children: [
3047
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Avatar, { size: "sm", children: [
3048
- act.avatarUrl && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarImage, { source: { uri: act.avatarUrl } }),
3049
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3581
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "flex-row items-center gap-3 flex-1 pr-2", children: [
3582
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Avatar, { size: "sm", children: [
3583
+ act.avatarUrl && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(AvatarImage, { source: { uri: act.avatarUrl } }),
3584
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3050
3585
  AvatarFallback,
3051
3586
  {
3052
3587
  text: act.avatarInitials || act.title.slice(0, 2).toUpperCase()
3053
3588
  }
3054
3589
  )
3055
3590
  ] }),
3056
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "flex-1", children: [
3057
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", numberOfLines: 1, children: act.title }),
3058
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", numberOfLines: 1, children: [
3591
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "flex-1", children: [
3592
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", numberOfLines: 1, children: act.title }),
3593
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", numberOfLines: 1, children: [
3059
3594
  act.subtitle,
3060
3595
  " \u2022 ",
3061
3596
  act.timestamp
3062
3597
  ] })
3063
3598
  ] })
3064
3599
  ] }),
3065
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_native29.View, { className: "items-end gap-1", children: [
3066
- act.amount && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Text2, { className: "text-sm font-bold text-neutral-900 dark:text-neutral-100", children: act.amount }),
3067
- act.status && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Badge, { variant: act.status.variant, size: "sm", children: act.status.label })
3600
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_react_native33.View, { className: "items-end gap-1", children: [
3601
+ act.amount && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Text2, { className: "text-sm font-bold text-neutral-900 dark:text-neutral-100", children: act.amount }),
3602
+ act.status && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Badge, { variant: act.status.variant, size: "sm", children: act.status.label })
3068
3603
  ] })
3069
3604
  ]
3070
3605
  },
@@ -3078,8 +3613,8 @@ var DashboardTemplate = ({
3078
3613
  };
3079
3614
 
3080
3615
  // src/templates/settings/SettingsTemplate.tsx
3081
- var import_react_native30 = require("react-native");
3082
- var import_jsx_runtime30 = require("react/jsx-runtime");
3616
+ var import_react_native34 = require("react-native");
3617
+ var import_jsx_runtime34 = require("react/jsx-runtime");
3083
3618
  var SettingsTemplate = ({
3084
3619
  user,
3085
3620
  pushNotifications = true,
@@ -3099,39 +3634,39 @@ var SettingsTemplate = ({
3099
3634
  className,
3100
3635
  ...props
3101
3636
  }) => {
3102
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3103
- import_react_native30.ScrollView,
3637
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3638
+ import_react_native34.ScrollView,
3104
3639
  {
3105
3640
  ...props,
3106
3641
  style: [{ flex: 1 }, props.style],
3107
3642
  className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
3108
3643
  contentContainerStyle: { paddingBottom: 40 },
3109
3644
  showsVerticalScrollIndicator: false,
3110
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "px-6 pt-6 gap-6", children: [
3111
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Heading, { level: 2, className: "text-2xl font-bold text-neutral-900 dark:text-neutral-50", children: "Settings & Profile" }),
3112
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Card, { className: "p-4 flex-row items-center gap-4", children: [
3113
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Avatar, { size: "lg", children: [
3114
- user.avatarUrl && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(AvatarImage, { source: { uri: user.avatarUrl } }),
3115
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(AvatarFallback, { text: user.name.slice(0, 2).toUpperCase() })
3645
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "px-6 pt-6 gap-6", children: [
3646
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Heading, { level: 2, className: "text-2xl font-bold text-neutral-900 dark:text-neutral-50", children: "Settings & Profile" }),
3647
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Card, { className: "p-4 flex-row items-center gap-4", children: [
3648
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Avatar, { size: "lg", children: [
3649
+ user.avatarUrl && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AvatarImage, { source: { uri: user.avatarUrl } }),
3650
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AvatarFallback, { text: user.name.slice(0, 2).toUpperCase() })
3116
3651
  ] }),
3117
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-1", children: [
3118
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "flex-row items-center gap-2", children: [
3119
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-base font-bold text-neutral-900 dark:text-neutral-100", children: user.name }),
3120
- user.plan && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Badge, { variant: "primary", size: "sm", children: user.plan })
3652
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "flex-1", children: [
3653
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "flex-row items-center gap-2", children: [
3654
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-base font-bold text-neutral-900 dark:text-neutral-100", children: user.name }),
3655
+ user.plan && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Badge, { variant: "primary", size: "sm", children: user.plan })
3121
3656
  ] }),
3122
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: user.email })
3657
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: user.email })
3123
3658
  ] }),
3124
- onEditProfile && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { variant: "outline", size: "sm", onPress: onEditProfile, children: "Edit" })
3659
+ onEditProfile && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { variant: "outline", size: "sm", onPress: onEditProfile, children: "Edit" })
3125
3660
  ] }),
3126
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "gap-2", children: [
3127
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Preferences" }),
3128
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
3129
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "p-4 flex-row items-center justify-between", children: [
3130
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "pr-4 flex-1", children: [
3131
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Push Notifications" }),
3132
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Receive real-time alerts on your mobile device" })
3661
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "gap-2", children: [
3662
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Preferences" }),
3663
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
3664
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "p-4 flex-row items-center justify-between", children: [
3665
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "pr-4 flex-1", children: [
3666
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Push Notifications" }),
3667
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Receive real-time alerts on your mobile device" })
3133
3668
  ] }),
3134
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3669
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3135
3670
  Switch,
3136
3671
  {
3137
3672
  checked: pushNotifications,
@@ -3139,12 +3674,12 @@ var SettingsTemplate = ({
3139
3674
  }
3140
3675
  )
3141
3676
  ] }),
3142
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "p-4 flex-row items-center justify-between", children: [
3143
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "pr-4 flex-1", children: [
3144
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Email Notifications" }),
3145
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Weekly digests and activity summaries" })
3677
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "p-4 flex-row items-center justify-between", children: [
3678
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "pr-4 flex-1", children: [
3679
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Email Notifications" }),
3680
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Weekly digests and activity summaries" })
3146
3681
  ] }),
3147
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3682
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3148
3683
  Switch,
3149
3684
  {
3150
3685
  checked: emailNotifications,
@@ -3152,19 +3687,19 @@ var SettingsTemplate = ({
3152
3687
  }
3153
3688
  )
3154
3689
  ] }),
3155
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "p-4 flex-row items-center justify-between", children: [
3156
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "pr-4 flex-1", children: [
3157
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Dark Theme" }),
3158
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Enable high contrast dark mode appearance" })
3690
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "p-4 flex-row items-center justify-between", children: [
3691
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "pr-4 flex-1", children: [
3692
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Dark Theme" }),
3693
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Enable high contrast dark mode appearance" })
3159
3694
  ] }),
3160
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Switch, { checked: isDarkMode, onCheckedChange: onToggleDarkMode })
3695
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Switch, { checked: isDarkMode, onCheckedChange: onToggleDarkMode })
3161
3696
  ] }),
3162
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "p-4 flex-row items-center justify-between", children: [
3163
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "pr-4 flex-1", children: [
3164
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Biometric Login" }),
3165
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Use Face ID or fingerprint to authenticate" })
3697
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "p-4 flex-row items-center justify-between", children: [
3698
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "pr-4 flex-1", children: [
3699
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Biometric Login" }),
3700
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Use Face ID or fingerprint to authenticate" })
3166
3701
  ] }),
3167
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3702
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3168
3703
  Switch,
3169
3704
  {
3170
3705
  checked: biometricsEnabled,
@@ -3174,47 +3709,47 @@ var SettingsTemplate = ({
3174
3709
  ] })
3175
3710
  ] })
3176
3711
  ] }),
3177
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "gap-2", children: [
3178
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Account & Security" }),
3179
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
3180
- onChangePassword && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3181
- import_react_native30.Pressable,
3712
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "gap-2", children: [
3713
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Account & Security" }),
3714
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
3715
+ onChangePassword && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3716
+ import_react_native34.Pressable,
3182
3717
  {
3183
3718
  onPress: onChangePassword,
3184
3719
  className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
3185
3720
  children: [
3186
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Change Password" }),
3187
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3721
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Change Password" }),
3722
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3188
3723
  ]
3189
3724
  }
3190
3725
  ),
3191
- onViewTerms && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3192
- import_react_native30.Pressable,
3726
+ onViewTerms && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3727
+ import_react_native34.Pressable,
3193
3728
  {
3194
3729
  onPress: onViewTerms,
3195
3730
  className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
3196
3731
  children: [
3197
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Terms of Service" }),
3198
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3732
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Terms of Service" }),
3733
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3199
3734
  ]
3200
3735
  }
3201
3736
  ),
3202
- onViewPrivacy && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3203
- import_react_native30.Pressable,
3737
+ onViewPrivacy && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3738
+ import_react_native34.Pressable,
3204
3739
  {
3205
3740
  onPress: onViewPrivacy,
3206
3741
  className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
3207
3742
  children: [
3208
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Privacy Policy" }),
3209
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3743
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Privacy Policy" }),
3744
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
3210
3745
  ]
3211
3746
  }
3212
3747
  )
3213
3748
  ] })
3214
3749
  ] }),
3215
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_native30.View, { className: "gap-3 pt-2", children: [
3216
- onLogout && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { variant: "outline", size: "lg", onPress: onLogout, children: "Log Out" }),
3217
- onDeleteAccount && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3750
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react_native34.View, { className: "gap-3 pt-2", children: [
3751
+ onLogout && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { variant: "outline", size: "lg", onPress: onLogout, children: "Log Out" }),
3752
+ onDeleteAccount && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3218
3753
  Button,
3219
3754
  {
3220
3755
  variant: "destructive",
@@ -3229,119 +3764,6 @@ var SettingsTemplate = ({
3229
3764
  );
3230
3765
  };
3231
3766
 
3232
- // src/providers/BeyondUIProvider.tsx
3233
- var React26 = __toESM(require("react"));
3234
- var import_react_native31 = require("react-native");
3235
- var import_nativewind = require("nativewind");
3236
- var import_portal = require("@rn-primitives/portal");
3237
- var import_jsx_runtime31 = require("react/jsx-runtime");
3238
- if (typeof __DEV__ !== "undefined" && __DEV__) {
3239
- try {
3240
- const { LogBox } = require("react-native");
3241
- LogBox?.ignoreLogs?.([
3242
- "You are setting the style `{ shadowOffset: ... }` as a prop",
3243
- "You are setting the style"
3244
- ]);
3245
- if (!Boolean(console.error?.__beyond_ui_filtered)) {
3246
- const originalError = console.error;
3247
- const filteredError = (...args) => {
3248
- const fullMessage = args.map((arg) => typeof arg === "string" ? arg : "").join(" ");
3249
- if (fullMessage.includes("shadowOffset") || fullMessage.includes("You are setting the style")) {
3250
- return;
3251
- }
3252
- originalError(...args);
3253
- };
3254
- filteredError.__beyond_ui_filtered = true;
3255
- console.error = filteredError;
3256
- }
3257
- } catch (_) {
3258
- }
3259
- }
3260
- var BeyondUIContext = React26.createContext({
3261
- colorScheme: "light",
3262
- setColorScheme: () => {
3263
- },
3264
- toggleColorScheme: () => {
3265
- }
3266
- });
3267
- function useBeyondUI() {
3268
- return React26.useContext(BeyondUIContext);
3269
- }
3270
- function BeyondUIProvider({
3271
- children,
3272
- defaultColorScheme = "system"
3273
- }) {
3274
- const systemScheme = (0, import_react_native31.useColorScheme)() ?? "light";
3275
- const [selectedScheme, setSelectedScheme] = React26.useState(defaultColorScheme);
3276
- const [toasts, setToasts] = React26.useState([]);
3277
- const activeScheme = selectedScheme === "system" ? systemScheme : selectedScheme;
3278
- React26.useEffect(() => {
3279
- try {
3280
- import_nativewind.colorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
3281
- } catch (_) {
3282
- }
3283
- }, [selectedScheme, activeScheme]);
3284
- const handleSetColorScheme = React26.useCallback((scheme) => {
3285
- setSelectedScheme(scheme);
3286
- try {
3287
- import_nativewind.colorScheme.set(scheme === "system" ? "system" : scheme);
3288
- } catch (_) {
3289
- }
3290
- }, []);
3291
- const toggleColorScheme = React26.useCallback(() => {
3292
- setSelectedScheme((prev) => {
3293
- const current = prev === "system" ? systemScheme : prev;
3294
- const next = current === "dark" ? "light" : "dark";
3295
- try {
3296
- import_nativewind.colorScheme.set(next);
3297
- } catch (_) {
3298
- }
3299
- return next;
3300
- });
3301
- }, [systemScheme]);
3302
- const dismissToast = React26.useCallback((id) => {
3303
- setToasts((prev) => prev.filter((t) => t.id !== id));
3304
- }, []);
3305
- const showToast = React26.useCallback((toast) => {
3306
- const id = Math.random().toString(36).substring(2, 9);
3307
- setToasts((prev) => [...prev, { ...toast, id }]);
3308
- return id;
3309
- }, []);
3310
- const toastContextValue = React26.useMemo(
3311
- () => ({
3312
- toasts,
3313
- show: showToast,
3314
- dismiss: dismissToast,
3315
- success: (title, description) => showToast({ title, description, variant: "success" }),
3316
- danger: (title, description) => showToast({ title, description, variant: "danger" }),
3317
- error: (title, description) => showToast({ title, description, variant: "danger" }),
3318
- warning: (title, description) => showToast({ title, description, variant: "warning" }),
3319
- info: (title, description) => showToast({ title, description, variant: "info" })
3320
- }),
3321
- [toasts, showToast, dismissToast]
3322
- );
3323
- const contextValue = React26.useMemo(
3324
- () => ({
3325
- colorScheme: activeScheme,
3326
- setColorScheme: handleSetColorScheme,
3327
- toggleColorScheme
3328
- }),
3329
- [activeScheme, handleSetColorScheme, toggleColorScheme]
3330
- );
3331
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(BeyondUIContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ToastContext.Provider, { value: toastContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
3332
- import_react_native31.View,
3333
- {
3334
- style: { flex: 1 },
3335
- className: activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white",
3336
- children: [
3337
- children,
3338
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_portal.PortalHost, {}),
3339
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ToastContainer, { toasts, onDismiss: dismissToast })
3340
- ]
3341
- }
3342
- ) }) });
3343
- }
3344
-
3345
3767
  // src/theme/tokens.ts
3346
3768
  var tokens = {
3347
3769
  colors: {
@@ -3583,6 +4005,7 @@ function joinA11yLabels(...parts) {
3583
4005
  CardHeader,
3584
4006
  CardTitle,
3585
4007
  Checkbox,
4008
+ DashboardLayout,
3586
4009
  DashboardTemplate,
3587
4010
  DataTable,
3588
4011
  Dialog,
@@ -3599,6 +4022,14 @@ function joinA11yLabels(...parts) {
3599
4022
  ForgotPasswordTemplate,
3600
4023
  Heading,
3601
4024
  Input,
4025
+ Modal,
4026
+ ModalContent,
4027
+ ModalContext,
4028
+ ModalDescription,
4029
+ ModalFooter,
4030
+ ModalHeader,
4031
+ ModalTitle,
4032
+ NightModeSwitch,
3602
4033
  Pressable,
3603
4034
  Radio,
3604
4035
  RadioGroup,
@@ -3641,10 +4072,13 @@ function joinA11yLabels(...parts) {
3641
4072
  headingVariants,
3642
4073
  inputVariants,
3643
4074
  joinA11yLabels,
4075
+ modalVariants,
4076
+ nightModeSwitchVariants,
3644
4077
  textVariants,
3645
4078
  tokens,
3646
4079
  useBeyondUI,
3647
4080
  useDialogContext,
4081
+ useModalContext,
3648
4082
  useTabsContext,
3649
4083
  useToast
3650
4084
  });