because I got bored of customising my CV for every job
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(client): add toast notifications and server status indicator

+12 -13
+3 -1
apps/client/src/components/ServerStatusIndicator/ServerTooltip.tsx
··· 10 10 lastChecked, 11 11 position, 12 12 }: ServerTooltipProps) => ( 13 - <div className={`absolute ${position}-0 top-6 z-50 hidden group-hover:block`}> 13 + <div 14 + className={`absolute ${position}-0 top-6 z-[60] hidden group-hover:block`} 15 + > 14 16 <div className="bg-ctp-crust border border-ctp-overlay0 rounded-lg p-3 shadow-lg min-w-48"> 15 17 <div className="text-xs space-y-1"> 16 18 <div className={`font-semibold ${statusConfig.color}`}>
+1 -1
apps/client/src/components/ServerStatusIndicator/utils.ts
··· 1 - import { getServerUrl, parseServerUrl } from "@/lib/config"; 1 + import { getServerUrl, parseServerUrl } from "@/utils/config"; 2 2 import type { StatusConfig } from "./constants"; 3 3 import type { ServerInfo } from "./types"; 4 4
+3 -7
apps/client/src/components/Toast.tsx
··· 1 + import { CloseIcon, ToastIcon } from "@cv/ui"; 1 2 import { cva } from "class-variance-authority"; 2 3 import { useCallback, useEffect, useState } from "react"; 3 - import { CloseIcon, ToastIcon } from "./icons"; 4 4 5 5 export type ToastLevel = "success" | "warning" | "info" | "error"; 6 6 ··· 67 67 /** 68 68 * Individual toast notification component 69 69 */ 70 - export default function ToastComponent({ 71 - toast, 72 - onRemove, 73 - config, 74 - }: ToastProps) { 70 + export const ToastComponent = ({ toast, onRemove, config }: ToastProps) => { 75 71 const [isVisible, setIsVisible] = useState(false); 76 72 const [isLeaving, setIsLeaving] = useState(false); 77 73 ··· 127 123 </button> 128 124 </div> 129 125 ); 130 - } 126 + };
+4 -3
apps/client/src/components/ToastContainer.tsx
··· 1 - import type { Toast, ToastConfig } from "./Toast"; 2 - import ToastComponent from "./Toast"; 1 + import { type Toast, ToastComponent, type ToastConfig } from "./Toast"; 3 2 4 3 interface ToastContainerProps { 5 4 toasts: Toast[]; ··· 15 14 onRemove, 16 15 config, 17 16 }: ToastContainerProps) { 18 - if (toasts.length === 0) return null; 17 + if (toasts.length === 0) { 18 + return null; 19 + } 19 20 20 21 return ( 21 22 <div className="fixed top-4 right-4 z-50 space-y-2 max-w-sm w-full">
+1 -1
apps/client/src/contexts/ConfirmationModalContext.tsx
··· 5 5 useContext, 6 6 useState, 7 7 } from "react"; 8 - import ConfirmationModal from "@/components/ConfirmationModal"; 8 + import { ConfirmationModal } from "@/components/ConfirmationModal"; 9 9 10 10 interface ConfirmationModalState { 11 11 isOpen: boolean;