@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.d.mts +109 -1
- package/dist/index.d.ts +109 -1
- package/dist/index.js +749 -315
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +769 -329
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/dashboard-layout/dashboard-layout.tsx +245 -0
- package/src/components/dashboard-layout/index.ts +1 -0
- package/src/components/modal/index.ts +1 -0
- package/src/components/modal/modal.tsx +227 -0
- package/src/components/night-mode-switch/index.ts +1 -0
- package/src/components/night-mode-switch/night-mode-switch.tsx +95 -0
- package/src/index.ts +3 -0
package/dist/index.mjs
CHANGED
|
@@ -2469,16 +2469,557 @@ function DataTable({
|
|
|
2469
2469
|
] });
|
|
2470
2470
|
}
|
|
2471
2471
|
|
|
2472
|
-
// src/
|
|
2472
|
+
// src/components/modal/modal.tsx
|
|
2473
2473
|
import * as React23 from "react";
|
|
2474
2474
|
import {
|
|
2475
|
+
Modal as RNModal,
|
|
2475
2476
|
View as View22,
|
|
2476
|
-
|
|
2477
|
+
Text as Text16,
|
|
2478
|
+
Pressable as Pressable13,
|
|
2479
|
+
StyleSheet as StyleSheet2,
|
|
2477
2480
|
KeyboardAvoidingView,
|
|
2478
2481
|
Platform,
|
|
2479
|
-
|
|
2482
|
+
ScrollView as ScrollView3
|
|
2480
2483
|
} from "react-native";
|
|
2484
|
+
import { cva as cva11 } from "class-variance-authority";
|
|
2481
2485
|
import { jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2486
|
+
var modalVariants = cva11(
|
|
2487
|
+
"w-full rounded-2xl border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 p-6 shadow-2xl relative",
|
|
2488
|
+
{
|
|
2489
|
+
variants: {
|
|
2490
|
+
size: {
|
|
2491
|
+
sm: "max-w-xs",
|
|
2492
|
+
md: "max-w-md",
|
|
2493
|
+
lg: "max-w-lg",
|
|
2494
|
+
xl: "max-w-xl",
|
|
2495
|
+
full: "max-w-[95%] max-h-[90%]"
|
|
2496
|
+
}
|
|
2497
|
+
},
|
|
2498
|
+
defaultVariants: {
|
|
2499
|
+
size: "md"
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
);
|
|
2503
|
+
var ModalContext = React23.createContext(null);
|
|
2504
|
+
function useModalContext() {
|
|
2505
|
+
const context = React23.useContext(ModalContext);
|
|
2506
|
+
if (!context) {
|
|
2507
|
+
throw new Error("Modal compound components must be used within a Modal component");
|
|
2508
|
+
}
|
|
2509
|
+
return context;
|
|
2510
|
+
}
|
|
2511
|
+
function Modal4({
|
|
2512
|
+
open: controlledOpen,
|
|
2513
|
+
visible,
|
|
2514
|
+
onOpenChange,
|
|
2515
|
+
onRequestClose,
|
|
2516
|
+
showCloseButton = true,
|
|
2517
|
+
closeOnOverlayPress = true,
|
|
2518
|
+
size = "md",
|
|
2519
|
+
children,
|
|
2520
|
+
className,
|
|
2521
|
+
overlayClassName
|
|
2522
|
+
}) {
|
|
2523
|
+
const isOpen = (controlledOpen !== void 0 ? controlledOpen : visible) ?? false;
|
|
2524
|
+
const handleClose = React23.useCallback(() => {
|
|
2525
|
+
onOpenChange?.(false);
|
|
2526
|
+
onRequestClose?.();
|
|
2527
|
+
}, [onOpenChange, onRequestClose]);
|
|
2528
|
+
if (!isOpen) return null;
|
|
2529
|
+
return /* @__PURE__ */ jsx26(ModalContext.Provider, { value: { open: isOpen, onOpenChange: (o) => !o && handleClose() }, children: /* @__PURE__ */ jsx26(
|
|
2530
|
+
RNModal,
|
|
2531
|
+
{
|
|
2532
|
+
transparent: true,
|
|
2533
|
+
visible: isOpen,
|
|
2534
|
+
animationType: "fade",
|
|
2535
|
+
onRequestClose: handleClose,
|
|
2536
|
+
statusBarTranslucent: true,
|
|
2537
|
+
children: /* @__PURE__ */ jsxs13(
|
|
2538
|
+
KeyboardAvoidingView,
|
|
2539
|
+
{
|
|
2540
|
+
behavior: Platform.OS === "ios" ? "padding" : void 0,
|
|
2541
|
+
style: StyleSheet2.absoluteFill,
|
|
2542
|
+
children: [
|
|
2543
|
+
/* @__PURE__ */ jsx26(
|
|
2544
|
+
Pressable13,
|
|
2545
|
+
{
|
|
2546
|
+
style: StyleSheet2.absoluteFill,
|
|
2547
|
+
className: cn("bg-black/60", overlayClassName),
|
|
2548
|
+
onPress: closeOnOverlayPress ? handleClose : void 0,
|
|
2549
|
+
accessibilityRole: "button",
|
|
2550
|
+
accessibilityLabel: "Close modal overlay"
|
|
2551
|
+
}
|
|
2552
|
+
),
|
|
2553
|
+
/* @__PURE__ */ jsx26(
|
|
2554
|
+
View22,
|
|
2555
|
+
{
|
|
2556
|
+
pointerEvents: "box-none",
|
|
2557
|
+
style: StyleSheet2.absoluteFill,
|
|
2558
|
+
className: "items-center justify-center p-4 z-50",
|
|
2559
|
+
children: /* @__PURE__ */ jsxs13(
|
|
2560
|
+
View22,
|
|
2561
|
+
{
|
|
2562
|
+
role: "dialog",
|
|
2563
|
+
"aria-modal": true,
|
|
2564
|
+
className: cn(modalVariants({ size }), className),
|
|
2565
|
+
children: [
|
|
2566
|
+
showCloseButton && /* @__PURE__ */ jsx26(
|
|
2567
|
+
Pressable13,
|
|
2568
|
+
{
|
|
2569
|
+
onPress: handleClose,
|
|
2570
|
+
hitSlop: { top: 12, right: 12, bottom: 12, left: 12 },
|
|
2571
|
+
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",
|
|
2572
|
+
accessibilityRole: "button",
|
|
2573
|
+
accessibilityLabel: "Close modal",
|
|
2574
|
+
children: /* @__PURE__ */ jsx26(Text16, { className: "text-neutral-500 dark:text-neutral-400 text-sm font-semibold leading-none", children: "\u2715" })
|
|
2575
|
+
}
|
|
2576
|
+
),
|
|
2577
|
+
children
|
|
2578
|
+
]
|
|
2579
|
+
}
|
|
2580
|
+
)
|
|
2581
|
+
}
|
|
2582
|
+
)
|
|
2583
|
+
]
|
|
2584
|
+
}
|
|
2585
|
+
)
|
|
2586
|
+
}
|
|
2587
|
+
) });
|
|
2588
|
+
}
|
|
2589
|
+
Modal4.displayName = "Modal";
|
|
2590
|
+
function ModalHeader({
|
|
2591
|
+
className,
|
|
2592
|
+
...props
|
|
2593
|
+
}) {
|
|
2594
|
+
return /* @__PURE__ */ jsx26(
|
|
2595
|
+
View22,
|
|
2596
|
+
{
|
|
2597
|
+
className: cn("flex-col space-y-1.5 pr-8", className),
|
|
2598
|
+
...props
|
|
2599
|
+
}
|
|
2600
|
+
);
|
|
2601
|
+
}
|
|
2602
|
+
ModalHeader.displayName = "ModalHeader";
|
|
2603
|
+
var ModalTitle = React23.forwardRef(
|
|
2604
|
+
function ModalTitle2({ className, ...props }, ref) {
|
|
2605
|
+
return /* @__PURE__ */ jsx26(
|
|
2606
|
+
Text16,
|
|
2607
|
+
{
|
|
2608
|
+
ref,
|
|
2609
|
+
role: "heading",
|
|
2610
|
+
"aria-level": 2,
|
|
2611
|
+
className: cn(
|
|
2612
|
+
"text-lg font-bold tracking-tight text-neutral-900 dark:text-neutral-50",
|
|
2613
|
+
className
|
|
2614
|
+
),
|
|
2615
|
+
...props
|
|
2616
|
+
}
|
|
2617
|
+
);
|
|
2618
|
+
}
|
|
2619
|
+
);
|
|
2620
|
+
ModalTitle.displayName = "ModalTitle";
|
|
2621
|
+
var ModalDescription = React23.forwardRef(
|
|
2622
|
+
function ModalDescription2({ className, ...props }, ref) {
|
|
2623
|
+
return /* @__PURE__ */ jsx26(
|
|
2624
|
+
Text16,
|
|
2625
|
+
{
|
|
2626
|
+
ref,
|
|
2627
|
+
className: cn(
|
|
2628
|
+
"text-sm text-neutral-500 dark:text-neutral-400 mt-1",
|
|
2629
|
+
className
|
|
2630
|
+
),
|
|
2631
|
+
...props
|
|
2632
|
+
}
|
|
2633
|
+
);
|
|
2634
|
+
}
|
|
2635
|
+
);
|
|
2636
|
+
ModalDescription.displayName = "ModalDescription";
|
|
2637
|
+
function ModalContent({
|
|
2638
|
+
className,
|
|
2639
|
+
children,
|
|
2640
|
+
scrollable = false,
|
|
2641
|
+
...props
|
|
2642
|
+
}) {
|
|
2643
|
+
if (scrollable) {
|
|
2644
|
+
return /* @__PURE__ */ jsx26(
|
|
2645
|
+
ScrollView3,
|
|
2646
|
+
{
|
|
2647
|
+
showsVerticalScrollIndicator: false,
|
|
2648
|
+
className: cn("py-3 max-h-[70vh]", className),
|
|
2649
|
+
...props,
|
|
2650
|
+
children
|
|
2651
|
+
}
|
|
2652
|
+
);
|
|
2653
|
+
}
|
|
2654
|
+
return /* @__PURE__ */ jsx26(View22, { className: cn("py-3", className), ...props, children });
|
|
2655
|
+
}
|
|
2656
|
+
ModalContent.displayName = "ModalContent";
|
|
2657
|
+
function ModalFooter({
|
|
2658
|
+
className,
|
|
2659
|
+
...props
|
|
2660
|
+
}) {
|
|
2661
|
+
return /* @__PURE__ */ jsx26(
|
|
2662
|
+
View22,
|
|
2663
|
+
{
|
|
2664
|
+
className: cn(
|
|
2665
|
+
"flex-row flex-wrap items-center justify-end gap-2 pt-3 border-t border-neutral-100 dark:border-neutral-800 mt-2",
|
|
2666
|
+
className
|
|
2667
|
+
),
|
|
2668
|
+
...props
|
|
2669
|
+
}
|
|
2670
|
+
);
|
|
2671
|
+
}
|
|
2672
|
+
ModalFooter.displayName = "ModalFooter";
|
|
2673
|
+
|
|
2674
|
+
// src/components/night-mode-switch/night-mode-switch.tsx
|
|
2675
|
+
import * as React25 from "react";
|
|
2676
|
+
import {
|
|
2677
|
+
Pressable as Pressable14,
|
|
2678
|
+
Text as Text17
|
|
2679
|
+
} from "react-native";
|
|
2680
|
+
import { cva as cva12 } from "class-variance-authority";
|
|
2681
|
+
|
|
2682
|
+
// src/providers/BeyondUIProvider.tsx
|
|
2683
|
+
import * as React24 from "react";
|
|
2684
|
+
import { View as View23, useColorScheme as useRNColorScheme } from "react-native";
|
|
2685
|
+
import { colorScheme as nwColorScheme } from "nativewind";
|
|
2686
|
+
import { PortalHost } from "@rn-primitives/portal";
|
|
2687
|
+
import { jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2688
|
+
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
2689
|
+
try {
|
|
2690
|
+
const { LogBox } = __require("react-native");
|
|
2691
|
+
LogBox?.ignoreLogs?.([
|
|
2692
|
+
"You are setting the style `{ shadowOffset: ... }` as a prop",
|
|
2693
|
+
"You are setting the style"
|
|
2694
|
+
]);
|
|
2695
|
+
if (!Boolean(console.error?.__beyond_ui_filtered)) {
|
|
2696
|
+
const originalError = console.error;
|
|
2697
|
+
const filteredError = (...args) => {
|
|
2698
|
+
const fullMessage = args.map((arg) => typeof arg === "string" ? arg : "").join(" ");
|
|
2699
|
+
if (fullMessage.includes("shadowOffset") || fullMessage.includes("You are setting the style")) {
|
|
2700
|
+
return;
|
|
2701
|
+
}
|
|
2702
|
+
originalError(...args);
|
|
2703
|
+
};
|
|
2704
|
+
filteredError.__beyond_ui_filtered = true;
|
|
2705
|
+
console.error = filteredError;
|
|
2706
|
+
}
|
|
2707
|
+
} catch (_) {
|
|
2708
|
+
}
|
|
2709
|
+
}
|
|
2710
|
+
var BeyondUIContext = React24.createContext({
|
|
2711
|
+
colorScheme: "light",
|
|
2712
|
+
setColorScheme: () => {
|
|
2713
|
+
},
|
|
2714
|
+
toggleColorScheme: () => {
|
|
2715
|
+
}
|
|
2716
|
+
});
|
|
2717
|
+
function useBeyondUI() {
|
|
2718
|
+
return React24.useContext(BeyondUIContext);
|
|
2719
|
+
}
|
|
2720
|
+
function BeyondUIProvider({
|
|
2721
|
+
children,
|
|
2722
|
+
defaultColorScheme = "system"
|
|
2723
|
+
}) {
|
|
2724
|
+
const systemScheme = useRNColorScheme() ?? "light";
|
|
2725
|
+
const [selectedScheme, setSelectedScheme] = React24.useState(defaultColorScheme);
|
|
2726
|
+
const [toasts, setToasts] = React24.useState([]);
|
|
2727
|
+
const activeScheme = selectedScheme === "system" ? systemScheme : selectedScheme;
|
|
2728
|
+
React24.useEffect(() => {
|
|
2729
|
+
try {
|
|
2730
|
+
nwColorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
|
|
2731
|
+
} catch (_) {
|
|
2732
|
+
}
|
|
2733
|
+
}, [selectedScheme, activeScheme]);
|
|
2734
|
+
const handleSetColorScheme = React24.useCallback((scheme) => {
|
|
2735
|
+
setSelectedScheme(scheme);
|
|
2736
|
+
try {
|
|
2737
|
+
nwColorScheme.set(scheme === "system" ? "system" : scheme);
|
|
2738
|
+
} catch (_) {
|
|
2739
|
+
}
|
|
2740
|
+
}, []);
|
|
2741
|
+
const toggleColorScheme = React24.useCallback(() => {
|
|
2742
|
+
setSelectedScheme((prev) => {
|
|
2743
|
+
const current = prev === "system" ? systemScheme : prev;
|
|
2744
|
+
const next = current === "dark" ? "light" : "dark";
|
|
2745
|
+
try {
|
|
2746
|
+
nwColorScheme.set(next);
|
|
2747
|
+
} catch (_) {
|
|
2748
|
+
}
|
|
2749
|
+
return next;
|
|
2750
|
+
});
|
|
2751
|
+
}, [systemScheme]);
|
|
2752
|
+
const dismissToast = React24.useCallback((id) => {
|
|
2753
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
2754
|
+
}, []);
|
|
2755
|
+
const showToast = React24.useCallback((toast) => {
|
|
2756
|
+
const id = Math.random().toString(36).substring(2, 9);
|
|
2757
|
+
setToasts((prev) => [...prev, { ...toast, id }]);
|
|
2758
|
+
return id;
|
|
2759
|
+
}, []);
|
|
2760
|
+
const toastContextValue = React24.useMemo(
|
|
2761
|
+
() => ({
|
|
2762
|
+
toasts,
|
|
2763
|
+
show: showToast,
|
|
2764
|
+
dismiss: dismissToast,
|
|
2765
|
+
success: (title, description) => showToast({ title, description, variant: "success" }),
|
|
2766
|
+
danger: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
2767
|
+
error: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
2768
|
+
warning: (title, description) => showToast({ title, description, variant: "warning" }),
|
|
2769
|
+
info: (title, description) => showToast({ title, description, variant: "info" })
|
|
2770
|
+
}),
|
|
2771
|
+
[toasts, showToast, dismissToast]
|
|
2772
|
+
);
|
|
2773
|
+
const contextValue = React24.useMemo(
|
|
2774
|
+
() => ({
|
|
2775
|
+
colorScheme: activeScheme,
|
|
2776
|
+
setColorScheme: handleSetColorScheme,
|
|
2777
|
+
toggleColorScheme
|
|
2778
|
+
}),
|
|
2779
|
+
[activeScheme, handleSetColorScheme, toggleColorScheme]
|
|
2780
|
+
);
|
|
2781
|
+
return /* @__PURE__ */ jsx27(BeyondUIContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx27(ToastContext.Provider, { value: toastContextValue, children: /* @__PURE__ */ jsxs14(
|
|
2782
|
+
View23,
|
|
2783
|
+
{
|
|
2784
|
+
style: { flex: 1 },
|
|
2785
|
+
className: activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white",
|
|
2786
|
+
children: [
|
|
2787
|
+
children,
|
|
2788
|
+
/* @__PURE__ */ jsx27(PortalHost, {}),
|
|
2789
|
+
/* @__PURE__ */ jsx27(ToastContainer, { toasts, onDismiss: dismissToast })
|
|
2790
|
+
]
|
|
2791
|
+
}
|
|
2792
|
+
) }) });
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2795
|
+
// src/components/night-mode-switch/night-mode-switch.tsx
|
|
2796
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
2797
|
+
var nightModeSwitchVariants = cva12(
|
|
2798
|
+
"inline-flex items-center justify-center rounded-full active:opacity-75",
|
|
2799
|
+
{
|
|
2800
|
+
variants: {
|
|
2801
|
+
variant: {
|
|
2802
|
+
primary: "bg-primary-600 dark:bg-primary-500",
|
|
2803
|
+
secondary: "bg-secondary-600 dark:bg-secondary-500",
|
|
2804
|
+
ghost: "bg-transparent active:bg-neutral-100 dark:active:bg-neutral-800"
|
|
2805
|
+
},
|
|
2806
|
+
size: {
|
|
2807
|
+
sm: "w-8 h-8",
|
|
2808
|
+
md: "w-10 h-10",
|
|
2809
|
+
lg: "w-12 h-12"
|
|
2810
|
+
}
|
|
2811
|
+
},
|
|
2812
|
+
defaultVariants: {
|
|
2813
|
+
variant: "ghost",
|
|
2814
|
+
size: "md"
|
|
2815
|
+
}
|
|
2816
|
+
}
|
|
2817
|
+
);
|
|
2818
|
+
var NightModeSwitch = React25.forwardRef(
|
|
2819
|
+
function NightModeSwitch2({
|
|
2820
|
+
className,
|
|
2821
|
+
textClassName,
|
|
2822
|
+
variant,
|
|
2823
|
+
size,
|
|
2824
|
+
ariaLabel = "Toggle dark mode",
|
|
2825
|
+
onPress,
|
|
2826
|
+
...props
|
|
2827
|
+
}, ref) {
|
|
2828
|
+
const { colorScheme, toggleColorScheme } = useBeyondUI();
|
|
2829
|
+
const isDark = colorScheme === "dark";
|
|
2830
|
+
const handlePress = (e) => {
|
|
2831
|
+
toggleColorScheme();
|
|
2832
|
+
onPress?.(e);
|
|
2833
|
+
};
|
|
2834
|
+
const iconSizeClasses = {
|
|
2835
|
+
sm: "text-base",
|
|
2836
|
+
md: "text-lg",
|
|
2837
|
+
lg: "text-xl"
|
|
2838
|
+
}[size || "md"];
|
|
2839
|
+
return /* @__PURE__ */ jsx28(
|
|
2840
|
+
Pressable14,
|
|
2841
|
+
{
|
|
2842
|
+
ref,
|
|
2843
|
+
role: "button",
|
|
2844
|
+
accessibilityRole: "button",
|
|
2845
|
+
accessibilityLabel: ariaLabel,
|
|
2846
|
+
accessibilityState: { checked: isDark },
|
|
2847
|
+
className: cn(nightModeSwitchVariants({ variant, size }), className),
|
|
2848
|
+
onPress: handlePress,
|
|
2849
|
+
...props,
|
|
2850
|
+
children: /* @__PURE__ */ jsx28(
|
|
2851
|
+
Text17,
|
|
2852
|
+
{
|
|
2853
|
+
className: cn(
|
|
2854
|
+
iconSizeClasses,
|
|
2855
|
+
variant === "ghost" ? "text-neutral-700 dark:text-neutral-200" : "text-white",
|
|
2856
|
+
textClassName
|
|
2857
|
+
),
|
|
2858
|
+
children: isDark ? "\u{1F319}" : "\u2600\uFE0F"
|
|
2859
|
+
}
|
|
2860
|
+
)
|
|
2861
|
+
}
|
|
2862
|
+
);
|
|
2863
|
+
}
|
|
2864
|
+
);
|
|
2865
|
+
NightModeSwitch.displayName = "NightModeSwitch";
|
|
2866
|
+
|
|
2867
|
+
// src/components/dashboard-layout/dashboard-layout.tsx
|
|
2868
|
+
import * as React26 from "react";
|
|
2869
|
+
import {
|
|
2870
|
+
View as View24,
|
|
2871
|
+
ScrollView as ScrollView4,
|
|
2872
|
+
Pressable as Pressable15,
|
|
2873
|
+
TextInput as TextInput4,
|
|
2874
|
+
RefreshControl
|
|
2875
|
+
} from "react-native";
|
|
2876
|
+
import { jsx as jsx29, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2877
|
+
var DashboardLayout = ({
|
|
2878
|
+
title,
|
|
2879
|
+
subtitle,
|
|
2880
|
+
breadcrumbs,
|
|
2881
|
+
user,
|
|
2882
|
+
onProfilePress,
|
|
2883
|
+
onNotificationPress,
|
|
2884
|
+
unreadNotificationsCount = 0,
|
|
2885
|
+
showSearch = false,
|
|
2886
|
+
searchPlaceholder = "Search...",
|
|
2887
|
+
searchValue,
|
|
2888
|
+
onSearchChange,
|
|
2889
|
+
showNightModeSwitch = true,
|
|
2890
|
+
onBackPress,
|
|
2891
|
+
backIcon,
|
|
2892
|
+
headerActions,
|
|
2893
|
+
footer,
|
|
2894
|
+
scrollable = true,
|
|
2895
|
+
refreshing = false,
|
|
2896
|
+
onRefresh,
|
|
2897
|
+
contentClassName,
|
|
2898
|
+
className,
|
|
2899
|
+
children,
|
|
2900
|
+
...props
|
|
2901
|
+
}) => {
|
|
2902
|
+
return /* @__PURE__ */ jsxs15(
|
|
2903
|
+
View24,
|
|
2904
|
+
{
|
|
2905
|
+
className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
|
|
2906
|
+
...props,
|
|
2907
|
+
children: [
|
|
2908
|
+
/* @__PURE__ */ jsxs15(View24, { 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: [
|
|
2909
|
+
/* @__PURE__ */ jsxs15(View24, { className: "flex-row items-center gap-3 flex-1 mr-2", children: [
|
|
2910
|
+
onBackPress && /* @__PURE__ */ jsx29(
|
|
2911
|
+
Pressable15,
|
|
2912
|
+
{
|
|
2913
|
+
onPress: onBackPress,
|
|
2914
|
+
className: "w-9 h-9 rounded-full bg-neutral-100 dark:bg-neutral-800 items-center justify-center active:opacity-70",
|
|
2915
|
+
accessibilityRole: "button",
|
|
2916
|
+
accessibilityLabel: "Back",
|
|
2917
|
+
children: backIcon || /* @__PURE__ */ jsx29(Text2, { className: "text-neutral-700 dark:text-neutral-200 font-bold text-base leading-none", children: "\u2190" })
|
|
2918
|
+
}
|
|
2919
|
+
),
|
|
2920
|
+
user && /* @__PURE__ */ jsxs15(
|
|
2921
|
+
Pressable15,
|
|
2922
|
+
{
|
|
2923
|
+
onPress: onProfilePress,
|
|
2924
|
+
className: "flex-row items-center gap-2 active:opacity-80",
|
|
2925
|
+
accessibilityRole: "button",
|
|
2926
|
+
accessibilityLabel: `User profile: ${user.name || "User"}`,
|
|
2927
|
+
children: [
|
|
2928
|
+
/* @__PURE__ */ jsxs15(Avatar, { size: "sm", children: [
|
|
2929
|
+
user.avatarUrl && /* @__PURE__ */ jsx29(AvatarImage, { source: { uri: user.avatarUrl } }),
|
|
2930
|
+
/* @__PURE__ */ jsx29(AvatarFallback, { text: (user.name || "U").slice(0, 2).toUpperCase() })
|
|
2931
|
+
] }),
|
|
2932
|
+
/* @__PURE__ */ jsxs15(View24, { className: "hidden sm:flex", children: [
|
|
2933
|
+
/* @__PURE__ */ jsx29(Text2, { className: "text-xs font-semibold text-neutral-800 dark:text-neutral-200 leading-tight", children: user.name }),
|
|
2934
|
+
user.role && /* @__PURE__ */ jsx29(Text2, { className: "text-[10px] text-neutral-500 dark:text-neutral-400 leading-tight", children: user.role })
|
|
2935
|
+
] })
|
|
2936
|
+
]
|
|
2937
|
+
}
|
|
2938
|
+
),
|
|
2939
|
+
(title || subtitle) && /* @__PURE__ */ jsxs15(View24, { className: "flex-1", children: [
|
|
2940
|
+
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx29(View24, { className: "flex-row items-center gap-1 mb-0.5", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs15(React26.Fragment, { children: [
|
|
2941
|
+
idx > 0 && /* @__PURE__ */ jsx29(Text2, { className: "text-[11px] text-neutral-400 dark:text-neutral-500", children: "/" }),
|
|
2942
|
+
/* @__PURE__ */ jsx29(
|
|
2943
|
+
Text2,
|
|
2944
|
+
{
|
|
2945
|
+
onPress: crumb.onPress,
|
|
2946
|
+
className: cn(
|
|
2947
|
+
"text-[11px]",
|
|
2948
|
+
crumb.onPress ? "text-primary-600 dark:text-primary-400 font-medium" : "text-neutral-500 dark:text-neutral-400"
|
|
2949
|
+
),
|
|
2950
|
+
children: crumb.label
|
|
2951
|
+
}
|
|
2952
|
+
)
|
|
2953
|
+
] }, idx)) }),
|
|
2954
|
+
title && /* @__PURE__ */ jsx29(
|
|
2955
|
+
Heading,
|
|
2956
|
+
{
|
|
2957
|
+
level: 3,
|
|
2958
|
+
className: "text-lg font-bold text-neutral-900 dark:text-neutral-50 leading-tight",
|
|
2959
|
+
children: title
|
|
2960
|
+
}
|
|
2961
|
+
),
|
|
2962
|
+
subtitle && /* @__PURE__ */ jsx29(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 leading-tight", children: subtitle })
|
|
2963
|
+
] })
|
|
2964
|
+
] }),
|
|
2965
|
+
/* @__PURE__ */ jsxs15(View24, { className: "flex-row items-center gap-2", children: [
|
|
2966
|
+
headerActions,
|
|
2967
|
+
showNightModeSwitch && /* @__PURE__ */ jsx29(NightModeSwitch, { size: "sm", variant: "ghost" }),
|
|
2968
|
+
onNotificationPress && /* @__PURE__ */ jsxs15(
|
|
2969
|
+
Pressable15,
|
|
2970
|
+
{
|
|
2971
|
+
onPress: onNotificationPress,
|
|
2972
|
+
className: "w-9 h-9 rounded-full bg-neutral-100 dark:bg-neutral-800 items-center justify-center relative active:opacity-70",
|
|
2973
|
+
accessibilityRole: "button",
|
|
2974
|
+
accessibilityLabel: "Notifications",
|
|
2975
|
+
children: [
|
|
2976
|
+
/* @__PURE__ */ jsx29(Text2, { className: "text-sm", children: "\u{1F514}" }),
|
|
2977
|
+
unreadNotificationsCount > 0 && /* @__PURE__ */ jsx29(View24, { 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__ */ jsx29(Text2, { className: "text-[9px] font-bold text-white leading-none", children: unreadNotificationsCount > 9 ? "9+" : unreadNotificationsCount }) })
|
|
2978
|
+
]
|
|
2979
|
+
}
|
|
2980
|
+
)
|
|
2981
|
+
] })
|
|
2982
|
+
] }),
|
|
2983
|
+
showSearch && /* @__PURE__ */ jsx29(View24, { 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__ */ jsxs15(View24, { 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: [
|
|
2984
|
+
/* @__PURE__ */ jsx29(Text2, { className: "text-neutral-400 mr-2 text-sm", children: "\u{1F50D}" }),
|
|
2985
|
+
/* @__PURE__ */ jsx29(
|
|
2986
|
+
TextInput4,
|
|
2987
|
+
{
|
|
2988
|
+
value: searchValue,
|
|
2989
|
+
onChangeText: onSearchChange,
|
|
2990
|
+
placeholder: searchPlaceholder,
|
|
2991
|
+
placeholderTextColor: "#9ca3af",
|
|
2992
|
+
className: "flex-1 text-sm text-neutral-900 dark:text-neutral-100 p-0"
|
|
2993
|
+
}
|
|
2994
|
+
)
|
|
2995
|
+
] }) }),
|
|
2996
|
+
scrollable ? /* @__PURE__ */ jsx29(
|
|
2997
|
+
ScrollView4,
|
|
2998
|
+
{
|
|
2999
|
+
className: cn("flex-1", contentClassName),
|
|
3000
|
+
contentContainerStyle: { paddingBottom: 32 },
|
|
3001
|
+
showsVerticalScrollIndicator: false,
|
|
3002
|
+
refreshControl: onRefresh ? /* @__PURE__ */ jsx29(RefreshControl, { refreshing, onRefresh }) : void 0,
|
|
3003
|
+
children
|
|
3004
|
+
}
|
|
3005
|
+
) : /* @__PURE__ */ jsx29(View24, { className: cn("flex-1", contentClassName), children }),
|
|
3006
|
+
footer
|
|
3007
|
+
]
|
|
3008
|
+
}
|
|
3009
|
+
);
|
|
3010
|
+
};
|
|
3011
|
+
DashboardLayout.displayName = "DashboardLayout";
|
|
3012
|
+
|
|
3013
|
+
// src/templates/auth/SignInTemplate.tsx
|
|
3014
|
+
import * as React27 from "react";
|
|
3015
|
+
import {
|
|
3016
|
+
View as View25,
|
|
3017
|
+
ScrollView as ScrollView5,
|
|
3018
|
+
KeyboardAvoidingView as KeyboardAvoidingView2,
|
|
3019
|
+
Platform as Platform2,
|
|
3020
|
+
Pressable as Pressable16
|
|
3021
|
+
} from "react-native";
|
|
3022
|
+
import { jsx as jsx30, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2482
3023
|
var SignInTemplate = ({
|
|
2483
3024
|
title = "Welcome Back",
|
|
2484
3025
|
subtitle = "Sign in to your Beyond account to continue",
|
|
@@ -2492,12 +3033,12 @@ var SignInTemplate = ({
|
|
|
2492
3033
|
error,
|
|
2493
3034
|
className
|
|
2494
3035
|
}) => {
|
|
2495
|
-
const [email, setEmail] =
|
|
2496
|
-
const [password, setPassword] =
|
|
2497
|
-
const [showPassword, setShowPassword] =
|
|
2498
|
-
const [rememberMe, setRememberMe] =
|
|
2499
|
-
const [emailError, setEmailError] =
|
|
2500
|
-
const [passwordError, setPasswordError] =
|
|
3036
|
+
const [email, setEmail] = React27.useState("");
|
|
3037
|
+
const [password, setPassword] = React27.useState("");
|
|
3038
|
+
const [showPassword, setShowPassword] = React27.useState(false);
|
|
3039
|
+
const [rememberMe, setRememberMe] = React27.useState(false);
|
|
3040
|
+
const [emailError, setEmailError] = React27.useState();
|
|
3041
|
+
const [passwordError, setPasswordError] = React27.useState();
|
|
2501
3042
|
const handleSubmit = () => {
|
|
2502
3043
|
let valid = true;
|
|
2503
3044
|
setEmailError(void 0);
|
|
@@ -2514,29 +3055,29 @@ var SignInTemplate = ({
|
|
|
2514
3055
|
onSubmit?.({ email, password, rememberMe });
|
|
2515
3056
|
}
|
|
2516
3057
|
};
|
|
2517
|
-
return /* @__PURE__ */
|
|
2518
|
-
|
|
3058
|
+
return /* @__PURE__ */ jsx30(
|
|
3059
|
+
KeyboardAvoidingView2,
|
|
2519
3060
|
{
|
|
2520
|
-
behavior:
|
|
3061
|
+
behavior: Platform2.OS === "ios" ? "padding" : "height",
|
|
2521
3062
|
style: { flex: 1 },
|
|
2522
3063
|
className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
|
|
2523
|
-
children: /* @__PURE__ */
|
|
2524
|
-
|
|
3064
|
+
children: /* @__PURE__ */ jsx30(
|
|
3065
|
+
ScrollView5,
|
|
2525
3066
|
{
|
|
2526
3067
|
style: { flex: 1 },
|
|
2527
3068
|
contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
|
|
2528
3069
|
className: "px-6 py-8",
|
|
2529
3070
|
keyboardShouldPersistTaps: "handled",
|
|
2530
3071
|
showsVerticalScrollIndicator: false,
|
|
2531
|
-
children: /* @__PURE__ */
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
logo && /* @__PURE__ */
|
|
2534
|
-
/* @__PURE__ */
|
|
2535
|
-
/* @__PURE__ */
|
|
3072
|
+
children: /* @__PURE__ */ jsxs16(View25, { className: "w-full max-w-md mx-auto gap-6", children: [
|
|
3073
|
+
/* @__PURE__ */ jsxs16(View25, { className: "items-center gap-2", children: [
|
|
3074
|
+
logo && /* @__PURE__ */ jsx30(View25, { className: "mb-2", children: logo }),
|
|
3075
|
+
/* @__PURE__ */ jsx30(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
|
|
3076
|
+
/* @__PURE__ */ jsx30(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
|
|
2536
3077
|
] }),
|
|
2537
|
-
error && /* @__PURE__ */
|
|
2538
|
-
/* @__PURE__ */
|
|
2539
|
-
/* @__PURE__ */
|
|
3078
|
+
error && /* @__PURE__ */ jsx30(Alert, { variant: "danger", children: /* @__PURE__ */ jsx30(AlertDescription, { children: error }) }),
|
|
3079
|
+
/* @__PURE__ */ jsxs16(View25, { className: "gap-4", children: [
|
|
3080
|
+
/* @__PURE__ */ jsx30(
|
|
2540
3081
|
Input,
|
|
2541
3082
|
{
|
|
2542
3083
|
label: "Email Address",
|
|
@@ -2552,7 +3093,7 @@ var SignInTemplate = ({
|
|
|
2552
3093
|
error: emailError
|
|
2553
3094
|
}
|
|
2554
3095
|
),
|
|
2555
|
-
/* @__PURE__ */
|
|
3096
|
+
/* @__PURE__ */ jsx30(View25, { className: "gap-1", children: /* @__PURE__ */ jsx30(
|
|
2556
3097
|
Input,
|
|
2557
3098
|
{
|
|
2558
3099
|
label: "Password",
|
|
@@ -2564,17 +3105,17 @@ var SignInTemplate = ({
|
|
|
2564
3105
|
if (passwordError) setPasswordError(void 0);
|
|
2565
3106
|
},
|
|
2566
3107
|
error: passwordError,
|
|
2567
|
-
rightElement: /* @__PURE__ */
|
|
3108
|
+
rightElement: /* @__PURE__ */ jsx30(Pressable16, { onPress: () => setShowPassword((p) => !p), className: "p-1", children: /* @__PURE__ */ jsx30(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-semibold", children: showPassword ? "HIDE" : "SHOW" }) })
|
|
2568
3109
|
}
|
|
2569
3110
|
) }),
|
|
2570
|
-
/* @__PURE__ */
|
|
2571
|
-
/* @__PURE__ */
|
|
2572
|
-
/* @__PURE__ */
|
|
2573
|
-
/* @__PURE__ */
|
|
3111
|
+
/* @__PURE__ */ jsxs16(View25, { className: "flex-row items-center justify-between py-1", children: [
|
|
3112
|
+
/* @__PURE__ */ jsxs16(View25, { className: "flex-row items-center gap-2", children: [
|
|
3113
|
+
/* @__PURE__ */ jsx30(Checkbox, { checked: rememberMe, onCheckedChange: setRememberMe }),
|
|
3114
|
+
/* @__PURE__ */ jsx30(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100", children: "Remember me" })
|
|
2574
3115
|
] }),
|
|
2575
|
-
onForgotPassword && /* @__PURE__ */
|
|
3116
|
+
onForgotPassword && /* @__PURE__ */ jsx30(Pressable16, { onPress: onForgotPassword, children: /* @__PURE__ */ jsx30(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Forgot password?" }) })
|
|
2576
3117
|
] }),
|
|
2577
|
-
/* @__PURE__ */
|
|
3118
|
+
/* @__PURE__ */ jsx30(
|
|
2578
3119
|
Button,
|
|
2579
3120
|
{
|
|
2580
3121
|
variant: "primary",
|
|
@@ -2586,14 +3127,14 @@ var SignInTemplate = ({
|
|
|
2586
3127
|
}
|
|
2587
3128
|
)
|
|
2588
3129
|
] }),
|
|
2589
|
-
(onGooglePress || onApplePress) && /* @__PURE__ */
|
|
2590
|
-
/* @__PURE__ */
|
|
2591
|
-
/* @__PURE__ */
|
|
2592
|
-
/* @__PURE__ */
|
|
2593
|
-
/* @__PURE__ */
|
|
3130
|
+
(onGooglePress || onApplePress) && /* @__PURE__ */ jsxs16(View25, { className: "gap-4", children: [
|
|
3131
|
+
/* @__PURE__ */ jsxs16(View25, { className: "flex-row items-center gap-3", children: [
|
|
3132
|
+
/* @__PURE__ */ jsx30(Separator, { className: "flex-1" }),
|
|
3133
|
+
/* @__PURE__ */ jsx30(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
|
|
3134
|
+
/* @__PURE__ */ jsx30(Separator, { className: "flex-1" })
|
|
2594
3135
|
] }),
|
|
2595
|
-
/* @__PURE__ */
|
|
2596
|
-
onGooglePress && /* @__PURE__ */
|
|
3136
|
+
/* @__PURE__ */ jsxs16(View25, { className: "flex-row gap-3", children: [
|
|
3137
|
+
onGooglePress && /* @__PURE__ */ jsx30(
|
|
2597
3138
|
Button,
|
|
2598
3139
|
{
|
|
2599
3140
|
variant: "outline",
|
|
@@ -2602,7 +3143,7 @@ var SignInTemplate = ({
|
|
|
2602
3143
|
children: "Google"
|
|
2603
3144
|
}
|
|
2604
3145
|
),
|
|
2605
|
-
onApplePress && /* @__PURE__ */
|
|
3146
|
+
onApplePress && /* @__PURE__ */ jsx30(
|
|
2606
3147
|
Button,
|
|
2607
3148
|
{
|
|
2608
3149
|
variant: "outline",
|
|
@@ -2613,9 +3154,9 @@ var SignInTemplate = ({
|
|
|
2613
3154
|
)
|
|
2614
3155
|
] })
|
|
2615
3156
|
] }),
|
|
2616
|
-
onSignUpPress && /* @__PURE__ */
|
|
2617
|
-
/* @__PURE__ */
|
|
2618
|
-
/* @__PURE__ */
|
|
3157
|
+
onSignUpPress && /* @__PURE__ */ jsxs16(View25, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
|
|
3158
|
+
/* @__PURE__ */ jsx30(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Don't have an account?" }),
|
|
3159
|
+
/* @__PURE__ */ jsx30(Pressable16, { onPress: onSignUpPress, children: /* @__PURE__ */ jsx30(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign Up" }) })
|
|
2619
3160
|
] })
|
|
2620
3161
|
] })
|
|
2621
3162
|
}
|
|
@@ -2625,15 +3166,15 @@ var SignInTemplate = ({
|
|
|
2625
3166
|
};
|
|
2626
3167
|
|
|
2627
3168
|
// src/templates/auth/SignUpTemplate.tsx
|
|
2628
|
-
import * as
|
|
3169
|
+
import * as React28 from "react";
|
|
2629
3170
|
import {
|
|
2630
|
-
View as
|
|
2631
|
-
ScrollView as
|
|
2632
|
-
KeyboardAvoidingView as
|
|
2633
|
-
Platform as
|
|
2634
|
-
Pressable as
|
|
3171
|
+
View as View26,
|
|
3172
|
+
ScrollView as ScrollView6,
|
|
3173
|
+
KeyboardAvoidingView as KeyboardAvoidingView3,
|
|
3174
|
+
Platform as Platform3,
|
|
3175
|
+
Pressable as Pressable17
|
|
2635
3176
|
} from "react-native";
|
|
2636
|
-
import { jsx as
|
|
3177
|
+
import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2637
3178
|
var SignUpTemplate = ({
|
|
2638
3179
|
title = "Create Account",
|
|
2639
3180
|
subtitle = "Get started with your free Beyond account",
|
|
@@ -2646,14 +3187,14 @@ var SignUpTemplate = ({
|
|
|
2646
3187
|
error,
|
|
2647
3188
|
className
|
|
2648
3189
|
}) => {
|
|
2649
|
-
const [fullName, setFullName] =
|
|
2650
|
-
const [email, setEmail] =
|
|
2651
|
-
const [password, setPassword] =
|
|
2652
|
-
const [agreeToTerms, setAgreeToTerms] =
|
|
2653
|
-
const [nameError, setNameError] =
|
|
2654
|
-
const [emailError, setEmailError] =
|
|
2655
|
-
const [passwordError, setPasswordError] =
|
|
2656
|
-
const [termsError, setTermsError] =
|
|
3190
|
+
const [fullName, setFullName] = React28.useState("");
|
|
3191
|
+
const [email, setEmail] = React28.useState("");
|
|
3192
|
+
const [password, setPassword] = React28.useState("");
|
|
3193
|
+
const [agreeToTerms, setAgreeToTerms] = React28.useState(false);
|
|
3194
|
+
const [nameError, setNameError] = React28.useState();
|
|
3195
|
+
const [emailError, setEmailError] = React28.useState();
|
|
3196
|
+
const [passwordError, setPasswordError] = React28.useState();
|
|
3197
|
+
const [termsError, setTermsError] = React28.useState();
|
|
2657
3198
|
const handleSubmit = () => {
|
|
2658
3199
|
let valid = true;
|
|
2659
3200
|
setNameError(void 0);
|
|
@@ -2680,29 +3221,29 @@ var SignUpTemplate = ({
|
|
|
2680
3221
|
onSubmit?.({ fullName, email, password, agreeToTerms });
|
|
2681
3222
|
}
|
|
2682
3223
|
};
|
|
2683
|
-
return /* @__PURE__ */
|
|
2684
|
-
|
|
3224
|
+
return /* @__PURE__ */ jsx31(
|
|
3225
|
+
KeyboardAvoidingView3,
|
|
2685
3226
|
{
|
|
2686
|
-
behavior:
|
|
3227
|
+
behavior: Platform3.OS === "ios" ? "padding" : "height",
|
|
2687
3228
|
style: { flex: 1 },
|
|
2688
3229
|
className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
|
|
2689
|
-
children: /* @__PURE__ */
|
|
2690
|
-
|
|
3230
|
+
children: /* @__PURE__ */ jsx31(
|
|
3231
|
+
ScrollView6,
|
|
2691
3232
|
{
|
|
2692
3233
|
style: { flex: 1 },
|
|
2693
3234
|
contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
|
|
2694
3235
|
className: "px-6 py-8",
|
|
2695
3236
|
keyboardShouldPersistTaps: "handled",
|
|
2696
3237
|
showsVerticalScrollIndicator: false,
|
|
2697
|
-
children: /* @__PURE__ */
|
|
2698
|
-
/* @__PURE__ */
|
|
2699
|
-
logo && /* @__PURE__ */
|
|
2700
|
-
/* @__PURE__ */
|
|
2701
|
-
/* @__PURE__ */
|
|
3238
|
+
children: /* @__PURE__ */ jsxs17(View26, { className: "w-full max-w-md mx-auto gap-6", children: [
|
|
3239
|
+
/* @__PURE__ */ jsxs17(View26, { className: "items-center gap-2", children: [
|
|
3240
|
+
logo && /* @__PURE__ */ jsx31(View26, { className: "mb-2", children: logo }),
|
|
3241
|
+
/* @__PURE__ */ jsx31(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
|
|
3242
|
+
/* @__PURE__ */ jsx31(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
|
|
2702
3243
|
] }),
|
|
2703
|
-
error && /* @__PURE__ */
|
|
2704
|
-
/* @__PURE__ */
|
|
2705
|
-
/* @__PURE__ */
|
|
3244
|
+
error && /* @__PURE__ */ jsx31(Alert, { variant: "danger", children: /* @__PURE__ */ jsx31(AlertDescription, { children: error }) }),
|
|
3245
|
+
/* @__PURE__ */ jsxs17(View26, { className: "gap-4", children: [
|
|
3246
|
+
/* @__PURE__ */ jsx31(
|
|
2706
3247
|
Input,
|
|
2707
3248
|
{
|
|
2708
3249
|
label: "Full Name",
|
|
@@ -2715,7 +3256,7 @@ var SignUpTemplate = ({
|
|
|
2715
3256
|
error: nameError
|
|
2716
3257
|
}
|
|
2717
3258
|
),
|
|
2718
|
-
/* @__PURE__ */
|
|
3259
|
+
/* @__PURE__ */ jsx31(
|
|
2719
3260
|
Input,
|
|
2720
3261
|
{
|
|
2721
3262
|
label: "Email Address",
|
|
@@ -2730,7 +3271,7 @@ var SignUpTemplate = ({
|
|
|
2730
3271
|
error: emailError
|
|
2731
3272
|
}
|
|
2732
3273
|
),
|
|
2733
|
-
/* @__PURE__ */
|
|
3274
|
+
/* @__PURE__ */ jsx31(
|
|
2734
3275
|
Input,
|
|
2735
3276
|
{
|
|
2736
3277
|
label: "Password",
|
|
@@ -2744,9 +3285,9 @@ var SignUpTemplate = ({
|
|
|
2744
3285
|
error: passwordError
|
|
2745
3286
|
}
|
|
2746
3287
|
),
|
|
2747
|
-
/* @__PURE__ */
|
|
2748
|
-
/* @__PURE__ */
|
|
2749
|
-
/* @__PURE__ */
|
|
3288
|
+
/* @__PURE__ */ jsxs17(View26, { className: "gap-1", children: [
|
|
3289
|
+
/* @__PURE__ */ jsxs17(View26, { className: "flex-row items-center gap-2 pt-1", children: [
|
|
3290
|
+
/* @__PURE__ */ jsx31(
|
|
2750
3291
|
Checkbox,
|
|
2751
3292
|
{
|
|
2752
3293
|
checked: agreeToTerms,
|
|
@@ -2756,11 +3297,11 @@ var SignUpTemplate = ({
|
|
|
2756
3297
|
}
|
|
2757
3298
|
}
|
|
2758
3299
|
),
|
|
2759
|
-
/* @__PURE__ */
|
|
3300
|
+
/* @__PURE__ */ jsx31(Text2, { className: "text-sm text-neutral-900 dark:text-neutral-100 flex-1", children: "I agree to the Terms of Service & Privacy Policy" })
|
|
2760
3301
|
] }),
|
|
2761
|
-
termsError && /* @__PURE__ */
|
|
3302
|
+
termsError && /* @__PURE__ */ jsx31(Text2, { className: "text-xs text-danger font-medium", children: termsError })
|
|
2762
3303
|
] }),
|
|
2763
|
-
/* @__PURE__ */
|
|
3304
|
+
/* @__PURE__ */ jsx31(
|
|
2764
3305
|
Button,
|
|
2765
3306
|
{
|
|
2766
3307
|
variant: "primary",
|
|
@@ -2772,14 +3313,14 @@ var SignUpTemplate = ({
|
|
|
2772
3313
|
}
|
|
2773
3314
|
)
|
|
2774
3315
|
] }),
|
|
2775
|
-
(onGooglePress || onApplePress) && /* @__PURE__ */
|
|
2776
|
-
/* @__PURE__ */
|
|
2777
|
-
/* @__PURE__ */
|
|
2778
|
-
/* @__PURE__ */
|
|
2779
|
-
/* @__PURE__ */
|
|
3316
|
+
(onGooglePress || onApplePress) && /* @__PURE__ */ jsxs17(View26, { className: "gap-4", children: [
|
|
3317
|
+
/* @__PURE__ */ jsxs17(View26, { className: "flex-row items-center gap-3", children: [
|
|
3318
|
+
/* @__PURE__ */ jsx31(Separator, { className: "flex-1" }),
|
|
3319
|
+
/* @__PURE__ */ jsx31(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 uppercase", children: "or continue with" }),
|
|
3320
|
+
/* @__PURE__ */ jsx31(Separator, { className: "flex-1" })
|
|
2780
3321
|
] }),
|
|
2781
|
-
/* @__PURE__ */
|
|
2782
|
-
onGooglePress && /* @__PURE__ */
|
|
3322
|
+
/* @__PURE__ */ jsxs17(View26, { className: "flex-row gap-3", children: [
|
|
3323
|
+
onGooglePress && /* @__PURE__ */ jsx31(
|
|
2783
3324
|
Button,
|
|
2784
3325
|
{
|
|
2785
3326
|
variant: "outline",
|
|
@@ -2788,7 +3329,7 @@ var SignUpTemplate = ({
|
|
|
2788
3329
|
children: "Google"
|
|
2789
3330
|
}
|
|
2790
3331
|
),
|
|
2791
|
-
onApplePress && /* @__PURE__ */
|
|
3332
|
+
onApplePress && /* @__PURE__ */ jsx31(
|
|
2792
3333
|
Button,
|
|
2793
3334
|
{
|
|
2794
3335
|
variant: "outline",
|
|
@@ -2799,9 +3340,9 @@ var SignUpTemplate = ({
|
|
|
2799
3340
|
)
|
|
2800
3341
|
] })
|
|
2801
3342
|
] }),
|
|
2802
|
-
onSignInPress && /* @__PURE__ */
|
|
2803
|
-
/* @__PURE__ */
|
|
2804
|
-
/* @__PURE__ */
|
|
3343
|
+
onSignInPress && /* @__PURE__ */ jsxs17(View26, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: [
|
|
3344
|
+
/* @__PURE__ */ jsx31(Text2, { className: "text-sm text-neutral-500 dark:text-neutral-400", children: "Already have an account?" }),
|
|
3345
|
+
/* @__PURE__ */ jsx31(Pressable17, { onPress: onSignInPress, children: /* @__PURE__ */ jsx31(Text2, { className: "text-sm font-bold text-primary-600 dark:text-primary-400", children: "Sign In" }) })
|
|
2805
3346
|
] })
|
|
2806
3347
|
] })
|
|
2807
3348
|
}
|
|
@@ -2811,15 +3352,15 @@ var SignUpTemplate = ({
|
|
|
2811
3352
|
};
|
|
2812
3353
|
|
|
2813
3354
|
// src/templates/auth/ForgotPasswordTemplate.tsx
|
|
2814
|
-
import * as
|
|
3355
|
+
import * as React29 from "react";
|
|
2815
3356
|
import {
|
|
2816
|
-
View as
|
|
2817
|
-
ScrollView as
|
|
2818
|
-
KeyboardAvoidingView as
|
|
2819
|
-
Platform as
|
|
2820
|
-
Pressable as
|
|
3357
|
+
View as View27,
|
|
3358
|
+
ScrollView as ScrollView7,
|
|
3359
|
+
KeyboardAvoidingView as KeyboardAvoidingView4,
|
|
3360
|
+
Platform as Platform4,
|
|
3361
|
+
Pressable as Pressable18
|
|
2821
3362
|
} from "react-native";
|
|
2822
|
-
import { jsx as
|
|
3363
|
+
import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2823
3364
|
var ForgotPasswordTemplate = ({
|
|
2824
3365
|
title = "Reset Password",
|
|
2825
3366
|
subtitle = "Enter your email address and we'll send you recovery instructions",
|
|
@@ -2830,8 +3371,8 @@ var ForgotPasswordTemplate = ({
|
|
|
2830
3371
|
error,
|
|
2831
3372
|
className
|
|
2832
3373
|
}) => {
|
|
2833
|
-
const [email, setEmail] =
|
|
2834
|
-
const [emailError, setEmailError] =
|
|
3374
|
+
const [email, setEmail] = React29.useState("");
|
|
3375
|
+
const [emailError, setEmailError] = React29.useState();
|
|
2835
3376
|
const handleSubmit = () => {
|
|
2836
3377
|
if (!email || !email.includes("@")) {
|
|
2837
3378
|
setEmailError("Please enter a valid email address");
|
|
@@ -2840,31 +3381,31 @@ var ForgotPasswordTemplate = ({
|
|
|
2840
3381
|
setEmailError(void 0);
|
|
2841
3382
|
onSubmit?.({ email });
|
|
2842
3383
|
};
|
|
2843
|
-
return /* @__PURE__ */
|
|
2844
|
-
|
|
3384
|
+
return /* @__PURE__ */ jsx32(
|
|
3385
|
+
KeyboardAvoidingView4,
|
|
2845
3386
|
{
|
|
2846
|
-
behavior:
|
|
3387
|
+
behavior: Platform4.OS === "ios" ? "padding" : "height",
|
|
2847
3388
|
style: { flex: 1 },
|
|
2848
3389
|
className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
|
|
2849
|
-
children: /* @__PURE__ */
|
|
2850
|
-
|
|
3390
|
+
children: /* @__PURE__ */ jsx32(
|
|
3391
|
+
ScrollView7,
|
|
2851
3392
|
{
|
|
2852
3393
|
style: { flex: 1 },
|
|
2853
3394
|
contentContainerStyle: { flexGrow: 1, justifyContent: "center" },
|
|
2854
3395
|
className: "px-6 py-8",
|
|
2855
3396
|
keyboardShouldPersistTaps: "handled",
|
|
2856
3397
|
showsVerticalScrollIndicator: false,
|
|
2857
|
-
children: /* @__PURE__ */
|
|
2858
|
-
/* @__PURE__ */
|
|
2859
|
-
/* @__PURE__ */
|
|
2860
|
-
/* @__PURE__ */
|
|
3398
|
+
children: /* @__PURE__ */ jsxs18(View27, { className: "w-full max-w-md mx-auto gap-6", children: [
|
|
3399
|
+
/* @__PURE__ */ jsxs18(View27, { className: "items-center gap-2", children: [
|
|
3400
|
+
/* @__PURE__ */ jsx32(Heading, { level: 2, className: "text-3xl font-extrabold text-neutral-900 dark:text-neutral-50 text-center", children: title }),
|
|
3401
|
+
/* @__PURE__ */ jsx32(Text2, { className: "text-neutral-500 dark:text-neutral-400 text-center text-base", children: subtitle })
|
|
2861
3402
|
] }),
|
|
2862
|
-
error && /* @__PURE__ */
|
|
2863
|
-
isSuccess ? /* @__PURE__ */
|
|
2864
|
-
/* @__PURE__ */
|
|
2865
|
-
onBackToSignIn && /* @__PURE__ */
|
|
2866
|
-
] }) : /* @__PURE__ */
|
|
2867
|
-
/* @__PURE__ */
|
|
3403
|
+
error && /* @__PURE__ */ jsx32(Alert, { variant: "danger", children: /* @__PURE__ */ jsx32(AlertDescription, { children: error }) }),
|
|
3404
|
+
isSuccess ? /* @__PURE__ */ jsxs18(View27, { className: "gap-4", children: [
|
|
3405
|
+
/* @__PURE__ */ jsx32(Alert, { variant: "success", children: /* @__PURE__ */ jsx32(AlertDescription, { children: "Password reset link sent! Check your email inbox." }) }),
|
|
3406
|
+
onBackToSignIn && /* @__PURE__ */ jsx32(Button, { variant: "primary", size: "lg", onPress: onBackToSignIn, children: "Back to Sign In" })
|
|
3407
|
+
] }) : /* @__PURE__ */ jsxs18(View27, { className: "gap-4", children: [
|
|
3408
|
+
/* @__PURE__ */ jsx32(
|
|
2868
3409
|
Input,
|
|
2869
3410
|
{
|
|
2870
3411
|
label: "Email Address",
|
|
@@ -2879,7 +3420,7 @@ var ForgotPasswordTemplate = ({
|
|
|
2879
3420
|
error: emailError
|
|
2880
3421
|
}
|
|
2881
3422
|
),
|
|
2882
|
-
/* @__PURE__ */
|
|
3423
|
+
/* @__PURE__ */ jsx32(
|
|
2883
3424
|
Button,
|
|
2884
3425
|
{
|
|
2885
3426
|
variant: "primary",
|
|
@@ -2890,7 +3431,7 @@ var ForgotPasswordTemplate = ({
|
|
|
2890
3431
|
children: "Send Reset Link"
|
|
2891
3432
|
}
|
|
2892
3433
|
),
|
|
2893
|
-
onBackToSignIn && /* @__PURE__ */
|
|
3434
|
+
onBackToSignIn && /* @__PURE__ */ jsx32(View27, { className: "flex-row justify-center items-center gap-1.5 pt-2", children: /* @__PURE__ */ jsx32(Pressable18, { onPress: onBackToSignIn, children: /* @__PURE__ */ jsx32(Text2, { className: "text-sm font-semibold text-primary-600 dark:text-primary-400", children: "Back to Sign In" }) }) })
|
|
2894
3435
|
] })
|
|
2895
3436
|
] })
|
|
2896
3437
|
}
|
|
@@ -2901,11 +3442,11 @@ var ForgotPasswordTemplate = ({
|
|
|
2901
3442
|
|
|
2902
3443
|
// src/templates/dashboard/DashboardTemplate.tsx
|
|
2903
3444
|
import {
|
|
2904
|
-
View as
|
|
2905
|
-
ScrollView as
|
|
2906
|
-
Pressable as
|
|
3445
|
+
View as View28,
|
|
3446
|
+
ScrollView as ScrollView8,
|
|
3447
|
+
Pressable as Pressable19
|
|
2907
3448
|
} from "react-native";
|
|
2908
|
-
import { jsx as
|
|
3449
|
+
import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2909
3450
|
var DashboardTemplate = ({
|
|
2910
3451
|
userName,
|
|
2911
3452
|
userRole = "Administrator",
|
|
@@ -2919,8 +3460,8 @@ var DashboardTemplate = ({
|
|
|
2919
3460
|
className,
|
|
2920
3461
|
...props
|
|
2921
3462
|
}) => {
|
|
2922
|
-
return /* @__PURE__ */
|
|
2923
|
-
|
|
3463
|
+
return /* @__PURE__ */ jsxs19(
|
|
3464
|
+
ScrollView8,
|
|
2924
3465
|
{
|
|
2925
3466
|
...props,
|
|
2926
3467
|
style: [{ flex: 1 }, props.style],
|
|
@@ -2928,43 +3469,43 @@ var DashboardTemplate = ({
|
|
|
2928
3469
|
contentContainerStyle: { paddingBottom: 40 },
|
|
2929
3470
|
showsVerticalScrollIndicator: false,
|
|
2930
3471
|
children: [
|
|
2931
|
-
/* @__PURE__ */
|
|
2932
|
-
/* @__PURE__ */
|
|
2933
|
-
/* @__PURE__ */
|
|
2934
|
-
userAvatarUrl && /* @__PURE__ */
|
|
2935
|
-
/* @__PURE__ */
|
|
3472
|
+
/* @__PURE__ */ jsxs19(View28, { className: "px-6 pt-6 pb-4 flex-row items-center justify-between border-b border-neutral-200 dark:border-neutral-800", children: [
|
|
3473
|
+
/* @__PURE__ */ jsxs19(View28, { className: "flex-row items-center gap-3", children: [
|
|
3474
|
+
/* @__PURE__ */ jsxs19(Avatar, { size: "lg", children: [
|
|
3475
|
+
userAvatarUrl && /* @__PURE__ */ jsx33(AvatarImage, { source: { uri: userAvatarUrl } }),
|
|
3476
|
+
/* @__PURE__ */ jsx33(AvatarFallback, { text: userName.slice(0, 2).toUpperCase() })
|
|
2936
3477
|
] }),
|
|
2937
|
-
/* @__PURE__ */
|
|
2938
|
-
/* @__PURE__ */
|
|
2939
|
-
/* @__PURE__ */
|
|
3478
|
+
/* @__PURE__ */ jsxs19(View28, { children: [
|
|
3479
|
+
/* @__PURE__ */ jsx33(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400 font-medium uppercase tracking-wider", children: userRole }),
|
|
3480
|
+
/* @__PURE__ */ jsxs19(Heading, { level: 3, className: "text-xl font-bold text-neutral-900 dark:text-neutral-50", children: [
|
|
2940
3481
|
"Hello, ",
|
|
2941
3482
|
userName,
|
|
2942
3483
|
" \u{1F44B}"
|
|
2943
3484
|
] })
|
|
2944
3485
|
] })
|
|
2945
3486
|
] }),
|
|
2946
|
-
onNotificationPress && /* @__PURE__ */
|
|
2947
|
-
|
|
3487
|
+
onNotificationPress && /* @__PURE__ */ jsxs19(
|
|
3488
|
+
Pressable19,
|
|
2948
3489
|
{
|
|
2949
3490
|
onPress: onNotificationPress,
|
|
2950
3491
|
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",
|
|
2951
3492
|
children: [
|
|
2952
|
-
/* @__PURE__ */
|
|
2953
|
-
unreadNotificationsCount > 0 && /* @__PURE__ */
|
|
3493
|
+
/* @__PURE__ */ jsx33(Text2, { className: "text-base text-neutral-900 dark:text-neutral-100", children: "\u{1F514}" }),
|
|
3494
|
+
unreadNotificationsCount > 0 && /* @__PURE__ */ jsx33(View28, { className: "absolute -top-1 -right-1 w-5 h-5 rounded-full bg-danger items-center justify-center", children: /* @__PURE__ */ jsx33(Text2, { className: "text-[10px] font-bold text-white", children: unreadNotificationsCount > 9 ? "9+" : unreadNotificationsCount }) })
|
|
2954
3495
|
]
|
|
2955
3496
|
}
|
|
2956
3497
|
)
|
|
2957
3498
|
] }),
|
|
2958
|
-
/* @__PURE__ */
|
|
2959
|
-
quickActions && quickActions.length > 0 && /* @__PURE__ */
|
|
2960
|
-
/* @__PURE__ */
|
|
2961
|
-
/* @__PURE__ */
|
|
2962
|
-
|
|
3499
|
+
/* @__PURE__ */ jsxs19(View28, { className: "px-6 pt-6 gap-6", children: [
|
|
3500
|
+
quickActions && quickActions.length > 0 && /* @__PURE__ */ jsxs19(View28, { className: "gap-2", children: [
|
|
3501
|
+
/* @__PURE__ */ jsx33(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Quick Actions" }),
|
|
3502
|
+
/* @__PURE__ */ jsx33(
|
|
3503
|
+
ScrollView8,
|
|
2963
3504
|
{
|
|
2964
3505
|
horizontal: true,
|
|
2965
3506
|
showsHorizontalScrollIndicator: false,
|
|
2966
3507
|
className: "-mx-6 px-6",
|
|
2967
|
-
children: /* @__PURE__ */
|
|
3508
|
+
children: /* @__PURE__ */ jsx33(View28, { className: "flex-row gap-3", children: quickActions.map((action) => /* @__PURE__ */ jsx33(
|
|
2968
3509
|
Button,
|
|
2969
3510
|
{
|
|
2970
3511
|
variant: "outline",
|
|
@@ -2977,42 +3518,42 @@ var DashboardTemplate = ({
|
|
|
2977
3518
|
}
|
|
2978
3519
|
)
|
|
2979
3520
|
] }),
|
|
2980
|
-
/* @__PURE__ */
|
|
2981
|
-
/* @__PURE__ */
|
|
2982
|
-
/* @__PURE__ */
|
|
3521
|
+
/* @__PURE__ */ jsxs19(View28, { className: "gap-3", children: [
|
|
3522
|
+
/* @__PURE__ */ jsx33(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider", children: "Overview Performance" }),
|
|
3523
|
+
/* @__PURE__ */ jsx33(View28, { className: "gap-3", children: metrics.map((metric) => /* @__PURE__ */ jsx33(StatsCard, { ...metric }, metric.id)) })
|
|
2983
3524
|
] }),
|
|
2984
|
-
recentActivities && recentActivities.length > 0 && /* @__PURE__ */
|
|
2985
|
-
/* @__PURE__ */
|
|
2986
|
-
/* @__PURE__ */
|
|
2987
|
-
onViewAllActivities && /* @__PURE__ */
|
|
3525
|
+
recentActivities && recentActivities.length > 0 && /* @__PURE__ */ jsxs19(Card, { className: "gap-2", children: [
|
|
3526
|
+
/* @__PURE__ */ jsxs19(CardHeader, { className: "flex-row items-center justify-between pb-2", children: [
|
|
3527
|
+
/* @__PURE__ */ jsx33(CardTitle, { className: "text-base font-bold", children: "Recent Activity" }),
|
|
3528
|
+
onViewAllActivities && /* @__PURE__ */ jsx33(Pressable19, { onPress: onViewAllActivities, children: /* @__PURE__ */ jsx33(Text2, { className: "text-xs font-semibold text-primary-600 dark:text-primary-400", children: "View all" }) })
|
|
2988
3529
|
] }),
|
|
2989
|
-
/* @__PURE__ */
|
|
2990
|
-
|
|
3530
|
+
/* @__PURE__ */ jsx33(CardContent, { className: "gap-3 pt-0", children: recentActivities.map((act) => /* @__PURE__ */ jsxs19(
|
|
3531
|
+
View28,
|
|
2991
3532
|
{
|
|
2992
3533
|
className: "flex-row items-center justify-between py-2 border-b border-neutral-200 dark:border-neutral-800 last:border-b-0",
|
|
2993
3534
|
children: [
|
|
2994
|
-
/* @__PURE__ */
|
|
2995
|
-
/* @__PURE__ */
|
|
2996
|
-
act.avatarUrl && /* @__PURE__ */
|
|
2997
|
-
/* @__PURE__ */
|
|
3535
|
+
/* @__PURE__ */ jsxs19(View28, { className: "flex-row items-center gap-3 flex-1 pr-2", children: [
|
|
3536
|
+
/* @__PURE__ */ jsxs19(Avatar, { size: "sm", children: [
|
|
3537
|
+
act.avatarUrl && /* @__PURE__ */ jsx33(AvatarImage, { source: { uri: act.avatarUrl } }),
|
|
3538
|
+
/* @__PURE__ */ jsx33(
|
|
2998
3539
|
AvatarFallback,
|
|
2999
3540
|
{
|
|
3000
3541
|
text: act.avatarInitials || act.title.slice(0, 2).toUpperCase()
|
|
3001
3542
|
}
|
|
3002
3543
|
)
|
|
3003
3544
|
] }),
|
|
3004
|
-
/* @__PURE__ */
|
|
3005
|
-
/* @__PURE__ */
|
|
3006
|
-
/* @__PURE__ */
|
|
3545
|
+
/* @__PURE__ */ jsxs19(View28, { className: "flex-1", children: [
|
|
3546
|
+
/* @__PURE__ */ jsx33(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", numberOfLines: 1, children: act.title }),
|
|
3547
|
+
/* @__PURE__ */ jsxs19(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", numberOfLines: 1, children: [
|
|
3007
3548
|
act.subtitle,
|
|
3008
3549
|
" \u2022 ",
|
|
3009
3550
|
act.timestamp
|
|
3010
3551
|
] })
|
|
3011
3552
|
] })
|
|
3012
3553
|
] }),
|
|
3013
|
-
/* @__PURE__ */
|
|
3014
|
-
act.amount && /* @__PURE__ */
|
|
3015
|
-
act.status && /* @__PURE__ */
|
|
3554
|
+
/* @__PURE__ */ jsxs19(View28, { className: "items-end gap-1", children: [
|
|
3555
|
+
act.amount && /* @__PURE__ */ jsx33(Text2, { className: "text-sm font-bold text-neutral-900 dark:text-neutral-100", children: act.amount }),
|
|
3556
|
+
act.status && /* @__PURE__ */ jsx33(Badge, { variant: act.status.variant, size: "sm", children: act.status.label })
|
|
3016
3557
|
] })
|
|
3017
3558
|
]
|
|
3018
3559
|
},
|
|
@@ -3027,11 +3568,11 @@ var DashboardTemplate = ({
|
|
|
3027
3568
|
|
|
3028
3569
|
// src/templates/settings/SettingsTemplate.tsx
|
|
3029
3570
|
import {
|
|
3030
|
-
View as
|
|
3031
|
-
ScrollView as
|
|
3032
|
-
Pressable as
|
|
3571
|
+
View as View29,
|
|
3572
|
+
ScrollView as ScrollView9,
|
|
3573
|
+
Pressable as Pressable20
|
|
3033
3574
|
} from "react-native";
|
|
3034
|
-
import { jsx as
|
|
3575
|
+
import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3035
3576
|
var SettingsTemplate = ({
|
|
3036
3577
|
user,
|
|
3037
3578
|
pushNotifications = true,
|
|
@@ -3051,39 +3592,39 @@ var SettingsTemplate = ({
|
|
|
3051
3592
|
className,
|
|
3052
3593
|
...props
|
|
3053
3594
|
}) => {
|
|
3054
|
-
return /* @__PURE__ */
|
|
3055
|
-
|
|
3595
|
+
return /* @__PURE__ */ jsx34(
|
|
3596
|
+
ScrollView9,
|
|
3056
3597
|
{
|
|
3057
3598
|
...props,
|
|
3058
3599
|
style: [{ flex: 1 }, props.style],
|
|
3059
3600
|
className: cn("flex-1 bg-neutral-50 dark:bg-neutral-950", className),
|
|
3060
3601
|
contentContainerStyle: { paddingBottom: 40 },
|
|
3061
3602
|
showsVerticalScrollIndicator: false,
|
|
3062
|
-
children: /* @__PURE__ */
|
|
3063
|
-
/* @__PURE__ */
|
|
3064
|
-
/* @__PURE__ */
|
|
3065
|
-
/* @__PURE__ */
|
|
3066
|
-
user.avatarUrl && /* @__PURE__ */
|
|
3067
|
-
/* @__PURE__ */
|
|
3603
|
+
children: /* @__PURE__ */ jsxs20(View29, { className: "px-6 pt-6 gap-6", children: [
|
|
3604
|
+
/* @__PURE__ */ jsx34(Heading, { level: 2, className: "text-2xl font-bold text-neutral-900 dark:text-neutral-50", children: "Settings & Profile" }),
|
|
3605
|
+
/* @__PURE__ */ jsxs20(Card, { className: "p-4 flex-row items-center gap-4", children: [
|
|
3606
|
+
/* @__PURE__ */ jsxs20(Avatar, { size: "lg", children: [
|
|
3607
|
+
user.avatarUrl && /* @__PURE__ */ jsx34(AvatarImage, { source: { uri: user.avatarUrl } }),
|
|
3608
|
+
/* @__PURE__ */ jsx34(AvatarFallback, { text: user.name.slice(0, 2).toUpperCase() })
|
|
3068
3609
|
] }),
|
|
3069
|
-
/* @__PURE__ */
|
|
3070
|
-
/* @__PURE__ */
|
|
3071
|
-
/* @__PURE__ */
|
|
3072
|
-
user.plan && /* @__PURE__ */
|
|
3610
|
+
/* @__PURE__ */ jsxs20(View29, { className: "flex-1", children: [
|
|
3611
|
+
/* @__PURE__ */ jsxs20(View29, { className: "flex-row items-center gap-2", children: [
|
|
3612
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-base font-bold text-neutral-900 dark:text-neutral-100", children: user.name }),
|
|
3613
|
+
user.plan && /* @__PURE__ */ jsx34(Badge, { variant: "primary", size: "sm", children: user.plan })
|
|
3073
3614
|
] }),
|
|
3074
|
-
/* @__PURE__ */
|
|
3615
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: user.email })
|
|
3075
3616
|
] }),
|
|
3076
|
-
onEditProfile && /* @__PURE__ */
|
|
3617
|
+
onEditProfile && /* @__PURE__ */ jsx34(Button, { variant: "outline", size: "sm", onPress: onEditProfile, children: "Edit" })
|
|
3077
3618
|
] }),
|
|
3078
|
-
/* @__PURE__ */
|
|
3079
|
-
/* @__PURE__ */
|
|
3080
|
-
/* @__PURE__ */
|
|
3081
|
-
/* @__PURE__ */
|
|
3082
|
-
/* @__PURE__ */
|
|
3083
|
-
/* @__PURE__ */
|
|
3084
|
-
/* @__PURE__ */
|
|
3619
|
+
/* @__PURE__ */ jsxs20(View29, { className: "gap-2", children: [
|
|
3620
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Preferences" }),
|
|
3621
|
+
/* @__PURE__ */ jsxs20(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
|
|
3622
|
+
/* @__PURE__ */ jsxs20(View29, { className: "p-4 flex-row items-center justify-between", children: [
|
|
3623
|
+
/* @__PURE__ */ jsxs20(View29, { className: "pr-4 flex-1", children: [
|
|
3624
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Push Notifications" }),
|
|
3625
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Receive real-time alerts on your mobile device" })
|
|
3085
3626
|
] }),
|
|
3086
|
-
/* @__PURE__ */
|
|
3627
|
+
/* @__PURE__ */ jsx34(
|
|
3087
3628
|
Switch,
|
|
3088
3629
|
{
|
|
3089
3630
|
checked: pushNotifications,
|
|
@@ -3091,12 +3632,12 @@ var SettingsTemplate = ({
|
|
|
3091
3632
|
}
|
|
3092
3633
|
)
|
|
3093
3634
|
] }),
|
|
3094
|
-
/* @__PURE__ */
|
|
3095
|
-
/* @__PURE__ */
|
|
3096
|
-
/* @__PURE__ */
|
|
3097
|
-
/* @__PURE__ */
|
|
3635
|
+
/* @__PURE__ */ jsxs20(View29, { className: "p-4 flex-row items-center justify-between", children: [
|
|
3636
|
+
/* @__PURE__ */ jsxs20(View29, { className: "pr-4 flex-1", children: [
|
|
3637
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Email Notifications" }),
|
|
3638
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Weekly digests and activity summaries" })
|
|
3098
3639
|
] }),
|
|
3099
|
-
/* @__PURE__ */
|
|
3640
|
+
/* @__PURE__ */ jsx34(
|
|
3100
3641
|
Switch,
|
|
3101
3642
|
{
|
|
3102
3643
|
checked: emailNotifications,
|
|
@@ -3104,19 +3645,19 @@ var SettingsTemplate = ({
|
|
|
3104
3645
|
}
|
|
3105
3646
|
)
|
|
3106
3647
|
] }),
|
|
3107
|
-
/* @__PURE__ */
|
|
3108
|
-
/* @__PURE__ */
|
|
3109
|
-
/* @__PURE__ */
|
|
3110
|
-
/* @__PURE__ */
|
|
3648
|
+
/* @__PURE__ */ jsxs20(View29, { className: "p-4 flex-row items-center justify-between", children: [
|
|
3649
|
+
/* @__PURE__ */ jsxs20(View29, { className: "pr-4 flex-1", children: [
|
|
3650
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Dark Theme" }),
|
|
3651
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Enable high contrast dark mode appearance" })
|
|
3111
3652
|
] }),
|
|
3112
|
-
/* @__PURE__ */
|
|
3653
|
+
/* @__PURE__ */ jsx34(Switch, { checked: isDarkMode, onCheckedChange: onToggleDarkMode })
|
|
3113
3654
|
] }),
|
|
3114
|
-
/* @__PURE__ */
|
|
3115
|
-
/* @__PURE__ */
|
|
3116
|
-
/* @__PURE__ */
|
|
3117
|
-
/* @__PURE__ */
|
|
3655
|
+
/* @__PURE__ */ jsxs20(View29, { className: "p-4 flex-row items-center justify-between", children: [
|
|
3656
|
+
/* @__PURE__ */ jsxs20(View29, { className: "pr-4 flex-1", children: [
|
|
3657
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Biometric Login" }),
|
|
3658
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs text-neutral-500 dark:text-neutral-400", children: "Use Face ID or fingerprint to authenticate" })
|
|
3118
3659
|
] }),
|
|
3119
|
-
/* @__PURE__ */
|
|
3660
|
+
/* @__PURE__ */ jsx34(
|
|
3120
3661
|
Switch,
|
|
3121
3662
|
{
|
|
3122
3663
|
checked: biometricsEnabled,
|
|
@@ -3126,47 +3667,47 @@ var SettingsTemplate = ({
|
|
|
3126
3667
|
] })
|
|
3127
3668
|
] })
|
|
3128
3669
|
] }),
|
|
3129
|
-
/* @__PURE__ */
|
|
3130
|
-
/* @__PURE__ */
|
|
3131
|
-
/* @__PURE__ */
|
|
3132
|
-
onChangePassword && /* @__PURE__ */
|
|
3133
|
-
|
|
3670
|
+
/* @__PURE__ */ jsxs20(View29, { className: "gap-2", children: [
|
|
3671
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-xs font-bold text-neutral-500 dark:text-neutral-400 uppercase tracking-wider px-1", children: "Account & Security" }),
|
|
3672
|
+
/* @__PURE__ */ jsxs20(Card, { className: "divide-y divide-neutral-200 dark:divide-neutral-800", children: [
|
|
3673
|
+
onChangePassword && /* @__PURE__ */ jsxs20(
|
|
3674
|
+
Pressable20,
|
|
3134
3675
|
{
|
|
3135
3676
|
onPress: onChangePassword,
|
|
3136
3677
|
className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
|
|
3137
3678
|
children: [
|
|
3138
|
-
/* @__PURE__ */
|
|
3139
|
-
/* @__PURE__ */
|
|
3679
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Change Password" }),
|
|
3680
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
|
|
3140
3681
|
]
|
|
3141
3682
|
}
|
|
3142
3683
|
),
|
|
3143
|
-
onViewTerms && /* @__PURE__ */
|
|
3144
|
-
|
|
3684
|
+
onViewTerms && /* @__PURE__ */ jsxs20(
|
|
3685
|
+
Pressable20,
|
|
3145
3686
|
{
|
|
3146
3687
|
onPress: onViewTerms,
|
|
3147
3688
|
className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
|
|
3148
3689
|
children: [
|
|
3149
|
-
/* @__PURE__ */
|
|
3150
|
-
/* @__PURE__ */
|
|
3690
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Terms of Service" }),
|
|
3691
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
|
|
3151
3692
|
]
|
|
3152
3693
|
}
|
|
3153
3694
|
),
|
|
3154
|
-
onViewPrivacy && /* @__PURE__ */
|
|
3155
|
-
|
|
3695
|
+
onViewPrivacy && /* @__PURE__ */ jsxs20(
|
|
3696
|
+
Pressable20,
|
|
3156
3697
|
{
|
|
3157
3698
|
onPress: onViewPrivacy,
|
|
3158
3699
|
className: "p-4 flex-row items-center justify-between active:bg-neutral-100 dark:active:bg-neutral-800",
|
|
3159
3700
|
children: [
|
|
3160
|
-
/* @__PURE__ */
|
|
3161
|
-
/* @__PURE__ */
|
|
3701
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-sm font-semibold text-neutral-900 dark:text-neutral-100", children: "Privacy Policy" }),
|
|
3702
|
+
/* @__PURE__ */ jsx34(Text2, { className: "text-neutral-400 dark:text-neutral-500 text-xs", children: "\u203A" })
|
|
3162
3703
|
]
|
|
3163
3704
|
}
|
|
3164
3705
|
)
|
|
3165
3706
|
] })
|
|
3166
3707
|
] }),
|
|
3167
|
-
/* @__PURE__ */
|
|
3168
|
-
onLogout && /* @__PURE__ */
|
|
3169
|
-
onDeleteAccount && /* @__PURE__ */
|
|
3708
|
+
/* @__PURE__ */ jsxs20(View29, { className: "gap-3 pt-2", children: [
|
|
3709
|
+
onLogout && /* @__PURE__ */ jsx34(Button, { variant: "outline", size: "lg", onPress: onLogout, children: "Log Out" }),
|
|
3710
|
+
onDeleteAccount && /* @__PURE__ */ jsx34(
|
|
3170
3711
|
Button,
|
|
3171
3712
|
{
|
|
3172
3713
|
variant: "destructive",
|
|
@@ -3180,119 +3721,6 @@ var SettingsTemplate = ({
|
|
|
3180
3721
|
}
|
|
3181
3722
|
);
|
|
3182
3723
|
};
|
|
3183
|
-
|
|
3184
|
-
// src/providers/BeyondUIProvider.tsx
|
|
3185
|
-
import * as React26 from "react";
|
|
3186
|
-
import { View as View27, useColorScheme as useRNColorScheme } from "react-native";
|
|
3187
|
-
import { colorScheme as nwColorScheme } from "nativewind";
|
|
3188
|
-
import { PortalHost } from "@rn-primitives/portal";
|
|
3189
|
-
import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3190
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
3191
|
-
try {
|
|
3192
|
-
const { LogBox } = __require("react-native");
|
|
3193
|
-
LogBox?.ignoreLogs?.([
|
|
3194
|
-
"You are setting the style `{ shadowOffset: ... }` as a prop",
|
|
3195
|
-
"You are setting the style"
|
|
3196
|
-
]);
|
|
3197
|
-
if (!Boolean(console.error?.__beyond_ui_filtered)) {
|
|
3198
|
-
const originalError = console.error;
|
|
3199
|
-
const filteredError = (...args) => {
|
|
3200
|
-
const fullMessage = args.map((arg) => typeof arg === "string" ? arg : "").join(" ");
|
|
3201
|
-
if (fullMessage.includes("shadowOffset") || fullMessage.includes("You are setting the style")) {
|
|
3202
|
-
return;
|
|
3203
|
-
}
|
|
3204
|
-
originalError(...args);
|
|
3205
|
-
};
|
|
3206
|
-
filteredError.__beyond_ui_filtered = true;
|
|
3207
|
-
console.error = filteredError;
|
|
3208
|
-
}
|
|
3209
|
-
} catch (_) {
|
|
3210
|
-
}
|
|
3211
|
-
}
|
|
3212
|
-
var BeyondUIContext = React26.createContext({
|
|
3213
|
-
colorScheme: "light",
|
|
3214
|
-
setColorScheme: () => {
|
|
3215
|
-
},
|
|
3216
|
-
toggleColorScheme: () => {
|
|
3217
|
-
}
|
|
3218
|
-
});
|
|
3219
|
-
function useBeyondUI() {
|
|
3220
|
-
return React26.useContext(BeyondUIContext);
|
|
3221
|
-
}
|
|
3222
|
-
function BeyondUIProvider({
|
|
3223
|
-
children,
|
|
3224
|
-
defaultColorScheme = "system"
|
|
3225
|
-
}) {
|
|
3226
|
-
const systemScheme = useRNColorScheme() ?? "light";
|
|
3227
|
-
const [selectedScheme, setSelectedScheme] = React26.useState(defaultColorScheme);
|
|
3228
|
-
const [toasts, setToasts] = React26.useState([]);
|
|
3229
|
-
const activeScheme = selectedScheme === "system" ? systemScheme : selectedScheme;
|
|
3230
|
-
React26.useEffect(() => {
|
|
3231
|
-
try {
|
|
3232
|
-
nwColorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
|
|
3233
|
-
} catch (_) {
|
|
3234
|
-
}
|
|
3235
|
-
}, [selectedScheme, activeScheme]);
|
|
3236
|
-
const handleSetColorScheme = React26.useCallback((scheme) => {
|
|
3237
|
-
setSelectedScheme(scheme);
|
|
3238
|
-
try {
|
|
3239
|
-
nwColorScheme.set(scheme === "system" ? "system" : scheme);
|
|
3240
|
-
} catch (_) {
|
|
3241
|
-
}
|
|
3242
|
-
}, []);
|
|
3243
|
-
const toggleColorScheme = React26.useCallback(() => {
|
|
3244
|
-
setSelectedScheme((prev) => {
|
|
3245
|
-
const current = prev === "system" ? systemScheme : prev;
|
|
3246
|
-
const next = current === "dark" ? "light" : "dark";
|
|
3247
|
-
try {
|
|
3248
|
-
nwColorScheme.set(next);
|
|
3249
|
-
} catch (_) {
|
|
3250
|
-
}
|
|
3251
|
-
return next;
|
|
3252
|
-
});
|
|
3253
|
-
}, [systemScheme]);
|
|
3254
|
-
const dismissToast = React26.useCallback((id) => {
|
|
3255
|
-
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
3256
|
-
}, []);
|
|
3257
|
-
const showToast = React26.useCallback((toast) => {
|
|
3258
|
-
const id = Math.random().toString(36).substring(2, 9);
|
|
3259
|
-
setToasts((prev) => [...prev, { ...toast, id }]);
|
|
3260
|
-
return id;
|
|
3261
|
-
}, []);
|
|
3262
|
-
const toastContextValue = React26.useMemo(
|
|
3263
|
-
() => ({
|
|
3264
|
-
toasts,
|
|
3265
|
-
show: showToast,
|
|
3266
|
-
dismiss: dismissToast,
|
|
3267
|
-
success: (title, description) => showToast({ title, description, variant: "success" }),
|
|
3268
|
-
danger: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
3269
|
-
error: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
3270
|
-
warning: (title, description) => showToast({ title, description, variant: "warning" }),
|
|
3271
|
-
info: (title, description) => showToast({ title, description, variant: "info" })
|
|
3272
|
-
}),
|
|
3273
|
-
[toasts, showToast, dismissToast]
|
|
3274
|
-
);
|
|
3275
|
-
const contextValue = React26.useMemo(
|
|
3276
|
-
() => ({
|
|
3277
|
-
colorScheme: activeScheme,
|
|
3278
|
-
setColorScheme: handleSetColorScheme,
|
|
3279
|
-
toggleColorScheme
|
|
3280
|
-
}),
|
|
3281
|
-
[activeScheme, handleSetColorScheme, toggleColorScheme]
|
|
3282
|
-
);
|
|
3283
|
-
return /* @__PURE__ */ jsx31(BeyondUIContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx31(ToastContext.Provider, { value: toastContextValue, children: /* @__PURE__ */ jsxs18(
|
|
3284
|
-
View27,
|
|
3285
|
-
{
|
|
3286
|
-
style: { flex: 1 },
|
|
3287
|
-
className: activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white",
|
|
3288
|
-
children: [
|
|
3289
|
-
children,
|
|
3290
|
-
/* @__PURE__ */ jsx31(PortalHost, {}),
|
|
3291
|
-
/* @__PURE__ */ jsx31(ToastContainer, { toasts, onDismiss: dismissToast })
|
|
3292
|
-
]
|
|
3293
|
-
}
|
|
3294
|
-
) }) });
|
|
3295
|
-
}
|
|
3296
3724
|
export {
|
|
3297
3725
|
Accordion,
|
|
3298
3726
|
AccordionContent,
|
|
@@ -3326,6 +3754,7 @@ export {
|
|
|
3326
3754
|
CardHeader,
|
|
3327
3755
|
CardTitle,
|
|
3328
3756
|
Checkbox,
|
|
3757
|
+
DashboardLayout,
|
|
3329
3758
|
DashboardTemplate,
|
|
3330
3759
|
DataTable,
|
|
3331
3760
|
Dialog,
|
|
@@ -3342,6 +3771,14 @@ export {
|
|
|
3342
3771
|
ForgotPasswordTemplate,
|
|
3343
3772
|
Heading,
|
|
3344
3773
|
Input,
|
|
3774
|
+
Modal4 as Modal,
|
|
3775
|
+
ModalContent,
|
|
3776
|
+
ModalContext,
|
|
3777
|
+
ModalDescription,
|
|
3778
|
+
ModalFooter,
|
|
3779
|
+
ModalHeader,
|
|
3780
|
+
ModalTitle,
|
|
3781
|
+
NightModeSwitch,
|
|
3345
3782
|
Pressable,
|
|
3346
3783
|
Radio,
|
|
3347
3784
|
RadioGroup,
|
|
@@ -3384,10 +3821,13 @@ export {
|
|
|
3384
3821
|
headingVariants,
|
|
3385
3822
|
inputVariants,
|
|
3386
3823
|
joinA11yLabels,
|
|
3824
|
+
modalVariants,
|
|
3825
|
+
nightModeSwitchVariants,
|
|
3387
3826
|
textVariants,
|
|
3388
3827
|
tokens,
|
|
3389
3828
|
useBeyondUI,
|
|
3390
3829
|
useDialogContext,
|
|
3830
|
+
useModalContext,
|
|
3391
3831
|
useTabsContext,
|
|
3392
3832
|
useToast
|
|
3393
3833
|
};
|