@getdashfy/ui 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/widget/base/Widget.tsx","../src/components/common/Scrollable.tsx","../src/components/widget/base/WidgetBody.tsx","../src/components/ui/button.tsx","../src/components/widget/base/WidgetError.tsx","../src/components/widget/base/WidgetHeader.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/spinner.tsx","../src/components/widget/base/WidgetLoader.tsx","../src/components/widget/list/WidgetListItem.tsx","../src/lib/subscriptionId.ts","../src/store/slices/apiSlice.ts","../src/store/slices/configurationSlice.ts","../src/store/slices/dashboardsSlice.ts","../../types/src/index.ts","../src/store/slices/notificationsSlice.ts","../src/store/slices/panelSlice.ts","../src/constants/storageConstants.ts","../src/lib/StorageSync.ts","../src/store/slices/settingsSlice.ts","../src/store/slices/themesSlice.ts","../src/store/slices/wsSlice.ts","../src/store/index.ts","../src/hooks/useApiSubscription.ts","../src/components/ext/Inspector.tsx","../src/registry/WidgetRegistry.ts","../src/components/common/DebugInfo.tsx","../src/components/common/ExternalLink.tsx","../src/components/common/Text.tsx","../src/constants/dashboardConstants.ts","../src/constants/wsConstants.ts","../src/hooks/useDashboards.ts","../src/hooks/useDashboardPlayer.ts","../src/hooks/useDashboardShortcuts.ts","../src/hooks/useFullscreen.ts","../src/hooks/usePanel.ts","../src/lib/WSHelper.ts","../src/hooks/useNotifications.ts","../src/hooks/useWebSocket.ts","../src/hooks/useMode.ts","../src/registry/ThemeRegistry.ts","../src/providers/ThemeProvider.tsx","../src/components/ui/sonner.tsx","../src/components/notifications/Notifications.tsx","../src/components/ui/tooltip.tsx","../src/components/App.tsx","../src/components/dashboard/Dashboard.tsx","../src/components/logo/LogoIcon.tsx","../src/components/settings/SettingsButton.tsx","../src/components/ui/separator.tsx","../src/components/dashboard/DashboardPlayer.tsx","../src/components/dashboard/DashboardProgressBar.tsx","../src/components/ui/popover.tsx","../src/components/dashboard/DashboardTitle.tsx","../src/components/dashboard/FullscreenButton.tsx","../src/components/dashboard/DashboardHeader.tsx","../src/config/connectionStatusConfig.tsx","../src/components/dashboard/ConnectionStatus.tsx","../src/components/dashboard/DashboardStatusBar.tsx","../src/components/panel/BottomPanel.tsx","../src/components/panel/ConnectionPanel.tsx","../src/components/panel/ConsolePanel.tsx","../src/components/panel/NotificationsPanel.tsx","../src/components/ui/sheet.tsx","../src/components/ui/alert-dialog.tsx","../src/components/settings/DataActions.tsx","../src/components/ui/switch.tsx","../src/components/settings/ModeSelector.tsx","../src/hooks/useTheme.ts","../src/components/settings/ThemeSelector.tsx","../src/hooks/useSettings.ts","../src/components/settings/WakeLockSelector.tsx","../src/components/settings/Settings.tsx","../src/components/logo/Logo.tsx","../src/components/SplashScreen.tsx","../src/components/widget/errors/WidgetErrorUnknown.tsx","../src/components/Dashfy.tsx","../src/components/widget/base/WidgetEmpty.tsx","../src/components/widget/base/WidgetWrapper.tsx","../src/components/ui/avatar.tsx","../src/components/widget/display/WidgetAvatar.tsx","../src/components/widget/display/WidgetCounter.tsx","../src/components/widget/display/WidgetLabel.tsx","../src/components/widget/errors/WidgetErrorBoundary.tsx","../src/components/widget/status/WidgetStatusBadge.tsx","../src/components/widget/status/WidgetStatusChip.tsx","../src/components/widget/table/WidgetTable.tsx","../src/components/widget/table/WidgetTableCell.tsx","../src/components/widget/table/WidgetTableHeadCell.tsx","../src/hooks/useWidget.ts","../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/aspect-ratio.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/calendar.tsx","../src/components/ui/card.tsx","../src/components/ui/carousel.tsx","../src/components/ui/chart.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/context-menu.tsx","../src/components/ui/drawer.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/label.tsx","../src/components/ui/form.tsx","../src/components/ui/gitmap.tsx","../src/components/ui/hover-card.tsx","../src/components/ui/input-otp.tsx","../src/components/ui/input.tsx","../src/components/ui/menubar.tsx","../src/components/ui/navigation-menu.tsx","../src/components/ui/pagination.tsx","../src/components/ui/progress.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/resizable.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/slider.tsx","../src/components/ui/table.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/index.ts"],"names":["jsx","React4","jsxs","NotificationType","WebSocketStatus","WebSocketEvent","notification","isServer","isClient","React9","React10","cva","React13","React14","React15","React16","defaultTheme","React17","builtInDefaultTheme","Sonner","React18","React19","Fragment","React23","React24","React25","React26","React27","format","React28","React29","React30","React31","React32","useTheme","React33","sizeMap","React35","React38","getErrorMessage","Icon","React46","React47","React49","Slot","className","props","ChevronLeftIcon","ChevronRightIcon","React50","React51","api","React53","config","React54","CollapsibleTrigger","CollapsibleContent","DialogPrimitive","React55","X","React56","CommandPrimitive","React57","ChevronRight","Check","DrawerPrimitive","React58","React59","Circle","Label","React60","React61","startOfWeekFns","useRef","useState","useCallback","React62","React63","React64","React65","React66","ChevronDown","React67","MoreHorizontal","React68","RadioGroup","React69","React70","React71","React72","React73","React74","React75","React76","React77"],"mappings":"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","file":"index.js","sourcesContent":["import type { ClassValue } from 'clsx'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Merges multiple class names using clsx and tailwind-merge.\n *\n * @param inputs - Class values to merge\n * @returns Merged class names\n *\n * @example\n * ```ts\n * cn('bg-red-500', 'text-white', 'p-4') // => 'bg-red-500 text-white p-4'\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n\n/**\n * Generates a unique key for React elements.\n *\n * @param prefix - Prefix for the key (usually component or list name)\n * @param identifier - Unique identifier (like id, slug, or other unique value)\n * @param index - Optional index for list items\n * @returns A string to be used as React key\n *\n * @example\n * ```ts\n * // Basic usage\n * generateReactKey('user', 'john-doe') // => 'user_john-doe'\n *\n * // With index\n * generateReactKey('list', 'item', 0) // => 'list_item_0'\n *\n * // With number identifier\n * generateReactKey('product', 123) // => 'product_123'\n * ```\n */\nexport function generateReactKey(\n prefix: string,\n identifier: string | number,\n index?: number,\n): string {\n const base = `${prefix}_${identifier}`\n return typeof index === 'number' ? `${base}_${index}` : base\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface WidgetProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Widget = ({ children, className, ...props }: WidgetProps) => {\n return (\n <div\n className={cn(\n 'relative flex h-full w-full flex-col overflow-hidden rounded-lg border border-border bg-card text-card-foreground shadow-sm transition-all',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import type { PartialOptions } from 'overlayscrollbars'\nimport { OverlayScrollbarsComponent } from 'overlayscrollbars-react'\nimport * as React from 'react'\n\nconst DEFAULT_OVERLAY_SCROLLBARS_OPTIONS: PartialOptions = {\n scrollbars: {\n autoHide: 'leave',\n autoHideDelay: 800,\n },\n}\n\nexport interface ScrollableProps\n extends Omit<React.ComponentProps<typeof OverlayScrollbarsComponent>, 'options'> {\n options?: React.ComponentProps<typeof OverlayScrollbarsComponent>['options']\n}\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nexport const Scrollable = ({ className, options, defer = true, ...props }: ScrollableProps) => (\n <OverlayScrollbarsComponent\n className={className}\n defer={defer}\n options={{ ...DEFAULT_OVERLAY_SCROLLBARS_OPTIONS, ...options }}\n {...props}\n />\n)\n","import * as React from 'react'\n\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n disablePadding?: boolean\n scrollable?: boolean\n}\n\nexport const WidgetBody = ({\n children,\n className,\n disablePadding = false,\n scrollable = false,\n ...props\n}: WidgetBodyProps) => {\n if (scrollable) {\n return (\n <Scrollable\n className={cn('relative flex-1', className, {\n 'p-4': !disablePadding,\n })}\n {...props}\n >\n {children}\n </Scrollable>\n )\n }\n\n return (\n <div\n className={cn('relative flex-1', className, {\n 'p-4': !disablePadding,\n })}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { AlertCircleIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetErrorProps extends React.HTMLAttributes<HTMLDivElement> {\n error: string | Error\n onRetry?: () => void\n}\n\nexport const WidgetError = ({ className, error, onRetry, ...props }: WidgetErrorProps) => {\n const errorMessage = typeof error === 'string' ? error : error.message\n\n return (\n <div\n className={cn('flex h-full flex-col items-center justify-center gap-3 p-4', className)}\n {...props}\n >\n <AlertCircleIcon className=\"h-8 w-8 text-error\" />\n <div className=\"text-center\">\n <p className=\"mb-1 text-sm font-medium text-foreground\">Error loading data</p>\n <p className=\"text-xs text-muted-foreground\">{errorMessage}</p>\n </div>\n {onRetry && (\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry}>\n Try again\n </Button>\n )}\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n actions?: React.ReactNode\n count?: number\n icon?: React.ReactNode\n subject?: string\n title?: string\n}\n\nexport const WidgetHeader = ({\n actions,\n className,\n count,\n icon,\n subject,\n title,\n ...props\n}: WidgetHeaderProps) => {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-b border-border bg-muted/30 px-3 py-2',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {icon && <span className=\"text-muted-foreground [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>}\n {title && <h3 className=\"text-sm font-semibold\">{title}</h3>}\n {subject && <span className=\"text-xs font-medium text-muted-foreground\">{subject}</span>}\n {count !== undefined && (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground\">\n {count}\n </span>\n )}\n </div>\n {actions && <div className=\"flex items-center gap-1\">{actions}</div>}\n </div>\n )\n}\n","import { cn } from \"@/lib/utils\"\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-primary/10\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import { cn } from \"@/lib/utils\"\nimport { Loader2Icon } from \"lucide-react\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn(\"size-4 animate-spin\", className)} {...props} />\n )\n}\n\nexport { Spinner }\n","import * as React from 'react'\n\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { Spinner } from '@/components/ui/spinner'\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetLoaderProps extends React.HTMLAttributes<HTMLDivElement> {\n message?: string\n}\n\nexport const WidgetLoader = ({\n className,\n message = 'Loading...',\n ...props\n}: WidgetLoaderProps) => {\n return (\n <div\n className={cn('flex h-full flex-col items-center justify-center gap-3', className)}\n {...props}\n >\n <Spinner className=\"h-8 w-8 text-primary\" />\n <p className=\"text-sm text-muted-foreground\">{message}</p>\n </div>\n )\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface WidgetSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const WidgetSkeleton = ({ className, ...props }: WidgetSkeletonProps) => {\n return (\n <div className={cn('space-y-3', className)} {...props}>\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-5/6\" />\n <Skeleton className=\"h-4 w-4/6\" />\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetListItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n icon?: React.ReactNode\n meta?: string\n title: React.ReactNode\n value?: React.ReactNode\n}\n\nexport const WidgetListItem = ({\n className,\n icon,\n meta,\n title,\n value,\n ...props\n}: WidgetListItemProps) => {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-b border-border px-4 py-3 transition-colors hover:bg-muted/50',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n {icon && <span className=\"shrink-0 text-muted-foreground\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-sm font-medium\">{title}</div>\n {meta && <p className=\"truncate text-xs text-muted-foreground\">{meta}</p>}\n </div>\n </div>\n {value && <div className=\"ml-4 shrink-0 text-right text-sm font-semibold\">{value}</div>}\n </div>\n )\n}\n","/**\n * Serializes parameters into a human-readable string for subscription IDs.\n *\n * Rules:\n * - Empty params → empty string\n * - Single or multiple params → \"key=value\" pairs joined by \".\"\n *\n * @param params - Parameters object to serialize\n * @returns Serialized string or empty string\n *\n * @example\n * ```ts\n * serializeParams({}) // \"\"\n * serializeParams({ url: \"https://api.com\" }) // \"url=https://api.com\"\n * serializeParams({ user: \"john\", sort: \"stars\" }) // \"user=john.sort=stars\"\n * ```\n */\nexport function serializeParams(params: Record<string, unknown>): string {\n const keys = Object.keys(params)\n\n // No params\n if (keys.length === 0) {\n return ''\n }\n\n // Build key=value pairs for all params\n const pairs = keys.map((key) => {\n const value = params[key]\n\n // Stringify complex values (objects, arrays)\n if (typeof value === 'object' && value !== null) {\n return `${key}=${JSON.stringify(value)}`\n }\n\n return `${key}=${String(value)}`\n })\n\n return pairs.join('.')\n}\n\n/**\n * Creates a unique subscription ID from API name, endpoint, and parameters.\n *\n * Format:\n * - No params: \"api.endpoint\"\n * - With params: \"api.endpoint.serializedParams\"\n *\n * @param api - API name\n * @param endpoint - Endpoint/method name\n * @param params - Optional parameters\n * @returns Unique subscription ID\n *\n * @example\n * ```ts\n * createSubscriptionId('demo', 'getCounter') // \"demo.getCounter\"\n * createSubscriptionId('json', 'get', { url: 'https://...' }) // \"json.get.url=https://...\"\n * createSubscriptionId('github', 'repos', { user: 'john', sort: 'stars' }) // \"github.repos.user=john.sort=stars\"\n * ```\n */\nexport function createSubscriptionId(\n api: string,\n endpoint: string,\n params?: Record<string, unknown>,\n): string {\n const serializedParams = params ? serializeParams(params) : ''\n\n return serializedParams ? `${api}.${endpoint}.${serializedParams}` : `${api}.${endpoint}`\n}\n","import type { StateCreator } from 'zustand'\n\nimport type { ApiSlice, DashfyStore } from '@/store/types'\n\n/**\n * Creates the API slice for managing WebSocket API subscriptions and data.\n *\n * Handles subscription lifecycle (subscribe/unsubscribe), tracks subscription states,\n * manages API response data, errors, and loading states. Subscriptions are identified\n * by unique IDs and can be queried for pending status.\n */\nexport const createApiSlice: StateCreator<DashfyStore, [], [], ApiSlice> = (set, get) => ({\n apiSubscriptions: new Map(),\n apiData: {},\n\n /**\n * Add a subscription to the store.\n *\n * @param subscription - The subscription to add\n * @returns The new state with the added subscription\n */\n subscribeApi: (subscription) => {\n set((state) => {\n if (state.apiSubscriptions.has(subscription.id)) {\n return state\n }\n\n const newSubscriptions = new Map(state.apiSubscriptions)\n\n newSubscriptions.set(subscription.id, {\n ...subscription,\n hasSubscribed: false,\n })\n\n return { apiSubscriptions: newSubscriptions }\n })\n },\n\n /**\n * Unsubscribe from an API.\n *\n * @param id - The ID of the subscription to unsubscribe from\n * @returns The new state with the subscription removed\n */\n unsubscribeApi: (id) => {\n set((state) => {\n const newSubscriptions = new Map(state.apiSubscriptions)\n newSubscriptions.delete(id)\n return { apiSubscriptions: newSubscriptions }\n })\n },\n\n /**\n * Set a subscription as subscribed.\n *\n * @param id - The ID of the subscription to set as subscribed\n * @returns The new state with the subscription set as subscribed\n */\n setApiSubscribed: (id) => {\n set((state) => {\n const sub = state.apiSubscriptions.get(id)\n\n if (!sub) {\n return state\n }\n\n const newSubscriptions = new Map(state.apiSubscriptions)\n newSubscriptions.set(id, { ...sub, hasSubscribed: true })\n return { apiSubscriptions: newSubscriptions }\n })\n },\n\n /**\n * Set all subscriptions as unsubscribed.\n *\n * @returns The new state with all subscriptions set as unsubscribed\n */\n setAllApiUnsubscribed: () => {\n set((state) => {\n const newSubscriptions = new Map()\n state.apiSubscriptions.forEach((sub, id) => {\n newSubscriptions.set(id, { ...sub, hasSubscribed: false })\n })\n return { apiSubscriptions: newSubscriptions }\n })\n },\n\n /**\n * Set the data for an API.\n *\n * @param id - The ID of the API\n * @param data - The data to set\n * @returns The new state with the data set\n */\n setApiData: (id, data) => {\n set((state) => ({\n apiData: {\n ...state.apiData,\n [id]: {\n data,\n error: null,\n loading: false,\n lastUpdate: Date.now(),\n },\n },\n }))\n },\n\n /**\n * Set the error for an API.\n *\n * @param id - The ID of the API\n * @param error - The error to set\n * @returns The new state with the error set\n */\n setApiError: (id, error) => {\n set((state) => ({\n apiData: {\n ...state.apiData,\n [id]: {\n data: state.apiData[id]?.data ?? null,\n error,\n loading: false,\n lastUpdate: Date.now(),\n },\n },\n }))\n },\n\n /**\n * Set the loading state for an API.\n *\n * @param id - The ID of the API\n * @param loading - The loading state to set\n * @returns The new state with the loading state set\n */\n setApiLoading: (id, loading) => {\n set((state) => ({\n apiData: {\n ...state.apiData,\n [id]: {\n data: state.apiData[id]?.data ?? null,\n error: state.apiData[id]?.error ?? null,\n loading,\n lastUpdate: state.apiData[id]?.lastUpdate ?? Date.now(),\n },\n },\n }))\n },\n\n /**\n * Get the pending subscriptions.\n *\n * @returns The pending subscriptions\n */\n getApiPendingSubscriptions: () => {\n const state = get()\n return Array.from(state.apiSubscriptions.values()).filter((sub) => !sub.hasSubscribed)\n },\n\n /**\n * Check if a subscription exists.\n *\n * @param id - The ID of the subscription to check\n * @returns True if the subscription exists, false otherwise\n */\n hasApiSubscription: (id) => {\n return get().apiSubscriptions.has(id)\n },\n\n /**\n * Clear the data for an API.\n *\n * @param id - The ID of the API to clear\n * @returns The new state with the data cleared\n */\n clearApiData: (id) => {\n set((state) => {\n const newData = { ...state.apiData }\n delete newData[id]\n return { apiData: newData }\n })\n },\n})\n","import type { DashfyConfig } from '@getdashfy/types'\nimport { getErrorMessage } from '@getdashfy/utils'\nimport type { StateCreator } from 'zustand'\n\nimport type { ConfigurationSlice, DashfyStore } from '@/store/types'\n\n/**\n * Creates the configuration slice for managing Dashfy application configuration.\n *\n * Provides methods to set, fetch, and manage configuration state including loading\n * and error states. Configuration can be set directly or fetched from the server\n * via the /config endpoint.\n */\nexport const createConfigurationSlice: StateCreator<DashfyStore, [], [], ConfigurationSlice> = (\n set,\n) => ({\n config: null,\n isLoading: false,\n error: null,\n\n setConfig: (config) => set({ config, error: null }),\n\n setLoading: (isLoading) => set({ isLoading }),\n\n setError: (error) => set({ error, isLoading: false }),\n\n fetchConfig: async () => {\n set({ isLoading: true, error: null })\n try {\n const response = await fetch('/config')\n\n if (!response.ok) {\n throw new Error(`Failed to fetch configuration: ${response.statusText}`)\n }\n\n const config = (await response.json()) as DashfyConfig\n set({ config, isLoading: false })\n } catch (error) {\n set({ error: getErrorMessage(error), isLoading: false })\n }\n },\n})\n","import type { StateCreator } from 'zustand'\n\nimport type { DashboardsSlice, DashfyStore } from '@/store/types'\n\n/**\n * Creates the dashboards slice for managing dashboard state.\n *\n * Provides methods to set, manage, and navigate through dashboard collections.\n * Manages current dashboard index, playing state, and provides navigation\n * functions to cycle through dashboards.\n */\nexport const createDashboardsSlice: StateCreator<DashfyStore, [], [], DashboardsSlice> = (set) => ({\n dashboards: [],\n currentDashboard: 0,\n isPlaying: false,\n\n setDashboards: (dashboards) => set({ dashboards, currentDashboard: 0 }),\n\n setCurrentDashboard: (index) => {\n set((state) => ({\n currentDashboard:\n index >= 0 && index < state.dashboards.length ? index : state.currentDashboard,\n }))\n },\n\n nextDashboard: () => {\n set((state) => ({\n currentDashboard: (state.currentDashboard + 1) % state.dashboards.length,\n }))\n },\n\n previousDashboard: () => {\n set((state) => ({\n currentDashboard:\n state.currentDashboard === 0 ? state.dashboards.length - 1 : state.currentDashboard - 1,\n }))\n },\n\n play: () => set({ isPlaying: true }),\n\n pause: () => set({ isPlaying: false }),\n\n togglePlay: () => set((state) => ({ isPlaying: !state.isPlaying })),\n})\n","import type * as React from 'react'\n\nexport enum NotificationType {\n SUCCESS = 'success',\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n}\n\nexport enum WebSocketStatus {\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n DISCONNECTED = 'disconnected',\n RECONNECTING = 'reconnecting',\n ERROR = 'error',\n}\n\nexport enum WebSocketEvent {\n CONNECT = 'connect',\n DISCONNECT = 'disconnect',\n ERROR = 'error',\n CONFIGURATION = 'configuration',\n RECONNECT = 'reconnect',\n RECONNECT_ATTEMPT = 'reconnect_attempt',\n RECONNECT_ERROR = 'reconnect_error',\n RECONNECT_FAILED = 'reconnect_failed',\n API_SUBSCRIPTION = 'api.subscription',\n API_UNSUBSCRIPTION = 'api.unsubscription',\n API_DATA = 'api.data',\n API_ERROR = 'api.error',\n}\n\nexport type APIClient = Record<string, (...args: any[]) => Promise<unknown>>\n\nexport type CreatePushInterval = (options?: {\n interval?: number\n}) => (\n key: string,\n callback: (data: unknown) => void,\n fetchFn: () => Promise<unknown>,\n) => () => void\n\nexport type APIRegistration = (dashfy: {\n logger: Logger\n request?: (options: RequestOptions) => Promise<unknown>\n createPushInterval?: CreatePushInterval\n}) => APIClient\n\nexport type ApiConfig = Record<string, unknown>\n\nexport type Dashboard = DashboardConfig\n\nexport type Extension = Record<string, WidgetComponent | React.ComponentType<any>>\n\nexport type PollMode = 'poll' | 'push'\n\nexport type ThemeId = string\n\nexport type ThemeMode = 'light' | 'dark'\n\nexport interface ApiData<T = unknown> {\n data: T | null\n error: string | null\n loading: boolean\n lastUpdate: number\n}\n\nexport interface ApiError {\n id: string\n error: {\n message: string\n code?: string\n statusCode?: number\n }\n}\n\nexport interface DashboardConfig {\n name?: string\n title?: string\n columns: number\n rows: number\n widgets: WidgetConfig[]\n}\n\nexport interface DashfyConfig {\n port?: number\n host?: string\n baseDir?: string\n theme?: ThemeId\n rotationDuration?: number\n dashboards: DashboardConfig[]\n apis?: {\n pollInterval?: number\n [key: string]: ApiConfig | number | undefined\n }\n}\n\nexport interface Logger {\n info: (message: string, ...args: any[]) => void\n warn: (message: string, ...args: any[]) => void\n error: (message: string, ...args: any[]) => void\n debug: (message: string, ...args: any[]) => void\n}\n\nexport interface Notification {\n id: string\n type: NotificationType\n message: string\n /**\n * Time To Live in milliseconds - how long before auto-dismissing\n * - positive number: auto-dismiss after this many ms\n * - -1 or 0: never auto-dismiss (user must manually close)\n * - undefined: uses default TTL based on notification type\n */\n ttl?: number\n action?: {\n label: string\n onClick: () => void\n }\n createdAt: number\n}\n\nexport interface RequestOptions {\n url: string\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n headers?: Record<string, string>\n body?: unknown\n timeout?: number\n}\n\nexport interface Subscription {\n id: string\n api: string\n endpoint: string\n params?: Record<string, unknown>\n hasSubscribed?: boolean\n}\n\nexport interface WidgetComponent<P = any> {\n (props: P): React.ReactNode\n displayName?: string\n getApiRequest?: (props: P) => Subscription\n}\n\nexport interface WidgetConfig {\n extension: string\n widget: string\n title?: string\n columns: number\n rows: number\n x: number\n y: number\n [key: string]: unknown\n}\n\nexport interface WidgetMetadata {\n displayName: string\n description?: string\n defaultConfig?: Record<string, unknown>\n previewImage?: string\n requiredApis?: string[]\n}\n\nexport interface WidgetProps<T = unknown> {\n apiData?: T\n apiError?: Error\n isLoading?: boolean\n}\n\nexport interface WidgetRegistryEntry {\n component: WidgetComponent\n metadata?: WidgetMetadata\n}\n","import { NotificationType } from '@getdashfy/types'\nimport type { StateCreator } from 'zustand'\n\nimport type { DashfyStore, NotificationsSlice } from '@/store/types'\n\n// Auto-incrementing ID for notifications\nlet notificationId = 0\n\n/**\n * Creates the notifications slice for managing notifications.\n *\n * Provides methods to add, remove, and clear notifications.\n * Manages notification state and provides helper functions to show\n * success, error, warning, and info notifications.\n */\nexport const createNotificationsSlice: StateCreator<DashfyStore, [], [], NotificationsSlice> = (\n set,\n) => ({\n notifications: [],\n\n /**\n * Add a custom notification to the store.\n *\n * @param notification - Notification object (without id and createdAt)\n * @returns The notification ID for manual removal if needed\n */\n addNotification: (notification) => {\n const id = `notification-${++notificationId}`\n const newNotification = {\n ...notification,\n id,\n createdAt: Date.now(),\n }\n\n set((state) => ({\n notifications: [...state.notifications, newNotification],\n }))\n\n // Auto-remove notification after TTL (Time To Live)\n // If ttl > 0, schedule automatic removal after the specified time\n // If ttl is -1 or 0, notification stays until manually dismissed\n if (notification.ttl && notification.ttl > 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n }, notification.ttl)\n }\n\n return id\n },\n\n /**\n * Remove a specific notification by ID.\n *\n * @param id - The notification ID to remove\n */\n removeNotification: (id) => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n },\n\n /**\n * Clear all notifications from the store.\n */\n clearNotifications: () => set({ notifications: [] }),\n\n /**\n * Show a success notification.\n *\n * @param message - The message to display\n * @param ttl - Time To Live in milliseconds (default: 2000ms = 2s)\n * Use -1 or 0 to prevent auto-dismiss\n * @returns The notification ID for manual removal if needed\n */\n notifySuccess: (message, ttl = 2_000) => {\n const id = `notification-${++notificationId}`\n const notification = {\n id,\n type: NotificationType.SUCCESS,\n message,\n ttl,\n createdAt: Date.now(),\n }\n\n set((state) => ({\n notifications: [...state.notifications, notification],\n }))\n\n if (ttl > 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n }, ttl)\n }\n\n return id\n },\n\n /**\n * Show an error notification.\n *\n * @param message - The message to display\n * @param ttl - Time To Live in milliseconds (default: -1 = never auto-dismiss)\n * User must manually close error notifications\n * @returns The notification ID for manual removal if needed\n */\n notifyError: (message, ttl = -1) => {\n const id = `notification-${++notificationId}`\n const notification = {\n id,\n type: NotificationType.ERROR,\n message,\n ttl,\n createdAt: Date.now(),\n }\n\n set((state) => ({\n notifications: [...state.notifications, notification],\n }))\n\n if (ttl > 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n }, ttl)\n }\n\n return id\n },\n\n /**\n * Show a warning notification.\n *\n * @param message - The message to display\n * @param ttl - Time To Live in milliseconds (default: 6000ms = 6s)\n * Longer duration for important warnings\n * @returns The notification ID for manual removal if needed\n */\n notifyWarning: (message, ttl = 6_000) => {\n const id = `notification-${++notificationId}`\n const notification = {\n id,\n type: NotificationType.WARNING,\n message,\n ttl,\n createdAt: Date.now(),\n }\n\n set((state) => ({\n notifications: [...state.notifications, notification],\n }))\n\n if (ttl > 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n }, ttl)\n }\n\n return id\n },\n\n /**\n * Show an info notification.\n *\n * @param message - The message to display\n * @param ttl - Time To Live in milliseconds (default: 4000ms = 4s)\n * @returns The notification ID for manual removal if needed\n */\n notifyInfo: (message, ttl = 4_000) => {\n const id = `notification-${++notificationId}`\n const notification = {\n id,\n type: NotificationType.INFO,\n message,\n ttl,\n createdAt: Date.now(),\n }\n\n set((state) => ({\n notifications: [...state.notifications, notification],\n }))\n\n if (ttl > 0) {\n setTimeout(() => {\n set((state) => ({\n notifications: state.notifications.filter((notification) => notification.id !== id),\n }))\n }, ttl)\n }\n\n return id\n },\n})\n","import { isServer } from '@getdashfy/utils'\nimport type { StateCreator } from 'zustand'\n\nexport interface PanelSlice {\n isPanelOpen: boolean\n panelHeight: number\n activeTab: string\n availableTabs: { id: string; label: string; icon?: React.ReactNode }[]\n togglePanel: () => void\n openPanel: () => void\n closePanel: () => void\n setPanelHeight: (height: number) => void\n setActiveTab: (tabId: string) => void\n registerTab: (tab: { id: string; label: string; icon?: React.ReactNode }) => void\n unregisterTab: (tabId: string) => void\n}\n\nexport const MIN_PANEL_HEIGHT = 150\nexport const MAX_PANEL_HEIGHT = 600\n\nconst FALLBACK_PANEL_HEIGHT = 350\n\n/**\n * Returns the panel height appropriate for the current viewport.\n * Portrait: 350px. Landscape: 30% of screen height (clamped to MIN/MAX).\n * Safe to call on the client; returns FALLBACK_PANEL_HEIGHT during SSR.\n */\nexport function getPanelHeightForViewport(): number {\n if (isServer) {\n return FALLBACK_PANEL_HEIGHT\n }\n\n const isLandscape = window.innerWidth > window.innerHeight\n\n if (!isLandscape) {\n return FALLBACK_PANEL_HEIGHT\n }\n\n const height = Math.round(window.innerHeight * 0.3)\n return Math.min(Math.max(height, MIN_PANEL_HEIGHT), MAX_PANEL_HEIGHT)\n}\n\nexport const DEFAULT_PANEL_HEIGHT = getPanelHeightForViewport()\n\n/**\n * Creates the panel slice for managing panel state.\n *\n * Provides methods to set, manage, and navigate through panel state.\n * Manages panel visibility, height, active tab, and available tabs.\n */\nexport const createPanelSlice: StateCreator<PanelSlice> = (set) => ({\n isPanelOpen: false,\n panelHeight: DEFAULT_PANEL_HEIGHT,\n activeTab: 'connection',\n availableTabs: [\n { id: 'connection', label: 'Connection' },\n // More tabs can be added dynamically\n ],\n\n togglePanel: () => {\n set((state) => ({\n isPanelOpen: !state.isPanelOpen,\n }))\n },\n\n openPanel: () => {\n set({\n isPanelOpen: true,\n })\n },\n\n closePanel: () => {\n set({\n isPanelOpen: false,\n })\n },\n\n setPanelHeight: (height: number) => {\n const clampedHeight = Math.min(Math.max(height, MIN_PANEL_HEIGHT), MAX_PANEL_HEIGHT)\n set({ panelHeight: clampedHeight })\n },\n\n setActiveTab: (tabId: string) => {\n set({ activeTab: tabId })\n },\n\n registerTab: (tab) => {\n set((state) => {\n // Don't add duplicates\n if (state.availableTabs.some((availableTab) => availableTab.id === tab.id)) {\n return state\n }\n\n return {\n availableTabs: [...state.availableTabs, tab],\n }\n })\n },\n\n unregisterTab: (tabId: string) => {\n set((state) => ({\n availableTabs: state.availableTabs.filter((tab) => tab.id !== tabId),\n // Switch to first tab if active tab is removed\n activeTab: state.activeTab === tabId ? (state.availableTabs[0]?.id ?? '') : state.activeTab,\n }))\n },\n})\n","// Storage key for the application\nexport const STORAGE_KEY = 'dashfy'\n\n// LocalStorage key for storing the selected mode (light/dark)\nexport const MODE_STORAGE_KEY = 'mode'\n\n// LocalStorage key for storing the selected theme\nexport const THEME_STORAGE_KEY = 'theme'\n\n// LocalStorage key for storing the selected wake lock\nexport const WAKE_LOCK_STORAGE_KEY = 'wake-lock'\n","import { isClient } from '@getdashfy/utils'\n\nimport { STORAGE_KEY } from '@/constants/storageConstants'\n\nexport interface StorageSyncOptions {\n /**\n * Namespace prefix for all keys\n * @default 'dashfy'\n */\n namespace?: string\n /**\n * Use sessionStorage instead of localStorage\n * @default false\n */\n useSession?: boolean\n /**\n * Enable basic encryption for stored values\n * @default false\n */\n encrypt?: boolean\n /**\n * Secret key used for encryption\n * @default ''\n */\n secret?: string\n}\n\ninterface StoragePayload {\n value: string\n expiry: number | null\n}\n\n/**\n * Synchronous storage wrapper with namespacing, TTL, and encryption support.\n *\n * Provides a consistent API for working with localStorage/sessionStorage,\n * adding features like automatic key namespacing, expiration (TTL),\n * and optional value encryption.\n *\n * Supports:\n * - Automatic key namespacing to avoid collisions\n * - TTL (time-to-live) for automatic expiration\n * - Basic encryption for sensitive values\n * - Storage change event listeners\n * - Session or local storage backends\n *\n * @example\n * ```tsx\n * // Create a namespaced storage instance\n * const storage = new StorageSyncClass({ namespace: 'myApp' })\n *\n * // Store a value with TTL (expires in 1 hour)\n * storage.set('user', { name: 'John' }, 3600)\n *\n * // Retrieve a value\n * const user = storage.get('user')\n *\n * // Remove a value\n * storage.remove('user')\n *\n * // Clear all namespaced values\n * storage.clear()\n *\n * // With encryption\n * const secureStorage = new StorageSyncClass({\n * namespace: 'secure',\n * encrypt: true,\n * secret: 'my-secret-key'\n * })\n * ```\n */\nclass StorageSyncClass {\n private storage: Storage | null = null\n private namespace: string\n private encrypt: boolean\n private secret: string\n\n constructor(options: StorageSyncOptions = {}) {\n const { namespace = '', useSession = false, encrypt = false, secret = '' } = options\n\n if (isClient) {\n this.storage = useSession ? sessionStorage : localStorage\n }\n\n this.namespace = namespace\n this.encrypt = encrypt\n this.secret = secret\n }\n\n /**\n * Store a value with optional TTL.\n *\n * @param key - Storage key\n * @param value - Value to store (will be JSON serialized)\n * @param ttlInSeconds - Optional TTL in seconds\n */\n public set<T>(key: string, value: T, ttlInSeconds: number | null = null): void {\n const payload: StoragePayload = {\n value: this.encryptValue(JSON.stringify(value)),\n expiry: ttlInSeconds ? Date.now() + ttlInSeconds * 1000 : null,\n }\n this.storage?.setItem(this.withNamespace(key), JSON.stringify(payload))\n }\n\n /**\n * Retrieve a stored value.\n *\n * @param key - Storage key\n * @returns Parsed value or null if not found/expired\n */\n public get<T>(key: string): T | null {\n const item = this.storage?.getItem(this.withNamespace(key))\n if (!item) {\n return null\n }\n\n try {\n const { value, expiry } = JSON.parse(item) as StoragePayload\n\n if (expiry && Date.now() > expiry) {\n this.remove(key)\n return null\n }\n\n return JSON.parse(this.decryptValue(value)) as T\n } catch {\n return null\n }\n }\n\n /**\n * Check if a key exists and is not expired.\n *\n * @param key - Storage key\n * @returns true if key exists and is valid\n */\n public has(key: string): boolean {\n return this.get(key) !== null\n }\n\n /**\n * Remove a single key from storage.\n *\n * @param key - Storage key to remove\n */\n public remove(key: string): void {\n this.storage?.removeItem(this.withNamespace(key))\n }\n\n /**\n * Clear all keys within the namespace.\n */\n public clear(): void {\n const keysToRemove: string[] = []\n\n for (let i = 0; i < (this.storage?.length ?? 0); i++) {\n const key = this.storage?.key(i)\n if (key && (this.namespace === '' || key.startsWith(`${this.namespace}:`))) {\n keysToRemove.push(key)\n }\n }\n\n keysToRemove.forEach((key) => this.storage?.removeItem(key))\n }\n\n /**\n * Listen for storage changes within the namespace.\n *\n * @param callback - Function called when storage changes\n * @returns Cleanup function to remove the listener\n */\n public onChange(callback: (event: StorageEvent) => void): () => void {\n const handler = (event: StorageEvent) => {\n if (event.key && this.namespace && !event.key.startsWith(`${this.namespace}:`)) {\n return\n }\n callback(event)\n }\n\n window.addEventListener('storage', handler)\n\n return () => window.removeEventListener('storage', handler)\n }\n\n /**\n * Get the current namespace.\n *\n * @returns Namespace string\n */\n public getNamespace(): string {\n return this.namespace\n }\n\n /**\n * Get count of keys within the namespace.\n *\n * @returns Number of stored keys\n */\n public get size(): number {\n let count = 0\n\n for (let i = 0; i < (this.storage?.length ?? 0); i++) {\n const key = this.storage?.key(i)\n if (key && (this.namespace === '' || key.startsWith(`${this.namespace}:`))) {\n count++\n }\n }\n\n return count\n }\n\n /**\n * Build a namespaced key.\n *\n * @param key - Original key\n * @returns Namespaced key\n */\n private withNamespace(key: string): string {\n return this.namespace ? `${this.namespace}:${key}` : key\n }\n\n /**\n * Encrypt a string value.\n *\n * @param str - String to encrypt\n * @returns Encrypted string or original if encryption disabled\n */\n private encryptValue(str: string): string {\n if (!this.encrypt || !this.secret) {\n return str\n }\n return btoa(unescape(encodeURIComponent(str + this.secret)))\n }\n\n /**\n * Decrypt a string value.\n *\n * @param str - String to decrypt\n * @returns Decrypted string or original if encryption disabled\n */\n private decryptValue(str: string): string {\n if (!this.encrypt || !this.secret) {\n return str\n }\n const raw = decodeURIComponent(escape(atob(str)))\n return raw.replace(this.secret, '')\n }\n}\n\nexport { StorageSyncClass }\n\n// Export singleton instance\nexport const StorageSync = new StorageSyncClass({ namespace: STORAGE_KEY })\n","import { isClient, isServer } from '@getdashfy/utils'\nimport type { StateCreator } from 'zustand'\n\nimport { WAKE_LOCK_STORAGE_KEY } from '@/constants/storageConstants'\nimport { StorageSync } from '@/lib/StorageSync'\nimport type { DashfyStore, SettingsSlice } from '@/store/types'\n\n// Load wake lock preference from localStorage on initialization\nconst getInitialWakeLockEnabled = (): boolean => {\n if (isServer) {\n return false\n }\n\n const stored = StorageSync.get<boolean>(WAKE_LOCK_STORAGE_KEY)\n return stored ?? false\n}\n\n/**\n * Creates the settings slice for managing user preferences.\n *\n * Provides methods to manage user settings like wake lock preference.\n * Settings are persisted to localStorage.\n */\nexport const createSettingsSlice: StateCreator<DashfyStore, [], [], SettingsSlice> = (set) => ({\n wakeLockEnabled: getInitialWakeLockEnabled(),\n\n setWakeLockEnabled: (enabled) => {\n set({ wakeLockEnabled: enabled })\n\n if (isClient) {\n StorageSync.set(WAKE_LOCK_STORAGE_KEY, enabled)\n }\n },\n})\n\n/**\n * Subscribe to settings changes from other tabs/windows.\n * Call this once when the store is initialized.\n *\n * @param store - The Zustand store instance\n * @returns Cleanup function to unsubscribe\n */\nexport const subscribeToSettingsChanges = (store: DashfyStore): (() => void) => {\n if (!isClient) {\n return () => {\n // No-op for server-side\n }\n }\n\n return StorageSync.onChange((event) => {\n if (event.key?.endsWith(WAKE_LOCK_STORAGE_KEY) && event.newValue) {\n try {\n const payload = JSON.parse(event.newValue) as { value: string; expiry: number | null }\n const enabled = JSON.parse(payload.value) as boolean\n store.setWakeLockEnabled(enabled)\n } catch {\n // Ignore invalid values\n }\n }\n })\n}\n","import type { ThemeId } from '@getdashfy/types'\nimport { isClient, isServer } from '@getdashfy/utils'\nimport type { StateCreator } from 'zustand'\n\nimport { THEME_STORAGE_KEY } from '@/constants/storageConstants'\nimport { StorageSync } from '@/lib/StorageSync'\nimport type { DashfyStore, ThemesSlice } from '@/store/types'\n\n/**\n * Load theme from localStorage on initialization.\n * Returns null if no theme was saved - ThemeProvider will set the default.\n */\nconst getInitialTheme = (): ThemeId | null => {\n if (isServer) {\n return null\n }\n\n return StorageSync.get<ThemeId>(THEME_STORAGE_KEY)\n}\n\n/**\n * Creates the themes slice for managing themes.\n *\n * Provides methods to set, manage, and navigate through themes.\n * Manages current theme, available themes, and provides helper functions to\n * set the current theme and available themes.\n *\n * Note: availableThemes starts empty and is populated by ThemeProvider\n * after themes are registered via ThemeRegistry.\n */\nexport const createThemesSlice: StateCreator<DashfyStore, [], [], ThemesSlice> = (set) => ({\n currentTheme: getInitialTheme(),\n availableThemes: [], // Will be populated by ThemeProvider after themes are registered\n\n setTheme: (currentTheme) => {\n set({ currentTheme })\n\n if (isClient) {\n StorageSync.set(THEME_STORAGE_KEY, currentTheme)\n }\n },\n\n setAvailableThemes: (availableThemes) => set({ availableThemes }),\n})\n\n/**\n * Subscribe to theme changes from other tabs/windows.\n * Call this once when the store is initialized.\n *\n * @param store - The Zustand store instance\n * @returns Cleanup function to unsubscribe\n */\nexport const subscribeToThemeChanges = (store: DashfyStore): (() => void) => {\n if (!isClient) {\n return () => {\n // No-op for server-side\n }\n }\n\n return StorageSync.onChange((event) => {\n if (event.key?.endsWith(THEME_STORAGE_KEY) && event.newValue) {\n try {\n const payload = JSON.parse(event.newValue) as { value: string; expiry: number | null }\n const newTheme = JSON.parse(payload.value) as ThemeId\n store.setTheme(newTheme)\n } catch {\n // Ignore invalid values\n }\n }\n })\n}\n","import { WebSocketStatus } from '@getdashfy/types'\nimport type { StateCreator } from 'zustand'\n\nimport type { DashfyStore, WsSlice } from '@/store/types'\n\n/**\n * Creates the WebSocket slice for managing WebSocket state.\n *\n * Provides methods to set, manage, and navigate through WebSocket state.\n * Manages WebSocket connection state, reconnect attempts, and provides helper functions to\n * set the WebSocket connection state and reconnect attempts.\n */\nexport const createWsSlice: StateCreator<DashfyStore, [], [], WsSlice> = (set) => ({\n socket: null,\n status: WebSocketStatus.DISCONNECTED,\n reconnectAttempt: 0,\n\n /**\n * Set the WebSocket connection.\n *\n * @param socket - The WebSocket connection to set\n * @returns The new state with the WebSocket connection set\n */\n setSocket: (socket) => set({ socket }),\n\n /**\n * Set the WebSocket connection status.\n *\n * @param status - The WebSocket connection status to set\n * @returns The new state with the WebSocket connection status set\n */\n setStatus: (status) => set({ status }),\n\n /**\n * Set the WebSocket reconnect attempts.\n *\n * @param reconnectAttempt - The WebSocket reconnect attempts to set\n * @returns The new state with the WebSocket reconnect attempts set\n */\n setReconnectAttempt: (reconnectAttempt) => set({ reconnectAttempt }),\n\n /**\n * Increment the WebSocket reconnect attempts.\n *\n * @returns The new state with the WebSocket reconnect attempts incremented\n */\n incrementReconnectAttempt: () =>\n set((state) => ({ reconnectAttempt: state.reconnectAttempt + 1 })),\n\n /**\n * Reset the WebSocket reconnect attempts.\n *\n * @returns The new state with the WebSocket reconnect attempts reset\n */\n resetReconnectAttempt: () => set({ reconnectAttempt: 0 }),\n})\n","import { create } from 'zustand'\nimport { devtools } from 'zustand/middleware'\n\nimport { createApiSlice } from './slices/apiSlice'\nimport { createConfigurationSlice } from './slices/configurationSlice'\nimport { createDashboardsSlice } from './slices/dashboardsSlice'\nimport { createNotificationsSlice } from './slices/notificationsSlice'\nimport { createPanelSlice } from './slices/panelSlice'\nimport { createSettingsSlice, subscribeToSettingsChanges } from './slices/settingsSlice'\nimport { createThemesSlice, subscribeToThemeChanges } from './slices/themesSlice'\nimport { createWsSlice } from './slices/wsSlice'\nimport type { DashfyStore } from './types'\n\nconst STORE_NAME = 'DashfyStore'\n\n/**\n * Main Dashfy store combining all slices.\n * Uses Zustand with devtools middleware for debugging.\n */\nexport const useDashfyStore = create<DashfyStore>()(\n devtools(\n (set, get, api) => ({\n ...createConfigurationSlice(set, get, api),\n ...createDashboardsSlice(set, get, api),\n ...createApiSlice(set, get, api),\n ...createWsSlice(set, get, api),\n ...createThemesSlice(set, get, api),\n ...createNotificationsSlice(set, get, api),\n ...createPanelSlice(set, get, api),\n ...createSettingsSlice(set, get, api),\n }),\n { name: STORE_NAME },\n ),\n)\n\n// Subscribe to storage changes from other tabs/windows\nsubscribeToThemeChanges(useDashfyStore.getState())\nsubscribeToSettingsChanges(useDashfyStore.getState())\n","import * as React from 'react'\n\nimport { createSubscriptionId } from '@/lib/subscriptionId'\nimport { useDashfyStore } from '@/store'\n\nexport interface UseApiSubscriptionOptions {\n api: string\n endpoint: string\n params?: Record<string, unknown>\n enabled?: boolean\n}\n\n/**\n * Hook for subscribing to API data updates via WebSocket connection.\n *\n * Automatically manages subscription lifecycle: creates subscription on mount,\n * sends it to the server when connected, and cleans up on unmount. Returns\n * the current data state including loading and error states.\n *\n * @param options - Subscription configuration\n * @param options.api - API name to subscribe to\n * @param options.endpoint - API endpoint/method to call\n * @param options.params - Optional parameters to pass to the endpoint\n * @param options.enabled - Whether the subscription is active (default: true)\n *\n * @returns Object containing:\n * - `data` - The current data\n * - `error` - The current error\n * - `loading` - Whether the data is loading\n * - `lastUpdate` - The last update timestamp\n *\n * @example\n * ```tsx\n * // No params: subscription ID = \"myApi.getData\"\n * const { data, error, loading } = useApiSubscription({\n * api: 'myApi',\n * endpoint: 'getData',\n * enabled: true\n * })\n *\n * // Simple param: subscription ID = \"myApi.getData.id=123\"\n * const { data, error, loading } = useApiSubscription({\n * api: 'myApi',\n * endpoint: 'getData',\n * params: { id: '123' },\n * enabled: true\n * })\n *\n * // Multiple params: subscription ID = \"myApi.getData.user=john.sort=stars.limit=10\"\n * const { data, error, loading } = useApiSubscription({\n * api: 'myApi',\n * endpoint: 'getData',\n * params: { user: 'john', sort: 'stars', limit: 10 },\n * enabled: true\n * })\n * ```\n */\nexport function useApiSubscription({\n api,\n endpoint,\n params = {},\n enabled = true,\n}: UseApiSubscriptionOptions) {\n const socket = useDashfyStore((state) => state.socket)\n const status = useDashfyStore((state) => state.status)\n const subscribeApi = useDashfyStore((state) => state.subscribeApi)\n const unsubscribeApi = useDashfyStore((state) => state.unsubscribeApi)\n const setApiSubscribed = useDashfyStore((state) => state.setApiSubscribed)\n const apiData = useDashfyStore((state) => state.apiData)\n\n // Generate subscription ID with smart param serialization\n const subscriptionId = createSubscriptionId(api, endpoint, params)\n\n React.useEffect(() => {\n if (!enabled) {\n return\n }\n\n // Create subscription\n const subscription = {\n id: subscriptionId,\n api,\n endpoint,\n params,\n }\n\n // Add to store\n subscribeApi(subscription)\n\n // Send to server if connected\n if (socket?.connected) {\n socket.emit('api.subscription', subscription)\n setApiSubscribed(subscriptionId)\n }\n\n // Cleanup\n return () => {\n unsubscribeApi(subscriptionId)\n\n if (socket?.connected) {\n socket.emit('api.unsubscription', { id: subscriptionId })\n }\n }\n }, [subscriptionId, enabled, socket, status])\n\n const subscriptionData = apiData[subscriptionId]\n\n return {\n data: subscriptionData?.data ?? null,\n error: subscriptionData?.error ?? null,\n loading: subscriptionData?.loading ?? true,\n lastUpdate: subscriptionData?.lastUpdate,\n }\n}\n","import { format } from '@getdashfy/utils'\nimport { ActivityIcon } from 'lucide-react'\n\nimport { Widget } from '@/components/widget/base/Widget'\nimport { WidgetBody } from '@/components/widget/base/WidgetBody'\nimport { WidgetError } from '@/components/widget/base/WidgetError'\nimport { WidgetHeader } from '@/components/widget/base/WidgetHeader'\nimport { WidgetLoader } from '@/components/widget/base/WidgetLoader'\nimport { WidgetListItem } from '@/components/widget/list/WidgetListItem'\nimport { useApiSubscription } from '@/hooks/useApiSubscription'\n\ninterface InspectorData {\n apis: string[]\n clientCount: number\n subscriptions: { id: string; clientCount: number }[]\n uptime: number\n version: string\n nodeVersion: string\n}\n\nconst DEFAULT_TITLE = 'Dashfy'\nconst DEFAULT_SUBJECT = 'Inspector'\n\nexport const Inspector = () => {\n const { data, error, loading } = useApiSubscription({\n api: 'dashfy',\n endpoint: 'inspector',\n })\n\n if (loading) {\n return (\n <Widget>\n <WidgetHeader icon={<ActivityIcon />} subject={DEFAULT_SUBJECT} title={DEFAULT_TITLE} />\n <WidgetBody>\n <WidgetLoader />\n </WidgetBody>\n </Widget>\n )\n }\n\n if (error) {\n return (\n <Widget>\n <WidgetHeader icon={<ActivityIcon />} subject={DEFAULT_SUBJECT} title={DEFAULT_TITLE} />\n <WidgetBody>\n <WidgetError error={error} />\n </WidgetBody>\n </Widget>\n )\n }\n\n const inspectorData = data as InspectorData\n\n return (\n <Widget>\n <WidgetHeader\n count={inspectorData?.clientCount}\n icon={<ActivityIcon />}\n subject={DEFAULT_SUBJECT}\n title={DEFAULT_TITLE}\n />\n <WidgetBody disablePadding>\n <WidgetListItem title=\"APIs\" value={inspectorData?.apis.join(', ')} />\n <WidgetListItem title=\"Clients\" value={inspectorData?.clientCount} />\n <WidgetListItem title=\"Uptime\" value={format(inspectorData?.uptime ?? 0, 'time')} />\n <WidgetListItem title=\"Version\" value={inspectorData?.version} />\n <WidgetListItem title=\"Node\" value={inspectorData?.nodeVersion} />\n </WidgetBody>\n </Widget>\n )\n}\n","import type { WidgetComponent, WidgetMetadata } from '@getdashfy/types'\n\nexport type Extension = Record<string, WidgetComponent>\n\nexport interface WidgetRegistryEntry {\n component: WidgetComponent\n metadata?: WidgetMetadata\n}\n\n/**\n * Global registry for managing widget components and extensions.\n *\n * Provides a centralized system for registering, retrieving, and managing widget\n * components from different extensions. Widgets are identified by namespaced keys\n * in the format \"extension:widget\" (e.g., \"json:status\", \"github:issues\").\n *\n * Supports:\n * - Individual widget registration with optional metadata\n * - Bulk extension registration with multiple widgets\n * - Widget lookup by key or extension/widget name\n * - Metadata storage for widget configuration and documentation\n *\n * @example\n * ```tsx\n * // Register a single widget\n * WidgetRegistry.register('myExtension:counter', CounterWidget, {\n * displayName: 'Counter',\n * description: 'Shows a counter value'\n * })\n *\n * // Register an extension with multiple widgets\n * WidgetRegistry.addExtension('json', {\n * status: StatusWidget,\n * data: DataWidget\n * })\n *\n * // Retrieve a widget\n * const widget = WidgetRegistry.get('json:status')\n * ```\n */\nclass WidgetRegistryClass {\n private widgets = new Map<string, WidgetRegistryEntry>()\n\n /**\n * Register a single widget component.\n *\n * @param key - Widget key in format \"extension:widget\"\n * @param component - React component\n * @param metadata - Optional widget metadata\n */\n public register(key: string, component: WidgetComponent, metadata?: WidgetMetadata): void {\n this.widgets.set(key, { component, metadata })\n }\n\n /**\n * Register an entire extension with multiple widgets.\n *\n * @param extensionId - Extension identifier (e.g. \"json\", \"github\")\n * @param widgets - Object mapping widget names to components\n */\n public addExtension(extensionId: string, widgets: Extension): void {\n Object.entries(widgets).forEach(([widgetName, component]) => {\n const key = `${extensionId}:${widgetName}`\n this.register(key, component)\n })\n }\n\n /**\n * Register multiple extensions at once.\n *\n * @param extensions - Object mapping extension IDs to widget objects\n */\n public addExtensions(extensions: Record<string, Extension>): void {\n Object.entries(extensions).forEach(([extensionId, widgets]) => {\n this.addExtension(extensionId, widgets)\n })\n }\n\n /**\n * Unregister a widget component.\n *\n * @param key - Widget key in format \"extension:widget\"\n */\n public unregister(key: string): void {\n this.widgets.delete(key)\n }\n\n /**\n * Get a widget component by key.\n *\n * @param key - Widget key in format \"extension:widget\"\n * @returns Widget component or undefined if not found\n */\n public get(key: string): WidgetComponent | undefined {\n return this.widgets.get(key)?.component\n }\n\n /**\n * Get full registry entry (component + metadata).\n *\n * @param key - Widget key in format \"extension:widget\"\n * @returns Registry entry or undefined if not found\n */\n public getEntry(key: string): WidgetRegistryEntry | undefined {\n return this.widgets.get(key)\n }\n\n /**\n * Check if a widget type is registered.\n *\n * @param key - Widget key in format \"extension:widget\"\n * @returns true if widget is registered\n */\n public has(key: string): boolean {\n return this.widgets.has(key)\n }\n\n /**\n * Check if a widget exists for extension and widget name.\n *\n * @param extension - Extension identifier\n * @param widget - Widget name\n * @returns true if widget is registered\n */\n public hasWidget(extension: string, widget: string): boolean {\n return this.has(`${extension}:${widget}`)\n }\n\n /**\n * Get widget component by extension and widget name.\n *\n * @param extension - Extension identifier\n * @param widget - Widget name\n * @returns Widget component or undefined if not found\n */\n public getComponent(extension: string, widget: string): WidgetComponent | undefined {\n return this.get(`${extension}:${widget}`)\n }\n\n /**\n * Get all registered widget keys.\n *\n * @returns Array of widget keys\n */\n public getTypes(): string[] {\n return Array.from(this.widgets.keys())\n }\n\n /**\n * Get count of registered widgets.\n *\n * @returns Number of registered widgets\n */\n public widgetsCount(): number {\n return this.widgets.size\n }\n\n /**\n * Get all registered widgets as an object.\n *\n * @returns Object mapping widget keys to entries\n */\n public list(): Record<string, WidgetRegistryEntry> {\n return Object.fromEntries(this.widgets.entries())\n }\n\n /**\n * Clear all registered widgets.\n */\n public clear(): void {\n this.widgets.clear()\n }\n}\n\n// Export singleton instance\nexport const WidgetRegistry = new WidgetRegistryClass()\n","import { isClient, isDevelopment } from '@getdashfy/utils'\nimport * as React from 'react'\n\nimport { useDashfyStore } from '@/store'\n\n/**\n * Development-only debug component that logs Dashfy state to console.\n * Provides real-time insights into configuration, WebSocket status,\n * dashboards, API subscriptions, and more.\n *\n * Usage: Add <DebugInfo /> to your component tree during development.\n */\nexport const DebugInfo = () => {\n const config = useDashfyStore((state) => state.config)\n const status = useDashfyStore((state) => state.status)\n const socket = useDashfyStore((state) => state.socket)\n const dashboards = useDashfyStore((state) => state.dashboards)\n const currentDashboard = useDashfyStore((state) => state.currentDashboard)\n const apiSubscriptions = useDashfyStore((state) => state.apiSubscriptions)\n const apiData = useDashfyStore((state) => state.apiData)\n const notifications = useDashfyStore((state) => state.notifications)\n const currentTheme = useDashfyStore((state) => state.currentTheme)\n const isPanelOpen = useDashfyStore((state) => state.isPanelOpen)\n const isPlaying = useDashfyStore((state) => state.isPlaying)\n\n React.useEffect(() => {\n // Only log in development\n if (!isDevelopment) {\n return\n }\n\n console.group('🔍 Dashfy Debug Info')\n\n // Configuration\n console.group('⚙️ Configuration')\n console.log('Config:', config)\n console.log('Theme:', currentTheme)\n console.log('Rotation Duration:', config?.rotationDuration)\n console.groupEnd()\n\n // WebSocket\n console.group('🌐 WebSocket')\n console.log('Status:', status)\n console.log('Connected:', socket?.connected ?? false)\n console.log('Socket ID:', socket?.id)\n console.groupEnd()\n\n // Dashboards\n console.group('📊 Dashboards')\n console.log('Total:', dashboards.length)\n console.log('Current Index:', currentDashboard)\n console.log('Current Dashboard:', dashboards[currentDashboard])\n console.log('Is Playing:', isPlaying)\n console.log('All Dashboards:', dashboards)\n console.groupEnd()\n\n // API Subscriptions\n console.group('🔌 API Subscriptions')\n console.log('Active Subscriptions:', apiSubscriptions.size)\n console.log('Subscriptions:', Array.from(apiSubscriptions.entries()))\n console.log('API Data Cache:', apiData)\n console.groupEnd()\n\n // UI State\n console.group('🎨 UI State')\n console.log('Panel Open:', isPanelOpen)\n console.log('Notifications:', notifications.length)\n console.log('Active Notifications:', notifications)\n console.groupEnd()\n\n console.groupEnd()\n }, [\n apiData,\n apiSubscriptions,\n config,\n currentDashboard,\n currentTheme,\n dashboards,\n isPanelOpen,\n isPlaying,\n notifications,\n socket,\n status,\n ])\n\n // Make Dashfy store available globally for console debugging\n React.useEffect(() => {\n if (isDevelopment && isClient) {\n // @ts-expect-error - Add to window for debugging\n window.__DASHFY__ = useDashfyStore.getState()\n console.log('💡 Tip: Access Dashfy store in console via window.__DASHFY__')\n }\n }, [])\n\n return null\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport const ExternalLink = ({\n children,\n className,\n href,\n rel = 'noopener noreferrer',\n target = '_blank',\n ...props\n}: React.ComponentProps<'a'>) => {\n return (\n <a\n className={cn('text-primary transition-colors hover:underline', className)}\n href={href}\n rel={rel}\n target={target}\n {...props}\n >\n {children}\n </a>\n )\n}\n","import type { VariantProps } from 'class-variance-authority'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst textVariants = cva('', {\n variants: {\n variant: {\n default: 'text-base font-normal leading-normal',\n display: 'text-2xl font-semibold leading-tight',\n small: 'text-sm font-normal leading-normal',\n strong: 'text-base font-semibold leading-normal',\n mono: 'font-mono text-sm leading-relaxed',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n})\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof textVariants> {\n as?: 'span' | 'p' | 'div' | 'label' | 'code'\n}\n\nexport const Text = ({\n children,\n className,\n variant,\n as: Component = 'span',\n ...props\n}: TextProps) => {\n return (\n <Component className={cn(textVariants({ variant }), className)} {...props}>\n {children}\n </Component>\n )\n}\n","// Default dashboard title\nexport const DEFAULT_DASHBOARD_TITLE = 'Dashboard'\n\n// Default auto-play setting for dashboard rotation\nexport const DEFAULT_AUTO_PLAY = false\n\n// Default dashboard rotation duration in milliseconds (30 seconds)\nexport const DEFAULT_ROTATION_DURATION = 30_000\n","import { WebSocketEvent } from '@getdashfy/types'\n\n// Default server configuration\nexport const DEFAULT_PORT = 5001\nexport const DEFAULT_HOST = 'localhost'\nexport const DEFAULT_SERVER_URL = `http://${DEFAULT_HOST}:${DEFAULT_PORT}`\n\n// WebSocket event names\nexport const WS_CONNECT = WebSocketEvent.CONNECT\nexport const WS_DISCONNECT = WebSocketEvent.DISCONNECT\nexport const WS_ERROR = WebSocketEvent.ERROR\nexport const WS_RECONNECT = WebSocketEvent.RECONNECT\nexport const WS_RECONNECT_ATTEMPT = WebSocketEvent.RECONNECT_ATTEMPT\nexport const WS_RECONNECT_ERROR = WebSocketEvent.RECONNECT_ERROR\nexport const WS_RECONNECT_FAILED = WebSocketEvent.RECONNECT_FAILED\n\n// Custom events\nexport const WS_CONFIGURATION = WebSocketEvent.CONFIGURATION\nexport const WS_API_SUBSCRIPTION = WebSocketEvent.API_SUBSCRIPTION\nexport const WS_API_UNSUBSCRIPTION = WebSocketEvent.API_UNSUBSCRIPTION\nexport const WS_API_DATA = WebSocketEvent.API_DATA\nexport const WS_API_ERROR = WebSocketEvent.API_ERROR\n\n// Reconnection settings\nexport const WS_RECONNECT_DELAY = 1_000\nexport const WS_RECONNECT_DELAY_MAX = 5_000\nexport const WS_RECONNECT_ATTEMPTS = 5\nexport const WS_RECONNECT_BACKOFF_MULTIPLIER = 1.5\n","import { useDashfyStore } from '@/store'\n\n/**\n * Hook for accessing and controlling dashboard state and navigation.\n *\n * Provides access to the dashboard list, current dashboard, and navigation controls\n * including next/previous navigation and play/pause functionality for automatic rotation.\n *\n * @returns Object containing:\n * - `dashboards` - Array of all available dashboards\n * - `currentDashboard` - Index of the currently active dashboard\n * - `current` - The current dashboard object (or null if none)\n * - `isPlaying` - Whether auto-rotation is active\n * - `setCurrentDashboard` - Function to set dashboard by index\n * - `nextDashboard` - Function to navigate to next dashboard\n * - `previousDashboard` - Function to navigate to previous dashboard\n * - `play` - Function to start auto-rotation\n * - `pause` - Function to stop auto-rotation\n * - `togglePlay` - Function to toggle play/pause state\n *\n * @example\n * ```tsx\n * function DashboardControls() {\n * const {\n * current,\n * currentDashboard,\n * dashboards,\n * nextDashboard,\n * previousDashboard,\n * isPlaying,\n * togglePlay\n * } = useDashboards()\n *\n * return (\n * <div>\n * <h2>{current?.title || 'No Dashboard'}</h2>\n * <p>Dashboard {currentDashboard + 1} of {dashboards.length}</p>\n * <button onClick={previousDashboard}>Previous</button>\n * <button onClick={togglePlay}>{isPlaying ? 'Pause' : 'Play'}</button>\n * <button onClick={nextDashboard}>Next</button>\n * </div>\n * )\n * }\n * ```\n */\nexport function useDashboards() {\n const dashboards = useDashfyStore((state) => state.dashboards)\n const currentDashboard = useDashfyStore((state) => state.currentDashboard)\n const isPlaying = useDashfyStore((state) => state.isPlaying)\n const setCurrentDashboard = useDashfyStore((state) => state.setCurrentDashboard)\n const nextDashboard = useDashfyStore((state) => state.nextDashboard)\n const previousDashboard = useDashfyStore((state) => state.previousDashboard)\n const play = useDashfyStore((state) => state.play)\n const pause = useDashfyStore((state) => state.pause)\n const togglePlay = useDashfyStore((state) => state.togglePlay)\n\n const current = dashboards[currentDashboard] ?? null\n\n return {\n dashboards,\n currentDashboard,\n current,\n isPlaying,\n setCurrentDashboard,\n nextDashboard,\n previousDashboard,\n play,\n pause,\n togglePlay,\n }\n}\n","import * as React from 'react'\n\nimport { DEFAULT_AUTO_PLAY, DEFAULT_ROTATION_DURATION } from '@/constants/dashboardConstants'\n\nimport { useDashboards } from './useDashboards'\n\nexport interface UseDashboardPlayerOptions {\n rotationDuration?: number\n autoPlay?: boolean\n}\n\n/**\n * Hook for managing automatic dashboard rotation and playback controls.\n *\n * Handles automatic cycling through dashboards at specified intervals when playing.\n * Supports auto-play on mount and manual play/pause controls. Only rotates when\n * multiple dashboards are available.\n *\n * @param options - Player configuration options\n * @param options.rotationDuration - Time in milliseconds between dashboard switches (default: 10000ms)\n * @param options.autoPlay - Whether to start playing automatically on mount (default: false)\n *\n * @returns Object containing:\n * - `isPlaying` - Whether the dashboard player is playing\n * - `play` - Function to start playing the dashboard player\n * - `pause` - Function to pause the dashboard player\n *\n * @example\n * ```tsx\n * function DashboardCarousel() {\n * const { isPlaying, play, pause } = useDashboardPlayer({\n * rotationDuration: 5000,\n * autoPlay: true\n * })\n *\n * return (\n * <button onClick={isPlaying ? pause : play}>\n * {isPlaying ? 'Pause' : 'Play'}\n * </button>\n * )\n * }\n * ```\n */\nexport function useDashboardPlayer({\n rotationDuration = DEFAULT_ROTATION_DURATION,\n autoPlay = DEFAULT_AUTO_PLAY,\n}: UseDashboardPlayerOptions = {}) {\n const { isPlaying, nextDashboard, play, pause, dashboards } = useDashboards()\n const intervalRef = React.useRef<ReturnType<typeof setInterval> | null>(null)\n\n // Auto-play on mount if enabled\n React.useEffect(() => {\n if (autoPlay && dashboards.length > 1) {\n play()\n }\n }, [autoPlay, dashboards.length, play])\n\n // Manage rotation interval\n React.useEffect(() => {\n if (isPlaying && dashboards.length > 1) {\n intervalRef.current = setInterval(() => {\n nextDashboard()\n }, rotationDuration)\n } else {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n intervalRef.current = null\n }\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [isPlaying, rotationDuration, nextDashboard, dashboards.length])\n\n return {\n isPlaying,\n play,\n pause,\n }\n}\n","import { useHotkeys } from 'react-hotkeys-hook'\n\nexport interface UseDashboardShortcutsOptions {\n /**\n * Callback when play/pause is triggered (Space)\n */\n onTogglePlay?: () => void\n /**\n * Callback when previous dashboard is triggered (ArrowLeft)\n */\n onPrevious?: () => void\n /**\n * Callback when next dashboard is triggered (ArrowRight)\n */\n onNext?: () => void\n /**\n * Callback when fullscreen is triggered (F)\n */\n onFullscreen?: () => void\n /**\n * Callback when settings is triggered (S or Cmd+,)\n */\n onSettings?: () => void\n /**\n * Callback when panel is toggled (Cmd+P)\n */\n onTogglePanel?: () => void\n /**\n * Whether shortcuts are enabled\n * @default true\n */\n enabled?: boolean\n}\n\n/**\n * Hook to handle dashboard keyboard shortcuts.\n *\n * Shortcuts:\n * - Space: Toggle play/pause\n * - ArrowLeft: Previous dashboard\n * - ArrowRight: Next dashboard\n * - F: Toggle fullscreen\n * - S or Cmd+, (Mac) / Ctrl+, (Windows): Open settings\n * - Cmd+P (Mac) / Ctrl+P (Windows): Toggle panel\n *\n * @example\n * ```tsx\n * useDashboardShortcuts({\n * onTogglePlay: () => togglePlay(),\n * onPrevious: () => previousDashboard(),\n * onNext: () => nextDashboard(),\n * onFullscreen: () => toggleFullscreen(),\n * onSettings: () => setOpenSettings(true),\n * onTogglePanel: () => togglePanel(),\n * })\n * ```\n */\nexport const useDashboardShortcuts = ({\n onTogglePlay,\n onPrevious,\n onNext,\n onFullscreen,\n onSettings,\n onTogglePanel,\n enabled = true,\n}: UseDashboardShortcutsOptions = {}) => {\n // Play/Pause - Space\n useHotkeys(\n 'space',\n (event) => {\n event.preventDefault()\n onTogglePlay?.()\n },\n { enabled: enabled && !!onTogglePlay },\n )\n\n // Previous dashboard - ArrowLeft\n useHotkeys(\n 'left',\n (event) => {\n event.preventDefault()\n onPrevious?.()\n },\n { enabled: enabled && !!onPrevious },\n )\n\n // Next dashboard - ArrowRight\n useHotkeys(\n 'right',\n (event) => {\n event.preventDefault()\n onNext?.()\n },\n { enabled: enabled && !!onNext },\n )\n\n // Fullscreen - F\n useHotkeys(\n 'f',\n (event) => {\n event.preventDefault()\n onFullscreen?.()\n },\n { enabled: enabled && !!onFullscreen },\n )\n\n // Settings - S or Cmd+, (Mac) / Ctrl+, (Windows)\n useHotkeys(\n 's, mod+comma',\n (event) => {\n event.preventDefault()\n onSettings?.()\n },\n { enabled: enabled && !!onSettings },\n )\n\n // Panel - Cmd+P (Mac) / Ctrl+P (Windows)\n useHotkeys(\n 'mod+p',\n (event) => {\n event.preventDefault()\n onTogglePanel?.()\n },\n { enabled: enabled && !!onTogglePanel },\n )\n}\n","import * as React from 'react'\n\nexport interface UseFullscreenOptions {\n /**\n * Target element ID for fullscreen. If not provided, uses document.documentElement\n */\n targetId?: string\n}\n\nexport interface UseFullscreenReturn {\n isFullscreen: boolean\n toggleFullscreen: () => void\n enterFullscreen: () => void\n exitFullscreen: () => void\n}\n\n/**\n * Hook to manage fullscreen state.\n *\n * @param options - Options for the fullscreen hook\n * @param options.targetId - The ID of the element to fullscreen\n *\n * @returns Object containing:\n * - `isFullscreen` - Whether the document is in fullscreen mode\n * - `toggleFullscreen` - Function to toggle fullscreen mode\n * - `enterFullscreen` - Function to enter fullscreen mode\n * - `exitFullscreen` - Function to exit fullscreen mode\n *\n * @example\n * ```tsx\n * const { isFullscreen, toggleFullscreen } = useFullscreen()\n *\n * // Fullscreen a specific element\n * const { toggleFullscreen } = useFullscreen({ targetId: 'dashboard-container' })\n * ```\n */\nexport const useFullscreen = ({ targetId }: UseFullscreenOptions = {}): UseFullscreenReturn => {\n const [isFullscreen, setIsFullscreen] = React.useState(false)\n\n const enterFullscreen = React.useCallback(() => {\n const target = targetId ? document.getElementById(targetId) : document.documentElement\n target?.requestFullscreen()\n }, [targetId])\n\n const exitFullscreen = React.useCallback(() => {\n document.exitFullscreen()\n }, [])\n\n const toggleFullscreen = React.useCallback(() => {\n if (!document.fullscreenElement) {\n enterFullscreen()\n } else {\n exitFullscreen()\n }\n }, [enterFullscreen, exitFullscreen])\n\n React.useEffect(() => {\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener('fullscreenchange', handleFullscreenChange)\n\n return () => {\n document.removeEventListener('fullscreenchange', handleFullscreenChange)\n }\n }, [])\n\n return {\n isFullscreen,\n toggleFullscreen,\n enterFullscreen,\n exitFullscreen,\n }\n}\n","import { useDashfyStore } from '@/store'\n\n/**\n * Hook for managing panel state and functionality.\n *\n * Provides access to the panel open state, height, active tab, and methods\n * for toggling, opening, closing, and setting the panel height and active tab.\n *\n * @returns Object containing:\n * - `isPanelOpen` - Whether the panel is open\n * - `panelHeight` - The current panel height\n * - `activeTab` - The current active tab\n * - `togglePanel` - Function to toggle the panel\n * - `openPanel` - Function to open the panel\n * - `closePanel` - Function to close the panel\n * - `setPanelHeight` - Function to set the panel height\n * - `setActiveTab` - Function to set the active tab\n *\n * @example\n * ```tsx\n * const { isPanelOpen, togglePanel } = usePanel()\n *\n * return (\n * <div>\n * <button onClick={togglePanel}>{isPanelOpen ? 'Close' : 'Open'}</button>\n * </div>\n * )\n * ```\n */\nexport const usePanel = () => {\n const isPanelOpen = useDashfyStore((state) => state.isPanelOpen)\n const panelHeight = useDashfyStore((state) => state.panelHeight)\n const activeTab = useDashfyStore((state) => state.activeTab)\n const togglePanel = useDashfyStore((state) => state.togglePanel)\n const openPanel = useDashfyStore((state) => state.openPanel)\n const closePanel = useDashfyStore((state) => state.closePanel)\n const setPanelHeight = useDashfyStore((state) => state.setPanelHeight)\n const setActiveTab = useDashfyStore((state) => state.setActiveTab)\n\n return {\n isPanelOpen,\n panelHeight,\n activeTab,\n togglePanel,\n openPanel,\n closePanel,\n setPanelHeight,\n setActiveTab,\n }\n}\n","import { isServer } from '@getdashfy/utils'\nimport type { Socket } from 'socket.io-client'\n\nimport {\n WS_API_DATA,\n WS_API_ERROR,\n WS_CONFIGURATION,\n WS_CONNECT,\n WS_DISCONNECT,\n WS_ERROR,\n} from '@/constants/wsConstants'\n\n/**\n * Automatically determines the WebSocket URL based on the current browser location.\n *\n * This function intelligently constructs the WebSocket URL by:\n * - Detecting the protocol (ws:// or wss://) based on the page's protocol\n * - Using the current hostname\n * - Preserving or overriding the port number\n *\n * @param config - Optional configuration object\n * @param config.useWssConnection - Force secure WebSocket (wss://) connection\n * @param config.wsPort - Override the port number for the WebSocket connection\n * @returns The constructed WebSocket URL (e.g., \"ws://localhost:3000\" or \"wss://example.com\")\n * @throws {Error} When running in a non-browser environment (e.g., SSR, Node.js)\n *\n * @example\n * ```ts\n * // Auto-detect from current page\n * const url = guessWSURL()\n *\n * // Force secure connection on a specific port\n * const url = guessWSURL({ useWssConnection: true, wsPort: 8080 })\n * ```\n */\nexport function guessWSURL(config?: { useWssConnection?: boolean; wsPort?: number }): string {\n if (isServer || !window.document?.location) {\n throw new Error(\n `Unable to guess websocket URL because 'window.document.location' is not defined`,\n )\n }\n\n let proto = 'ws'\n if (config?.useWssConnection === true || window.document.location.protocol === 'https:') {\n proto = 'wss'\n }\n\n let port = window.document.location.port\n if (config?.wsPort !== undefined) {\n port = String(config.wsPort)\n }\n\n let wsUrl = `${proto}://${window.document.location.hostname}`\n if (port && port !== '') {\n wsUrl = `${wsUrl}:${port}`\n }\n\n return wsUrl\n}\n\n/**\n * Calculates exponential backoff delay for WebSocket reconnection attempts.\n *\n * Implements an exponential backoff algorithm to prevent overwhelming the server\n * with reconnection attempts. The delay increases exponentially with each attempt\n * until it reaches the maximum delay threshold.\n *\n * Formula: min(baseDelay * (multiplier ^ attempt), maxDelay)\n *\n * @param attempt - The current reconnection attempt number (0-indexed)\n * @param baseDelay - Initial delay in milliseconds (default: 1000ms)\n * @param multiplier - Exponential growth factor (default: 1.5)\n * @param maxDelay - Maximum delay cap in milliseconds (default: 30000ms)\n * @returns The calculated delay in milliseconds for the current attempt\n *\n * @example\n * ```ts\n * // Standard usage with defaults\n * calculateBackoff(0) // Returns: 1000ms\n * calculateBackoff(1) // Returns: 1500ms\n * calculateBackoff(2) // Returns: 2250ms\n * calculateBackoff(3) // Returns: 3375ms\n *\n * // Custom configuration for faster reconnection\n * calculateBackoff(2, 500, 2, 10000) // Returns: 2000ms\n * ```\n */\nexport function calculateBackoff(\n attempt: number,\n baseDelay = 1000,\n multiplier = 1.5,\n maxDelay = 30000,\n): number {\n const delay = Math.min(baseDelay * Math.pow(multiplier, attempt), maxDelay)\n return delay\n}\n\n/**\n * Registers standard event handlers for the WebSocket connection.\n *\n * This helper function streamlines the setup of common WebSocket event listeners\n * used throughout the Dashfy framework. It handles connection lifecycle events\n * and custom application events for configuration and API data streaming.\n *\n * @param socket - The Socket.IO client instance\n * @param handlers - Object containing optional event handler callbacks\n * @param handlers.onConnect - Called when the WebSocket connection is established\n * @param handlers.onDisconnect - Called when the WebSocket connection is closed\n * @param handlers.onError - Called when a WebSocket error occurs\n * @param handlers.onConfiguration - Called when configuration data is received\n * @param handlers.onApiData - Called when API data is received for a widget\n * @param handlers.onApiError - Called when an API error occurs for a widget\n *\n * @example\n * ```ts\n * setupWebSocketHandlers(socket, {\n * onConnect: () => console.log('Connected!'),\n * onDisconnect: () => console.log('Disconnected'),\n * onApiData: ({ id, data }) => updateWidget(id, data),\n * onApiError: ({ id, error }) => handleWidgetError(id, error)\n * })\n * ```\n */\nexport function setupWebSocketHandlers(\n socket: Socket,\n handlers: {\n onConnect?: () => void\n onDisconnect?: () => void\n onError?: (error: Error) => void\n onConfiguration?: (config: unknown) => void\n onApiData?: (payload: { id: string; data: unknown }) => void\n onApiError?: (payload: { id: string; error: { message: string } }) => void\n },\n): void {\n if (handlers.onConnect) {\n socket.on(WS_CONNECT, handlers.onConnect)\n }\n\n if (handlers.onDisconnect) {\n socket.on(WS_DISCONNECT, handlers.onDisconnect)\n }\n\n if (handlers.onError) {\n socket.on(WS_ERROR, handlers.onError)\n }\n\n if (handlers.onConfiguration) {\n socket.on(WS_CONFIGURATION, handlers.onConfiguration)\n }\n\n if (handlers.onApiData) {\n socket.on(WS_API_DATA, handlers.onApiData)\n }\n\n if (handlers.onApiError) {\n socket.on(WS_API_ERROR, handlers.onApiError)\n }\n}\n\n/**\n * Removes all registered event handlers from the WebSocket connection.\n *\n * This function unregisters all standard Dashfy event listeners to prevent\n * memory leaks and duplicate event handlers. Should be called when a component\n * unmounts or before re-registering handlers.\n *\n * Events removed:\n * - connect\n * - disconnect\n * - error\n * - configuration\n * - api.data\n * - api.error\n *\n * @param socket - The Socket.IO client instance to clean up\n *\n * @example\n * ```ts\n * useEffect(() => {\n * setupWebSocketHandlers(socket, handlers)\n *\n * return () => {\n * cleanupWebSocketHandlers(socket)\n * }\n * }, [socket])\n * ```\n */\nexport function cleanupWebSocketHandlers(socket: Socket): void {\n socket.off(WS_CONNECT)\n socket.off(WS_DISCONNECT)\n socket.off(WS_ERROR)\n socket.off(WS_CONFIGURATION)\n socket.off(WS_API_DATA)\n socket.off(WS_API_ERROR)\n}\n","import { useDashfyStore } from '@/store'\n\n/**\n * Hook for managing toast notifications and alerts.\n *\n * Provides access to the notification list and methods for adding, removing, and\n * clearing notifications. Includes convenience methods for common notification types\n * (success, error, warning, info) with appropriate styling and defaults.\n *\n * @returns Object containing:\n * - `notifications` - Array of active notifications\n * - `addNotification` - Function to add a custom notification with full control\n * - `removeNotification` - Function to remove a notification by ID\n * - `clearNotifications` - Function to clear all notifications\n * - `notifySuccess` - Convenience function to show a success notification\n * - `notifyError` - Convenience function to show an error notification\n * - `notifyWarning` - Convenience function to show a warning notification\n * - `notifyInfo` - Convenience function to show an info notification\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { notifySuccess, notifyError, notifyWarning } = useNotifications()\n *\n * const handleSave = async () => {\n * try {\n * await saveData()\n * notifySuccess('Data saved successfully!')\n * } catch (error) {\n * notifyError('Failed to save data')\n * }\n * }\n *\n * return <button onClick={handleSave}>Save</button>\n * }\n * ```\n */\nexport function useNotifications() {\n const notifications = useDashfyStore((state) => state.notifications)\n const addNotification = useDashfyStore((state) => state.addNotification)\n const removeNotification = useDashfyStore((state) => state.removeNotification)\n const clearNotifications = useDashfyStore((state) => state.clearNotifications)\n const notifySuccess = useDashfyStore((state) => state.notifySuccess)\n const notifyError = useDashfyStore((state) => state.notifyError)\n const notifyWarning = useDashfyStore((state) => state.notifyWarning)\n const notifyInfo = useDashfyStore((state) => state.notifyInfo)\n\n return {\n notifications,\n addNotification,\n removeNotification,\n clearNotifications,\n notifySuccess,\n notifyError,\n notifyWarning,\n notifyInfo,\n }\n}\n","import type { DashfyConfig } from '@getdashfy/types'\nimport { WebSocketStatus } from '@getdashfy/types'\nimport * as React from 'react'\nimport type { Socket } from 'socket.io-client'\nimport { io } from 'socket.io-client'\n\nimport {\n WS_RECONNECT_ATTEMPTS,\n WS_RECONNECT_DELAY,\n WS_RECONNECT_DELAY_MAX,\n} from '@/constants/wsConstants'\nimport { cleanupWebSocketHandlers, setupWebSocketHandlers } from '@/lib/WSHelper'\nimport { useDashfyStore } from '@/store'\n\nimport { useNotifications } from './useNotifications'\n\nexport interface UseWebSocketOptions {\n url: string\n autoConnect?: boolean\n reconnect?: boolean\n}\n\n/**\n * Hook for managing WebSocket connection lifecycle with automatic reconnection.\n *\n * Establishes and maintains a Socket.IO connection to the Dashfy server, handling\n * connection state, reconnection logic, and automatic resubscription of API endpoints\n * on reconnect. Integrates with the store to sync configuration, API data, and\n * subscription states.\n *\n * @param options - WebSocket configuration options\n * @param options.url - Server URL to connect to\n * @param options.autoConnect - Whether to connect automatically on mount (default: true)\n * @param options.reconnect - Whether to automatically reconnect on disconnect (default: true)\n *\n * @returns Socket.IO client instance or null if not connected\n *\n * @example\n * ```tsx\n * function App() {\n * const socket = useWebSocket({\n * url: 'http://localhost:5001',\n * autoConnect: true,\n * reconnect: true\n * })\n *\n * if (!socket) {\n * return <div>Connecting...</div>\n * }\n *\n * return <Dashboard />\n * }\n * ```\n */\nexport function useWebSocket({\n url,\n autoConnect = true,\n reconnect = true,\n}: UseWebSocketOptions): Socket | null {\n const socketRef = React.useRef<Socket | null>(null)\n\n const setSocket = useDashfyStore((state) => state.setSocket)\n const setStatus = useDashfyStore((state) => state.setStatus)\n const setConfig = useDashfyStore((state) => state.setConfig)\n const setDashboards = useDashfyStore((state) => state.setDashboards)\n const setApiData = useDashfyStore((state) => state.setApiData)\n const setApiError = useDashfyStore((state) => state.setApiError)\n const setAllApiUnsubscribed = useDashfyStore((state) => state.setAllApiUnsubscribed)\n const getApiPendingSubscriptions = useDashfyStore((state) => state.getApiPendingSubscriptions)\n const setApiSubscribed = useDashfyStore((state) => state.setApiSubscribed)\n const { notifySuccess, notifyError } = useNotifications()\n\n React.useEffect(() => {\n if (!autoConnect) {\n return\n }\n\n // Create socket\n const socket = io(url, {\n reconnection: reconnect,\n reconnectionDelay: WS_RECONNECT_DELAY,\n reconnectionDelayMax: WS_RECONNECT_DELAY_MAX,\n reconnectionAttempts: WS_RECONNECT_ATTEMPTS,\n })\n\n socketRef.current = socket\n setSocket(socket)\n setStatus(WebSocketStatus.CONNECTING)\n\n // Setup handlers\n setupWebSocketHandlers(socket, {\n onConnect: () => {\n setStatus(WebSocketStatus.CONNECTED)\n notifySuccess('Connected to server')\n\n // Send pending subscriptions\n const pending = getApiPendingSubscriptions()\n pending.forEach((subscription) => {\n socket.emit('api.subscription', subscription)\n setApiSubscribed(subscription.id)\n })\n },\n\n onDisconnect: () => {\n setStatus(WebSocketStatus.DISCONNECTED)\n notifyError('Disconnected from server')\n setAllApiUnsubscribed()\n },\n\n onError: (error) => {\n setStatus(WebSocketStatus.ERROR)\n notifyError(`WebSocket error: ${error.message}`)\n },\n\n onConfiguration: (config: unknown) => {\n const dashfyConfig = config as DashfyConfig\n setConfig(dashfyConfig)\n setDashboards(dashfyConfig.dashboards)\n },\n\n onApiData: ({ id, data }: { id: string; data: unknown }) => {\n setApiData(id, data)\n },\n\n onApiError: ({ id, error }: { id: string; error: { message: string } }) => {\n setApiError(id, error.message)\n },\n })\n\n // Cleanup\n return () => {\n cleanupWebSocketHandlers(socket)\n socket.close()\n setSocket(null)\n setStatus(WebSocketStatus.DISCONNECTED)\n }\n }, [url, autoConnect, reconnect])\n\n return socketRef.current\n}\n","import type { ThemeMode } from '@getdashfy/themes'\nimport { isClient, isServer } from '@getdashfy/utils'\nimport * as React from 'react'\n\nimport { MODE_STORAGE_KEY } from '@/constants/storageConstants'\nimport { StorageSync } from '@/lib/StorageSync'\n\n// Initialize mode immediately (before any component renders)\nfunction getInitialMode(): ThemeMode {\n if (isServer) {\n return 'light'\n }\n\n const savedMode = StorageSync.get<ThemeMode>(MODE_STORAGE_KEY)\n\n if (savedMode) {\n return savedMode\n }\n\n try {\n const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches\n return systemPrefersDark ? 'dark' : 'light'\n } catch {\n return 'light'\n }\n}\n\n// Apply initial mode to DOM immediately\nif (isClient) {\n try {\n const initialMode = getInitialMode()\n\n if (initialMode === 'dark') {\n document.documentElement.classList.add('dark')\n } else {\n document.documentElement.classList.remove('dark')\n }\n } catch {\n // May fail in some test environments\n }\n}\n\n/**\n * Hook to manage light/dark mode state and transitions.\n * Syncs with localStorage and observes DOM changes.\n *\n * Note: This hook only manages the mode (light/dark).\n * Theme application is handled by ThemeProvider.\n *\n * @returns Object containing:\n * - `mode` - The current mode (light/dark)\n * - `toggleMode` - Function to toggle the mode\n * - `isLight` - Whether the mode is light\n * - `isDark` - Whether the mode is dark\n *\n * @example\n * ```tsx\n * const { mode, toggleMode, isLight, isDark } = useMode()\n *\n * return (\n * <div>\n * <button onClick={toggleMode}>{isLight ? 'Dark' : 'Light'}</button>\n * </div>\n * )\n * ```\n */\nexport function useMode() {\n const [mode, setMode] = React.useState<ThemeMode>(getInitialMode)\n\n const applyMode = React.useCallback((newMode: ThemeMode) => {\n const root = document.documentElement\n\n // Toggle dark class (ThemeProvider will handle applying the theme)\n if (newMode === 'dark') {\n root.classList.add('dark')\n } else {\n root.classList.remove('dark')\n }\n }, [])\n\n React.useEffect(() => {\n // Listen for dark class changes on document.documentElement\n const observer = new MutationObserver(() => {\n const isDark = document.documentElement.classList.contains('dark')\n const newMode = isDark ? 'dark' : 'light'\n setMode(newMode)\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n\n return () => observer.disconnect()\n }, [])\n\n React.useEffect(() => {\n // Listen for storage changes from other tabs/windows\n const unsubscribe = StorageSync.onChange((event) => {\n if (event.key?.endsWith(MODE_STORAGE_KEY) && event.newValue) {\n try {\n const payload = JSON.parse(event.newValue) as { value: string; expiry: number | null }\n const newMode = JSON.parse(payload.value) as ThemeMode\n setMode(newMode)\n applyMode(newMode)\n } catch {\n // Ignore invalid values\n }\n }\n })\n\n return unsubscribe\n }, [applyMode])\n\n const toggleMode = () => {\n const newMode = mode === 'light' ? 'dark' : 'light'\n setMode(newMode)\n applyMode(newMode)\n StorageSync.set(MODE_STORAGE_KEY, newMode)\n }\n\n return {\n mode,\n toggleMode,\n isLight: mode === 'light',\n isDark: mode === 'dark',\n }\n}\n","import type { Theme } from '@getdashfy/themes'\nimport { DEFAULT_THEME, getTheme, listThemes } from '@getdashfy/themes'\nimport type { ThemeId } from '@getdashfy/types'\n\n/**\n * Global registry for managing theme configurations.\n *\n * Provides a centralized system for registering, retrieving, and managing themes.\n * Themes are identified by unique IDs (e.g., \"default\", \"nord\", \"midnightBlue\").\n *\n * Supports:\n * - Individual theme registration\n * - Bulk theme registration\n * - Load all built-in themes from @getdashfy/themes\n * - Default theme configuration\n * - Theme lookup by ID\n *\n * @example\n * ```tsx\n * // Load all themes from @getdashfy/themes\n * ThemeRegistry.loadAllThemes()\n *\n * // Or register themes individually\n * ThemeRegistry.add(defaultTheme)\n * ThemeRegistry.add(nordTheme)\n *\n * // Or register multiple at once\n * ThemeRegistry.addAll([defaultTheme, nordTheme, minimalTheme])\n *\n * // Set default theme\n * ThemeRegistry.defaultTheme = 'nord'\n *\n * // Retrieve a theme\n * const theme = ThemeRegistry.get('nord')\n * ```\n */\nclass ThemeRegistryClass {\n private themes = new Map<ThemeId, Theme>()\n private _defaultTheme: ThemeId = DEFAULT_THEME\n\n /**\n * Register a single theme.\n *\n * @param theme - Theme configuration object\n */\n public add(theme: Theme): void {\n this.themes.set(theme.id, theme)\n }\n\n /**\n * Register multiple themes at once.\n *\n * @param themes - Array of theme configuration objects\n */\n public addAll(themes: Theme[]): void {\n themes.forEach((theme) => this.add(theme))\n }\n\n /**\n * Register all themes from @getdashfy/themes.\n */\n public loadAllThemes(): void {\n listThemes().forEach((id) => {\n const theme = getTheme(id)\n this.add(theme)\n })\n }\n\n /**\n * Get a theme by ID.\n *\n * @param id - Theme identifier\n * @returns Theme object or undefined if not found\n */\n public get(id: ThemeId): Theme | undefined {\n return this.themes.get(id)\n }\n\n /**\n * Check if a theme is registered.\n *\n * @param id - Theme identifier\n * @returns true if theme is registered\n */\n public has(id: ThemeId): boolean {\n return this.themes.has(id)\n }\n\n /**\n * Unregister a theme.\n *\n * @param id - Theme identifier\n */\n public remove(id: ThemeId): void {\n this.themes.delete(id)\n }\n\n /**\n * Get all registered theme IDs.\n *\n * @returns Array of theme IDs\n */\n public list(): ThemeId[] {\n return Array.from(this.themes.keys())\n }\n\n /**\n * Get all registered themes as an object.\n *\n * @returns Object mapping theme IDs to theme objects\n */\n public getAll(): Record<ThemeId, Theme> {\n return Object.fromEntries(this.themes.entries())\n }\n\n /**\n * Get count of registered themes.\n *\n * @returns Number of registered themes\n */\n public get size(): number {\n return this.themes.size\n }\n\n /**\n * Set the default theme ID.\n *\n * @param themeId - Theme identifier to set as default\n * @throws Error if theme is not registered\n */\n public set defaultTheme(themeId: ThemeId) {\n if (!this.has(themeId)) {\n const availableThemes = this.list()\n\n if (availableThemes.length === 0) {\n throw new Error(\n `Theme \"${themeId}\" is not registered. No themes have been registered yet.\\n\\n` +\n `Please register themes before setting a default:\\n\\n` +\n ` import { ThemeRegistry } from '@getdashfy/ui'\\n` +\n ` import { defaultTheme, nordTheme } from '@getdashfy/themes'\\n\\n` +\n ` ThemeRegistry.addAll([defaultTheme, nordTheme])\\n` +\n ` ThemeRegistry.defaultTheme = '${themeId}'`,\n )\n }\n\n throw new Error(\n `Theme \"${themeId}\" is not registered. Available themes: ${availableThemes.join(', ')}`,\n )\n }\n\n this._defaultTheme = themeId\n }\n\n /**\n * Get the default theme ID.\n *\n * @returns Default theme identifier\n */\n public get defaultTheme(): ThemeId {\n return this._defaultTheme\n }\n\n /**\n * Get the default theme object.\n *\n * @returns Default theme or undefined if not found\n */\n public getDefault(): Theme | undefined {\n return this.get(this._defaultTheme)\n }\n\n /**\n * Clear all registered themes.\n */\n public clear(): void {\n this.themes.clear()\n this._defaultTheme = DEFAULT_THEME\n }\n}\n\n// Export singleton instance\nexport const ThemeRegistry = new ThemeRegistryClass()\n","import { applyTheme, defaultTheme as builtInDefaultTheme } from '@getdashfy/themes'\nimport type { ThemeId } from '@getdashfy/types'\nimport * as React from 'react'\n\nimport { useMode } from '@/hooks/useMode'\nimport { ThemeRegistry } from '@/registry/ThemeRegistry'\nimport { useDashfyStore } from '@/store'\n\nexport interface ThemeProviderProps {\n children: React.ReactNode\n defaultTheme?: ThemeId\n}\n\nexport const ThemeProvider = ({ children, defaultTheme }: ThemeProviderProps) => {\n const currentTheme = useDashfyStore((state) => state.currentTheme)\n const setTheme = useDashfyStore((state) => state.setTheme)\n const setAvailableThemes = useDashfyStore((state) => state.setAvailableThemes)\n const { mode } = useMode()\n\n React.useEffect(() => {\n // If no themes registered, auto-register the built-in default theme\n if (ThemeRegistry.size === 0) {\n ThemeRegistry.add(builtInDefaultTheme)\n }\n\n // Get available themes from ThemeRegistry\n const themeIds = ThemeRegistry.list()\n setAvailableThemes(themeIds)\n\n // Get the resolved default theme (from prop, ThemeRegistry, or built-in)\n const resolvedDefaultTheme = defaultTheme ?? ThemeRegistry.defaultTheme\n\n // If no theme saved (null) or theme is not valid, set to default\n if (currentTheme === null || !ThemeRegistry.has(currentTheme)) {\n setTheme(resolvedDefaultTheme)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n React.useEffect(() => {\n // Skip if no theme set yet\n if (!currentTheme) {\n return\n }\n\n const theme = ThemeRegistry.get(currentTheme)\n\n if (theme) {\n applyTheme(theme, mode)\n }\n }, [currentTheme, mode])\n\n return <>{children}</>\n}\n","\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner } from \"sonner\"\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import { NotificationType } from '@getdashfy/types'\nimport * as React from 'react'\nimport { toast } from 'sonner'\n\nimport { Toaster } from '@/components/ui/sonner'\nimport { useDashfyStore } from '@/store'\n\nexport const Notifications = () => {\n const notifications = useDashfyStore((state) => state.notifications)\n\n React.useEffect(() => {\n if (notifications.length === 0) {\n return\n }\n\n const latestNotification = notifications[notifications.length - 1]\n\n if (!latestNotification) {\n return\n }\n\n switch (latestNotification.type) {\n case NotificationType.SUCCESS:\n toast.success(latestNotification.message)\n break\n case NotificationType.ERROR:\n toast.error(latestNotification.message, { closeButton: true })\n break\n case NotificationType.WARNING:\n toast.warning(latestNotification.message, { closeButton: true })\n break\n case NotificationType.INFO:\n toast.info(latestNotification.message)\n break\n default:\n toast(latestNotification.message)\n }\n }, [notifications])\n\n return <Toaster duration={5_000} expand={false} position=\"bottom-right\" />\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => {\n const [isTouchDevice, setIsTouchDevice] = React.useState(false)\n\n React.useEffect(() => {\n const checkTouchDevice = () => {\n const hasTouchScreen = \n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (window.matchMedia && window.matchMedia('(pointer: coarse)').matches)\n setIsTouchDevice(hasTouchScreen)\n }\n\n checkTouchDevice()\n }, [])\n\n if (isTouchDevice) {\n return null\n }\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n )\n})\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from 'react'\n\nimport { ThemeProvider } from '@/providers/ThemeProvider'\n\nimport { Notifications } from './notifications/Notifications'\nimport { TooltipProvider } from './ui/tooltip'\n\nexport interface AppProps {\n children: React.ReactNode\n defaultTheme?: string\n}\n\nexport const App = ({ children, defaultTheme }: AppProps) => {\n return (\n <ThemeProvider defaultTheme={defaultTheme}>\n <TooltipProvider>\n {children}\n <Notifications />\n </TooltipProvider>\n </ThemeProvider>\n )\n}\n","import type { Dashboard as DashboardType } from '@getdashfy/types'\nimport * as React from 'react'\n\nexport interface DashboardProps {\n children: React.ReactNode\n dashboard: DashboardType\n}\n\nexport const Dashboard = ({ children, dashboard }: DashboardProps) => {\n return (\n <>\n <style>{`\n @media (min-width: 1024px) {\n .dashboard-grid {\n grid-template-columns: repeat(${dashboard.columns}, minmax(0, 1fr)) !important;\n grid-template-rows: repeat(${dashboard.rows}, minmax(200px, 1fr)) !important;\n grid-auto-rows: unset !important;\n }\n }\n `}</style>\n <div\n className=\"dashboard-grid relative grid h-full w-full gap-2 p-2\"\n style={{\n // Mobile & Tablet: auto-fit\n // Desktop: use configured columns from media query\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 300px), 1fr))',\n gridAutoRows: 'minmax(300px, auto)',\n }}\n >\n {children}\n </div>\n </>\n )\n}\n","import * as React from 'react'\n\nconst sizeMap = {\n sm: 24,\n md: 32,\n lg: 48,\n xl: 64,\n}\n\nexport interface LogoIconProps extends React.SVGProps<SVGSVGElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl'\n}\n\nexport const LogoIcon = ({ className, size = 'md', ...props }: LogoIconProps) => {\n const dimension = sizeMap[size]\n\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n height={dimension}\n viewBox=\"0 0 900 900\"\n width={dimension}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g transform=\"translate(3942.88,-1347.89)\">\n <g transform=\"matrix(0,22.5,-22.5,0,-3042.88,1347.89)\">\n <path d=\"M30,28V12c0-1.105-0.895-2-2-2h-0.101c-0.53,0-1.039,0.211-1.414,0.586L10.586,26.485C10.211,26.86,10,27.369,10,27.899V40H0V27.899C0,24.717,1.264,21.665,3.515,19.414L19.414,3.515C21.665,1.264,24.717,0,27.899,0H28c6.627,0,12,5.373,12,12v16c0,6.627-5.373,12-12,12H14V30h14c1.105,0,2-0.895,2-2z\" />\n </g>\n </g>\n </svg>\n )\n}\n","import { SettingsIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nexport interface SettingsButtonProps {\n onSettings?: () => void\n}\n\nexport const SettingsButton = ({ onSettings }: SettingsButtonProps) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" onClick={onSettings}>\n <SettingsIcon className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Settings (S)</TooltipContent>\n </Tooltip>\n )\n}\n","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import { ChevronLeftIcon, ChevronRightIcon, PauseIcon, PlayIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\n\nexport interface DashboardPlayerProps {\n isPlaying?: boolean\n showTooltips?: boolean\n onPlay?: () => void\n onPause?: () => void\n onPrevious?: () => void\n onNext?: () => void\n}\n\nexport const DashboardPlayer = ({\n isPlaying = false,\n showTooltips = true,\n onPlay,\n onPause,\n onPrevious,\n onNext,\n}: DashboardPlayerProps) => {\n const PreviousButton = (\n <Button size=\"icon\" variant=\"ghost\" onClick={onPrevious}>\n <ChevronLeftIcon className=\"h-4 w-4\" />\n </Button>\n )\n\n const PlayPauseButton = (\n <Button\n size=\"icon\"\n variant={isPlaying ? 'secondary' : 'ghost'}\n onClick={isPlaying ? onPause : onPlay}\n >\n {isPlaying ? <PauseIcon className=\"h-4 w-4\" /> : <PlayIcon className=\"h-4 w-4\" />}\n </Button>\n )\n\n const NextButton = (\n <Button size=\"icon\" variant=\"ghost\" onClick={onNext}>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </Button>\n )\n\n if (!showTooltips) {\n return (\n <div className=\"flex items-center gap-2\">\n {PreviousButton}\n {PlayPauseButton}\n {NextButton}\n </div>\n )\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <Tooltip>\n <TooltipTrigger asChild>{PreviousButton}</TooltipTrigger>\n <TooltipContent>Previous Dashboard (Left Arrow)</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>{PlayPauseButton}</TooltipTrigger>\n <TooltipContent>\n {isPlaying ? 'Pause Rotation (Space)' : 'Start Rotation (Space)'}\n </TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>{NextButton}</TooltipTrigger>\n <TooltipContent>Next Dashboard (Right Arrow)</TooltipContent>\n </Tooltip>\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { DEFAULT_ROTATION_DURATION } from '@/constants/dashboardConstants'\n\nexport interface DashboardProgressBarProps {\n currentIndex?: number\n rotationDuration?: number\n isPlaying?: boolean\n}\n\nexport const DashboardProgressBar = ({\n currentIndex = 0,\n rotationDuration = DEFAULT_ROTATION_DURATION,\n isPlaying = false,\n}: DashboardProgressBarProps) => {\n const [progress, setProgress] = React.useState(0)\n const startTimeRef = React.useRef<number | null>(null)\n const animationFrameRef = React.useRef<number | null>(null)\n\n React.useEffect(() => {\n if (!isPlaying) {\n setProgress(0)\n startTimeRef.current = null\n\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n animationFrameRef.current = null\n }\n\n return\n }\n\n startTimeRef.current = Date.now()\n setProgress(0)\n\n const updateProgress = () => {\n if (!startTimeRef.current) {\n return\n }\n\n const elapsed = Date.now() - startTimeRef.current\n const newProgress = Math.min((elapsed / rotationDuration) * 100, 100)\n\n setProgress(newProgress)\n\n if (newProgress < 100) {\n animationFrameRef.current = requestAnimationFrame(updateProgress)\n }\n }\n\n animationFrameRef.current = requestAnimationFrame(updateProgress)\n\n return () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current)\n }\n }\n }, [isPlaying, rotationDuration, currentIndex])\n\n if (!isPlaying) {\n return null\n }\n\n return (\n <div className=\"absolute left-0 top-0 z-10 h-1 w-full overflow-hidden bg-muted/30\">\n <div\n className=\"h-full bg-primary will-change-[width]\"\n style={{\n width: `${progress}%`,\n transition: 'none',\n }}\n />\n </div>\n )\n}\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\nimport { DashboardPlayer } from './DashboardPlayer'\n\nexport interface DashboardTitleProps {\n currentIndex?: number\n dashboardCount?: number\n title: string\n isPlaying?: boolean\n onPlay?: () => void\n onPause?: () => void\n onPrevious?: () => void\n onNext?: () => void\n}\n\nexport const DashboardTitle = ({\n currentIndex,\n dashboardCount,\n title,\n isPlaying = false,\n onPlay,\n onPause,\n onPrevious,\n onNext,\n}: DashboardTitleProps) => {\n const showCounter = dashboardCount !== undefined && dashboardCount > 1\n\n return (\n <div className=\"flex items-center gap-3\">\n {/* Mobile: clickable title with popover */}\n <div className=\"md:hidden\">\n <Popover>\n <PopoverTrigger asChild>\n <button className=\"flex items-center gap-3\">\n <span className=\"max-w-[150px] truncate text-left text-xl font-bold\">{title}</span>\n {showCounter && (\n <span className=\"text-sm text-muted-foreground\">\n {(currentIndex ?? 0) + 1} / {dashboardCount}\n </span>\n )}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <div className=\"flex items-center gap-1\">\n <DashboardPlayer\n isPlaying={isPlaying}\n showTooltips={false}\n onNext={onNext}\n onPause={onPause}\n onPlay={onPlay}\n onPrevious={onPrevious}\n />\n </div>\n </PopoverContent>\n </Popover>\n </div>\n\n {/* Desktop: static title */}\n <span className=\"hidden truncate text-xl font-bold md:block\">{title}</span>\n\n {showCounter && (\n <span className=\"hidden text-sm text-muted-foreground md:block\">\n {(currentIndex ?? 0) + 1} / {dashboardCount}\n </span>\n )}\n </div>\n )\n}\n","import { MaximizeIcon, MinimizeIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\nimport { useFullscreen } from '@/hooks/useFullscreen'\n\nexport interface FullscreenButtonProps {\n targetId?: string\n}\n\nexport const FullscreenButton = ({ targetId }: FullscreenButtonProps) => {\n const { isFullscreen, toggleFullscreen } = useFullscreen({ targetId })\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button size=\"icon\" variant=\"ghost\" onClick={toggleFullscreen}>\n {isFullscreen ? (\n <MinimizeIcon className=\"h-4 w-4\" />\n ) : (\n <MaximizeIcon className=\"h-4 w-4\" />\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{isFullscreen ? 'Exit Fullscreen (F)' : 'Fullscreen (F)'}</TooltipContent>\n </Tooltip>\n )\n}\n","import { LogoIcon } from '@/components/logo/LogoIcon'\nimport { SettingsButton } from '@/components/settings/SettingsButton'\nimport { Separator } from '@/components/ui/separator'\nimport { DEFAULT_DASHBOARD_TITLE, DEFAULT_ROTATION_DURATION } from '@/constants/dashboardConstants'\n\nimport { DashboardPlayer } from './DashboardPlayer'\nimport { DashboardProgressBar } from './DashboardProgressBar'\nimport { DashboardTitle } from './DashboardTitle'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport interface DashboardHeaderProps {\n title?: string\n dashboardCount?: number\n currentIndex?: number\n isPlaying?: boolean\n rotationDuration?: number\n logo?: React.ReactNode\n onPlay?: () => void\n onPause?: () => void\n onPrevious?: () => void\n onNext?: () => void\n onSettings?: () => void\n}\n\nexport const DashboardHeader = ({\n title,\n dashboardCount = 1,\n currentIndex = 0,\n isPlaying = false,\n rotationDuration = DEFAULT_ROTATION_DURATION,\n logo,\n onPlay,\n onPause,\n onPrevious,\n onNext,\n onSettings,\n}: DashboardHeaderProps) => {\n const showControls = dashboardCount > 1\n\n return (\n <header className=\"relative flex h-14 items-center justify-between border-b border-border bg-background pl-0 pr-2\">\n <DashboardProgressBar\n currentIndex={currentIndex}\n isPlaying={isPlaying}\n rotationDuration={rotationDuration}\n />\n\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-14 w-14 shrink-0 items-center justify-center bg-primary\">\n {logo ?? <LogoIcon className=\"text-primary-foreground\" size=\"sm\" />}\n </div>\n <DashboardTitle\n currentIndex={currentIndex}\n dashboardCount={dashboardCount}\n isPlaying={isPlaying}\n title={title ?? DEFAULT_DASHBOARD_TITLE}\n onNext={onNext}\n onPause={onPause}\n onPlay={onPlay}\n onPrevious={onPrevious}\n />\n </div>\n\n <nav aria-label=\"Dashboard controls\" className=\"flex items-center gap-2\">\n {showControls && (\n <div className=\"hidden items-center md:flex\">\n <DashboardPlayer\n isPlaying={isPlaying}\n onNext={onNext}\n onPause={onPause}\n onPlay={onPlay}\n onPrevious={onPrevious}\n />\n <Separator className=\"mx-2 h-6 w-px bg-border\" orientation=\"vertical\" />\n </div>\n )}\n\n <FullscreenButton />\n\n <SettingsButton onSettings={onSettings} />\n </nav>\n </header>\n )\n}\n","import { WebSocketStatus } from '@getdashfy/types'\n\nimport {\n CheckCircle2Icon,\n CircleDashedIcon,\n CircleXIcon,\n RefreshCwIcon,\n WifiOffIcon,\n} from '@/components/common/Icons'\n\nexport interface StatusConfig {\n icon: React.ReactNode\n iconColor: string\n bgColor: string\n label: string\n description: string\n pulse?: boolean\n}\n\nexport const connectionStatusConfig: Record<WebSocketStatus, StatusConfig> = {\n [WebSocketStatus.CONNECTED]: {\n icon: <CheckCircle2Icon className=\"h-5 w-5\" />,\n iconColor: 'text-success',\n bgColor: 'bg-success',\n label: 'Connected',\n description: 'WebSocket connection is active and healthy',\n pulse: true,\n },\n [WebSocketStatus.CONNECTING]: {\n icon: <CircleDashedIcon className=\"h-5 w-5 animate-spin\" />,\n iconColor: 'text-warning',\n bgColor: 'bg-warning',\n label: 'Connecting',\n description: 'Establishing WebSocket connection...',\n pulse: true,\n },\n [WebSocketStatus.DISCONNECTED]: {\n icon: <WifiOffIcon className=\"h-5 w-5\" />,\n iconColor: 'text-muted-foreground',\n bgColor: 'bg-muted-foreground',\n label: 'Disconnected',\n description: 'WebSocket connection is closed',\n pulse: false,\n },\n [WebSocketStatus.RECONNECTING]: {\n icon: <RefreshCwIcon className=\"h-5 w-5 animate-spin\" />,\n iconColor: 'text-warning',\n bgColor: 'bg-warning',\n label: 'Reconnecting',\n description: 'Attempting to reconnect to WebSocket server...',\n pulse: true,\n },\n [WebSocketStatus.ERROR]: {\n icon: <CircleXIcon className=\"h-5 w-5\" />,\n iconColor: 'text-error',\n bgColor: 'bg-error',\n label: 'Error',\n description: 'WebSocket connection encountered an error',\n pulse: false,\n },\n}\n","import { connectionStatusConfig } from '@/config/connectionStatusConfig'\nimport { cn } from '@/lib/utils'\nimport { useDashfyStore } from '@/store'\n\nexport const ConnectionStatus = () => {\n const status = useDashfyStore((state) => state.status)\n const config = connectionStatusConfig[status]\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <div\n className={cn('inline-flex h-2 w-2 rounded-full', config.bgColor, {\n 'animate-pulse': config.pulse,\n })}\n />\n <span className=\"text-xs text-muted-foreground\">{config.label}</span>\n </div>\n )\n}\n","import { modKey } from '@getdashfy/utils'\n\nimport { PanelBottomIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'\nimport { usePanel } from '@/hooks/usePanel'\n\nimport { ConnectionStatus } from './ConnectionStatus'\n\nexport const DashboardStatusBar = () => {\n const { isPanelOpen, togglePanel } = usePanel()\n\n return (\n <>\n {/* TODO: This is a temporary solution that adds space between\n the dashboard and the status bar on mobile devices. */}\n <div className=\"block h-2 w-full bg-transparent lg:hidden\" />\n\n <div className=\"fixed bottom-0 left-0 right-0 z-40 h-9 border-t border-border bg-background px-2\">\n <div className=\"flex h-full items-center justify-between\">\n <ConnectionStatus />\n\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"h-6 w-4 [&_svg]:size-3.5\"\n variant={isPanelOpen ? 'secondary' : 'ghost'}\n onClick={togglePanel}\n >\n <PanelBottomIcon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Toggle Panel ({modKey}+P)</TooltipContent>\n </Tooltip>\n </div>\n </div>\n </>\n )\n}\n","import * as React from 'react'\nimport { Pane, SplitPane } from 'react-split-pane'\n\nimport { XIcon } from '@/components/common/Icons'\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { usePanel } from '@/hooks/usePanel'\nimport { cn, generateReactKey } from '@/lib/utils'\nimport {\n getPanelHeightForViewport,\n MAX_PANEL_HEIGHT,\n MIN_PANEL_HEIGHT,\n} from '@/store/slices/panelSlice'\n\ninterface PanelDividerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** SplitPane internal props - destructure to avoid passing to DOM */\n isDragging?: boolean\n currentSize?: number\n minSize?: number\n maxSize?: number\n}\n\nconst PanelDivider = ({\n isDragging: _isDragging,\n currentSize: _currentSize,\n minSize: _minSize,\n maxSize: _maxSize,\n ...props\n}: PanelDividerProps) => {\n return (\n <div\n {...props}\n className={cn(\n 'group flex h-1.5 cursor-ns-resize touch-none items-center justify-center border-t border-border bg-background hover:bg-primary/20 active:bg-primary/30',\n props.className,\n )}\n style={{ ...props.style, pointerEvents: 'auto', touchAction: 'none' }}\n >\n <div className=\"h-1 w-12 rounded-full bg-border transition-colors group-hover:bg-primary/50 group-active:bg-primary\" />\n </div>\n )\n}\n\nexport interface BottomPanelProps {\n children?: React.ReactNode\n tabs?: {\n id: string\n label: string\n icon?: React.ReactNode\n content: React.ReactNode\n }[]\n}\n\nexport const BottomPanel = ({ children, tabs = [] }: BottomPanelProps) => {\n const { isPanelOpen, panelHeight, activeTab, closePanel, setPanelHeight, setActiveTab } =\n usePanel()\n\n React.useEffect(() => {\n let wasLandscape = window.innerWidth > window.innerHeight\n\n const handleResize = () => {\n const isLandscape = window.innerWidth > window.innerHeight\n\n if (isLandscape !== wasLandscape) {\n wasLandscape = isLandscape\n setPanelHeight(getPanelHeightForViewport())\n }\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n }\n }, [setPanelHeight])\n\n const handleResizeEnd = React.useCallback(\n (sizes: number[]) => {\n if (sizes[1] !== undefined) {\n setPanelHeight(sizes[1])\n }\n },\n [setPanelHeight],\n )\n\n const activeTabContent =\n tabs.find((tab) => tab.id === activeTab)?.content ?? tabs[0]?.content ?? children\n\n return (\n <div\n className={cn(\n 'fixed inset-0 transition-all duration-300 ease-in-out',\n isPanelOpen ? 'translate-y-0 opacity-100' : 'translate-y-full opacity-0',\n )}\n style={{ pointerEvents: 'none' }}\n >\n <SplitPane direction=\"vertical\" divider={PanelDivider} onResizeEnd={handleResizeEnd}>\n <Pane>\n <div style={{ pointerEvents: 'none' }} />\n </Pane>\n <Pane defaultSize={panelHeight} maxSize={MAX_PANEL_HEIGHT} minSize={MIN_PANEL_HEIGHT}>\n <div className=\"flex h-full flex-col bg-background\" style={{ pointerEvents: 'auto' }}>\n <div className=\"flex h-9 items-center justify-between border-b border-border bg-muted/30 px-2\">\n <div className=\"flex items-center gap-1\">\n {tabs.map((tab) => (\n <button\n key={generateReactKey('tab', tab.id)}\n className={cn(\n 'flex items-center gap-1.5 rounded px-3 py-1 text-xs font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n >\n {tab.icon && <span className=\"flex items-center\">{tab.icon}</span>}\n {tab.label}\n </button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <button\n aria-label=\"Close panel\"\n className=\"rounded p-1 text-muted-foreground transition-colors hover:bg-background hover:text-foreground\"\n type=\"button\"\n onClick={closePanel}\n >\n <XIcon className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n\n <Scrollable className=\"min-h-0 flex-1\">{activeTabContent}</Scrollable>\n </div>\n </Pane>\n </SplitPane>\n </div>\n )\n}\n","import { WebSocketStatus } from '@getdashfy/types'\n\nimport { RefreshCwIcon } from '@/components/common/Icons'\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { Button } from '@/components/ui/button'\nimport { connectionStatusConfig } from '@/config/connectionStatusConfig'\nimport { cn } from '@/lib/utils'\nimport { useDashfyStore } from '@/store'\n\nexport const ConnectionPanel = () => {\n const status = useDashfyStore((state) => state.status)\n const config = useDashfyStore((state) => state.config)\n\n const currentStatus = connectionStatusConfig[status]\n\n return (\n <Scrollable className=\"h-full\">\n <div className=\"p-4\">\n <div className=\"space-y-6\">\n {/* Connection Status Card */}\n <div className=\"rounded-lg border border-border bg-card p-4\">\n <div className=\"flex items-start gap-4\">\n <div className={cn('shrink-0', currentStatus.iconColor)}>{currentStatus.icon}</div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"text-sm font-semibold text-foreground\">{currentStatus.label}</h3>\n <span\n className={cn('inline-flex h-2 w-2 rounded-full', currentStatus.bgColor, {\n 'animate-pulse': currentStatus.pulse,\n })}\n />\n </div>\n <p className=\"mt-1 text-xs text-muted-foreground\">{currentStatus.description}</p>\n </div>\n </div>\n </div>\n\n {/* Connection Details */}\n <div className=\"space-y-3\">\n <h4 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n Details\n </h4>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between rounded-md bg-muted/50 p-2\">\n <span className=\"text-xs text-muted-foreground\">Status</span>\n <span className=\"text-xs font-medium text-foreground\">{status}</span>\n </div>\n <div className=\"flex items-center justify-between rounded-md bg-muted/50 p-2\">\n <span className=\"text-xs text-muted-foreground\">Protocol</span>\n <span className=\"text-xs font-medium text-foreground\">WebSocket</span>\n </div>\n {config && (\n <div className=\"flex items-center justify-between rounded-md bg-muted/50 p-2\">\n <span className=\"text-xs text-muted-foreground\">Dashboards</span>\n <span className=\"text-xs font-medium text-foreground\">\n {config.dashboards.length}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Actions */}\n {status !== WebSocketStatus.CONNECTED && (\n <div className=\"space-y-3\">\n <h4 className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n Actions\n </h4>\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={() => window.location.reload()}>\n <RefreshCwIcon className=\"h-3 w-3\" />\n Reconnect\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n </Scrollable>\n )\n}\n","import { format } from 'date-fns'\nimport * as React from 'react'\n\nimport {\n AlertCircleIcon,\n AlertTriangleIcon,\n CheckCircleIcon,\n InfoIcon,\n TerminalIcon,\n TrashIcon,\n XCircleIcon,\n} from '@/components/common/Icons'\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { cn, generateReactKey } from '@/lib/utils'\n\ninterface ConsoleMessage {\n id: string\n type: 'log' | 'info' | 'warn' | 'error' | 'success'\n message: string\n timestamp: number\n count?: number\n}\n\nexport const ConsolePanel = () => {\n const [messages, setMessages] = React.useState<ConsoleMessage[]>([])\n const [filter, setFilter] = React.useState<ConsoleMessage['type'] | 'all'>('all')\n\n React.useEffect(() => {\n // Intercept console methods\n const originalConsole = {\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n }\n\n const addMessage = (type: ConsoleMessage['type'], args: unknown[]) => {\n const message = args\n .map((arg) => {\n if (typeof arg === 'object' && arg !== null) {\n try {\n return JSON.stringify(arg, null, 2)\n } catch {\n return '[Object]'\n }\n }\n\n if (arg === null) {\n return 'null'\n }\n\n if (arg === undefined) {\n return 'undefined'\n }\n\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return String(arg)\n })\n .join(' ')\n\n setMessages((prev) => {\n // Check if last message is the same\n const lastMsg = prev[prev.length - 1]\n\n if (lastMsg?.message === message && lastMsg.type === type) {\n return [\n ...prev.slice(0, -1),\n { ...lastMsg, count: (lastMsg.count ?? 1) + 1, timestamp: Date.now() },\n ]\n }\n\n return [\n ...prev,\n {\n id: `${Date.now()}-${Math.random()}`,\n type,\n message,\n timestamp: Date.now(),\n count: 1,\n },\n ].slice(-100) // Keep last 100 messages\n })\n }\n\n console.log = (...args: unknown[]) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n originalConsole.log(...(args as any[]))\n addMessage('log', args)\n }\n\n console.info = (...args: unknown[]) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n originalConsole.info(...(args as any[]))\n addMessage('info', args)\n }\n\n console.warn = (...args: unknown[]) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n originalConsole.warn(...(args as any[]))\n addMessage('warn', args)\n }\n\n console.error = (...args: unknown[]) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n originalConsole.error(...(args as any[]))\n addMessage('error', args)\n }\n\n // Add welcome message\n addMessage('info', ['Console ready'])\n\n return () => {\n console.log = originalConsole.log\n console.info = originalConsole.info\n console.warn = originalConsole.warn\n console.error = originalConsole.error\n }\n }, [])\n\n const filteredMessages =\n filter === 'all' ? messages : messages.filter((msg) => msg.type === filter)\n\n const clearConsole = () => {\n setMessages([])\n }\n\n const getMessageIcon = (type: ConsoleMessage['type']) => {\n switch (type) {\n case 'error':\n return <XCircleIcon className=\"h-4 w-4 shrink-0 text-error\" />\n case 'warn':\n return <AlertTriangleIcon className=\"h-4 w-4 shrink-0 text-warning\" />\n case 'info':\n return <InfoIcon className=\"h-4 w-4 shrink-0 text-info\" />\n case 'success':\n return <CheckCircleIcon className=\"h-4 w-4 shrink-0 text-success\" />\n default:\n return <AlertCircleIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n }\n }\n\n const getMessageColor = (type: ConsoleMessage['type']) => {\n switch (type) {\n case 'error':\n return 'border-l-error bg-error/5'\n case 'warn':\n return 'border-l-warning bg-warning/5'\n case 'info':\n return 'border-l-info bg-info/5'\n case 'success':\n return 'border-l-success bg-success/5'\n default:\n return 'border-l-border bg-muted/30'\n }\n }\n\n const formatTime = (timestamp: number) => {\n return format(new Date(timestamp), 'HH:mm:ss')\n }\n\n const counts = {\n all: messages.length,\n log: messages.filter((message) => message.type === 'log').length,\n info: messages.filter((message) => message.type === 'info').length,\n warn: messages.filter((message) => message.type === 'warn').length,\n error: messages.filter((message) => message.type === 'error').length,\n }\n\n return (\n <div className=\"flex h-full flex-col\">\n {/* Toolbar */}\n <div className=\"flex items-center justify-between border-b border-border bg-muted/30 px-4 py-2\">\n {/* Filters */}\n <div className=\"flex items-center gap-1 rounded-md border border-border bg-background p-0.5\">\n <button\n className={cn(\n 'rounded px-2 py-1 text-xs font-medium transition-colors',\n filter === 'all'\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n type=\"button\"\n onClick={() => setFilter('all')}\n >\n All ({counts.all})\n </button>\n <button\n className={cn(\n 'rounded px-2 py-1 text-xs font-medium transition-colors',\n filter === 'error'\n ? 'bg-error text-white'\n : 'text-muted-foreground hover:text-foreground',\n )}\n type=\"button\"\n onClick={() => setFilter('error')}\n >\n Errors ({counts.error})\n </button>\n <button\n className={cn(\n 'rounded px-2 py-1 text-xs font-medium transition-colors',\n filter === 'warn'\n ? 'bg-warning text-white'\n : 'text-muted-foreground hover:text-foreground',\n )}\n type=\"button\"\n onClick={() => setFilter('warn')}\n >\n Warnings ({counts.warn})\n </button>\n <button\n className={cn(\n 'rounded px-2 py-1 text-xs font-medium transition-colors',\n filter === 'info'\n ? 'bg-info text-white'\n : 'text-muted-foreground hover:text-foreground',\n )}\n type=\"button\"\n onClick={() => setFilter('info')}\n >\n Info ({counts.info})\n </button>\n </div>\n\n {/* Clear button */}\n <button\n aria-label=\"Clear console\"\n className=\"rounded p-1.5 text-muted-foreground transition-colors hover:bg-background hover:text-foreground\"\n type=\"button\"\n onClick={clearConsole}\n >\n <TrashIcon className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Messages */}\n <Scrollable className=\"flex-1 font-mono text-xs\">\n {filteredMessages.length === 0 ? (\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n <div className=\"text-center\">\n <TerminalIcon className=\"mx-auto h-8 w-8 opacity-50\" />\n <p className=\"mt-2 text-xs\">No console messages</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-px\">\n {filteredMessages.map((msg) => (\n <div\n key={generateReactKey('message', msg.id)}\n className={cn(\n 'group relative flex gap-3 border-l-2 px-4 py-2 hover:bg-muted/50',\n getMessageColor(msg.type),\n )}\n >\n {getMessageIcon(msg.type)}\n <div className=\"flex-1 overflow-hidden\">\n <div className=\"flex items-start justify-between gap-2\">\n <pre className=\"whitespace-pre-wrap break-words text-xs text-foreground\">\n {msg.message}\n </pre>\n <div className=\"flex shrink-0 items-center gap-2\">\n {msg.count && msg.count > 1 && (\n <span className=\"rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground\">\n {msg.count}\n </span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {formatTime(msg.timestamp)}\n </span>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </Scrollable>\n </div>\n )\n}\n","import { format } from '@getdashfy/utils'\nimport * as React from 'react'\n\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n InfoIcon,\n TrashIcon,\n XCircleIcon,\n} from '@/components/common/Icons'\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { Button } from '@/components/ui/button'\nimport { useNotifications } from '@/hooks/useNotifications'\nimport { cn, generateReactKey } from '@/lib/utils'\n\nexport const NotificationsPanel = () => {\n const { notifications, removeNotification, clearNotifications } = useNotifications()\n\n const sortedNotifications = React.useMemo(() => {\n return [...notifications].sort(\n (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n )\n }, [notifications])\n\n const getNotificationIcon = (type: string) => {\n switch (type) {\n case 'success':\n return <CheckCircle2Icon className=\"h-4 w-4 text-success\" />\n case 'error':\n return <XCircleIcon className=\"h-4 w-4 text-error\" />\n case 'warning':\n return <AlertCircleIcon className=\"h-4 w-4 text-warning\" />\n case 'info':\n default:\n return <InfoIcon className=\"h-4 w-4 text-info\" />\n }\n }\n\n const getNotificationStyles = (type: string) => {\n switch (type) {\n case 'success':\n return 'border-success/20 bg-success/5'\n case 'error':\n return 'border-error/20 bg-error/5'\n case 'warning':\n return 'border-warning/20 bg-warning/5'\n case 'info':\n default:\n return 'border-info/20 bg-info/5'\n }\n }\n\n return (\n <Scrollable className=\"h-full\">\n <div className=\"p-4\">\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">Notifications</h3>\n <p className=\"text-xs text-muted-foreground\">\n {notifications.length} notification{notifications.length !== 1 ? 's' : ''}\n </p>\n </div>\n {notifications.length > 0 && (\n <Button\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n size=\"sm\"\n variant=\"ghost\"\n onClick={clearNotifications}\n >\n <TrashIcon className=\"mr-1 h-3 w-3\" />\n Clear All\n </Button>\n )}\n </div>\n\n {notifications.length === 0 ? (\n <div className=\"flex h-32 items-center justify-center rounded-lg border border-dashed border-border\">\n <div className=\"text-center\">\n <InfoIcon className=\"mx-auto h-8 w-8 text-muted-foreground/50\" />\n <p className=\"mt-2 text-sm text-muted-foreground\">No notifications</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {sortedNotifications.map((notification) => (\n <div\n key={generateReactKey('notification', notification.id)}\n className={cn(\n 'group relative rounded-lg border p-3 transition-colors hover:border-border',\n getNotificationStyles(notification.type),\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"shrink-0 pt-0.5\">{getNotificationIcon(notification.type)}</div>\n <div className=\"flex-1 space-y-1\">\n <p className=\"text-sm text-foreground\">{notification.message}</p>\n <p className=\"text-xs text-muted-foreground\">\n {format(new Date(notification.createdAt), 'relative')}\n </p>\n </div>\n <button\n aria-label=\"Remove notification\"\n className=\"shrink-0 opacity-0 transition-opacity group-hover:opacity-100\"\n type=\"button\"\n onClick={() => removeNotification(notification.id)}\n >\n <XCircleIcon className=\"h-4 w-4 text-muted-foreground hover:text-foreground\" />\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </Scrollable>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as React from 'react'\n\nimport { RefreshCwIcon, TrashIcon } from '@/components/common/Icons'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog'\nimport { Button } from '@/components/ui/button'\n\nexport const DataActions = () => {\n const [showClearDataDialog, setShowClearDataDialog] = React.useState(false)\n\n const handleForceReload = () => {\n window.location.reload()\n }\n\n const handleClearData = () => {\n if ('caches' in window) {\n caches\n .keys()\n .then((names) => {\n names.forEach((name) => {\n caches.delete(name).catch(console.error)\n })\n })\n .catch(console.error)\n }\n\n handleForceReload()\n }\n\n return (\n <>\n <div className=\"space-y-3\">\n <div className=\"space-y-0.5\">\n <span className=\"text-sm font-medium\">Data & Cache</span>\n <p className=\"text-xs text-muted-foreground\">Manage application data and cache</p>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <Button\n className=\"w-full justify-start gap-2\"\n variant=\"outline\"\n onClick={handleForceReload}\n >\n <RefreshCwIcon className=\"h-4 w-4\" />\n Force Reload\n </Button>\n\n <Button\n className=\"w-full justify-start gap-2 text-destructive hover:text-destructive\"\n variant=\"outline\"\n onClick={() => setShowClearDataDialog(true)}\n >\n <TrashIcon className=\"h-4 w-4\" />\n Clear Data\n </Button>\n </div>\n </div>\n\n {showClearDataDialog && (\n <AlertDialog open={showClearDataDialog} onOpenChange={setShowClearDataDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Clear Application Data</AlertDialogTitle>\n <AlertDialogDescription>\n This will clear all cached data and reload the application. Your settings and\n preferences will be preserved, but any temporary data will be removed.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction onClick={handleClearData}>Clear Data</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )}\n </>\n )\n}\n","import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import { MoonIcon, SunIcon } from '@/components/common/Icons'\nimport { Switch } from '@/components/ui/switch'\nimport { useMode } from '@/hooks/useMode'\n\n/**\n * Toggle between light and dark theme modes\n */\nexport const ModeSelector = () => {\n const { toggleMode, isDark } = useMode()\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <span className=\"text-sm font-medium\">Appearance</span>\n <p className=\"text-xs text-muted-foreground\">Toggle between light and dark themes</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <SunIcon className=\"h-4 w-4 text-muted-foreground\" />\n <Switch checked={isDark} onCheckedChange={toggleMode} />\n <MoonIcon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n </div>\n </div>\n )\n}\n","import type { ThemeId } from '@getdashfy/types'\n\nimport { ThemeRegistry } from '@/registry/ThemeRegistry'\nimport { useDashfyStore } from '@/store'\n\n/**\n * Note: This hook only provides theme state and setters.\n * Theme application is handled by ThemeProvider.\n *\n * @returns Object containing:\n * - `currentTheme` - The current theme ID\n * - `availableThemes` - Array of available theme IDs\n * - `setTheme` - Function to set the theme\n * - `getTheme` - Function to get a theme by ID from ThemeRegistry\n *\n * @example\n * ```tsx\n * const { currentTheme, availableThemes, setTheme, getTheme } = useTheme()\n *\n * return (\n * <div>\n * <button onClick={() => setTheme('default')}>Default</button>\n * <button onClick={() => setTheme('nord')}>Nord</button>\n * </div>\n * )\n * ```\n */\nexport function useTheme() {\n const currentTheme = useDashfyStore((state) => state.currentTheme)\n const availableThemes = useDashfyStore((state) => state.availableThemes)\n const setTheme = useDashfyStore((state) => state.setTheme)\n\n return {\n currentTheme,\n availableThemes,\n setTheme,\n getTheme: (id: ThemeId) => ThemeRegistry.get(id),\n }\n}\n","import { CheckIcon } from '@/components/common/Icons'\nimport { useMode } from '@/hooks/useMode'\nimport { useTheme } from '@/hooks/useTheme'\nimport { cn, generateReactKey } from '@/lib/utils'\nimport { ThemeRegistry } from '@/registry/ThemeRegistry'\n\nexport const ThemeSelector = () => {\n const { currentTheme, availableThemes, setTheme } = useTheme()\n const { isLight } = useMode()\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-0.5\">\n <span className=\"text-sm font-medium\">Color Theme</span>\n <p className=\"text-xs text-muted-foreground\">Select your preferred color scheme</p>\n </div>\n\n <div className=\"grid gap-3\">\n {availableThemes.map((themeId) => {\n const theme = ThemeRegistry.get(themeId)\n\n if (!theme) {\n return null\n }\n\n const isSelected = currentTheme === themeId\n\n return (\n <button\n key={generateReactKey('theme', themeId)}\n className={cn(\n 'group relative flex w-full items-center gap-3 rounded-lg border-2 p-3 text-left transition-all',\n isSelected\n ? 'border-primary bg-primary/5'\n : 'border-border hover:border-primary/50 hover:bg-accent',\n )}\n type=\"button\"\n onClick={() => setTheme(themeId)}\n >\n {/* Color palette preview - Show current mode only */}\n <div className=\"flex flex-col gap-1\">\n {isLight ? (\n <>\n {/* Light mode colors */}\n <div\n className=\"h-10 w-14 rounded border border-border/50 shadow-sm\"\n style={{\n background: `linear-gradient(135deg, ${theme.light.colors.primary} 0%, ${theme.light.colors.accent} 100%)`,\n }}\n title=\"Light mode\"\n />\n <div className=\"flex items-center justify-center gap-0.5\">\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.light.colors.background }}\n title=\"Background\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.light.colors.foreground }}\n title=\"Foreground\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.light.colors.primary }}\n title=\"Primary\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.light.colors.secondary }}\n title=\"Secondary\"\n />\n </div>\n </>\n ) : (\n <>\n {/* Dark mode colors */}\n <div\n className=\"h-10 w-14 rounded border border-border/50 shadow-sm\"\n style={{\n background: `linear-gradient(135deg, ${theme.dark.colors.primary} 0%, ${theme.dark.colors.accent} 100%)`,\n }}\n title=\"Dark mode\"\n />\n <div className=\"flex items-center justify-center gap-0.5\">\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.dark.colors.background }}\n title=\"Background\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.dark.colors.foreground }}\n title=\"Foreground\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.dark.colors.primary }}\n title=\"Primary\"\n />\n <div\n className=\"h-3 w-3 rounded-sm border border-border\"\n style={{ backgroundColor: theme.dark.colors.secondary }}\n title=\"Secondary\"\n />\n </div>\n </>\n )}\n </div>\n\n {/* Theme info */}\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium\">{theme.displayName}</span>\n {isSelected && <CheckIcon className=\"h-4 w-4 text-primary\" />}\n </div>\n </div>\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","import { useDashfyStore } from '@/store'\n\n/**\n * Hook to access and manage user settings.\n *\n * @returns Object containing:\n * - `wakeLockEnabled` - Whether the wake lock is enabled\n * - `setWakeLockEnabled` - Function to set the wake lock enabled\n *\n * @example\n * ```tsx\n * const { wakeLockEnabled, setWakeLockEnabled } = useSettings()\n * ```\n */\nexport const useSettings = () => {\n const wakeLockEnabled = useDashfyStore((state) => state.wakeLockEnabled)\n const setWakeLockEnabled = useDashfyStore((state) => state.setWakeLockEnabled)\n\n return {\n wakeLockEnabled,\n setWakeLockEnabled,\n }\n}\n","import * as React from 'react'\nimport { useWakeLock } from 'react-screen-wake-lock'\n\nimport { MonitorIcon } from '@/components/common/Icons'\nimport { Switch } from '@/components/ui/switch'\nimport { useSettings } from '@/hooks/useSettings'\n\nexport const WakeLockSelector = () => {\n const { wakeLockEnabled, setWakeLockEnabled } = useSettings()\n const { isSupported, released, request, release } = useWakeLock({\n reacquireOnPageVisible: true,\n })\n\n const isActive = released === false\n\n React.useEffect(() => {\n if (!isSupported) {\n return\n }\n\n const syncWakeLock = async () => {\n if (wakeLockEnabled && released !== false) {\n await request()\n } else if (!wakeLockEnabled && released === false) {\n await release()\n }\n }\n\n syncWakeLock().catch((error) => {\n console.error('Failed to sync wake lock:', error)\n })\n }, [wakeLockEnabled, isSupported, released, request, release])\n\n const handleToggle = async (checked: boolean) => {\n setWakeLockEnabled(checked)\n\n if (checked) {\n await request()\n } else {\n await release()\n }\n }\n\n if (!isSupported) {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <span className=\"text-sm font-medium\">Keep Screen Awake</span>\n <p className=\"text-xs text-muted-foreground\">Not supported by your browser</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <MonitorIcon className=\"h-4 w-4 text-muted-foreground\" />\n <Switch checked={false} disabled />\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <span className=\"text-sm font-medium\">Keep Screen Awake</span>\n <p className=\"text-xs text-muted-foreground\">Prevent screen from dimming or locking</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <MonitorIcon className=\"h-4 w-4 text-muted-foreground\" />\n <Switch checked={isActive} onCheckedChange={handleToggle} />\n </div>\n </div>\n </div>\n )\n}\n","import { Scrollable } from '@/components/common/Scrollable'\nimport { Separator } from '@/components/ui/separator'\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@/components/ui/sheet'\n\nimport { DataActions } from './DataActions'\nimport { ModeSelector } from './ModeSelector'\nimport { ThemeSelector } from './ThemeSelector'\nimport { WakeLockSelector } from './WakeLockSelector'\n\nexport interface SettingsProps {\n open?: boolean\n onClose: () => void\n}\n\nexport const Settings = ({ open = false, onClose }: SettingsProps) => {\n return (\n <Sheet open={open} onOpenChange={onClose}>\n <SheetContent className=\"w-full p-0 sm:max-w-md\">\n <div className=\"flex h-full flex-col\">\n <div className=\"px-6 pt-6\">\n <SheetHeader>\n <SheetTitle className=\"text-left\">Settings</SheetTitle>\n <SheetDescription className=\"text-left\">\n Configure your dashboard preferences.\n </SheetDescription>\n </SheetHeader>\n </div>\n\n <Scrollable className=\"flex-1\">\n <div className=\"space-y-6 px-6 pb-6 pt-8\">\n <section>\n <ModeSelector />\n </section>\n\n <Separator />\n\n <section>\n <ThemeSelector />\n </section>\n\n <Separator />\n\n <section>\n <WakeLockSelector />\n </section>\n\n <Separator />\n\n <section>\n <DataActions />\n </section>\n </div>\n </Scrollable>\n </div>\n </SheetContent>\n </Sheet>\n )\n}\n","import * as React from 'react'\n\nconst sizeMap = {\n sm: { width: 120, height: 33 },\n md: { width: 180, height: 50 },\n lg: { width: 240, height: 67 },\n xl: { width: 320, height: 89 },\n}\n\nexport interface LogoProps extends React.SVGProps<SVGSVGElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl'\n}\n\nexport const Logo = ({ className, size = 'md', ...props }: LogoProps) => {\n const dimensions = sizeMap[size]\n\n return (\n <svg\n className={className}\n fill=\"currentColor\"\n viewBox=\"0 0 1978 551\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...dimensions}\n {...props}\n >\n <g transform=\"translate(929.29,-4676.68)\">\n <g transform=\"matrix(10.312,0,0,10.312,-10672.1,-566.83)\">\n <g transform=\"rotate(90,232.29,741.51)\">\n <path d=\"M30,17V1c0-1.105-0.895-2-2-2h-0.101c-0.53,0-1.039,0.211-1.414,0.586L10.586,15.485C10.211,15.86,10,16.369,10,16.899V29H0V16.899C0,13.717,1.264,10.665,3.515,8.414L19.414-7.485C21.665-9.736,24.717-11,27.899-11H28c6.627,0,12,5.373,12,12v16c0,6.627-5.373,12-12,12H14V19h14c1.105,0,2-0.895,2-2z\" />\n </g>\n <g transform=\"translate(981.18,496.3)\">\n <path d=\"m20.69,53.49v0Q17,53.49,14.11,51.54,11.22,49.59,9.52,46.15,7.81,42.72,7.81,38.37v0q0-4.46,1.71-7.87,1.7-3.41,4.68-5.36,2.96-1.95,6.76-1.95v0q2.09,0,3.82,0.6,1.74,0.61,3.06,1.68,1.32,1.07,2.25,2.48,0.93,1.4,1.37,3v0L29.65,30.73V23.79H38.4V53h-8.92v-7.04l1.98-0.05q-0.44,1.54-1.42,2.91-0.99,1.38-2.43,2.42-1.43,1.04-3.18,1.65-1.77,0.6-3.74,0.6zm2.42-7.42v0q2.03,0,3.52-0.94,1.48-0.93,2.3-2.66,0.83-1.74,0.83-4.1v0q0-2.37-0.83-4.1-0.82-1.73-2.3-2.69-1.49-0.97-3.52-0.97v0q-1.98,0-3.44,0.97-1.46,0.96-2.29,2.69-0.82,1.73-0.82,4.1v0q0,2.36,0.82,4.1,0.83,1.73,2.29,2.66,1.46,0.94,3.44,0.94zm31.78,7.48v0q-4.29,0-7.56-1.38-3.27-1.37-5.2-3.68v0l5.34-4.62q1.7,1.71,3.85,2.5,2.14,0.8,4.07,0.8v0q0.77,0,1.37-0.16,0.61-0.17,1.02-0.47,0.41-0.31,0.63-0.72,0.22-0.41,0.22-0.96v0q0-1.1-0.99-1.7v0q-0.49-0.28-1.65-0.67-1.15-0.38-2.97-0.87v0q-2.58-0.67-4.48-1.57-1.9-0.91-3.11-2.12v0q-1.1-1.16-1.7-2.56-0.61-1.4-0.61-3.16v0q0-2.03,0.97-3.69,0.96-1.64,2.58-2.86,1.62-1.21,3.74-1.84,2.12-0.63,4.37-0.63v0q2.42,0,4.63,0.55,2.19,0.55,4.09,1.54,1.9,0.99,3.38,2.36v0l-4.61,5.17q-1-0.93-2.23-1.67-1.24-0.75-2.56-1.19-1.32-0.43-2.42-0.43v0q-0.83,0-1.46,0.13-0.63,0.14-1.07,0.44-0.44,0.3-0.66,0.72-0.22,0.41-0.22,0.96v0q0,0.55,0.3,1.04,0.3,0.5,0.85,0.83v0q0.55,0.33,1.76,0.74,1.21,0.42,3.3,1.02v0q2.59,0.71,4.46,1.6,1.87,0.88,2.97,2.09v0q0.88,0.93,1.32,2.17,0.44,1.23,0.44,2.66v0q0,2.81-1.57,4.98-1.57,2.18-4.32,3.41-2.75,1.24-6.27,1.24zM71.18,53v0-40.7h8.63v17.43l-1.76,0.66q0.61-1.98,2.17-3.6,1.57-1.62,3.77-2.61,2.2-0.99,4.62-0.99v0q3.3,0,5.56,1.35,2.25,1.35,3.41,4.01,1.15,2.67,1.15,6.52v0V53H89.88V35.78q0-1.76-0.5-2.91-0.49-1.16-1.51-1.73-1.02-0.58-2.5-0.53v0q-1.16,0-2.15,0.36-0.99,0.36-1.7,1.05-0.72,0.68-1.13,1.57-0.41,0.88-0.41,1.92v0V53h-4.35q-1.54,0-2.64,0-1.1,0-1.81,0zm35.64,0v0-30.64q0-2.85,1.23-5.16,1.24-2.32,3.47-3.66,2.23-1.35,5.2-1.35v0q2.09,0,3.85,0.61,1.76,0.6,3.13,1.7v0l-2.53,6.44q-0.71-0.39-1.37-0.61-0.66-0.22-1.21-0.22v0q-0.99,0-1.65,0.33-0.66,0.33-0.97,1.02-0.3,0.68-0.3,1.68v0V53h-4.4q-1.48,0-2.61,0-1.13,0-1.84,0zm14.85-21.12h-19.09v-7.26h19.09zm16.28,33.77h-8.75l6.66-15.67,0.11,4.5-14.08-30.69h9.95L138,38.48q0.5,1.1,0.94,2.36,0.44,1.27,0.66,2.43v0l-1.21,0.71q0.33-0.82,0.74-2.06,0.41-1.24,0.91-2.67v0l5.39-15.46h10.01L143.01,53Z\" />\n </g>\n </g>\n </g>\n </svg>\n )\n}\n","import { Logo } from './logo/Logo'\n\nexport const SplashScreen = () => {\n return (\n <div className=\"relative flex min-h-screen items-center justify-center overflow-hidden bg-gradient-to-br from-background via-background to-primary/5\">\n <div className=\"relative z-10 flex flex-col items-center space-y-8\">\n <div className=\"flex flex-col items-center space-y-2\">\n <Logo aria-label=\"Dashfy\" className=\"animate-fade-in text-foreground\" />\n <p className=\"animate-fade-in-delay text-sm text-muted-foreground\">\n Loading your dashboards...\n </p>\n </div>\n\n <div className=\"h-1 w-64 overflow-hidden rounded-full bg-border/50\">\n <div className=\"h-full animate-loading-bar bg-gradient-to-r from-primary/50 via-primary to-primary/50\" />\n </div>\n </div>\n\n <div className=\"absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-t from-background/80 to-transparent\" />\n </div>\n )\n}\n","import { AlertTriangleIcon } from '@/components/common/Icons'\nimport { Widget } from '@/components/widget/base/Widget'\nimport { WidgetBody } from '@/components/widget/base/WidgetBody'\nimport { WidgetHeader } from '@/components/widget/base/WidgetHeader'\n\nexport interface WidgetErrorUnknown {\n extension: string\n widget: string\n}\n\nexport const WidgetErrorUnknown = ({ extension, widget }: WidgetErrorUnknown) => {\n return (\n <Widget>\n <WidgetHeader icon={<AlertTriangleIcon className=\"h-4 w-4\" />} title=\"Error\" />\n <WidgetBody>\n <div className=\"flex h-full flex-col items-center justify-center gap-4 p-4 text-center\">\n <AlertTriangleIcon className=\"h-12 w-12 text-warning\" />\n <div>\n <p className=\"mb-2 text-sm font-medium\">Unknown widget type</p>\n <p className=\"mb-1 text-xs text-muted-foreground\">\n Widget &quot;<span className=\"font-mono\">{widget}</span>&quot; for extension &quot;\n <span className=\"font-mono\">{extension}</span>&quot; not found.\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Make sure you&apos;ve installed the corresponding package (\n <span className=\"font-mono\">dashfy-ext-{extension}</span>) and registered the widget.\n </p>\n </div>\n </div>\n </WidgetBody>\n </Widget>\n )\n}\n","import type { DashfyConfig } from '@getdashfy/types'\nimport * as React from 'react'\n\nimport { BellIcon, TerminalIcon, WifiIcon } from '@/components/common/Icons'\nimport { Scrollable } from '@/components/common/Scrollable'\nimport {\n DEFAULT_AUTO_PLAY,\n DEFAULT_DASHBOARD_TITLE,\n DEFAULT_ROTATION_DURATION,\n} from '@/constants/dashboardConstants'\nimport { DEFAULT_SERVER_URL } from '@/constants/wsConstants'\nimport { useDashboardPlayer } from '@/hooks/useDashboardPlayer'\nimport { useDashboards } from '@/hooks/useDashboards'\nimport { useDashboardShortcuts } from '@/hooks/useDashboardShortcuts'\nimport { useFullscreen } from '@/hooks/useFullscreen'\nimport { usePanel } from '@/hooks/usePanel'\nimport { useWebSocket } from '@/hooks/useWebSocket'\nimport { generateReactKey } from '@/lib/utils'\nimport { WidgetRegistry } from '@/registry/WidgetRegistry'\nimport { useDashfyStore } from '@/store'\n\nimport { App } from './App'\nimport { Dashboard } from './dashboard/Dashboard'\nimport { DashboardHeader } from './dashboard/DashboardHeader'\nimport { DashboardStatusBar } from './dashboard/DashboardStatusBar'\nimport { BottomPanel } from './panel/BottomPanel'\nimport { ConnectionPanel } from './panel/ConnectionPanel'\nimport { ConsolePanel } from './panel/ConsolePanel'\nimport { NotificationsPanel } from './panel/NotificationsPanel'\nimport { Settings } from './settings/Settings'\nimport { SplashScreen } from './SplashScreen'\nimport { WidgetErrorUnknown } from './widget/errors/WidgetErrorUnknown'\n\nexport interface DashfyProps {\n children?: (dashboard: DashfyConfig['dashboards'][0]) => React.ReactNode\n config?: DashfyConfig\n logo?: React.ReactNode\n serverUrl?: string\n}\n\nexport const Dashfy = ({ children, config, logo, serverUrl = DEFAULT_SERVER_URL }: DashfyProps) => {\n const [openSettings, setOpenSettings] = React.useState(false)\n\n const setConfig = useDashfyStore((state) => state.setConfig)\n const setDashboards = useDashfyStore((state) => state.setDashboards)\n const storedConfig = useDashfyStore((state) => state.config)\n\n const {\n current,\n currentDashboard,\n dashboards,\n play,\n pause,\n previousDashboard,\n nextDashboard,\n isPlaying,\n togglePlay,\n } = useDashboards()\n\n const { toggleFullscreen } = useFullscreen()\n const { togglePanel } = usePanel()\n\n // Initialize WebSocket\n useWebSocket({ url: serverUrl, autoConnect: true })\n\n // Keyboard shortcuts\n useDashboardShortcuts({\n onTogglePlay: togglePlay,\n onPrevious: dashboards.length > 1 ? previousDashboard : undefined,\n onNext: dashboards.length > 1 ? nextDashboard : undefined,\n onFullscreen: toggleFullscreen,\n onSettings: () => setOpenSettings(!openSettings),\n onTogglePanel: togglePanel,\n })\n\n // Set initial config\n React.useEffect(() => {\n if (config) {\n setConfig(config)\n setDashboards(config.dashboards)\n }\n }, [config, setConfig, setDashboards])\n\n const activeConfig = storedConfig ?? config\n\n // Initialize dashboard player (after activeConfig is set)\n useDashboardPlayer({\n rotationDuration: activeConfig?.rotationDuration ?? DEFAULT_ROTATION_DURATION,\n autoPlay: DEFAULT_AUTO_PLAY,\n })\n\n if (!activeConfig || !current) {\n return (\n <App>\n <SplashScreen />\n </App>\n )\n }\n\n const renderWidgets = () => {\n if (children) {\n return children(current)\n }\n\n // Default widget rendering - responsive on mobile/tablet, configured on desktop\n return current.widgets.map((widgetConfig, index) => {\n const WidgetComponent = WidgetRegistry.get(`${widgetConfig.extension}:${widgetConfig.widget}`)\n\n if (!WidgetComponent) {\n return (\n <div\n key={generateReactKey('widget', index)}\n className=\"min-h-[300px] lg:min-h-0 lg:[grid-column:var(--grid-col)] lg:[grid-row:var(--grid-row)]\"\n style={{\n // @ts-expect-error - CSS custom properties for desktop positioning\n '--grid-col': `${widgetConfig.x + 1} / span ${widgetConfig.columns}`,\n '--grid-row': `${widgetConfig.y + 1} / span ${widgetConfig.rows}`,\n }}\n >\n <WidgetErrorUnknown extension={widgetConfig.extension} widget={widgetConfig.widget} />\n </div>\n )\n }\n\n return (\n <div\n key={generateReactKey('widget', index)}\n className=\"min-h-[300px] lg:min-h-0 lg:[grid-column:var(--grid-col)] lg:[grid-row:var(--grid-row)]\"\n style={{\n // @ts-expect-error - CSS custom properties for desktop positioning\n '--grid-col': `${widgetConfig.x + 1} / span ${widgetConfig.columns}`,\n '--grid-row': `${widgetConfig.y + 1} / span ${widgetConfig.rows}`,\n }}\n >\n <WidgetComponent {...widgetConfig} />\n </div>\n )\n })\n }\n\n return (\n <App defaultTheme={activeConfig.theme}>\n <div className=\"relative flex h-screen flex-col\">\n <DashboardHeader\n currentIndex={currentDashboard}\n dashboardCount={dashboards.length}\n isPlaying={isPlaying}\n logo={logo}\n rotationDuration={activeConfig?.rotationDuration}\n title={current.title ?? current.name ?? DEFAULT_DASHBOARD_TITLE}\n onNext={nextDashboard}\n onPause={pause}\n onPlay={play}\n onPrevious={previousDashboard}\n onSettings={() => setOpenSettings(true)}\n />\n\n <div className=\"flex flex-1 flex-col overflow-hidden pb-9\">\n <Scrollable className=\"flex-1\">\n <Dashboard dashboard={current}>{renderWidgets()}</Dashboard>\n </Scrollable>\n\n <DashboardStatusBar />\n\n <BottomPanel\n tabs={[\n {\n id: 'connection',\n label: 'Connection',\n icon: <WifiIcon className=\"h-3.5 w-3.5\" />,\n content: <ConnectionPanel />,\n },\n {\n id: 'console',\n label: 'Console',\n icon: <TerminalIcon className=\"h-3.5 w-3.5\" />,\n content: <ConsolePanel />,\n },\n {\n id: 'notifications',\n label: 'Notifications',\n icon: <BellIcon className=\"h-3.5 w-3.5\" />,\n content: <NotificationsPanel />,\n },\n ]}\n />\n </div>\n\n <Settings open={openSettings} onClose={() => setOpenSettings(false)} />\n </div>\n </App>\n )\n}\n","import * as React from 'react'\n\nimport { InboxIcon } from '@/components/common/Icons'\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetEmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode\n message?: string\n}\n\nexport const WidgetEmpty = ({\n className,\n icon,\n message = 'No data available',\n ...props\n}: WidgetEmptyProps) => {\n return (\n <div\n className={cn('flex h-full flex-col items-center justify-center gap-3 p-4', className)}\n {...props}\n >\n {icon ?? <InboxIcon className=\"h-8 w-8 text-muted-foreground\" />}\n <p className=\"text-center text-sm text-muted-foreground\">{message}</p>\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { Widget } from './Widget'\nimport { WidgetBody } from './WidgetBody'\nimport { WidgetEmpty } from './WidgetEmpty'\nimport { WidgetError } from './WidgetError'\nimport { WidgetHeader } from './WidgetHeader'\nimport { WidgetLoader } from './WidgetLoader'\n\nexport interface WidgetWrapperProps {\n actions?: React.ReactNode\n children: (data: unknown) => React.ReactNode\n count?: number\n data?: unknown\n emptyMessage?: string\n error?: string | Error | null\n icon?: React.ReactNode\n subject?: string\n title?: string\n disablePadding?: boolean\n loading?: boolean\n scrollable?: boolean\n}\n\nexport const WidgetWrapper = ({\n actions,\n children,\n count,\n data,\n emptyMessage = 'No data available',\n error = null,\n icon,\n subject,\n title,\n disablePadding = false,\n loading = false,\n scrollable = false,\n}: WidgetWrapperProps) => {\n const renderContent = (): React.ReactNode => {\n if (loading) {\n return <WidgetLoader />\n }\n\n if (error) {\n return <WidgetError error={error} />\n }\n\n if (!data) {\n return <WidgetEmpty message={emptyMessage} />\n }\n\n return children(data)\n }\n\n return (\n <Widget>\n {title && (\n <WidgetHeader actions={actions} count={count} icon={icon} subject={subject} title={title} />\n )}\n <WidgetBody disablePadding={disablePadding} scrollable={scrollable}>\n {renderContent()}\n </WidgetBody>\n </Widget>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import * as React from 'react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nexport interface WidgetAvatarProps {\n children?: React.ReactNode\n className?: string\n size?: number | string\n src?: string\n alt?: string\n}\n\nexport const WidgetAvatar = ({ children, className, size = 36, src, alt }: WidgetAvatarProps) => {\n const sizeValue = typeof size === 'number' ? `${size}px` : size\n const fontSize = typeof size === 'number' ? `${size / 2}px` : `calc(${size} / 2)`\n\n return (\n <Avatar\n className={className}\n style={{\n width: sizeValue,\n height: sizeValue,\n fontSize,\n }}\n >\n {src && <AvatarImage alt={alt ?? 'Avatar'} src={src} />}\n <AvatarFallback className=\"bg-muted\">{children}</AvatarFallback>\n </Avatar>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetCounterProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'left' | 'center' | 'right'\n count: number\n unit?: string\n preLabel?: React.ReactNode\n postLabel?: React.ReactNode\n}\n\nexport const WidgetCounter = ({\n align = 'center',\n className,\n count,\n unit,\n preLabel,\n postLabel,\n ...props\n}: WidgetCounterProps) => {\n const alignmentClass = {\n left: 'items-start text-left',\n center: 'items-center text-center',\n right: 'items-end text-right',\n }[align]\n\n return (\n <div\n className={cn('flex h-full w-full flex-col overflow-hidden p-4', alignmentClass, className)}\n {...props}\n >\n {preLabel && <div className=\"mb-4 text-sm text-muted-foreground\">{preLabel}</div>}\n\n <div className=\"flex flex-1 items-center justify-center\">\n <div className=\"whitespace-pre\">\n <span className=\"text-5xl font-bold text-foreground\">{count.toLocaleString()}</span>\n {unit && (\n <span className=\"ml-2 text-3xl font-semibold text-muted-foreground\">{unit}</span>\n )}\n </div>\n </div>\n\n {postLabel && <div className=\"mt-4 text-sm text-muted-foreground\">{postLabel}</div>}\n </div>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nexport interface WidgetLabelProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'label' | 'prefix' | 'suffix'> {\n label: React.ReactNode\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\nexport const WidgetLabel = ({ className, label, prefix, suffix, ...props }: WidgetLabelProps) => {\n return (\n <span\n className={cn(\n 'inline-flex items-stretch overflow-hidden rounded bg-muted text-sm text-muted-foreground',\n className,\n )}\n {...props}\n >\n {prefix && (\n <span className=\"inline-flex items-center border-r border-border bg-muted/50 px-2 py-1\">\n {prefix}\n </span>\n )}\n <span className=\"inline-flex flex-grow items-center px-3 py-1 font-medium\">{label}</span>\n {suffix && (\n <span className=\"inline-flex items-center border-l border-border bg-muted/50 px-2 py-1\">\n {suffix}\n </span>\n )}\n </span>\n )\n}\n","import { getErrorMessage } from '@getdashfy/utils'\nimport * as React from 'react'\nimport type { FallbackProps } from 'react-error-boundary'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { CircleXIcon } from '@/components/common/Icons'\nimport { Button } from '@/components/ui/button'\n\nexport interface ErrorBoundaryProps {\n children: React.ReactNode\n /**\n * Custom fallback UI to render when error occurs.\n * If not provided, uses the default Dashfy error UI.\n */\n fallback?: React.ReactNode\n /**\n * Keys that when changed will reset the error boundary\n */\n resetKeys?: unknown[]\n /**\n * Callback when an error is caught (useful for logging/analytics)\n */\n onError?: (error: Error, info: React.ErrorInfo) => void\n /**\n * Called when error boundary resets (e.g., after retry)\n */\n onReset?: () => void\n}\n\n/**\n * Default fallback component with Dashfy styling\n */\nconst DefaultFallback = ({ error, resetErrorBoundary }: FallbackProps) => {\n const errorMessage = getErrorMessage(error)\n\n return (\n <div className=\"flex h-full flex-col items-center justify-center gap-3 p-4\">\n <CircleXIcon className=\"h-8 w-8 shrink-0 text-error\" />\n <div className=\"text-center\">\n <p className=\"mb-1 text-sm font-semibold text-error\">\n An error occurred while loading data\n </p>\n {errorMessage && <p className=\"font-mono text-xs text-muted-foreground\">{errorMessage}</p>}\n </div>\n <Button className=\"shrink-0\" size=\"sm\" variant=\"secondary\" onClick={resetErrorBoundary}>\n Try again\n </Button>\n </div>\n )\n}\n\n/**\n * Error boundary for catching and displaying errors in widgets.\n * Wraps react-error-boundary with Dashfy-specific defaults.\n *\n * @example\n * // Basic usage\n * <WidgetErrorBoundary>\n * <MyWidget />\n * </WidgetErrorBoundary>\n *\n * @example\n * // With custom fallback\n * <WidgetErrorBoundary fallback={<div>Custom error</div>}>\n * <MyWidget />\n * </WidgetErrorBoundary>\n *\n * @example\n * // With error logging\n * <WidgetErrorBoundary onError={(error) => logToSentry(error)}>\n * <MyWidget />\n * </WidgetErrorBoundary>\n */\nexport const WidgetErrorBoundary = ({\n children,\n fallback,\n onError,\n onReset,\n resetKeys,\n}: ErrorBoundaryProps) => {\n const handleError = (error: Error, info: React.ErrorInfo) => {\n console.error('Error caught by WidgetErrorBoundary:', error, info)\n onError?.(error, info)\n }\n\n return (\n <ErrorBoundary\n FallbackComponent={fallback ? () => <>{fallback}</> : DefaultFallback}\n resetKeys={resetKeys}\n onError={handleError}\n onReset={onReset}\n >\n {children}\n </ErrorBoundary>\n )\n}\n","import type { VariantProps } from 'class-variance-authority'\nimport { cva } from 'class-variance-authority'\n\nimport {\n AlertCircleIcon,\n AlertTriangleIcon,\n CheckCircle2Icon,\n HelpCircleIcon,\n} from '@/components/common/Icons'\nimport { cn } from '@/lib/utils'\n\nconst statusVariants = cva(\n 'inline-flex flex-col items-center justify-center gap-2 rounded-lg p-6',\n {\n variants: {\n status: {\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n error: 'bg-error/10 text-error',\n unknown: 'bg-muted text-muted-foreground',\n },\n size: {\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n status: 'unknown',\n size: 'md',\n },\n },\n)\n\nconst iconMap = {\n success: CheckCircle2Icon,\n warning: AlertTriangleIcon,\n error: AlertCircleIcon,\n unknown: HelpCircleIcon,\n}\n\nexport interface WidgetStatusBadgeProps extends VariantProps<typeof statusVariants> {\n className?: string\n label?: string\n}\n\nexport const WidgetStatusBadge = ({ className, status, size, label }: WidgetStatusBadgeProps) => {\n const Icon = iconMap[status ?? 'unknown']\n\n return (\n <div className={cn(statusVariants({ status, size }), className)}>\n <Icon\n className={cn('h-12 w-12', {\n 'h-8 w-8': size === 'sm',\n 'h-16 w-16': size === 'lg',\n })}\n />\n {label && <span className=\"text-center text-sm font-medium\">{label}</span>}\n </div>\n )\n}\n","import type { VariantProps } from 'class-variance-authority'\nimport { cva } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst chipVariants = cva(\n 'inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium',\n {\n variants: {\n status: {\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n error: 'bg-error/10 text-error',\n info: 'bg-info/10 text-info',\n unknown: 'bg-muted text-muted-foreground',\n },\n },\n defaultVariants: {\n status: 'unknown',\n },\n },\n)\n\nexport interface WidgetStatusChipProps extends VariantProps<typeof chipVariants> {\n className?: string\n label: string\n pulse?: boolean\n showDot?: boolean\n}\n\nexport const WidgetStatusChip = ({\n className,\n status,\n label,\n pulse = false,\n showDot = true,\n}: WidgetStatusChipProps) => {\n return (\n <span className={cn(chipVariants({ status }), className)}>\n {showDot && (\n <span className={cn('h-1.5 w-1.5 rounded-full bg-current', { 'animate-pulse': pulse })} />\n )}\n {label}\n </span>\n )\n}\n","import * as React from 'react'\n\nimport { Scrollable } from '@/components/common/Scrollable'\nimport { cn } from '@/lib/utils'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface WidgetTableProps extends React.HTMLAttributes<HTMLTableElement> {}\n\nexport const WidgetTable = ({ children, className, ...props }: WidgetTableProps) => {\n return (\n <Scrollable\n className=\"w-full\"\n options={{\n overflow: {\n x: 'scroll',\n y: 'hidden',\n },\n }}\n {...props}\n >\n <table className={cn('w-full border-collapse text-sm', className)}>{children}</table>\n </Scrollable>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface WidgetTableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nexport const WidgetTableCell = ({\n align = 'left',\n children,\n className,\n ...props\n}: WidgetTableCellProps) => {\n return (\n <td\n align={align}\n className={cn(\n 'border-b border-border px-4 py-3',\n {\n 'text-left': align === 'left',\n 'text-center': align === 'center',\n 'text-right': align === 'right',\n },\n className,\n )}\n {...props}\n >\n {children}\n </td>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface WidgetTableHeadCellProps extends React.ThHTMLAttributes<HTMLTableCellElement> {}\n\nexport const WidgetTableHeadCell = ({\n align = 'left',\n children,\n className,\n ...props\n}: WidgetTableHeadCellProps) => {\n return (\n <th\n align={align}\n className={cn(\n 'border-b-2 border-border bg-muted/30 px-4 py-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground',\n {\n 'text-left': align === 'left',\n 'text-center': align === 'center',\n 'text-right': align === 'right',\n },\n className,\n )}\n {...props}\n >\n {children}\n </th>\n )\n}\n","import { WidgetRegistry } from '@/registry/WidgetRegistry'\n\n/**\n * Hook for retrieving widget components from the global widget registry.\n *\n * Looks up a widget component by extension and widget name, returning the component,\n * its metadata (if available), and whether it exists in the registry. Useful for\n * dynamic widget rendering and validation.\n *\n * @param extension - Extension identifier (e.g., \"json\", \"github\")\n * @param widget - Widget name within the extension (e.g., \"status\", \"data\")\n *\n * @returns Object containing:\n * - `component` - The widget React component or undefined if not found\n * - `metadata` - Widget metadata (displayName, description, etc.) or undefined\n * - `exists` - Boolean indicating if the widget is registered\n *\n * @example\n * ```tsx\n * function WidgetRenderer({ extension, widget }) {\n * const { component: Widget, metadata, exists } = useWidget(extension, widget)\n *\n * if (!exists) {\n * return <div>Widget not found: {extension}:{widget}</div>\n * }\n *\n * return (\n * <div>\n * <h3>{metadata?.displayName || widget}</h3>\n * <Widget />\n * </div>\n * )\n * }\n * ```\n */\nexport function useWidget(extension: string, widget: string) {\n const key = `${extension}:${widget}`\n const component = WidgetRegistry.get(key)\n const entry = WidgetRegistry.getEntry(key)\n const exists = WidgetRegistry.has(key)\n\n return {\n component,\n metadata: entry?.metadata,\n exists,\n }\n}\n","import * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n","import * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nconst AspectRatio = AspectRatioPrimitive.Root\n\nexport { AspectRatio }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\"> & {\n separator?: React.ReactNode\n }\n>(({ ...props }, ref) => <nav ref={ref} aria-label=\"breadcrumb\" {...props} />)\nBreadcrumb.displayName = \"Breadcrumb\"\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(({ className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5\",\n className\n )}\n {...props}\n />\n))\nBreadcrumbList.displayName = \"BreadcrumbList\"\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(({ className, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n))\nBreadcrumbItem.displayName = \"BreadcrumbItem\"\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean\n }\n>(({ asChild, className, ...props }, ref) => {\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n ref={ref}\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n )\n})\nBreadcrumbLink.displayName = \"BreadcrumbLink\"\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n))\nBreadcrumbPage.displayName = \"BreadcrumbPage\"\n\nconst BreadcrumbSeparator = ({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) => (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:w-3.5 [&>svg]:h-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n)\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\"\n\nconst BreadcrumbEllipsis = ({\n className,\n ...props\n}: React.ComponentProps<\"span\">) => (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n)\nBreadcrumbEllipsis.displayName = \"BreadcrumbElipssis\"\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, buttonVariants } from \"@/components/ui/button\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"relative flex flex-col gap-4 md:flex-row\",\n defaultClassNames.months\n ),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"h-[--cell-size] w-[--cell-size] select-none p-0 aria-disabled:opacity-50\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex h-[--cell-size] w-full items-center justify-center px-[--cell-size]\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"flex h-[--cell-size] w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"bg-popover absolute inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal\",\n defaultClassNames.weekday\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\n \"w-[--cell-size] select-none\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-muted-foreground select-none text-[0.8rem]\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"bg-accent rounded-l-md\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"bg-accent rounded-r-md\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-[--cell-size] items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 flex aspect-square h-auto w-full min-w-[--cell-size] flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nconst Carousel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(\n (\n {\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return\n }\n\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return\n }\n\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) {\n return\n }\n\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n }\n)\nCarousel.displayName = \"Carousel\"\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n})\nCarouselContent.displayName = \"CarouselContent\"\n\nconst CarouselItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { orientation } = useCarousel()\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n})\nCarouselItem.displayName = \"CarouselItem\"\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n})\nCarouselPrevious.displayName = \"CarouselPrevious\"\n\nconst CarouselNext = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n})\nCarouselNext.displayName = \"CarouselNext\"\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n","import * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\n\nimport { cn } from \"@/lib/utils\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n}\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId()\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n})\nChartContainer.displayName = \"Chart\"\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n }\n>(\n (\n {\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref\n ) => {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n ref={ref}\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color || item.payload.fill || item.color\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between gap-2 leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n)\nChartTooltipContent.displayName = \"ChartTooltip\"\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> &\n Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n hideIcon?: boolean\n nameKey?: string\n }\n>(\n (\n { className, hideIcon = false, payload, verticalAlign = \"bottom\", nameKey },\n ref\n ) => {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item) => {\n const key = `${nameKey || item.dataKey || \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={item.value}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n }\n)\nChartLegendContent.displayName = \"ChartLegend\"\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"grid place-content-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type DialogProps } from \"@radix-ui/react-dialog\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { Search } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Dialog, DialogContent } from \"@/components/ui/dialog\"\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 h-px bg-border\", className)}\n {...props}\n />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","import * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </ContextMenuPrimitive.SubTrigger>\n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-context-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"z-50 max-h-[--radix-context-menu-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-context-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n))\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n))\nContextMenuCheckboxItem.displayName =\n ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"h-4 w-4 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold text-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef<typeof ContextMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","import * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root\n shouldScaleBackground={shouldScaleBackground}\n {...props}\n />\n)\nDrawer.displayName = \"Drawer\"\n\nconst DrawerTrigger = DrawerPrimitive.Trigger\n\nconst DrawerPortal = DrawerPrimitive.Portal\n\nconst DrawerClose = DrawerPrimitive.Close\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn(\"fixed inset-0 z-50 bg-black/80\", className)}\n {...props}\n />\n))\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n))\nDrawerContent.displayName = \"DrawerContent\"\n\nconst DrawerHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"grid gap-1.5 p-4 text-center sm:text-left\", className)}\n {...props}\n />\n)\nDrawerHeader.displayName = \"DrawerHeader\"\n\nconst DrawerFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n)\nDrawerFooter.displayName = \"DrawerFooter\"\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n FormProvider,\n useFormContext,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n if (!itemContext) {\n throw new Error(\"useFormField should be used within <FormItem>\")\n }\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n className={cn(error && \"text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-[0.8rem] text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message ?? \"\") : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-[0.8rem] font-medium text-destructive\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import { useState, useCallback, useRef } from \"react\"\nimport {\n format,\n addDays,\n startOfWeek as startOfWeekFns,\n endOfWeek,\n eachWeekOfInterval,\n getMonth,\n getDate,\n parse,\n startOfDay,\n endOfDay,\n} from \"date-fns\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface ContributionDay {\n date: string\n count: number\n level: 0 | 1 | 2 | 3 | 4\n}\n\nexport interface GitmapColors {\n empty: string\n level1: string\n level2: string\n level3: string\n level4: string\n}\n\ntype WeekColumn = { days: (ContributionDay | null)[]; weekStart: Date }\ntype MonthLabel = { month: string; xOffset: number }\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\nconst DAY_LABELS = [\n { label: \"Mon\", row: 1 },\n { label: \"Wed\", row: 3 },\n { label: \"Fri\", row: 5 },\n]\nconst DAY_LABEL_WIDTH = 28\nconst MONTH_LABEL_HEIGHT = 15\n\nfunction generateWeeks(from: Date, to: Date, contributions: ContributionDay[]): WeekColumn[] {\n const map = new Map(contributions.map((c) => [c.date, c]))\n const rangeStart = startOfDay(from)\n const rangeEnd = endOfDay(to)\n const gridStart = startOfWeekFns(rangeStart, { weekStartsOn: 0 })\n const gridEnd = endOfWeek(rangeEnd, { weekStartsOn: 0 })\n\n return eachWeekOfInterval({ start: gridStart, end: gridEnd }, { weekStartsOn: 0 }).map((weekStart) => ({\n weekStart,\n days: Array.from({ length: 7 }, (_, d) => {\n const day = addDays(weekStart, d)\n const key = format(day, \"yyyy-MM-dd\")\n return day >= rangeStart && day <= rangeEnd ? (map.get(key) ?? { date: key, count: 0, level: 0 }) : null\n }),\n }))\n}\n\nfunction getMonthLabels(weeks: WeekColumn[], cellSize: number, cellGap: number): MonthLabel[] {\n const labels: MonthLabel[] = []\n const cellTotal = cellSize + cellGap\n\n weeks.forEach((week, i) => {\n const firstOfMonth = week.days.find((d) => d && getDate(parse(d.date, \"yyyy-MM-dd\", new Date())) === 1)\n if (firstOfMonth) {\n const date = parse(firstOfMonth.date, \"yyyy-MM-dd\", new Date())\n const xOffset = i * cellTotal\n const lastLabel = labels[labels.length - 1]\n if (!labels.length || (lastLabel && xOffset - lastLabel.xOffset >= 28)) {\n const monthName = MONTHS[getMonth(date)]\n if (monthName) {\n labels.push({ month: monthName, xOffset })\n }\n }\n }\n })\n return labels\n}\n\nconst LEVEL_COLORS: Record<0 | 1 | 2 | 3 | 4, keyof GitmapColors> = {\n 0: \"empty\",\n 1: \"level1\",\n 2: \"level2\",\n 3: \"level3\",\n 4: \"level4\",\n}\n\ninterface GitmapProps {\n contributions: ContributionDay[]\n from: Date\n to: Date\n colors: GitmapColors\n cellSize?: number\n cellGap?: number\n showMonths?: boolean\n showDays?: boolean\n showCounts?: boolean\n className?: string\n}\n\nexport function Gitmap({\n contributions,\n from,\n to,\n colors,\n cellSize = 10,\n cellGap = 3,\n showMonths = true,\n showDays = true,\n showCounts = false,\n className,\n}: GitmapProps) {\n const cellTotal = cellSize + cellGap\n const weeks = generateWeeks(from, to, contributions)\n const monthLabels = getMonthLabels(weeks, cellSize, cellGap)\n\n const gridHeight = 7 * cellSize + 6 * cellGap\n const gridWidth = weeks.length * cellSize + (weeks.length - 1) * cellGap\n\n const tooltipRef = useRef<HTMLDivElement>(null)\n const gridRef = useRef<HTMLDivElement>(null)\n const [tooltipData, setTooltipData] = useState<{ date: string; count: number } | null>(null)\n const lastCellData = useRef<{ date: string; count: number } | null>(null)\n\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n const date = target.dataset.date\n const count = target.dataset.count\n\n if (tooltipRef.current) {\n tooltipRef.current.style.left = `${e.clientX}px`\n tooltipRef.current.style.top = `${e.clientY}px`\n\n // Update data only when hovering a cell\n if (date && count !== undefined) {\n const newData = { date, count: parseInt(count, 10) }\n lastCellData.current = newData\n setTooltipData(newData)\n }\n\n // Check if mouse is within the grid bounds\n if (gridRef.current) {\n const rect = gridRef.current.getBoundingClientRect()\n const isInGrid =\n e.clientX >= rect.left &&\n e.clientX <= rect.right &&\n e.clientY >= rect.top &&\n e.clientY <= rect.bottom\n\n // Show tooltip if we're in the grid and have data\n if (isInGrid && lastCellData.current) {\n tooltipRef.current.style.opacity = \"1\"\n } else if (!isInGrid) {\n tooltipRef.current.style.opacity = \"0\"\n }\n }\n }\n }, [])\n\n const handleMouseLeave = useCallback(() => {\n if (tooltipRef.current) {\n tooltipRef.current.style.opacity = \"0\"\n }\n lastCellData.current = null\n }, [])\n\n return (\n <div\n className={cn(\"relative\", className)}\n style={{\n paddingLeft: showDays ? DAY_LABEL_WIDTH : 0,\n paddingTop: showMonths ? MONTH_LABEL_HEIGHT : 0,\n }}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {showMonths && (\n <div className=\"absolute -top-1\" style={{ left: showDays ? DAY_LABEL_WIDTH : 0 }}>\n {monthLabels.map(({ month, xOffset }, i) => (\n <span\n key={`${month}-${i}`}\n className=\"absolute text-[11px] text-muted-foreground leading-none\"\n style={{ left: xOffset }}\n >\n {month}\n </span>\n ))}\n </div>\n )}\n\n {showDays && (\n <div className=\"absolute left-0\" style={{ top: showMonths ? MONTH_LABEL_HEIGHT : 0, width: DAY_LABEL_WIDTH }}>\n {DAY_LABELS.map(({ label, row }) => (\n <span\n key={label}\n className=\"absolute text-[11px] text-muted-foreground leading-none right-2\"\n style={{ top: row * cellTotal + cellSize / 2, transform: \"translateY(-50%)\" }}\n >\n {label}\n </span>\n ))}\n </div>\n )}\n\n <div\n ref={gridRef}\n className=\"grid\"\n style={{\n gridTemplateRows: `repeat(7, ${cellSize}px)`,\n gridTemplateColumns: `repeat(${weeks.length}, ${cellSize}px)`,\n gap: cellGap,\n width: gridWidth,\n height: gridHeight,\n }}\n >\n {weeks.map((week, col) =>\n week.days.map((day, row) =>\n day === null ? (\n <div key={`${col}-${row}`} style={{ gridRow: row + 1, gridColumn: col + 1 }} />\n ) : (\n <div\n key={`${col}-${row}`}\n className={cn(\"rounded-[2px]\", showCounts && \"flex items-center justify-center\")}\n style={{\n gridRow: row + 1,\n gridColumn: col + 1,\n backgroundColor: colors[LEVEL_COLORS[day.level as 0 | 1 | 2 | 3 | 4]],\n width: cellSize,\n height: cellSize,\n }}\n data-date={day.date}\n data-count={day.count}\n >\n {showCounts && day.count > 0 && (\n <span\n className={cn(\n \"font-mono leading-none pointer-events-none\",\n day.level <= 1 && \"text-foreground/80\",\n (day.level === 2 || day.level === 3) && \"text-muted dark:text-foreground/80\",\n day.level === 4 && \"text-background\"\n )}\n style={{ fontSize: `${Math.max(8 - String(day.count).length, 4)}px` }}\n >\n {day.count}\n </span>\n )}\n </div>\n )\n )\n )}\n </div>\n\n <div\n ref={tooltipRef}\n className=\"pointer-events-none fixed z-50 opacity-0\"\n style={{\n transform: \"translate(-50%, -100%) translateY(-8px)\",\n }}\n >\n <div className=\"relative rounded-sm bg-foreground px-2 py-1 text-[10px] text-background whitespace-nowrap\">\n {tooltipData && (\n <>\n <span className=\"font-medium\">{tooltipData.count} contribution{tooltipData.count !== 1 ? \"s\" : \"\"}</span>\n <span className=\"\"> on {format(parse(tooltipData.date, \"yyyy-MM-dd\", new Date()), \"MMM d, yyyy\")}</span>\n </>\n )}\n <div\n className=\"absolute left-1/2 -translate-x-1/2 size-2 rotate-45 rounded-[1px] bg-foreground\"\n style={{ bottom: -3.5 }}\n />\n </div>\n </div>\n </div>\n )\n}\n","import * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","import * as React from 'react'\nimport { OTPInput, OTPInputContext } from 'input-otp'\nimport { Minus } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst InputOTP = React.forwardRef<\n React.ElementRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\n 'flex items-center gap-2 has-[:disabled]:opacity-50',\n containerClassName,\n )}\n className={cn('disabled:cursor-not-allowed', className)}\n {...props}\n />\n))\nInputOTP.displayName = 'InputOTP'\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center', className)} {...props} />\n))\nInputOTPGroup.displayName = 'InputOTPGroup'\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'> & { index: number }\n>(({ index, className, ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext)\n // @ts-ignore\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md',\n isActive && 'z-10 ring-1 ring-ring',\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink h-4 w-px bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n )\n})\nInputOTPSlot.displayName = 'InputOTPSlot'\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'>\n>(({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus />\n </div>\n))\nInputOTPSeparator.displayName = 'InputOTPSeparator'\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return <MenubarPrimitive.RadioGroup {...props} />\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nconst Menubar = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn(\n \"flex h-9 items-center space-x-1 rounded-md border bg-background p-1 shadow-sm\",\n className\n )}\n {...props}\n />\n))\nMenubar.displayName = MenubarPrimitive.Root.displayName\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n className\n )}\n {...props}\n />\n))\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenubarPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n))\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(\n (\n { className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props },\n ref\n ) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-menubar-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n )\n)\nMenubarContent.displayName = MenubarPrimitive.Content.displayName\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nMenubarItem.displayName = MenubarPrimitive.Item.displayName\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <MenubarPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n))\nMenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName\n\nconst MenubarRadioItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <MenubarPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <Circle className=\"h-4 w-4 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n))\nMenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName\n\nconst MenubarLabel = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nMenubarLabel.displayName = MenubarPrimitive.Label.displayName\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName\n\nconst MenubarShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nMenubarShortcut.displayname = \"MenubarShortcut\"\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarLabel,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarPortal,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarGroup,\n MenubarSub,\n MenubarShortcut,\n}\n","import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst NavigationMenu = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Root\n ref={ref}\n className={cn(\n \"relative z-10 flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n <NavigationMenuViewport />\n </NavigationMenuPrimitive.Root>\n))\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName\n\nconst NavigationMenuList = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.List\n ref={ref}\n className={cn(\n \"group flex flex-1 list-none items-center justify-center space-x-1\",\n className\n )}\n {...props}\n />\n))\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item\n\nconst navigationMenuTriggerStyle = cva(\n \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent\"\n)\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDown\n className=\"relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n))\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName\n\nconst NavigationMenuContent = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Content\n ref={ref}\n className={cn(\n \"left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto \",\n className\n )}\n {...props}\n />\n))\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>\n>(({ className, ...props }, ref) => (\n <div className={cn(\"absolute left-0 top-full flex justify-center\")}>\n <NavigationMenuPrimitive.Viewport\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n))\nNavigationMenuViewport.displayName =\n NavigationMenuPrimitive.Viewport.displayName\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,\n React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>\n>(({ className, ...props }, ref) => (\n <NavigationMenuPrimitive.Indicator\n ref={ref}\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n))\nNavigationMenuIndicator.displayName =\n NavigationMenuPrimitive.Indicator.displayName\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n}\n","import * as React from 'react'\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\nimport { type ButtonProps, buttonVariants } from '@/components/ui/button'\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn('mx-auto flex w-full justify-center', className)}\n {...props}\n />\n)\nPagination.displayName = 'Pagination'\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn('flex flex-row items-center gap-1', className)} {...props} />\n ),\n)\nPaginationContent.displayName = 'PaginationContent'\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(\n ({ className, ...props }, ref) => <li ref={ref} className={cn('', className)} {...props} />,\n)\nPaginationItem.displayName = 'PaginationItem'\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<ButtonProps, 'size'> &\n React.ComponentProps<'a'>\n\nconst PaginationLink = ({ className, isActive, size = 'icon', ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? 'page' : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? 'outline' : 'ghost',\n size,\n }),\n className,\n )}\n {...props}\n />\n)\nPaginationLink.displayName = 'PaginationLink'\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn('gap-1 pl-2.5', className)}\n {...props}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span>Previous</span>\n </PaginationLink>\n)\nPaginationPrevious.displayName = 'PaginationPrevious'\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn('gap-1 pr-2.5', className)}\n {...props}\n >\n <span>Next</span>\n <ChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n)\nPaginationNext.displayName = 'PaginationNext'\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<'span'>) => (\n <span\n aria-hidden\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n)\nPaginationEllipsis.displayName = 'PaginationEllipsis'\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary shadow focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-3.5 w-3.5 fill-primary\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\"\n\nimport { GripVertical } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ResizablePanelGroup = ({\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (\n <ResizablePrimitive.PanelGroup\n className={cn(\n \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n)\n\nconst ResizablePanel = ResizablePrimitive.Panel\n\nconst ResizableHandle = ({\n withHandle,\n className,\n ...props\n}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {\n withHandle?: boolean\n}) => (\n <ResizablePrimitive.PanelResizeHandle\n className={cn(\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border\">\n <GripVertical className=\"h-2.5 w-2.5\" />\n </div>\n )}\n </ResizablePrimitive.PanelResizeHandle>\n)\n\nexport { ResizablePanelGroup, ResizablePanel, ResizableHandle }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n))\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n))\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n))\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n))\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n))\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n))\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nTableCaption.displayName = \"TableCaption\"\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","import * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { toggleVariants } from \"@/components/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n))\n\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n})\n\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName\n\nexport { ToggleGroup, ToggleGroupItem }\n","import { Inspector } from './components/ext/Inspector'\nimport type { WidgetRegistryEntry } from './registry/WidgetRegistry'\nimport { WidgetRegistry } from './registry/WidgetRegistry'\n\nWidgetRegistry.addExtension('dashfy', {\n Inspector,\n})\n\nexport { WidgetRegistry }\nexport type { WidgetRegistryEntry }\n\nexport * from './components/common/DebugInfo'\nexport * from './components/common/ExternalLink'\nexport * from './components/common/Scrollable'\nexport * from './components/common/Text'\nexport * from './components/Dashfy'\nexport * from './components/widget/base/Widget'\nexport * from './components/widget/base/WidgetBody'\nexport * from './components/widget/base/WidgetEmpty'\nexport * from './components/widget/base/WidgetError'\nexport * from './components/widget/base/WidgetHeader'\nexport * from './components/widget/base/WidgetLoader'\nexport * from './components/widget/base/WidgetWrapper'\nexport * from './components/widget/display/WidgetAvatar'\nexport * from './components/widget/display/WidgetCounter'\nexport * from './components/widget/display/WidgetLabel'\nexport * from './components/widget/errors/WidgetErrorBoundary'\nexport * from './components/widget/errors/WidgetErrorUnknown'\nexport * from './components/widget/list/WidgetListItem'\nexport * from './components/widget/status/WidgetStatusBadge'\nexport * from './components/widget/status/WidgetStatusChip'\nexport * from './components/widget/table/WidgetTable'\nexport * from './components/widget/table/WidgetTableCell'\nexport * from './components/widget/table/WidgetTableHeadCell'\nexport * from './hooks/useApiSubscription'\nexport * from './hooks/useMode'\nexport * from './hooks/useWebSocket'\nexport * from './hooks/useWidget'\nexport * from './lib/utils'\nexport * from './registry/ThemeRegistry'\nexport * from './store'\n\n// UI primitives (shadcn/ui - https://v3.shadcn.com)\nexport * from './components/ui'\n\n// Re-export types from @getdashfy/types for convenience\nexport type {\n ApiConfig,\n Dashboard,\n DashboardConfig,\n DashfyConfig,\n Notification,\n NotificationType,\n Subscription,\n WebSocketStatus,\n WidgetComponent,\n WidgetConfig,\n WidgetProps,\n} from '@getdashfy/types'\n"]}