@beyondcorp/beyond-ui-native 0.1.5 → 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/chunk-BJTO5JO5.mjs +11 -0
- package/dist/chunk-BJTO5JO5.mjs.map +1 -0
- package/dist/index.d.mts +109 -1
- package/dist/index.d.ts +109 -1
- package/dist/index.js +749 -293
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +772 -307
- package/dist/index.mjs.map +1 -1
- package/dist/preset.mjs +1 -0
- package/dist/utilities.mjs +1 -0
- 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/src/providers/BeyondUIProvider.tsx +29 -0
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/
|
|
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] =
|
|
2564
|
-
const [password, setPassword] =
|
|
2565
|
-
const [showPassword, setShowPassword] =
|
|
2566
|
-
const [rememberMe, setRememberMe] =
|
|
2567
|
-
const [emailError, setEmailError] =
|
|
2568
|
-
const [passwordError, setPasswordError] =
|
|
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,
|
|
2586
|
-
|
|
3120
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
3121
|
+
import_react_native30.KeyboardAvoidingView,
|
|
2587
3122
|
{
|
|
2588
|
-
behavior:
|
|
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,
|
|
2592
|
-
|
|
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,
|
|
2600
|
-
/* @__PURE__ */ (0,
|
|
2601
|
-
logo && /* @__PURE__ */ (0,
|
|
2602
|
-
/* @__PURE__ */ (0,
|
|
2603
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2606
|
-
/* @__PURE__ */ (0,
|
|
2607
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
2639
|
-
/* @__PURE__ */ (0,
|
|
2640
|
-
/* @__PURE__ */ (0,
|
|
2641
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
2658
|
-
/* @__PURE__ */ (0,
|
|
2659
|
-
/* @__PURE__ */ (0,
|
|
2660
|
-
/* @__PURE__ */ (0,
|
|
2661
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2664
|
-
onGooglePress && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2685
|
-
/* @__PURE__ */ (0,
|
|
2686
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
2697
|
-
var
|
|
2698
|
-
var
|
|
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] =
|
|
2712
|
-
const [email, setEmail] =
|
|
2713
|
-
const [password, setPassword] =
|
|
2714
|
-
const [agreeToTerms, setAgreeToTerms] =
|
|
2715
|
-
const [nameError, setNameError] =
|
|
2716
|
-
const [emailError, setEmailError] =
|
|
2717
|
-
const [passwordError, setPasswordError] =
|
|
2718
|
-
const [termsError, setTermsError] =
|
|
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,
|
|
2746
|
-
|
|
3280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
3281
|
+
import_react_native31.KeyboardAvoidingView,
|
|
2747
3282
|
{
|
|
2748
|
-
behavior:
|
|
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,
|
|
2752
|
-
|
|
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,
|
|
2760
|
-
/* @__PURE__ */ (0,
|
|
2761
|
-
logo && /* @__PURE__ */ (0,
|
|
2762
|
-
/* @__PURE__ */ (0,
|
|
2763
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2766
|
-
/* @__PURE__ */ (0,
|
|
2767
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
2810
|
-
/* @__PURE__ */ (0,
|
|
2811
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3358
|
+
termsError && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Text2, { className: "text-xs text-danger font-medium", children: termsError })
|
|
2824
3359
|
] }),
|
|
2825
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2838
|
-
/* @__PURE__ */ (0,
|
|
2839
|
-
/* @__PURE__ */ (0,
|
|
2840
|
-
/* @__PURE__ */ (0,
|
|
2841
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2844
|
-
onGooglePress && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
2865
|
-
/* @__PURE__ */ (0,
|
|
2866
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
2877
|
-
var
|
|
2878
|
-
var
|
|
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] =
|
|
2890
|
-
const [emailError, setEmailError] =
|
|
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,
|
|
2900
|
-
|
|
3434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
3435
|
+
import_react_native32.KeyboardAvoidingView,
|
|
2901
3436
|
{
|
|
2902
|
-
behavior:
|
|
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,
|
|
2906
|
-
|
|
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,
|
|
2914
|
-
/* @__PURE__ */ (0,
|
|
2915
|
-
/* @__PURE__ */ (0,
|
|
2916
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2919
|
-
isSuccess ? /* @__PURE__ */ (0,
|
|
2920
|
-
/* @__PURE__ */ (0,
|
|
2921
|
-
onBackToSignIn && /* @__PURE__ */ (0,
|
|
2922
|
-
] }) : /* @__PURE__ */ (0,
|
|
2923
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
2960
|
-
var
|
|
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,
|
|
2975
|
-
|
|
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,
|
|
2984
|
-
/* @__PURE__ */ (0,
|
|
2985
|
-
/* @__PURE__ */ (0,
|
|
2986
|
-
userAvatarUrl && /* @__PURE__ */ (0,
|
|
2987
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2990
|
-
/* @__PURE__ */ (0,
|
|
2991
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2999
|
-
|
|
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,
|
|
3005
|
-
unreadNotificationsCount > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
3011
|
-
quickActions && quickActions.length > 0 && /* @__PURE__ */ (0,
|
|
3012
|
-
/* @__PURE__ */ (0,
|
|
3013
|
-
/* @__PURE__ */ (0,
|
|
3014
|
-
|
|
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,
|
|
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,
|
|
3033
|
-
/* @__PURE__ */ (0,
|
|
3034
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3037
|
-
/* @__PURE__ */ (0,
|
|
3038
|
-
/* @__PURE__ */ (0,
|
|
3039
|
-
onViewAllActivities && /* @__PURE__ */ (0,
|
|
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,
|
|
3042
|
-
|
|
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,
|
|
3047
|
-
/* @__PURE__ */ (0,
|
|
3048
|
-
act.avatarUrl && /* @__PURE__ */ (0,
|
|
3049
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3057
|
-
/* @__PURE__ */ (0,
|
|
3058
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3066
|
-
act.amount && /* @__PURE__ */ (0,
|
|
3067
|
-
act.status && /* @__PURE__ */ (0,
|
|
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
|
|
3082
|
-
var
|
|
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,
|
|
3103
|
-
|
|
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,
|
|
3111
|
-
/* @__PURE__ */ (0,
|
|
3112
|
-
/* @__PURE__ */ (0,
|
|
3113
|
-
/* @__PURE__ */ (0,
|
|
3114
|
-
user.avatarUrl && /* @__PURE__ */ (0,
|
|
3115
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3118
|
-
/* @__PURE__ */ (0,
|
|
3119
|
-
/* @__PURE__ */ (0,
|
|
3120
|
-
user.plan && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3659
|
+
onEditProfile && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { variant: "outline", size: "sm", onPress: onEditProfile, children: "Edit" })
|
|
3125
3660
|
] }),
|
|
3126
|
-
/* @__PURE__ */ (0,
|
|
3127
|
-
/* @__PURE__ */ (0,
|
|
3128
|
-
/* @__PURE__ */ (0,
|
|
3129
|
-
/* @__PURE__ */ (0,
|
|
3130
|
-
/* @__PURE__ */ (0,
|
|
3131
|
-
/* @__PURE__ */ (0,
|
|
3132
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3143
|
-
/* @__PURE__ */ (0,
|
|
3144
|
-
/* @__PURE__ */ (0,
|
|
3145
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3156
|
-
/* @__PURE__ */ (0,
|
|
3157
|
-
/* @__PURE__ */ (0,
|
|
3158
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3695
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Switch, { checked: isDarkMode, onCheckedChange: onToggleDarkMode })
|
|
3161
3696
|
] }),
|
|
3162
|
-
/* @__PURE__ */ (0,
|
|
3163
|
-
/* @__PURE__ */ (0,
|
|
3164
|
-
/* @__PURE__ */ (0,
|
|
3165
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3178
|
-
/* @__PURE__ */ (0,
|
|
3179
|
-
/* @__PURE__ */ (0,
|
|
3180
|
-
onChangePassword && /* @__PURE__ */ (0,
|
|
3181
|
-
|
|
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,
|
|
3187
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3192
|
-
|
|
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,
|
|
3198
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3203
|
-
|
|
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,
|
|
3209
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3216
|
-
onLogout && /* @__PURE__ */ (0,
|
|
3217
|
-
onDeleteAccount && /* @__PURE__ */ (0,
|
|
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,97 +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
|
-
var BeyondUIContext = React26.createContext({
|
|
3239
|
-
colorScheme: "light",
|
|
3240
|
-
setColorScheme: () => {
|
|
3241
|
-
},
|
|
3242
|
-
toggleColorScheme: () => {
|
|
3243
|
-
}
|
|
3244
|
-
});
|
|
3245
|
-
function useBeyondUI() {
|
|
3246
|
-
return React26.useContext(BeyondUIContext);
|
|
3247
|
-
}
|
|
3248
|
-
function BeyondUIProvider({
|
|
3249
|
-
children,
|
|
3250
|
-
defaultColorScheme = "system"
|
|
3251
|
-
}) {
|
|
3252
|
-
const systemScheme = (0, import_react_native31.useColorScheme)() ?? "light";
|
|
3253
|
-
const [selectedScheme, setSelectedScheme] = React26.useState(defaultColorScheme);
|
|
3254
|
-
const [toasts, setToasts] = React26.useState([]);
|
|
3255
|
-
const activeScheme = selectedScheme === "system" ? systemScheme : selectedScheme;
|
|
3256
|
-
React26.useEffect(() => {
|
|
3257
|
-
try {
|
|
3258
|
-
import_nativewind.colorScheme.set(selectedScheme === "system" ? "system" : activeScheme);
|
|
3259
|
-
} catch (_) {
|
|
3260
|
-
}
|
|
3261
|
-
}, [selectedScheme, activeScheme]);
|
|
3262
|
-
const handleSetColorScheme = React26.useCallback((scheme) => {
|
|
3263
|
-
setSelectedScheme(scheme);
|
|
3264
|
-
try {
|
|
3265
|
-
import_nativewind.colorScheme.set(scheme === "system" ? "system" : scheme);
|
|
3266
|
-
} catch (_) {
|
|
3267
|
-
}
|
|
3268
|
-
}, []);
|
|
3269
|
-
const toggleColorScheme = React26.useCallback(() => {
|
|
3270
|
-
setSelectedScheme((prev) => {
|
|
3271
|
-
const current = prev === "system" ? systemScheme : prev;
|
|
3272
|
-
const next = current === "dark" ? "light" : "dark";
|
|
3273
|
-
try {
|
|
3274
|
-
import_nativewind.colorScheme.set(next);
|
|
3275
|
-
} catch (_) {
|
|
3276
|
-
}
|
|
3277
|
-
return next;
|
|
3278
|
-
});
|
|
3279
|
-
}, [systemScheme]);
|
|
3280
|
-
const dismissToast = React26.useCallback((id) => {
|
|
3281
|
-
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
3282
|
-
}, []);
|
|
3283
|
-
const showToast = React26.useCallback((toast) => {
|
|
3284
|
-
const id = Math.random().toString(36).substring(2, 9);
|
|
3285
|
-
setToasts((prev) => [...prev, { ...toast, id }]);
|
|
3286
|
-
return id;
|
|
3287
|
-
}, []);
|
|
3288
|
-
const toastContextValue = React26.useMemo(
|
|
3289
|
-
() => ({
|
|
3290
|
-
toasts,
|
|
3291
|
-
show: showToast,
|
|
3292
|
-
dismiss: dismissToast,
|
|
3293
|
-
success: (title, description) => showToast({ title, description, variant: "success" }),
|
|
3294
|
-
danger: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
3295
|
-
error: (title, description) => showToast({ title, description, variant: "danger" }),
|
|
3296
|
-
warning: (title, description) => showToast({ title, description, variant: "warning" }),
|
|
3297
|
-
info: (title, description) => showToast({ title, description, variant: "info" })
|
|
3298
|
-
}),
|
|
3299
|
-
[toasts, showToast, dismissToast]
|
|
3300
|
-
);
|
|
3301
|
-
const contextValue = React26.useMemo(
|
|
3302
|
-
() => ({
|
|
3303
|
-
colorScheme: activeScheme,
|
|
3304
|
-
setColorScheme: handleSetColorScheme,
|
|
3305
|
-
toggleColorScheme
|
|
3306
|
-
}),
|
|
3307
|
-
[activeScheme, handleSetColorScheme, toggleColorScheme]
|
|
3308
|
-
);
|
|
3309
|
-
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)(
|
|
3310
|
-
import_react_native31.View,
|
|
3311
|
-
{
|
|
3312
|
-
style: { flex: 1 },
|
|
3313
|
-
className: activeScheme === "dark" ? "dark flex-1 bg-neutral-950" : "flex-1 bg-white",
|
|
3314
|
-
children: [
|
|
3315
|
-
children,
|
|
3316
|
-
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_portal.PortalHost, {}),
|
|
3317
|
-
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ToastContainer, { toasts, onDismiss: dismissToast })
|
|
3318
|
-
]
|
|
3319
|
-
}
|
|
3320
|
-
) }) });
|
|
3321
|
-
}
|
|
3322
|
-
|
|
3323
3767
|
// src/theme/tokens.ts
|
|
3324
3768
|
var tokens = {
|
|
3325
3769
|
colors: {
|
|
@@ -3561,6 +4005,7 @@ function joinA11yLabels(...parts) {
|
|
|
3561
4005
|
CardHeader,
|
|
3562
4006
|
CardTitle,
|
|
3563
4007
|
Checkbox,
|
|
4008
|
+
DashboardLayout,
|
|
3564
4009
|
DashboardTemplate,
|
|
3565
4010
|
DataTable,
|
|
3566
4011
|
Dialog,
|
|
@@ -3577,6 +4022,14 @@ function joinA11yLabels(...parts) {
|
|
|
3577
4022
|
ForgotPasswordTemplate,
|
|
3578
4023
|
Heading,
|
|
3579
4024
|
Input,
|
|
4025
|
+
Modal,
|
|
4026
|
+
ModalContent,
|
|
4027
|
+
ModalContext,
|
|
4028
|
+
ModalDescription,
|
|
4029
|
+
ModalFooter,
|
|
4030
|
+
ModalHeader,
|
|
4031
|
+
ModalTitle,
|
|
4032
|
+
NightModeSwitch,
|
|
3580
4033
|
Pressable,
|
|
3581
4034
|
Radio,
|
|
3582
4035
|
RadioGroup,
|
|
@@ -3619,10 +4072,13 @@ function joinA11yLabels(...parts) {
|
|
|
3619
4072
|
headingVariants,
|
|
3620
4073
|
inputVariants,
|
|
3621
4074
|
joinA11yLabels,
|
|
4075
|
+
modalVariants,
|
|
4076
|
+
nightModeSwitchVariants,
|
|
3622
4077
|
textVariants,
|
|
3623
4078
|
tokens,
|
|
3624
4079
|
useBeyondUI,
|
|
3625
4080
|
useDialogContext,
|
|
4081
|
+
useModalContext,
|
|
3626
4082
|
useTabsContext,
|
|
3627
4083
|
useToast
|
|
3628
4084
|
});
|