Update
This commit is contained in:
@@ -38,10 +38,6 @@ public function share(Request $request): array
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
...parent::share($request),
|
...parent::share($request),
|
||||||
'auth' => [
|
|
||||||
'user' => $request->user(),
|
|
||||||
'user_is_admin' => user_is_master_admin($request->user()),
|
|
||||||
],
|
|
||||||
'ziggy' => fn (): array => [
|
'ziggy' => fn (): array => [
|
||||||
...(new Ziggy)->toArray(),
|
...(new Ziggy)->toArray(),
|
||||||
'location' => $request->url(),
|
'location' => $request->url(),
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import { ErrorBoundary } from 'react-error-boundary';
|
|||||||
import { GA4Provider } from '@/plugins/GA4Context.jsx'; // Updated import
|
import { GA4Provider } from '@/plugins/GA4Context.jsx'; // Updated import
|
||||||
import DetailedErrorFallback from './components/custom/detailed-error-fallback'; // Import your component
|
import DetailedErrorFallback from './components/custom/detailed-error-fallback'; // Import your component
|
||||||
import { Toaster } from './components/ui/sonner';
|
import { Toaster } from './components/ui/sonner';
|
||||||
import { useTheme } from './hooks/useTheme';
|
|
||||||
import AuthDialog from './modules/auth/AuthDialog';
|
|
||||||
import { AxiosProvider } from './plugins/AxiosContext';
|
import { AxiosProvider } from './plugins/AxiosContext';
|
||||||
import { MittProvider } from './plugins/MittContext';
|
import { MittProvider } from './plugins/MittContext';
|
||||||
|
|
||||||
@@ -40,8 +38,7 @@ createInertiaApp({
|
|||||||
<MittProvider>
|
<MittProvider>
|
||||||
<AxiosProvider>
|
<AxiosProvider>
|
||||||
<Toaster position="top-right" />
|
<Toaster position="top-right" />
|
||||||
<AuthDialog />
|
{/* <AuthDialog /> */}
|
||||||
|
|
||||||
<App {...props} />
|
<App {...props} />
|
||||||
</AxiosProvider>
|
</AxiosProvider>
|
||||||
</MittProvider>
|
</MittProvider>
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/co
|
|||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
import { UserMenuContent } from '@/components/user-menu-content';
|
import { UserMenuContent } from '@/components/user-menu-content';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { type BreadcrumbItem, type NavItem, type SharedData } from '@/types';
|
import { type BreadcrumbItem, type NavItem } from '@/types';
|
||||||
import { Link, usePage } from '@inertiajs/react';
|
import { Link } from '@inertiajs/react';
|
||||||
|
import useUserStore from '@/stores/UserStore';
|
||||||
import { LayoutGrid, Menu, Search } from 'lucide-react';
|
import { LayoutGrid, Menu, Search } from 'lucide-react';
|
||||||
import AppLogo from './app-logo';
|
import AppLogo from './app-logo';
|
||||||
import AppLogoIcon from './app-logo-icon';
|
import AppLogoIcon from './app-logo-icon';
|
||||||
@@ -41,8 +42,7 @@ interface AppHeaderProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function AppHeader({ breadcrumbs = [] }: AppHeaderProps) {
|
export function AppHeader({ breadcrumbs = [] }: AppHeaderProps) {
|
||||||
const page = usePage<SharedData>();
|
const { user } = useUserStore();
|
||||||
const { auth } = page.props;
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="border-sidebar-border/80 border-b">
|
<div className="border-sidebar-border/80 border-b">
|
||||||
@@ -156,7 +156,7 @@ export function AppHeader({ breadcrumbs = [] }: AppHeaderProps) {
|
|||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent className="w-56" align="end">
|
<DropdownMenuContent className="w-56" align="end">
|
||||||
<UserMenuContent user={auth.user} />
|
<UserMenuContent user={user} />
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,8 +2,9 @@ import { NavFooter } from '@/components/nav-footer';
|
|||||||
import { NavMain } from '@/components/nav-main';
|
import { NavMain } from '@/components/nav-main';
|
||||||
import { NavUser } from '@/components/nav-user';
|
import { NavUser } from '@/components/nav-user';
|
||||||
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar';
|
import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '@/components/ui/sidebar';
|
||||||
import { SharedData, type NavItem } from '@/types';
|
import { type NavItem } from '@/types';
|
||||||
import { Link, usePage } from '@inertiajs/react';
|
import { Link } from '@inertiajs/react';
|
||||||
|
import useUserStore from '@/stores/UserStore';
|
||||||
import { LayoutGrid, UserCog } from 'lucide-react';
|
import { LayoutGrid, UserCog } from 'lucide-react';
|
||||||
import AppLogo from './app-logo';
|
import AppLogo from './app-logo';
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ const footerNavItems: NavItem[] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export function AppSidebar() {
|
export function AppSidebar() {
|
||||||
const { auth } = usePage<SharedData>().props;
|
const { user } = useUserStore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Sidebar collapsible="icon" variant="inset">
|
<Sidebar collapsible="icon" variant="inset">
|
||||||
|
|||||||
@@ -3,12 +3,11 @@ import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from '@/c
|
|||||||
import { UserInfo } from '@/components/user-info';
|
import { UserInfo } from '@/components/user-info';
|
||||||
import { UserMenuContent } from '@/components/user-menu-content';
|
import { UserMenuContent } from '@/components/user-menu-content';
|
||||||
import { useIsMobile } from '@/hooks/use-mobile';
|
import { useIsMobile } from '@/hooks/use-mobile';
|
||||||
import { type SharedData } from '@/types';
|
import useUserStore from '@/stores/UserStore';
|
||||||
import { usePage } from '@inertiajs/react';
|
|
||||||
import { ChevronsUpDown } from 'lucide-react';
|
import { ChevronsUpDown } from 'lucide-react';
|
||||||
|
|
||||||
export function NavUser() {
|
export function NavUser() {
|
||||||
const { auth } = usePage<SharedData>().props;
|
const { user } = useUserStore();
|
||||||
const { state } = useSidebar();
|
const { state } = useSidebar();
|
||||||
const isMobile = useIsMobile();
|
const isMobile = useIsMobile();
|
||||||
|
|
||||||
@@ -18,7 +17,7 @@ export function NavUser() {
|
|||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<SidebarMenuButton size="lg" className="text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent group">
|
<SidebarMenuButton size="lg" className="text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent group">
|
||||||
<UserInfo user={auth.user} />
|
<UserInfo user={user} />
|
||||||
<ChevronsUpDown className="ml-auto size-4" />
|
<ChevronsUpDown className="ml-auto size-4" />
|
||||||
</SidebarMenuButton>
|
</SidebarMenuButton>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
@@ -27,7 +26,7 @@ export function NavUser() {
|
|||||||
align="end"
|
align="end"
|
||||||
side={isMobile ? 'bottom' : state === 'collapsed' ? 'left' : 'bottom'}
|
side={isMobile ? 'bottom' : state === 'collapsed' ? 'left' : 'bottom'}
|
||||||
>
|
>
|
||||||
<UserMenuContent user={auth.user} />
|
<UserMenuContent user={user} />
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</SidebarMenuItem>
|
</SidebarMenuItem>
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ const AuthDialog = ({}) => {
|
|||||||
// Listen for text element selection (but don't auto-open sidebar)
|
// Listen for text element selection (but don't auto-open sidebar)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleOpenAuth = () => {
|
const handleOpenAuth = () => {
|
||||||
setIsOpen(true);
|
// Disabled for MVP - don't auto-open auth dialog
|
||||||
|
// setIsOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleOpenLogin = () => {
|
const handleOpenLogin = () => {
|
||||||
|
|||||||
@@ -1,18 +1,15 @@
|
|||||||
import useUserStore from '@/stores/UserStore';
|
import useUserStore from '@/stores/UserStore';
|
||||||
import { usePage } from '@inertiajs/react';
|
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
const AuthUser = () => {
|
const AuthUser = () => {
|
||||||
const { auth } = usePage().props;
|
|
||||||
const { user, fetchUser } = useUserStore();
|
const { user, fetchUser } = useUserStore();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (auth.user) {
|
// Always try to fetch user data on component mount
|
||||||
if (user == null) {
|
if (user === null) {
|
||||||
fetchUser();
|
fetchUser();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, [auth.user]);
|
}, [user, fetchUser]);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default AuthUser;
|
export default AuthUser;
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import { usePage } from '@inertiajs/react';
|
|
||||||
|
|
||||||
import { Button } from '@/components/ui/button';
|
import { Button } from '@/components/ui/button';
|
||||||
import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet';
|
import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet';
|
||||||
import { useMitt } from '@/plugins/MittContext';
|
import { useMitt } from '@/plugins/MittContext';
|
||||||
import useLocalSettingsStore from '@/stores/localSettingsStore';
|
import useLocalSettingsStore from '@/stores/localSettingsStore';
|
||||||
|
import useUserStore from '@/stores/UserStore';
|
||||||
import { Link } from '@inertiajs/react';
|
import { Link } from '@inertiajs/react';
|
||||||
|
|
||||||
export default function EditNavSidebar({ isOpen, onClose }) {
|
export default function EditNavSidebar({ isOpen, onClose }) {
|
||||||
const { auth } = usePage().props;
|
const { user } = useUserStore();
|
||||||
|
|
||||||
const emitter = useMitt();
|
const emitter = useMitt();
|
||||||
|
|
||||||
@@ -32,7 +31,7 @@ export default function EditNavSidebar({ isOpen, onClose }) {
|
|||||||
|
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
<div className="grid px-2">
|
<div className="grid px-2">
|
||||||
{!auth.user && (
|
{!user && (
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
openAuth(false);
|
openAuth(false);
|
||||||
@@ -42,7 +41,7 @@ export default function EditNavSidebar({ isOpen, onClose }) {
|
|||||||
Sign Up
|
Sign Up
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{!auth.user && (
|
{!user && (
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
openAuth(true);
|
openAuth(true);
|
||||||
@@ -58,7 +57,7 @@ export default function EditNavSidebar({ isOpen, onClose }) {
|
|||||||
<Link className="text-primary block w-full text-sm underline-offset-4 hover:underline" href={route('home')} as="button">
|
<Link className="text-primary block w-full text-sm underline-offset-4 hover:underline" href={route('home')} as="button">
|
||||||
Home
|
Home
|
||||||
</Link>
|
</Link>
|
||||||
{auth.user && (
|
{user && (
|
||||||
<Link
|
<Link
|
||||||
className="text-primary block w-full text-sm underline-offset-4 hover:underline"
|
className="text-primary block w-full text-sm underline-offset-4 hover:underline"
|
||||||
method="post"
|
method="post"
|
||||||
|
|||||||
@@ -28,8 +28,7 @@ const EditorAISheet = () => {
|
|||||||
const pollingIntervalRef = useRef(null);
|
const pollingIntervalRef = useRef(null);
|
||||||
const currentJobIdRef = useRef(null);
|
const currentJobIdRef = useRef(null);
|
||||||
|
|
||||||
const { credits } = useUserStore();
|
const { credits, user } = useUserStore();
|
||||||
const { auth } = usePage().props;
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const openSheetListener = () => {
|
const openSheetListener = () => {
|
||||||
@@ -46,10 +45,10 @@ const EditorAISheet = () => {
|
|||||||
|
|
||||||
// Check for active job on component mount
|
// Check for active job on component mount
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (auth.user) {
|
if (user) {
|
||||||
checkForActiveJob();
|
checkForActiveJob();
|
||||||
}
|
}
|
||||||
}, [auth.user]);
|
}, [user]);
|
||||||
|
|
||||||
const checkForActiveJob = async () => {
|
const checkForActiveJob = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -218,7 +217,7 @@ const EditorAISheet = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className={cn('space-y-2', !prompt.trim() && 'invisible')}>
|
<div className={cn('space-y-2', !prompt.trim() && 'invisible')}>
|
||||||
{auth.user ? (
|
{user ? (
|
||||||
<>
|
<>
|
||||||
<Button
|
<Button
|
||||||
onClick={handleSend}
|
onClick={handleSend}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// resources/js/Pages/User/Partials/upgrade-sheet.jsx
|
// resources/js/Pages/User/Partials/upgrade-sheet.jsx
|
||||||
import { usePage } from '@inertiajs/react';
|
|
||||||
|
|
||||||
import { SparklesText } from '@/components/magicui/sparkles-text';
|
import { SparklesText } from '@/components/magicui/sparkles-text';
|
||||||
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion';
|
||||||
@@ -17,8 +16,7 @@ import UpgradePlanCarousel from './partials/upgrade-plan-carousel.tsx';
|
|||||||
|
|
||||||
const UpgradeSheet = () => {
|
const UpgradeSheet = () => {
|
||||||
const { subscription, one_times, isFetchingPricing, fetchPricing, isCheckingOut, checkoutSubscribe, checkoutPurchase } = usePricingStore();
|
const { subscription, one_times, isFetchingPricing, fetchPricing, isCheckingOut, checkoutSubscribe, checkoutPurchase } = usePricingStore();
|
||||||
const { plan, billing, user_usage, credits, redirectBillingPortal, isRedirectingToBilling } = useUserStore();
|
const { plan, billing, user_usage, credits, redirectBillingPortal, isRedirectingToBilling, user } = useUserStore();
|
||||||
const { auth } = usePage().props;
|
|
||||||
|
|
||||||
// State to control sheet visibility
|
// State to control sheet visibility
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
@@ -118,7 +116,7 @@ const UpgradeSheet = () => {
|
|||||||
</SheetHeader>
|
</SheetHeader>
|
||||||
|
|
||||||
<div className="mx-auto w-full max-w-[600px] space-y-3 px-4">
|
<div className="mx-auto w-full max-w-[600px] space-y-3 px-4">
|
||||||
{auth?.user ? (
|
{user ? (
|
||||||
<div id="stats">
|
<div id="stats">
|
||||||
<div className="grid grid-cols-1 gap-3 sm:grid-cols-2">
|
<div className="grid grid-cols-1 gap-3 sm:grid-cols-2">
|
||||||
{/* Non-watermark Exports */}
|
{/* Non-watermark Exports */}
|
||||||
@@ -163,7 +161,7 @@ const UpgradeSheet = () => {
|
|||||||
|
|
||||||
{subscription ? (
|
{subscription ? (
|
||||||
<>
|
<>
|
||||||
{auth.user && plan.tier != 'free' ? (
|
{user && plan.tier != 'free' ? (
|
||||||
<div className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7">
|
<div className="mx-auto space-y-6 rounded-lg border p-4 text-center sm:p-7">
|
||||||
<SparklesText className="text-xl font-bold sm:text-xl">You're now in the {plan?.name} plan!</SparklesText>
|
<SparklesText className="text-xl font-bold sm:text-xl">You're now in the {plan?.name} plan!</SparklesText>
|
||||||
</div>
|
</div>
|
||||||
@@ -268,7 +266,7 @@ const UpgradeSheet = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{!(auth.user && plan.tier != 'free') && (
|
{!(user && plan.tier != 'free') && (
|
||||||
<div id="faq" className="space-y-4 rounded-lg border p-4 sm:p-7">
|
<div id="faq" className="space-y-4 rounded-lg border p-4 sm:p-7">
|
||||||
<div className="text-center text-xl font-extrabold sm:text-2xl">Frequently Asked Questions</div>
|
<div className="text-center text-xl font-extrabold sm:text-2xl">Frequently Asked Questions</div>
|
||||||
<Accordion type="single" collapsible className="w-full" defaultValue="item-1">
|
<Accordion type="single" collapsible className="w-full" defaultValue="item-1">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { type BreadcrumbItem, type SharedData } from '@/types';
|
import { type BreadcrumbItem } from '@/types';
|
||||||
import { Transition } from '@headlessui/react';
|
import { Transition } from '@headlessui/react';
|
||||||
import { Head, Link, useForm, usePage } from '@inertiajs/react';
|
import { Head, Link, useForm } from '@inertiajs/react';
|
||||||
import { FormEventHandler } from 'react';
|
import { FormEventHandler } from 'react';
|
||||||
|
|
||||||
import DeleteUser from '@/components/delete-user';
|
import DeleteUser from '@/components/delete-user';
|
||||||
@@ -11,6 +11,7 @@ import { Input } from '@/components/ui/input';
|
|||||||
import { Label } from '@/components/ui/label';
|
import { Label } from '@/components/ui/label';
|
||||||
import AppLayout from '@/layouts/app-layout';
|
import AppLayout from '@/layouts/app-layout';
|
||||||
import SettingsLayout from '@/layouts/settings/layout';
|
import SettingsLayout from '@/layouts/settings/layout';
|
||||||
|
import useUserStore from '@/stores/UserStore';
|
||||||
|
|
||||||
const breadcrumbs: BreadcrumbItem[] = [
|
const breadcrumbs: BreadcrumbItem[] = [
|
||||||
{
|
{
|
||||||
@@ -25,11 +26,11 @@ type ProfileForm = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function Profile({ mustVerifyEmail, status }: { mustVerifyEmail: boolean; status?: string }) {
|
export default function Profile({ mustVerifyEmail, status }: { mustVerifyEmail: boolean; status?: string }) {
|
||||||
const { auth } = usePage<SharedData>().props;
|
const { user } = useUserStore();
|
||||||
|
|
||||||
const { data, setData, patch, errors, processing, recentlySuccessful } = useForm<Required<ProfileForm>>({
|
const { data, setData, patch, errors, processing, recentlySuccessful } = useForm<Required<ProfileForm>>({
|
||||||
name: auth.user.name,
|
name: user?.name || '',
|
||||||
email: auth.user.email,
|
email: user?.email || '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const submit: FormEventHandler = (e) => {
|
const submit: FormEventHandler = (e) => {
|
||||||
@@ -82,7 +83,7 @@ export default function Profile({ mustVerifyEmail, status }: { mustVerifyEmail:
|
|||||||
<InputError className="mt-2" message={errors.email} />
|
<InputError className="mt-2" message={errors.email} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{mustVerifyEmail && auth.user.email_verified_at === null && (
|
{mustVerifyEmail && user?.email_verified_at === null && (
|
||||||
<div>
|
<div>
|
||||||
<p className="text-muted-foreground -mt-4 text-sm">
|
<p className="text-muted-foreground -mt-4 text-sm">
|
||||||
Your email address is unverified.{' '}
|
Your email address is unverified.{' '}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { type SharedData } from '@/types';
|
import { Head, Link } from '@inertiajs/react';
|
||||||
import { Head, Link, usePage } from '@inertiajs/react';
|
import useUserStore from '@/stores/UserStore';
|
||||||
|
|
||||||
export default function Welcome() {
|
export default function Welcome() {
|
||||||
const { auth } = usePage<SharedData>().props;
|
const { user } = useUserStore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -13,7 +13,7 @@ export default function Welcome() {
|
|||||||
<div className="flex min-h-screen flex-col items-center bg-[#FDFDFC] p-6 text-[#1b1b18] lg:justify-center lg:p-8 dark:bg-[#0a0a0a]">
|
<div className="flex min-h-screen flex-col items-center bg-[#FDFDFC] p-6 text-[#1b1b18] lg:justify-center lg:p-8 dark:bg-[#0a0a0a]">
|
||||||
<header className="mb-6 w-full max-w-[335px] text-sm not-has-[nav]:hidden lg:max-w-4xl">
|
<header className="mb-6 w-full max-w-[335px] text-sm not-has-[nav]:hidden lg:max-w-4xl">
|
||||||
<nav className="flex items-center justify-end gap-4">
|
<nav className="flex items-center justify-end gap-4">
|
||||||
{auth.user ? (
|
{user ? (
|
||||||
<Link
|
<Link
|
||||||
href={route(config('platform.general.authed_route_redirect'))}
|
href={route(config('platform.general.authed_route_redirect'))}
|
||||||
className="inline-block rounded-sm border border-[#19140035] px-5 py-1.5 text-sm leading-normal text-[#1b1b18] hover:border-[#1915014a] dark:border-[#3E3E3A] dark:text-[#EDEDEC] dark:hover:border-[#62605b]"
|
className="inline-block rounded-sm border border-[#19140035] px-5 py-1.5 text-sm leading-normal text-[#1b1b18] hover:border-[#1915014a] dark:border-[#3E3E3A] dark:text-[#EDEDEC] dark:hover:border-[#62605b]"
|
||||||
|
|||||||
5
resources/js/types/index.d.ts
vendored
5
resources/js/types/index.d.ts
vendored
@@ -1,10 +1,6 @@
|
|||||||
import { LucideIcon } from 'lucide-react';
|
import { LucideIcon } from 'lucide-react';
|
||||||
import type { Config } from 'ziggy-js';
|
import type { Config } from 'ziggy-js';
|
||||||
|
|
||||||
export interface Auth {
|
|
||||||
user: User;
|
|
||||||
user_is_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface BreadcrumbItem {
|
export interface BreadcrumbItem {
|
||||||
title: string;
|
title: string;
|
||||||
@@ -24,7 +20,6 @@ export interface NavItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface SharedData {
|
export interface SharedData {
|
||||||
auth: Auth;
|
|
||||||
ziggy: Config & { location: string };
|
ziggy: Config & { location: string };
|
||||||
[key: string]: unknown;
|
[key: string]: unknown;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user