@classytic/fluid 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/lib/filter-utils.ts","../src/hooks/use-mobile.ts","../src/hooks/use-base-search.ts","../src/hooks/use-media-query.ts","../src/hooks/use-scroll-detection.ts","../src/components/accordion-wrapper.tsx","../src/components/display-heading.tsx","../src/components/social-icons.tsx","../src/components/thumbnail.tsx","../src/components/custom-pagination.tsx","../src/components/api-pagination.tsx","../src/components/card-wrapper.tsx","../src/components/skeleton-wrappers.tsx","../src/components/client-submit-button.tsx","../src/components/collapsible-wrapper.tsx","../src/components/confirm-dialog.tsx","../src/components/error-state.tsx","../src/components/copy-button.tsx","../src/components/data-table.tsx","../src/components/dialog-wrapper.tsx","../src/components/dropdown-wrapper.tsx","../src/components/info-row.tsx","../src/components/item-helpers.tsx","../src/components/mode-toggle.tsx","../src/components/phone-input.tsx","../src/components/pill.tsx","../src/components/tabs-wrapper.tsx","../src/components/responsive-split-layout.tsx","../src/components/sheet-wrapper.tsx","../src/components/table-wrapper.tsx","../src/components/tooltip-wrapper.tsx","../src/components/form/form-input.tsx","../src/components/form/form-textarea.tsx","../src/components/form/select-input.tsx","../src/components/form/checkbox-input.tsx","../src/components/form/radio-input.tsx","../src/components/form/switch-input.tsx","../src/components/form/date-input.tsx","../src/components/form/tag-input.tsx","../src/components/form/tag-choice-input.tsx","../src/components/form/combobox-input.tsx","../src/components/form/slug-field.tsx","../src/components/form/form-error-summary.tsx","../src/components/form/date-range-filter.tsx","../src/components/form/date-range-input.tsx","../src/components/search/index.ts","../src/components/search/search-context.tsx","../src/components/search/search-root.tsx","../src/components/search/search-input.tsx","../src/components/search/search-type-input.tsx","../src/components/search/search-filter-actions.tsx","../src/components/search/search-filters.tsx","../src/components/search/search-actions.tsx","../src/components/search/search-container.tsx","../src/components/compact/field.tsx","../src/components/compact/compact-input.tsx","../src/components/compact/compact-textarea.tsx","../src/components/compact/compact-select.tsx","../src/components/compact/compact-number-input.tsx","../src/components/compact/compact-tag-choice.tsx","../src/components/compact/compact-slug-field.tsx","../src/components/event-calendar.tsx"],"names":["React","useState","useCallback","AccordionSection","FaqAccordion","jsxs","jsx","useEffect","Fragment","sizes","_","Button","React2","TableRow","TableCell","Table","TableHeader","TableHead","TableBody","ChevronDown","Icon","React3","IconItemMedia","FeatureItem","React4","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuRadioGroup","DropdownMenuRadioItem","country","ScrollArea","memo","TabsWrapper","useMemo","TabTrigger","TabContent","DynamicTabs","SIZE_VARIANTS","SheetWrapper","FormSheet","ConfirmSheet","InputGroup","InputGroupAddon","InputGroupInput","Field","FieldLabel","FieldDescription","Controller","FieldError","dt","Popover","PopoverTrigger","PopoverContent","useRef","Badge","X","FieldContent","TagIcon","Input","Check","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","forwardRef","React6","CalendarIcon","Calendar","toDate","Search","InputGroupButton","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","createContext","useContext","Error","InputGroupTextarea","Textarea","Plus","generateSlug","Wand2","format","ChevronLeft","ChevronRight"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\r\n * Filter utilities for building URL parameters\r\n * Simplified approach since backend handles all operator parsing\r\n */\r\n\r\nexport interface FilterConfig {\r\n paramName: string;\r\n type?: \"array\" | \"string\" | \"number\" | \"boolean\";\r\n defaultValue?: unknown;\r\n}\r\n\r\nexport interface SearchConfig {\r\n basePath: string;\r\n searchFields?: Record<string, string>;\r\n filterFields?: Record<string, FilterConfig>;\r\n defaultSearchType?: string;\r\n}\r\n\r\n/**\r\n * Build URL parameters from filters object\r\n */\r\nexport function buildFilterParams(\r\n filters: Record<string, unknown>,\r\n filterConfig: Record<string, FilterConfig>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n Object.entries(filters).forEach(([key, value]) => {\r\n const config = filterConfig[key];\r\n if (!config || !value) return;\r\n\r\n // Skip empty arrays and default values\r\n if (Array.isArray(value) && value.length === 0) return;\r\n if (value === config.defaultValue) return;\r\n\r\n // Handle array filters\r\n if (config.type === \"array\" && Array.isArray(value)) {\r\n if (value.length > 1) {\r\n // Multiple values: use [in] operator\r\n params.set(`${config.paramName}[in]`, value.join(\",\"));\r\n } else if (value.length === 1) {\r\n // Single value: direct assignment\r\n params.set(config.paramName, value[0] as string);\r\n }\r\n } else {\r\n // Non-array filters: direct assignment\r\n params.set(config.paramName, String(value));\r\n }\r\n });\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Build search parameters from search state\r\n */\r\nexport function buildSearchParams(\r\n searchType: string,\r\n searchValue: string,\r\n searchFields: Record<string, string>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n if (searchValue.trim() && searchFields[searchType]) {\r\n const paramName = searchFields[searchType];\r\n params.set(paramName, searchValue.trim());\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Build listing status parameters (inventory-specific)\r\n */\r\nexport function buildListingStatusParams(\r\n listingStatus: Record<string, boolean | undefined>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n Object.entries(listingStatus).forEach(([platform, hasListings]) => {\r\n if (hasListings !== undefined) {\r\n const operator = hasListings ? \"gt\" : \"eq\";\r\n params.set(`total_list.${platform}[${operator}]`, \"0\");\r\n }\r\n });\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Clear specific parameter types from URLSearchParams\r\n */\r\nexport function clearSearchAndFilterParams(\r\n params: URLSearchParams,\r\n config: SearchConfig\r\n): void {\r\n const { searchFields = {}, filterFields = {} } = config;\r\n\r\n // Clear search params\r\n Object.values(searchFields).forEach((paramName) => {\r\n params.delete(paramName);\r\n });\r\n\r\n // Clear filter params\r\n Object.values(filterFields).forEach((fieldConfig) => {\r\n params.delete(fieldConfig.paramName);\r\n // Also clear potential [in] variations\r\n const baseField = fieldConfig.paramName.replace(/\\[.*\\]$/, \"\");\r\n params.delete(`${baseField}[in]`);\r\n });\r\n\r\n // Clear listing status params\r\n const keysToDelete: string[] = [];\r\n for (const [key] of params.entries()) {\r\n if (key.startsWith(\"total_list.\")) {\r\n keysToDelete.push(key);\r\n }\r\n }\r\n keysToDelete.forEach((key) => params.delete(key));\r\n\r\n params.delete(\"page\"); // Reset pagination\r\n}\r\n\r\n/**\r\n * Get API-ready parameters from URL\r\n */\r\nexport function getApiParams(\r\n searchParams: URLSearchParams\r\n): Record<string, string> {\r\n const params: Record<string, string> = {};\r\n\r\n for (const [key, value] of searchParams.entries()) {\r\n params[key] = value;\r\n }\r\n\r\n return params;\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\nexport function useIsMobile() {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\r\n };\r\n mql.addEventListener(\"change\", onChange);\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, []);\r\n\r\n return !!isMobile;\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useCallback } from \"react\";\r\nimport { useRouter, useSearchParams } from \"next/navigation\";\r\nimport {\r\n buildFilterParams,\r\n buildSearchParams,\r\n clearSearchAndFilterParams,\r\n getApiParams,\r\n type FilterConfig,\r\n type SearchConfig,\r\n} from \"../lib/filter-utils\";\r\n\r\nexport interface UseBaseSearchConfig {\r\n basePath: string;\r\n searchFields?: Record<string, string>;\r\n filterFields?: Record<string, FilterConfig>;\r\n defaultSearchType?: string;\r\n}\r\n\r\nexport interface UseBaseSearchReturn {\r\n // Search state\r\n searchType: string;\r\n setSearchType: (type: string) => void;\r\n searchValue: string;\r\n setSearchValue: (value: string) => void;\r\n\r\n // Filter state\r\n filters: Record<string, unknown>;\r\n setFilters: React.Dispatch<React.SetStateAction<Record<string, unknown>>>;\r\n updateFilter: (key: string, value: unknown) => void;\r\n\r\n // Actions\r\n handleSearch: () => void;\r\n clearSearch: () => void;\r\n getSearchParams: () => Record<string, string>;\r\n\r\n // Status\r\n hasActiveSearch: boolean;\r\n hasActiveFilters: boolean;\r\n}\r\n\r\n/**\r\n * Base search hook that provides common search functionality\r\n * Can be extended by specific search hooks for different entities\r\n * Supports bracket syntax: field[operator]=value\r\n */\r\nexport function useBaseSearch(config: UseBaseSearchConfig): UseBaseSearchReturn {\r\n const {\r\n basePath,\r\n searchFields = {},\r\n filterFields = {},\r\n defaultSearchType = Object.keys(searchFields)[0] || \"\",\r\n } = config;\r\n\r\n const router = useRouter();\r\n const searchParams = useSearchParams();\r\n\r\n // Initialize search type from URL params\r\n const [searchType, setSearchType] = useState(() => {\r\n for (const [type, paramName] of Object.entries(searchFields)) {\r\n if (searchParams.has(paramName)) {\r\n return type;\r\n }\r\n }\r\n return defaultSearchType;\r\n });\r\n\r\n // Initialize search value from URL params\r\n const [searchValue, setSearchValue] = useState(() => {\r\n for (const paramName of Object.values(searchFields)) {\r\n const value = searchParams.get(paramName);\r\n if (value) return value;\r\n }\r\n return \"\";\r\n });\r\n\r\n // Initialize filter states\r\n const [filters, setFilters] = useState<Record<string, unknown>>(() => {\r\n const initialFilters: Record<string, unknown> = {};\r\n Object.entries(filterFields).forEach(([key, fieldConfig]) => {\r\n const paramValue = searchParams.get(fieldConfig.paramName);\r\n if (paramValue) {\r\n if (fieldConfig.type === \"array\") {\r\n initialFilters[key] = paramValue.split(\",\");\r\n } else {\r\n initialFilters[key] = paramValue;\r\n }\r\n } else {\r\n initialFilters[key] =\r\n fieldConfig.defaultValue || (fieldConfig.type === \"array\" ? [] : \"\");\r\n }\r\n });\r\n return initialFilters;\r\n });\r\n\r\n // Handle search submission\r\n const handleSearch = useCallback(() => {\r\n const params = new URLSearchParams(searchParams);\r\n\r\n // Clear existing search and filter params\r\n clearSearchAndFilterParams(params, config);\r\n\r\n // Add search params\r\n const searchParamsNew = buildSearchParams(searchType, searchValue, searchFields);\r\n for (const [key, value] of searchParamsNew) {\r\n params.set(key, value);\r\n }\r\n\r\n // Add filter params\r\n const filterParams = buildFilterParams(filters, filterFields);\r\n for (const [key, value] of filterParams) {\r\n params.set(key, value);\r\n }\r\n\r\n // Update URL\r\n router.push(`${basePath}?${params.toString()}`);\r\n }, [\r\n searchType,\r\n searchValue,\r\n filters,\r\n searchFields,\r\n filterFields,\r\n searchParams,\r\n router,\r\n basePath,\r\n config,\r\n ]);\r\n\r\n // Clear search and filters\r\n const clearSearch = useCallback(() => {\r\n const params = new URLSearchParams(searchParams);\r\n\r\n // Clear all search and filter params\r\n clearSearchAndFilterParams(params, config);\r\n\r\n // Reset state\r\n setSearchValue(\"\");\r\n // Reset search type back to default for consistency\r\n setSearchType(defaultSearchType);\r\n const resetFilters: Record<string, unknown> = {};\r\n Object.entries(filterFields).forEach(([key, fieldConfig]) => {\r\n resetFilters[key] =\r\n fieldConfig.defaultValue || (fieldConfig.type === \"array\" ? [] : \"\");\r\n });\r\n setFilters(resetFilters);\r\n\r\n const next = params.toString();\r\n // If no params remain, navigate to clean basePath\r\n router.push(next ? `${basePath}?${next}` : `${basePath}`);\r\n }, [searchParams, router, basePath, config, defaultSearchType, filterFields]);\r\n\r\n // Get current search params for API\r\n const getSearchParamsForApi = useCallback(() => {\r\n return getApiParams(searchParams);\r\n }, [searchParams]);\r\n\r\n // Update individual filter\r\n const updateFilter = useCallback((key: string, value: unknown) => {\r\n setFilters((prev) => ({\r\n ...prev,\r\n [key]: value,\r\n }));\r\n }, []);\r\n\r\n // Check if there are active searches or filters\r\n const hasActiveSearch = Object.values(searchFields).some((paramName) => {\r\n return searchParams.has(paramName);\r\n });\r\n\r\n const hasActiveFilters = Object.values(filterFields).some((fieldConfig) => {\r\n const baseField = fieldConfig.paramName.replace(/\\[.*\\]$/, \"\");\r\n return (\r\n searchParams.has(fieldConfig.paramName) ||\r\n searchParams.has(`${baseField}[in]`) ||\r\n searchParams.has(baseField)\r\n );\r\n });\r\n\r\n return {\r\n // Search state\r\n searchType,\r\n setSearchType,\r\n searchValue,\r\n setSearchValue,\r\n\r\n // Filter state\r\n filters,\r\n setFilters,\r\n updateFilter,\r\n\r\n // Actions\r\n handleSearch,\r\n clearSearch,\r\n getSearchParams: getSearchParamsForApi,\r\n\r\n // Status\r\n hasActiveSearch,\r\n hasActiveFilters,\r\n };\r\n}\r\n","import { useSyncExternalStore } from \"react\";\r\n\r\nexport function useMediaQuery(query: string, defaultValue = false) {\r\n const getSnapshot = () => window.matchMedia(query).matches;\r\n const getServerSnapshot = () => defaultValue;\r\n\r\n const subscribe = (onStoreChange: () => void) => {\r\n const media = window.matchMedia(query);\r\n const handler = () => onStoreChange();\r\n media.addEventListener(\"change\", handler);\r\n return () => media.removeEventListener(\"change\", handler);\r\n };\r\n\r\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\r\n}\r\n","import { useState, useCallback, RefObject } from \"react\";\r\n\r\ninterface ScrollState {\r\n canScrollLeft: boolean;\r\n canScrollRight: boolean;\r\n isScrollable: boolean;\r\n}\r\n\r\nexport const useScrollDetection = (\r\n ref: RefObject<HTMLDivElement | null>,\r\n delay = 100\r\n) => {\r\n const [scrollState, setScrollState] = useState<ScrollState>({\r\n canScrollLeft: false,\r\n canScrollRight: false,\r\n isScrollable: false,\r\n });\r\n\r\n const checkScroll = useCallback(() => {\r\n const scrollContainer = ref.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainer;\r\n const isScrollable = scrollWidth > clientWidth;\r\n const canScrollLeft = scrollLeft > 5;\r\n const canScrollRight = scrollLeft < scrollWidth - clientWidth - 5;\r\n\r\n setScrollState((prev) => {\r\n if (\r\n prev.canScrollLeft !== canScrollLeft ||\r\n prev.canScrollRight !== canScrollRight ||\r\n prev.isScrollable !== isScrollable\r\n ) {\r\n return { canScrollLeft, canScrollRight, isScrollable };\r\n }\r\n return prev;\r\n });\r\n }, [ref]);\r\n\r\n const debouncedCheckScroll = useCallback(() => {\r\n const timeoutId = setTimeout(checkScroll, delay);\r\n return () => clearTimeout(timeoutId);\r\n }, [checkScroll, delay]);\r\n\r\n return { ...scrollState, checkScroll: debouncedCheckScroll };\r\n};\r\n","\"use client\";\r\n\r\nimport { ReactNode, memo } from \"react\";\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionTrigger,\r\n AccordionContent,\r\n} from \"@/components/ui/accordion\";\r\nimport { cn } from \"../utils\";\r\n\r\n// ============================================================================\r\n// SINGLE ACCORDION SECTION\r\n// ============================================================================\r\n\r\nexport interface AccordionSectionProps {\r\n title: string;\r\n icon?: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n badge?: ReactNode;\r\n}\r\n\r\n/**\r\n * AccordionSection - Single collapsible section with smooth animation\r\n *\r\n * @example\r\n * ```tsx\r\n * <AccordionSection title=\"Settings\" icon={<Settings className=\"h-4 w-4\" />}>\r\n * <div>Content here</div>\r\n * </AccordionSection>\r\n * ```\r\n */\r\nexport const AccordionSection = memo(function AccordionSection({\r\n title,\r\n icon,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n badge,\r\n}: AccordionSectionProps) {\r\n return (\r\n <Accordion\r\n defaultValue={defaultOpen ? [\"section\"] : []}\r\n className={className}\r\n >\r\n <AccordionItem value=\"section\" className=\"border-0\">\r\n <AccordionTrigger className=\"py-3 hover:no-underline\">\r\n <div className=\"flex items-center gap-2\">\r\n {icon && <span className=\"text-muted-foreground\">{icon}</span>}\r\n <span className=\"font-medium\">{title}</span>\r\n {badge}\r\n </div>\r\n </AccordionTrigger>\r\n <AccordionContent>\r\n <div className=\"pt-2\">{children}</div>\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// FAQ / GROUPED ACCORDION\r\n// ============================================================================\r\n\r\nexport interface FaqItem {\r\n id: string;\r\n question: string;\r\n answer: ReactNode;\r\n}\r\n\r\nexport interface FaqAccordionProps {\r\n items: FaqItem[];\r\n defaultOpen?: string;\r\n className?: string;\r\n /** Allow multiple items to be open at once */\r\n openMultiple?: boolean;\r\n}\r\n\r\n/**\r\n * FaqAccordion - FAQ-style accordion where only one item can be open by default\r\n *\r\n * @example\r\n * ```tsx\r\n * <FaqAccordion\r\n * items={[\r\n * { id: \"1\", question: \"What is this?\", answer: \"A FAQ accordion\" },\r\n * { id: \"2\", question: \"How does it work?\", answer: \"Click to expand\" },\r\n * ]}\r\n * />\r\n * ```\r\n */\r\nexport const FaqAccordion = memo(function FaqAccordion({\r\n items,\r\n defaultOpen,\r\n className,\r\n openMultiple = false,\r\n}: FaqAccordionProps) {\r\n return (\r\n <Accordion\r\n defaultValue={defaultOpen ? [defaultOpen] : []}\r\n openMultiple={openMultiple}\r\n className={cn(\"w-full\", className)}\r\n >\r\n {items.map((item) => (\r\n <AccordionItem key={item.id} value={item.id}>\r\n <AccordionTrigger className=\"text-left\">\r\n {item.question}\r\n </AccordionTrigger>\r\n <AccordionContent>{item.answer}</AccordionContent>\r\n </AccordionItem>\r\n ))}\r\n </Accordion>\r\n );\r\n});\r\n","import { ReactNode, ElementType } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface DisplayHeadingProps {\r\n children: ReactNode;\r\n size?: \"lg\" | \"xl\" | \"2xl\";\r\n align?: \"left\" | \"center\" | \"right\";\r\n className?: string;\r\n highlightText?: string;\r\n highlightColor?: \"primary\" | \"secondary\" | \"accent\" | \"gradient\";\r\n as?: ElementType;\r\n}\r\n\r\n/**\r\n * DisplayHeading - Reusable component for hero/display headings\r\n * Provides consistent typography across the platform\r\n */\r\nexport function DisplayHeading({\r\n children,\r\n size = \"xl\",\r\n align = \"center\",\r\n className,\r\n highlightText,\r\n highlightColor = \"primary\",\r\n as: Component = \"h1\",\r\n ...props\r\n}: DisplayHeadingProps) {\r\n const sizeClasses = {\r\n lg: \"text-3xl lg:text-5xl\",\r\n xl: \"text-4xl lg:text-6xl\",\r\n \"2xl\": \"text-5xl lg:text-7xl\",\r\n };\r\n\r\n const alignClasses = {\r\n left: \"text-left\",\r\n center: \"text-center\",\r\n right: \"text-right\",\r\n };\r\n\r\n const highlightClasses = {\r\n primary: \"text-primary\",\r\n secondary: \"text-secondary\",\r\n accent: \"text-accent\",\r\n gradient:\r\n \"bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent\",\r\n };\r\n\r\n const renderContent = () => {\r\n if (typeof children !== \"string\" || !highlightText) {\r\n return children;\r\n }\r\n\r\n const parts = children.split(highlightText);\r\n return (\r\n <>\r\n {parts[0]}\r\n <span className={highlightClasses[highlightColor]}>{highlightText}</span>\r\n {parts[1]}\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <Component\r\n className={cn(\r\n \"font-bold tracking-tight text-balance leading-[1.1]\",\r\n sizeClasses[size],\r\n alignClasses[align],\r\n className\r\n )}\r\n {...props}\r\n >\r\n {renderContent()}\r\n </Component>\r\n );\r\n}\r\n","// Social media SVG icons\r\n\r\nexport const FacebookIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const GoogleIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" />\r\n </svg>\r\n);\r\n\r\nexport const TwitterXIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 1200 1227\"\r\n width=\"18\"\r\n height=\"18\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z\" />\r\n </svg>\r\n);\r\n\r\nexport const InstagramIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect>\r\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path>\r\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>\r\n </svg>\r\n);\r\n\r\nexport const WhatsAppIcon = () => (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\r\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\" />\r\n </svg>\r\n);\r\n","\"use client\";\r\n\r\nimport Image from \"next/image\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst aspectRatios = {\r\n square: \"aspect-square\",\r\n video: \"aspect-video\",\r\n portrait: \"aspect-[3/4]\",\r\n};\r\n\r\nconst sizes = {\r\n small: \"w-16 h-16\",\r\n medium: \"w-32 h-32\",\r\n large: \"w-48 h-48\",\r\n full: \"w-full h-full\",\r\n};\r\n\r\nexport interface ThumbnailProps {\r\n src?: string;\r\n alt?: string;\r\n aspect?: \"square\" | \"video\" | \"portrait\";\r\n size?: \"small\" | \"medium\" | \"large\" | \"full\";\r\n className?: string;\r\n fallback?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function Thumbnail({\r\n src,\r\n alt,\r\n aspect = \"square\",\r\n size = \"medium\",\r\n className,\r\n fallback = \"/placeholder.svg\",\r\n onClick,\r\n}: ThumbnailProps) {\r\n // If a custom size is provided through className, use that instead of predefined sizes\r\n const sizeClass = className?.includes(\"w-\") ? \"\" : sizes[size];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative rounded-md overflow-hidden\",\r\n aspectRatios[aspect],\r\n sizeClass,\r\n onClick && \"cursor-pointer\",\r\n className\r\n )}\r\n onClick={onClick}\r\n >\r\n <Image\r\n src={src || fallback}\r\n alt={alt || \"Thumbnail\"}\r\n fill\r\n className=\"object-cover\"\r\n sizes={getSizes(size)}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nconst getSizes = (size: \"small\" | \"medium\" | \"large\" | \"full\") => {\r\n switch (size) {\r\n case \"small\":\r\n return \"64px\";\r\n case \"medium\":\r\n return \"128px\";\r\n case \"large\":\r\n return \"192px\";\r\n case \"full\":\r\n return \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\";\r\n default:\r\n return \"128px\";\r\n }\r\n};\r\n\r\nexport default Thumbnail;\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n} from \"@/components/ui/pagination\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CustomPaginationProps {\r\n page: number;\r\n pages: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n onPageChange: (page: number) => void;\r\n}\r\n\r\nexport function CustomPagination({\r\n page,\r\n onPageChange,\r\n pages,\r\n hasPrev,\r\n hasNext,\r\n}: CustomPaginationProps) {\r\n const [isMobile, setIsMobile] = useState(false);\r\n const currentPageNum = Number(page);\r\n\r\n useEffect(() => {\r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 640);\r\n };\r\n\r\n checkMobile();\r\n window.addEventListener(\"resize\", checkMobile);\r\n return () => window.removeEventListener(\"resize\", checkMobile);\r\n }, []);\r\n\r\n if (pages <= 1) return null;\r\n\r\n const getPageNumbers = (): (number | string)[] => {\r\n const delta = isMobile ? 1 : 2;\r\n const range: number[] = [];\r\n const rangeWithDots: (number | string)[] = [];\r\n\r\n for (\r\n let i = Math.max(2, currentPageNum - delta);\r\n i <= Math.min(pages - 1, currentPageNum + delta);\r\n i++\r\n ) {\r\n range.push(i);\r\n }\r\n\r\n if (currentPageNum - delta > 2) {\r\n rangeWithDots.push(1, \"...\");\r\n } else {\r\n rangeWithDots.push(1);\r\n }\r\n\r\n rangeWithDots.push(...range);\r\n\r\n if (currentPageNum + delta < pages - 1) {\r\n rangeWithDots.push(\"...\", pages);\r\n } else if (pages > 1) {\r\n if (!range.includes(pages)) {\r\n rangeWithDots.push(pages);\r\n }\r\n }\r\n\r\n return [...new Set(rangeWithDots)];\r\n };\r\n\r\n if (isMobile && pages > 5) {\r\n return (\r\n <Pagination className=\"mx-0 w-auto\">\r\n <PaginationContent className=\"gap-1\">\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => (hasPrev ? onPageChange(currentPageNum - 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors h-8 px-2 text-xs\",\r\n !hasPrev && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasPrev && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasPrev}\r\n />\r\n </PaginationItem>\r\n\r\n <PaginationItem>\r\n <div className=\"flex h-8 items-center justify-center px-3 text-xs font-medium bg-primary text-primary-foreground rounded-md\">\r\n {currentPageNum} / {pages}\r\n </div>\r\n </PaginationItem>\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => (hasNext ? onPageChange(currentPageNum + 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors h-8 px-2 text-xs\",\r\n !hasNext && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasNext && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasNext}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n );\r\n }\r\n\r\n return (\r\n <Pagination className=\"mx-0 w-auto\">\r\n <PaginationContent className=\"gap-1 flex-wrap\">\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => (hasPrev ? onPageChange(currentPageNum - 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 px-2 text-xs\" : \"h-9 px-3 text-sm\",\r\n !hasPrev && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasPrev && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasPrev}\r\n />\r\n </PaginationItem>\r\n\r\n {getPageNumbers().map((pageNum, index) => (\r\n <PaginationItem key={`pagination-page-${pageNum}-${index}`}>\r\n {pageNum === \"...\" ? (\r\n <span\r\n className={cn(\r\n \"flex items-center justify-center text-muted-foreground\",\r\n isMobile ? \"h-8 w-8 text-xs\" : \"h-9 w-9 text-sm\"\r\n )}\r\n >\r\n ...\r\n </span>\r\n ) : (\r\n <PaginationLink\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 w-8 text-xs p-0\" : \"h-9 w-9 text-sm p-0\",\r\n \"hover:bg-accent hover:text-accent-foreground\",\r\n Number(currentPageNum) === Number(pageNum) &&\r\n \"bg-primary text-primary-foreground hover:bg-primary/90\"\r\n )}\r\n onClick={() =>\r\n typeof pageNum === \"number\" ? onPageChange(pageNum) : undefined\r\n }\r\n isActive={Number(currentPageNum) === Number(pageNum)}\r\n aria-label={`Go to page ${pageNum}`}\r\n aria-current={\r\n Number(currentPageNum) === Number(pageNum) ? \"page\" : undefined\r\n }\r\n >\r\n {pageNum}\r\n </PaginationLink>\r\n )}\r\n </PaginationItem>\r\n ))}\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => (hasNext ? onPageChange(currentPageNum + 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 px-2 text-xs\" : \"h-9 px-3 text-sm\",\r\n !hasNext && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasNext && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasNext}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n );\r\n}\r\n\r\nexport interface PaginationInfoProps {\r\n page: number;\r\n total: number;\r\n limit?: number;\r\n}\r\n\r\nexport function PaginationInfo({ page, total, limit = 10 }: PaginationInfoProps) {\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n useEffect(() => {\r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 640);\r\n };\r\n\r\n checkMobile();\r\n window.addEventListener(\"resize\", checkMobile);\r\n return () => window.removeEventListener(\"resize\", checkMobile);\r\n }, []);\r\n\r\n if (total === 0) {\r\n return (\r\n <div className=\"flex-1 text-sm text-muted-foreground\">\r\n <p>No entries found</p>\r\n </div>\r\n );\r\n }\r\n\r\n const startEntry = (page - 1) * limit + 1;\r\n const endEntry = Math.min(page * limit, total);\r\n\r\n return (\r\n <div className=\"flex-1 text-sm text-muted-foreground\">\r\n <p className={cn(\"whitespace-nowrap\", isMobile && \"text-xs\")}>\r\n {isMobile ? (\r\n <span>\r\n {startEntry.toLocaleString()}-{endEntry.toLocaleString()} of{\" \"}\r\n {total.toLocaleString()}\r\n </span>\r\n ) : (\r\n <span>\r\n Showing{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {startEntry.toLocaleString()}\r\n </span>{\" \"}\r\n to{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {endEntry.toLocaleString()}\r\n </span>{\" \"}\r\n of{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {total.toLocaleString()}\r\n </span>{\" \"}\r\n {total === 1 ? \"result\" : \"results\"}\r\n </span>\r\n )}\r\n </p>\r\n </div>\r\n );\r\n}\r\n\r\nexport type { CustomPaginationProps as CustomPaginationPropsExport };\r\nexport type { PaginationInfoProps as PaginationInfoPropsExport };\r\n","\"use client\";\r\n\r\nimport { CustomPagination, PaginationInfo } from \"./custom-pagination\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ApiPaginationData {\r\n total: number;\r\n pages: number;\r\n page: number;\r\n limit: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n}\r\n\r\nexport interface ApiPaginationProps extends Partial<ApiPaginationData> {\r\n onPageChange?: (page: number) => void;\r\n className?: string;\r\n showInfo?: boolean;\r\n infoPosition?: \"left\" | \"right\";\r\n}\r\n\r\n/**\r\n * ApiPagination - A reusable pagination component for API-driven data\r\n */\r\nexport function ApiPagination({\r\n total = 0,\r\n limit = 10,\r\n pages = 1,\r\n page = 1,\r\n hasNext = false,\r\n hasPrev = false,\r\n onPageChange = () => {},\r\n className,\r\n showInfo = true,\r\n infoPosition = \"left\",\r\n}: ApiPaginationProps) {\r\n const infoComponent = showInfo && (\r\n <div className=\"shrink-0\">\r\n <PaginationInfo total={total} page={page} limit={limit} />\r\n </div>\r\n );\r\n\r\n const paginationComponent = (\r\n <div className=\"flex justify-center sm:justify-end\">\r\n <CustomPagination\r\n page={page}\r\n pages={pages}\r\n hasPrev={hasPrev}\r\n hasNext={hasNext}\r\n onPageChange={onPageChange}\r\n />\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"shrink-0 bg-muted/30 rounded-lg border border-border p-3 mb-2\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between sm:gap-4\">\r\n {infoPosition === \"left\" ? (\r\n <>\r\n <div className=\"order-2 sm:order-1\">{infoComponent}</div>\r\n <div className=\"order-1 sm:order-2\">{paginationComponent}</div>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"order-1 sm:order-1\">{paginationComponent}</div>\r\n <div className=\"order-2 sm:order-2\">{infoComponent}</div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport {\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n CardTitle,\r\n CardDescription,\r\n CardFooter,\r\n} from \"@/components/ui/card\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CardWrapperProps {\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"elevated\" | \"primary\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\";\r\n size?: \"sm\" | \"default\" | \"lg\" | \"xl\";\r\n hideHeader?: boolean;\r\n}\r\n\r\nexport function CardWrapper({\r\n title,\r\n description,\r\n children,\r\n footer,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n variant = \"default\",\r\n size = \"default\",\r\n hideHeader = false,\r\n ...props\r\n}: CardWrapperProps) {\r\n const variants = {\r\n default: \"\",\r\n outline: \"border-2\",\r\n ghost: \"border-0 shadow-none bg-transparent\",\r\n elevated: \"shadow-lg border-0\",\r\n primary: \"border-primary/20 bg-primary/5\",\r\n secondary: \"border-secondary/20 bg-secondary/5\",\r\n destructive: \"border-destructive/20 bg-destructive/5\",\r\n success: \"border-green-500/20 bg-green-500/5\",\r\n warning: \"border-yellow-500/20 bg-yellow-500/5\",\r\n };\r\n\r\n const sizes = {\r\n sm: \"p-3\",\r\n default: \"p-6\",\r\n lg: \"p-8\",\r\n xl: \"p-10\",\r\n };\r\n\r\n const contentSizes = {\r\n sm: \"pt-3\",\r\n default: \"pt-6\",\r\n lg: \"pt-8\",\r\n xl: \"pt-10\",\r\n };\r\n\r\n return (\r\n <Card className={cn(variants[variant], className)} {...props}>\r\n {!hideHeader && (title || description) && (\r\n <CardHeader className={cn(sizes[size], \"pb-4\", headerClassName)}>\r\n {title && (\r\n <CardTitle className=\"text-lg font-semibold\">{title}</CardTitle>\r\n )}\r\n {description && <CardDescription>{description}</CardDescription>}\r\n </CardHeader>\r\n )}\r\n\r\n <CardContent\r\n className={cn(hideHeader ? sizes[size] : contentSizes[size], contentClassName)}\r\n >\r\n {children}\r\n </CardContent>\r\n\r\n {footer && (\r\n <CardFooter className={cn(sizes[size], \"pt-4 border-t\", footerClassName)}>\r\n <div className=\"w-full\">{footer}</div>\r\n </CardFooter>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport interface DataCardProps extends Omit<CardWrapperProps, \"children\"> {\r\n data: Array<{ label: string; value: ReactNode; color?: string }>;\r\n}\r\n\r\nexport function DataCard({ title, data, className, ...props }: DataCardProps) {\r\n return (\r\n <CardWrapper title={title} className={cn(\"space-y-4\", className)} {...props}>\r\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\r\n {data.map((item, index) => (\r\n <div key={index} className=\"space-y-1\">\r\n <p className=\"text-sm text-muted-foreground\">{item.label}</p>\r\n <p className={cn(\"text-lg font-semibold\", item.color && `text-${item.color}-600`)}>\r\n {item.value}\r\n </p>\r\n </div>\r\n ))}\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface LoadingCardProps extends Omit<CardWrapperProps, \"children\"> {}\r\n\r\nexport function LoadingCard({ title, description, className, ...props }: LoadingCardProps) {\r\n return (\r\n <CardWrapper title={title} description={description} className={className} {...props}>\r\n <div className=\"flex items-center justify-center py-8\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\r\n <span className=\"ml-2\">Loading...</span>\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface StatsCardProps extends Omit<CardWrapperProps, \"children\" | \"variant\"> {\r\n value: ReactNode;\r\n icon?: ReactNode;\r\n trend?: { type: \"up\" | \"down\" | \"neutral\"; value: string };\r\n /** Visual variant for the card and icon styling */\r\n statsVariant?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n /** Additional class for the icon wrapper */\r\n iconClassName?: string;\r\n}\r\n\r\nexport function StatsCard({\r\n title,\r\n value,\r\n description,\r\n icon,\r\n trend,\r\n className,\r\n statsVariant = \"default\",\r\n iconClassName,\r\n ...props\r\n}: StatsCardProps) {\r\n // Variant styles for the card background\r\n const cardVariants = {\r\n default: \"\",\r\n success: \"bg-green-50 border-green-200 dark:bg-green-950/30 dark:border-green-900\",\r\n warning: \"bg-yellow-50 border-yellow-200 dark:bg-yellow-950/30 dark:border-yellow-900\",\r\n danger: \"bg-red-50 border-red-200 dark:bg-red-950/30 dark:border-red-900\",\r\n info: \"bg-blue-50 border-blue-200 dark:bg-blue-950/30 dark:border-blue-900\",\r\n };\r\n\r\n // Variant styles for the icon\r\n const iconVariants = {\r\n default: \"text-muted-foreground\",\r\n success: \"text-green-600 dark:text-green-400\",\r\n warning: \"text-yellow-600 dark:text-yellow-400\",\r\n danger: \"text-red-600 dark:text-red-400\",\r\n info: \"text-blue-600 dark:text-blue-400\",\r\n };\r\n\r\n // Icon wrapper styles (for when icon needs background)\r\n const iconWrapperVariants = {\r\n default: \"bg-muted border border-border\",\r\n success: \"bg-green-100/50 dark:bg-green-900/30\",\r\n warning: \"bg-yellow-100/50 dark:bg-yellow-900/30\",\r\n danger: \"bg-red-100/50 dark:bg-red-900/30\",\r\n info: \"bg-blue-100/50 dark:bg-blue-900/30\",\r\n };\r\n\r\n return (\r\n <CardWrapper\r\n className={cn(\"relative overflow-hidden\", cardVariants[statsVariant], className)}\r\n size=\"sm\"\r\n hideHeader\r\n {...props}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"space-y-1\">\r\n <p className=\"text-sm font-medium text-muted-foreground\">{title}</p>\r\n <p className=\"text-2xl font-bold\">{value}</p>\r\n {description && (\r\n <p className=\"text-xs text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n {icon && (\r\n <div className={cn(\r\n \"p-2 rounded-md\",\r\n iconWrapperVariants[statsVariant],\r\n iconVariants[statsVariant],\r\n iconClassName\r\n )}>\r\n {icon}\r\n </div>\r\n )}\r\n </div>\r\n {trend && (\r\n <div\r\n className={cn(\r\n \"absolute top-2 right-2 text-xs px-2 py-1 rounded-full\",\r\n trend.type === \"up\" && \"bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300\",\r\n trend.type === \"down\" && \"bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300\",\r\n trend.type === \"neutral\" && \"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300\"\r\n )}\r\n >\r\n {trend.value}\r\n </div>\r\n )}\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface DraggableCardProps extends Omit<CardWrapperProps, \"children\"> {\r\n subtitle?: ReactNode;\r\n badges?: ReactNode;\r\n actions?: ReactNode;\r\n details?: ReactNode;\r\n dragHandleProps?: any;\r\n isDragging?: boolean;\r\n isHidden?: boolean;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function DraggableCard({\r\n title,\r\n subtitle,\r\n badges,\r\n actions,\r\n details,\r\n dragHandleProps,\r\n className,\r\n isDragging,\r\n isHidden,\r\n children,\r\n ...props\r\n}: DraggableCardProps) {\r\n return (\r\n <CardWrapper\r\n hideHeader\r\n className={cn(\r\n \"transition-all\",\r\n isDragging && \"shadow-lg rotate-2\",\r\n isHidden && \"opacity-50\",\r\n className\r\n )}\r\n contentClassName=\"!pt-4\"\r\n {...props}\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n {dragHandleProps && (\r\n <div {...dragHandleProps} className=\"mt-1 cursor-grab hover:text-foreground\">\r\n {dragHandleProps.icon || (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"text-muted-foreground\"\r\n >\r\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\r\n </svg>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"flex-1 min-w-0 space-y-3\">\r\n <div className=\"flex flex-wrap items-center gap-2\">\r\n {title && <h4 className=\"font-medium\">{title}</h4>}\r\n {badges && <div className=\"flex flex-wrap gap-1\">{badges}</div>}\r\n </div>\r\n\r\n {subtitle && (\r\n <p className=\"text-xs text-muted-foreground break-words\">{subtitle}</p>\r\n )}\r\n\r\n {details}\r\n {children}\r\n </div>\r\n\r\n {actions && (\r\n <div className=\"flex items-center gap-2 flex-shrink-0\">{actions}</div>\r\n )}\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Skeleton } from \"@/components/ui/skeleton\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { cn } from \"../utils\";\r\n\r\n// ============================================================================\r\n// SKELETON TABLE\r\n// ============================================================================\r\n\r\nexport interface SkeletonTableProps {\r\n /** Number of skeleton rows */\r\n rows?: number;\r\n /** Number of skeleton columns */\r\n columns?: number;\r\n /** Optional column headers - if provided, shows text instead of skeleton */\r\n headers?: string[];\r\n /** Additional CSS classes */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonTable - Loading skeleton for tables\r\n * Matches DataTable structure for consistent loading states\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonTable rows={5} columns={4} />\r\n * <SkeletonTable headers={[\"Name\", \"Email\", \"Status\"]} rows={10} />\r\n * ```\r\n */\r\nexport function SkeletonTable({\r\n rows = 5,\r\n columns = 6,\r\n headers,\r\n className,\r\n}: SkeletonTableProps) {\r\n const columnCount = headers?.length || columns;\r\n\r\n return (\r\n <div className={cn(\"rounded-md border\", className)}>\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n {headers\r\n ? headers.map((header, i) => (\r\n <TableHead key={i}>{header}</TableHead>\r\n ))\r\n : Array.from({ length: columnCount }).map((_, i) => (\r\n <TableHead key={i}>\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <TableRow key={rowIndex}>\r\n {Array.from({ length: columnCount }).map((_, colIndex) => (\r\n <TableCell key={colIndex}>\r\n <Skeleton className=\"h-4 w-full\" />\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON LIST\r\n// ============================================================================\r\n\r\nexport interface SkeletonListProps {\r\n /** Number of skeleton items */\r\n items?: number;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Show avatar placeholder */\r\n showAvatar?: boolean;\r\n /** Avatar shape */\r\n avatarShape?: \"circle\" | \"square\";\r\n}\r\n\r\n/**\r\n * SkeletonList - Compact skeleton for lists with avatars\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonList items={5} />\r\n * <SkeletonList items={3} showAvatar={false} />\r\n * ```\r\n */\r\nexport function SkeletonList({\r\n items = 3,\r\n className,\r\n showAvatar = true,\r\n avatarShape = \"circle\",\r\n}: SkeletonListProps) {\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n {Array.from({ length: items }).map((_, i) => (\r\n <div key={i} className=\"flex items-center gap-3\">\r\n {showAvatar && (\r\n <Skeleton\r\n className={cn(\r\n \"h-10 w-10 flex-shrink-0\",\r\n avatarShape === \"circle\" ? \"rounded-full\" : \"rounded-md\"\r\n )}\r\n />\r\n )}\r\n <div className=\"flex-1 space-y-2\">\r\n <Skeleton className=\"h-4 w-full\" />\r\n <Skeleton className=\"h-3 w-3/4\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON CARD\r\n// ============================================================================\r\n\r\nexport interface SkeletonCardProps {\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Show action buttons placeholder */\r\n showActions?: boolean;\r\n /** Number of text lines */\r\n lines?: number;\r\n}\r\n\r\n/**\r\n * SkeletonCard - Card skeleton for grid layouts\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonCard />\r\n * <SkeletonCard showActions={false} lines={2} />\r\n * ```\r\n */\r\nexport function SkeletonCard({\r\n className,\r\n showActions = true,\r\n lines = 3,\r\n}: SkeletonCardProps) {\r\n return (\r\n <div className={cn(\"rounded-lg border p-4 space-y-3\", className)}>\r\n <Skeleton className=\"h-5 w-3/4\" />\r\n {Array.from({ length: lines - 1 }).map((_, i) => (\r\n <Skeleton\r\n key={i}\r\n className={cn(\"h-4\", i === lines - 2 ? \"w-5/6\" : \"w-full\")}\r\n />\r\n ))}\r\n {showActions && (\r\n <div className=\"flex gap-2 pt-2\">\r\n <Skeleton className=\"h-8 w-20\" />\r\n <Skeleton className=\"h-8 w-20\" />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON GRID\r\n// ============================================================================\r\n\r\nexport interface SkeletonGridProps {\r\n /** Number of skeleton cards */\r\n cards?: number;\r\n /** Grid columns configuration */\r\n columns?: 1 | 2 | 3 | 4;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Props passed to each SkeletonCard */\r\n cardProps?: Omit<SkeletonCardProps, \"className\">;\r\n}\r\n\r\n/**\r\n * SkeletonGrid - Grid of skeleton cards\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonGrid cards={6} columns={3} />\r\n * ```\r\n */\r\nexport function SkeletonGrid({\r\n cards = 6,\r\n columns = 3,\r\n className,\r\n cardProps,\r\n}: SkeletonGridProps) {\r\n const gridCols = {\r\n 1: \"grid-cols-1\",\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\r\n };\r\n\r\n return (\r\n <div className={cn(\"grid gap-4\", gridCols[columns], className)}>\r\n {Array.from({ length: cards }).map((_, i) => (\r\n <SkeletonCard key={i} {...cardProps} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { LoaderIcon } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ClientSubmitButtonProps {\r\n children: ReactNode;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n loadingText?: string;\r\n className?: string;\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n form?: string;\r\n}\r\n\r\nexport function ClientSubmitButton({\r\n children,\r\n disabled,\r\n loading = false,\r\n loadingText,\r\n className,\r\n variant,\r\n size,\r\n form,\r\n ...props\r\n}: ClientSubmitButtonProps) {\r\n const isDisabled = loading || disabled;\r\n const content = loading && loadingText ? loadingText : children;\r\n\r\n return (\r\n <Button\r\n type=\"submit\"\r\n form={form}\r\n aria-disabled={isDisabled}\r\n aria-busy={loading}\r\n className={cn(\"relative\", className)}\r\n disabled={isDisabled}\r\n variant={variant}\r\n size={size}\r\n {...props}\r\n >\r\n {content}\r\n {loading && (\r\n <span className=\"animate-spin absolute right-4\">\r\n <LoaderIcon />\r\n </span>\r\n )}\r\n <span aria-live=\"polite\" className=\"sr-only\" role=\"status\">\r\n {loading ? \"Loading\" : \"Submit form\"}\r\n </span>\r\n </Button>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode, isValidElement, cloneElement, ReactElement } from \"react\";\r\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from \"@/components/ui/collapsible\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CollapsibleWrapperProps {\r\n children: ReactNode;\r\n trigger: ReactNode;\r\n defaultOpen?: boolean;\r\n open?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n /** @deprecated Use render prop pattern with trigger element instead */\r\n triggerAsChild?: boolean;\r\n triggerVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n triggerSize?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n className?: string;\r\n showChevron?: boolean;\r\n chevronPosition?: \"left\" | \"right\";\r\n disabled?: boolean;\r\n}\r\n\r\nexport function CollapsibleWrapper({\r\n children,\r\n trigger,\r\n defaultOpen = false,\r\n open,\r\n onOpenChange,\r\n triggerAsChild = false,\r\n triggerVariant = \"outline\",\r\n triggerSize = \"sm\",\r\n triggerClassName,\r\n contentClassName,\r\n className,\r\n showChevron = true,\r\n chevronPosition = \"right\",\r\n disabled = false,\r\n ...props\r\n}: CollapsibleWrapperProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n\r\n const isOpen = open !== undefined ? open : internalOpen;\r\n const handleOpenChange = onOpenChange || setInternalOpen;\r\n\r\n const chevronElement = showChevron && (\r\n <div\r\n className={cn(\r\n \"flex items-center\",\r\n chevronPosition === \"left\" && \"order-first mr-2\",\r\n chevronPosition === \"right\" && \"ml-2\"\r\n )}\r\n >\r\n {isOpen ? (\r\n <ChevronUp className=\"h-4 w-4\" />\r\n ) : (\r\n <ChevronDown className=\"h-4 w-4\" />\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <Collapsible\r\n open={isOpen}\r\n onOpenChange={handleOpenChange}\r\n disabled={disabled}\r\n className={cn(\"w-full\", className)}\r\n {...props}\r\n >\r\n {triggerAsChild && isValidElement(trigger) ? (\r\n <CollapsibleTrigger render={trigger as ReactElement} />\r\n ) : (\r\n <CollapsibleTrigger\r\n render={\r\n <Button\r\n variant={triggerVariant}\r\n size={triggerSize}\r\n disabled={disabled}\r\n className={cn(\"justify-between\", triggerClassName)}\r\n />\r\n }\r\n >\r\n {trigger}\r\n {chevronElement}\r\n </CollapsibleTrigger>\r\n )}\r\n\r\n <CollapsibleContent className={cn(\"mt-2\", contentClassName)}>\r\n {children}\r\n </CollapsibleContent>\r\n </Collapsible>\r\n );\r\n}\r\n\r\nexport interface CollapsibleCardProps {\r\n title: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function CollapsibleCard({\r\n title,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapsibleCardProps) {\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n return (\r\n <Collapsible\r\n open={isOpen}\r\n onOpenChange={setIsOpen}\r\n className={cn(\"border rounded-lg overflow-hidden\", className)}\r\n {...props}\r\n >\r\n <CollapsibleTrigger\r\n render={\r\n <div\r\n className={cn(\r\n \"flex items-center justify-between w-full px-4 py-3 cursor-pointer transition-colors hover:bg-secondary/5\",\r\n headerClassName\r\n )}\r\n />\r\n }\r\n >\r\n <span className=\"font-medium\">{title}</span>\r\n <ChevronDown\r\n className={cn(\r\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n />\r\n </CollapsibleTrigger>\r\n <CollapsibleContent>\r\n <div className={cn(\"px-4 py-3 border-t\", contentClassName)}>\r\n {children}\r\n </div>\r\n </CollapsibleContent>\r\n </Collapsible>\r\n );\r\n}\r\n\r\nexport interface CollapsibleSectionProps {\r\n label: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n labelClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function CollapsibleSection({\r\n label,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n labelClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapsibleSectionProps) {\r\n return (\r\n <CollapsibleWrapper\r\n trigger={label}\r\n defaultOpen={defaultOpen}\r\n triggerVariant=\"ghost\"\r\n triggerSize=\"sm\"\r\n triggerClassName={cn(\"h-8 px-2 font-medium justify-between\", labelClassName)}\r\n contentClassName={cn(\"pl-4 mt-1\", contentClassName)}\r\n className={cn(\"space-y-1\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </CollapsibleWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { ReactNode } from \"react\";\r\nimport { AlertTriangle, Loader2 } from \"lucide-react\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n AlertDialogTrigger,\r\n} from \"@/components/ui/alert-dialog\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ConfirmDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n /** Trigger element that opens the dialog */\r\n trigger?: React.ReactElement;\r\n title?: string;\r\n description?: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n isLoading?: boolean;\r\n onConfirm?: () => void;\r\n onCancel?: () => void;\r\n icon?: ReactNode;\r\n children?: ReactNode;\r\n className?: string;\r\n /** Header className */\r\n headerClassName?: string;\r\n /** Description className */\r\n descriptionClassName?: string;\r\n /** Footer className */\r\n footerClassName?: string;\r\n /** Whether to show the cancel button (default: true) */\r\n showCancel?: boolean;\r\n}\r\n\r\nexport function ConfirmDialog({\r\n open,\r\n onOpenChange,\r\n trigger,\r\n title = \"Are you sure?\",\r\n description = \"This action cannot be undone.\",\r\n confirmText = \"Confirm\",\r\n cancelText = \"Cancel\",\r\n variant = \"destructive\",\r\n isLoading = false,\r\n onConfirm,\r\n onCancel,\r\n icon,\r\n children,\r\n className,\r\n headerClassName,\r\n descriptionClassName,\r\n footerClassName,\r\n showCancel = true,\r\n ...props\r\n}: ConfirmDialogProps) {\r\n const handleConfirm = () => {\r\n if (onConfirm) {\r\n onConfirm();\r\n }\r\n };\r\n\r\n const handleCancel = () => {\r\n if (onCancel) {\r\n onCancel();\r\n } else {\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n // Extract children and element for Base UI render prop pattern\r\n const triggerChildren = (trigger?.props as { children?: ReactNode })?.children;\r\n const triggerElement = trigger\r\n ? React.cloneElement(trigger, { children: undefined } as Record<string, unknown>)\r\n : null;\r\n\r\n return (\r\n <AlertDialog open={open} onOpenChange={onOpenChange} {...props}>\r\n {triggerElement && (\r\n <AlertDialogTrigger render={triggerElement}>\r\n {triggerChildren}\r\n </AlertDialogTrigger>\r\n )}\r\n <AlertDialogContent className={cn(\"max-w-md\", className)}>\r\n <AlertDialogHeader className={cn(headerClassName)}>\r\n <AlertDialogTitle className=\"flex items-center gap-2\">\r\n {icon ||\r\n (variant === \"destructive\" && (\r\n <AlertTriangle className=\"h-5 w-5 text-destructive\" />\r\n ))}\r\n {title}\r\n </AlertDialogTitle>\r\n {description && (\r\n <AlertDialogDescription className={cn(descriptionClassName)}>\r\n {description}\r\n </AlertDialogDescription>\r\n )}\r\n </AlertDialogHeader>\r\n\r\n {children && <div className=\"py-4\">{children}</div>}\r\n\r\n <AlertDialogFooter className={cn(footerClassName)}>\r\n {showCancel && (\r\n <AlertDialogCancel onClick={handleCancel} disabled={isLoading}>\r\n {cancelText}\r\n </AlertDialogCancel>\r\n )}\r\n {onConfirm && (\r\n <AlertDialogAction\r\n onClick={handleConfirm}\r\n disabled={isLoading}\r\n variant={variant}\r\n >\r\n {isLoading ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n Loading...\r\n </div>\r\n ) : (\r\n confirmText\r\n )}\r\n </AlertDialogAction>\r\n )}\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n );\r\n}\r\n\r\n// Specialized delete confirmation dialog\r\nexport interface DeleteConfirmDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onConfirm?: () => void;\r\n isLoading?: boolean;\r\n itemName?: string;\r\n itemDetails?: ReactNode;\r\n}\r\n\r\nexport function DeleteConfirmDialog({\r\n open,\r\n onOpenChange,\r\n onConfirm,\r\n isLoading = false,\r\n itemName = \"item\",\r\n itemDetails,\r\n ...props\r\n}: DeleteConfirmDialogProps) {\r\n return (\r\n <ConfirmDialog\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title=\"Delete Item\"\r\n description={`Are you sure you want to delete this ${itemName}? This action cannot be undone.`}\r\n confirmText=\"Yes, Delete\"\r\n cancelText=\"No\"\r\n variant=\"destructive\"\r\n isLoading={isLoading}\r\n onConfirm={onConfirm}\r\n {...props}\r\n >\r\n {itemDetails && (\r\n <div className=\"bg-muted/50 p-3 rounded-md\">\r\n <div className=\"text-sm space-y-1\">{itemDetails}</div>\r\n </div>\r\n )}\r\n </ConfirmDialog>\r\n );\r\n}\r\n\r\n// Info/Warning alert (no cancel button)\r\nexport interface InfoAlertProps extends Omit<ConfirmDialogProps, \"showCancel\" | \"variant\"> {\r\n confirmText?: string;\r\n}\r\n\r\n/**\r\n * InfoAlert - Information/warning alert with only confirm button (no cancel)\r\n *\r\n * @example\r\n * ```tsx\r\n * <InfoAlert\r\n * open={open}\r\n * onOpenChange={setOpen}\r\n * title=\"Session expired\"\r\n * description=\"Please log in again\"\r\n * confirmText=\"OK\"\r\n * onConfirm={() => setOpen(false)}\r\n * />\r\n * ```\r\n */\r\nexport function InfoAlert({\r\n title,\r\n description,\r\n confirmText = \"OK\",\r\n onConfirm,\r\n onOpenChange,\r\n ...props\r\n}: InfoAlertProps) {\r\n return (\r\n <ConfirmDialog\r\n title={title}\r\n description={description}\r\n confirmText={confirmText}\r\n variant=\"default\"\r\n showCancel={false}\r\n onConfirm={onConfirm || (() => onOpenChange(false))}\r\n onOpenChange={onOpenChange}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { AlertCircle, RefreshCw } from \"lucide-react\";\r\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ErrorStateProps {\r\n /** Error title */\r\n title?: string;\r\n /** Error message or Error object */\r\n error: string | Error | { message?: string } | null | undefined;\r\n /** Optional retry callback */\r\n onRetry?: () => void;\r\n /** Alert variant */\r\n variant?: \"default\" | \"destructive\";\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom icon */\r\n icon?: ReactNode;\r\n}\r\n\r\n/**\r\n * ErrorState Component\r\n *\r\n * Reusable error display component with retry functionality\r\n * Used for consistent error handling across pages\r\n */\r\nexport function ErrorState({\r\n title = \"Error\",\r\n error,\r\n onRetry,\r\n variant = \"destructive\",\r\n className,\r\n icon,\r\n}: ErrorStateProps) {\r\n const errorMessage =\r\n typeof error === \"string\"\r\n ? error\r\n : (error as { message?: string })?.message || \"Something went wrong. Please try again.\";\r\n\r\n return (\r\n <Alert variant={variant} className={cn(className)}>\r\n {icon || <AlertCircle className=\"h-4 w-4\" />}\r\n <AlertTitle>{title}</AlertTitle>\r\n <AlertDescription className=\"mt-2 flex flex-col gap-3\">\r\n <p className=\"text-sm\">{errorMessage}</p>\r\n {onRetry && (\r\n <div>\r\n <Button\r\n onClick={onRetry}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"gap-2\"\r\n >\r\n <RefreshCw className=\"h-3 w-3\" />\r\n Try Again\r\n </Button>\r\n </div>\r\n )}\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\nexport interface ErrorStateInlineProps {\r\n /** Error message or Error object */\r\n error: string | Error | { message?: string } | null | undefined;\r\n /** Optional retry callback */\r\n onRetry?: () => void;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom icon */\r\n icon?: ReactNode;\r\n}\r\n\r\n/**\r\n * Inline ErrorState variant - more compact for table cells\r\n */\r\nexport function ErrorStateInline({\r\n error,\r\n onRetry,\r\n className,\r\n icon,\r\n}: ErrorStateInlineProps) {\r\n const errorMessage =\r\n typeof error === \"string\"\r\n ? error\r\n : (error as { message?: string })?.message || \"Error loading data\";\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center gap-2 text-sm text-destructive\",\r\n className\r\n )}\r\n >\r\n {icon || <AlertCircle className=\"h-4 w-4\" />}\r\n <span>{errorMessage}</span>\r\n {onRetry && (\r\n <Button\r\n onClick={onRetry}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 gap-1\"\r\n >\r\n <RefreshCw className=\"h-3 w-3\" />\r\n Retry\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { Copy, Check } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Simple clipboard utility\r\nasync function copyToClipboard(\r\n text: string,\r\n options?: { showToast?: boolean; successMessage?: string; errorMessage?: string }\r\n): Promise<boolean> {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface CopyButtonProps {\r\n value: string;\r\n className?: string;\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n showToast?: boolean;\r\n toastMessage?: string;\r\n errorMessage?: string;\r\n timeout?: number;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function CopyButton({\r\n value,\r\n className,\r\n size = \"sm\",\r\n variant = \"ghost\",\r\n showToast = true,\r\n toastMessage = \"Copied to clipboard\",\r\n errorMessage = \"Failed to copy to clipboard\",\r\n timeout = 2000,\r\n children,\r\n ...props\r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n if (!value) return;\r\n\r\n const success = await copyToClipboard(value, {\r\n showToast,\r\n successMessage: toastMessage,\r\n errorMessage,\r\n });\r\n\r\n if (success) {\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), timeout);\r\n }\r\n };\r\n\r\n return (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\"h-6 w-6 p-0\", className)}\r\n onClick={handleCopy}\r\n disabled={!value}\r\n {...props}\r\n >\r\n {children ||\r\n (copied ? (\r\n <Check className=\"h-3 w-3 text-green-600\" />\r\n ) : (\r\n <Copy className=\"h-3 w-3\" />\r\n ))}\r\n </Button>\r\n );\r\n}\r\n\r\nexport interface CopyTextProps {\r\n value: string;\r\n displayValue?: string;\r\n className?: string;\r\n textClassName?: string;\r\n buttonClassName?: string;\r\n maxLength?: number;\r\n showButton?: boolean;\r\n}\r\n\r\nexport function CopyText({\r\n value,\r\n displayValue,\r\n className,\r\n textClassName,\r\n buttonClassName,\r\n maxLength = 30,\r\n showButton = true,\r\n ...buttonProps\r\n}: CopyTextProps) {\r\n const truncatedValue =\r\n displayValue ||\r\n (value && value.length > maxLength\r\n ? `${value.substring(0, maxLength)}...`\r\n : value || \"N/A\");\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n <span className={cn(\"font-medium\", textClassName)} title={value || \"N/A\"}>\r\n {truncatedValue}\r\n </span>\r\n {showButton && value && (\r\n <CopyButton value={value} className={buttonClassName} {...buttonProps} />\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CopyCodeBlockProps {\r\n value: string;\r\n className?: string;\r\n language?: string;\r\n showLineNumbers?: boolean;\r\n}\r\n\r\nexport function CopyCodeBlock({\r\n value,\r\n className,\r\n language,\r\n showLineNumbers = false,\r\n ...buttonProps\r\n}: CopyCodeBlockProps) {\r\n return (\r\n <div className={cn(\"relative group\", className)}>\r\n <pre className=\"bg-muted p-4 rounded-md overflow-x-auto text-sm\">\r\n <code className={language ? `language-${language}` : \"\"}>{value}</code>\r\n </pre>\r\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <CopyButton value={value} variant=\"secondary\" size=\"sm\" {...buttonProps} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport {\r\n ColumnDef,\r\n flexRender,\r\n getCoreRowModel,\r\n getSortedRowModel,\r\n SortingState,\r\n useReactTable,\r\n RowSelectionState,\r\n} from \"@tanstack/react-table\";\r\nimport { useState, useRef, useEffect, useCallback, useMemo, RefObject } from \"react\";\r\nimport { ArrowUpDown, ArrowUp, ArrowDown, ChevronLeft, ChevronRight, Search } from \"lucide-react\";\r\nimport { useScrollDetection } from \"../hooks/use-scroll-detection\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { ScrollArea, ScrollBar } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\nimport { ApiPagination, ApiPaginationData } from \"./api-pagination\";\r\n\r\n// Scroll detection hook moved to hooks/use-scroll-detection.ts\r\n\r\ninterface ScrollButtonProps {\r\n direction: \"left\" | \"right\";\r\n onClick: () => void;\r\n visible: boolean;\r\n className?: string;\r\n}\r\n\r\nconst ScrollButton = ({ direction, onClick, visible, className }: ScrollButtonProps) => {\r\n if (!visible) return null;\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onClick();\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n \"absolute top-1/2 -translate-y-1/2 z-50\",\r\n \"flex items-center justify-center\",\r\n \"size-10 rounded-md shadow-lg border-2 border-border\",\r\n \"bg-background hover:bg-muted\",\r\n \"transition-transform duration-200\",\r\n \"hover:scale-105 active:scale-95\",\r\n direction === \"left\" ? \"left-2\" : \"right-2\",\r\n className\r\n )}\r\n onClick={handleClick}\r\n onMouseDown={(e) => e.stopPropagation()}\r\n aria-label={`Scroll ${direction}`}\r\n >\r\n {direction === \"left\" ? (\r\n <ChevronLeft className=\"size-5\" />\r\n ) : (\r\n <ChevronRight className=\"size-5\" />\r\n )}\r\n </button>\r\n );\r\n};\r\n\r\nexport interface DataTablePaginationProps extends Partial<ApiPaginationData> {\r\n onPageChange?: (page: number) => void;\r\n}\r\n\r\nexport interface DataTableProps<TData, TValue> {\r\n columns: ColumnDef<TData, TValue>[];\r\n data: TData[];\r\n isLoading?: boolean;\r\n pagination?: DataTablePaginationProps;\r\n enableSorting?: boolean;\r\n enableRowSelection?: boolean;\r\n onRowSelectionChange?: (selectedRows: TData[]) => void;\r\n className?: string;\r\n}\r\n\r\nexport function DataTable<TData, TValue>({\r\n columns,\r\n data,\r\n isLoading = false,\r\n pagination,\r\n enableSorting = false,\r\n enableRowSelection = false,\r\n onRowSelectionChange,\r\n className,\r\n}: DataTableProps<TData, TValue>) {\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\r\n const scrollAreaRef = useRef<HTMLDivElement>(null);\r\n const { canScrollLeft, canScrollRight, isScrollable, checkScroll } =\r\n useScrollDetection(scrollAreaRef);\r\n\r\n const {\r\n total = 0,\r\n limit = 10,\r\n pages = 1,\r\n page = 1,\r\n hasNext = false,\r\n hasPrev = false,\r\n onPageChange = () => {},\r\n } = pagination ?? {};\r\n\r\n const table = useReactTable({\r\n data,\r\n columns,\r\n getCoreRowModel: getCoreRowModel(),\r\n getSortedRowModel: enableSorting ? getSortedRowModel() : undefined,\r\n onSortingChange: setSorting,\r\n onRowSelectionChange: enableRowSelection\r\n ? (updater) => {\r\n setRowSelection(updater);\r\n if (onRowSelectionChange) {\r\n const newSelection =\r\n typeof updater === \"function\" ? updater(rowSelection) : updater;\r\n const selectedRows = data.filter((_, index) => newSelection[index]);\r\n onRowSelectionChange(selectedRows);\r\n }\r\n }\r\n : undefined,\r\n state: {\r\n sorting,\r\n rowSelection: enableRowSelection ? rowSelection : undefined,\r\n },\r\n enableRowSelection,\r\n });\r\n\r\n const scrollHorizontally = useCallback((direction: \"left\" | \"right\") => {\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n const scrollAmount = Math.min(300, scrollContainer.clientWidth * 0.8);\r\n scrollContainer.scrollBy({\r\n left: direction === \"left\" ? -scrollAmount : scrollAmount,\r\n behavior: \"smooth\",\r\n });\r\n }, []);\r\n\r\n const handleWheel = useCallback(\r\n (e: WheelEvent) => {\r\n if (!isScrollable) return;\r\n\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer?.contains(e.target as Node)) return;\r\n\r\n if (e.shiftKey || Math.abs(e.deltaX) > Math.abs(e.deltaY)) {\r\n e.preventDefault();\r\n const delta = e.deltaY || e.deltaX;\r\n scrollContainer.scrollBy({\r\n left: delta,\r\n behavior: \"auto\",\r\n });\r\n }\r\n },\r\n [isScrollable]\r\n );\r\n\r\n useEffect(() => {\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n checkScroll();\r\n\r\n scrollContainer.addEventListener(\"scroll\", checkScroll, { passive: true });\r\n scrollContainer.addEventListener(\"wheel\", handleWheel, { passive: false });\r\n\r\n return () => {\r\n scrollContainer.removeEventListener(\"scroll\", checkScroll);\r\n scrollContainer.removeEventListener(\"wheel\", handleWheel);\r\n };\r\n }, [checkScroll, handleWheel]);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(checkScroll, 150);\r\n return () => clearTimeout(timer);\r\n }, [data, checkScroll]);\r\n\r\n const loadingState = useMemo(\r\n () => (\r\n <div className=\"w-full h-full min-h-[24rem] flex items-center justify-center bg-background/50 rounded-lg border border-border\">\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent\" />\r\n <p className=\"text-sm text-muted-foreground\">Loading data...</p>\r\n </div>\r\n </div>\r\n ),\r\n []\r\n );\r\n\r\n const emptyState = useMemo(\r\n () => (\r\n <TableRow>\r\n <TableCell colSpan={columns.length} className=\"h-32 text-center\">\r\n <div className=\"flex flex-col items-center justify-center py-8\">\r\n <div className=\"rounded-full bg-muted p-3 mb-4\">\r\n <Search className=\"h-6 w-6 text-muted-foreground\" />\r\n </div>\r\n <p className=\"text-lg font-medium text-foreground mb-1\">No results found</p>\r\n <p className=\"text-sm text-muted-foreground\">\r\n Try adjusting your search or filters\r\n </p>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ),\r\n [columns.length]\r\n );\r\n\r\n if (isLoading) {\r\n return loadingState;\r\n }\r\n\r\n return (\r\n <div className={cn(\"flex flex-col h-full gap-4\", className)}>\r\n <div className=\"flex-1 min-h-0 rounded-lg border overflow-hidden bg-background shadow-sm relative\">\r\n <ScrollArea ref={scrollAreaRef} className=\"h-full w-full\">\r\n <div className=\"min-w-full\">\r\n <Table>\r\n <TableHeader className=\"sticky top-0 z-10 bg-muted/50 backdrop-blur-sm\">\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <TableRow\r\n key={headerGroup.id}\r\n className=\"border-b border-border hover:bg-transparent\"\r\n >\r\n {headerGroup.headers.map((header) => (\r\n <TableHead\r\n key={header.id}\r\n className={cn(\r\n \"bg-muted/50 font-semibold text-foreground h-12 px-4 whitespace-nowrap\",\r\n \"first:rounded-tl-lg last:rounded-tr-lg\"\r\n )}\r\n >\r\n {header.isPlaceholder ? null : enableSorting &&\r\n header.column.getCanSort() ? (\r\n <Button\r\n variant=\"ghost\"\r\n onClick={() =>\r\n header.column.toggleSorting(\r\n header.column.getIsSorted() === \"asc\"\r\n )\r\n }\r\n className=\"h-auto p-0 font-semibold hover:bg-transparent whitespace-nowrap\"\r\n >\r\n {flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )}\r\n {header.column.getIsSorted() === \"asc\" ? (\r\n <ArrowUp className=\"ml-2 h-4 w-4\" />\r\n ) : header.column.getIsSorted() === \"desc\" ? (\r\n <ArrowDown className=\"ml-2 h-4 w-4\" />\r\n ) : (\r\n <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\r\n )}\r\n </Button>\r\n ) : (\r\n flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )\r\n )}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n\r\n <TableBody>\r\n {table.getRowModel().rows?.length ? (\r\n table.getRowModel().rows.map((row, index) => (\r\n <TableRow\r\n key={row.id}\r\n className={cn(\r\n \"hover:bg-muted/50 transition-colors border-b border-border/50\",\r\n index % 2 === 0 ? \"bg-background\" : \"bg-muted/20\"\r\n )}\r\n >\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell\r\n key={cell.id}\r\n className=\"px-4 py-3 text-sm whitespace-nowrap\"\r\n >\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))\r\n ) : (\r\n emptyState\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n <ScrollBar orientation=\"horizontal\" />\r\n </ScrollArea>\r\n\r\n {/* Scroll navigation buttons */}\r\n {canScrollLeft && (\r\n <ScrollButton\r\n direction=\"left\"\r\n onClick={() => scrollHorizontally(\"left\")}\r\n visible={true}\r\n />\r\n )}\r\n {canScrollRight && (\r\n <ScrollButton\r\n direction=\"right\"\r\n onClick={() => scrollHorizontally(\"right\")}\r\n visible={true}\r\n />\r\n )}\r\n </div>\r\n\r\n {pagination && (\r\n <ApiPagination\r\n total={total}\r\n limit={limit}\r\n pages={pages}\r\n page={page}\r\n hasNext={hasNext}\r\n hasPrev={hasPrev}\r\n onPageChange={onPageChange}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { type ReactNode } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogTrigger,\r\n} from \"@/components/ui/dialog\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Size variants configuration\r\n// Using !important to override base dialog.tsx sm:max-w-md constraint\r\nconst SIZE_VARIANTS = {\r\n sm: \"sm:!max-w-sm\",\r\n default: \"sm:!max-w-md\",\r\n lg: \"sm:!max-w-lg md:!max-w-2xl\",\r\n xl: \"sm:!max-w-2xl md:!max-w-4xl\",\r\n \"2xl\": \"sm:!max-w-4xl md:!max-w-6xl\",\r\n full: \"!max-w-[95vw] !h-[95vh]\",\r\n} as const;\r\n\r\ntype SizeVariant = keyof typeof SIZE_VARIANTS;\r\n\r\nexport interface DialogWrapperProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n trigger?: ReactNode;\r\n size?: SizeVariant;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n hideHeader?: boolean;\r\n hideTitle?: boolean;\r\n hideDescription?: boolean;\r\n hideCloseButton?: boolean;\r\n}\r\n\r\nexport function DialogWrapper({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n footer,\r\n trigger,\r\n size = \"default\",\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n hideHeader = false,\r\n hideTitle = false,\r\n hideDescription = false,\r\n hideCloseButton = false,\r\n ...props\r\n}: DialogWrapperProps) {\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange} {...props}>\r\n {trigger && <DialogTrigger render={trigger} />}\r\n <DialogContent\r\n showCloseButton={!hideCloseButton}\r\n className={cn(SIZE_VARIANTS[size], contentClassName, className)}\r\n >\r\n {!hideHeader && (\r\n <DialogHeader className={cn(\"space-y-2\", headerClassName)}>\r\n {hideTitle ? (\r\n <DialogTitle className=\"sr-only\">{title || \"Dialog\"}</DialogTitle>\r\n ) : (\r\n <DialogTitle>{title || \"Dialog\"}</DialogTitle>\r\n )}\r\n {description &&\r\n (hideDescription ? (\r\n <DialogDescription className=\"sr-only\">\r\n {description}\r\n </DialogDescription>\r\n ) : (\r\n <DialogDescription>{description}</DialogDescription>\r\n ))}\r\n </DialogHeader>\r\n )}\r\n\r\n {children}\r\n\r\n {footer && (\r\n <DialogFooter className={cn(\"gap-2\", footerClassName)}>\r\n {footer}\r\n </DialogFooter>\r\n )}\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport interface FormDialogProps extends Omit<DialogWrapperProps, \"footer\"> {\r\n onSubmit?: () => void;\r\n onCancel?: () => void;\r\n submitText?: string;\r\n cancelText?: string;\r\n isLoading?: boolean;\r\n submitDisabled?: boolean;\r\n}\r\n\r\nexport function FormDialog({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n onSubmit,\r\n onCancel,\r\n submitText = \"Save\",\r\n cancelText = \"Cancel\",\r\n isLoading = false,\r\n submitDisabled = false,\r\n ...props\r\n}: FormDialogProps) {\r\n const footer = (\r\n <>\r\n <Button\r\n variant=\"outline\"\r\n onClick={onCancel || (() => onOpenChange(false))}\r\n disabled={isLoading}\r\n >\r\n {cancelText}\r\n </Button>\r\n <Button onClick={onSubmit} disabled={isLoading || submitDisabled}>\r\n {isLoading ? \"Loading...\" : submitText}\r\n </Button>\r\n </>\r\n );\r\n\r\n return (\r\n <DialogWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </DialogWrapper>\r\n );\r\n}\r\n\r\n// Export base components for composition\r\nexport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogFooter,\r\n};\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { MoreHorizontal, ChevronDown, LucideIcon } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSeparator,\r\n DropdownMenuLabel,\r\n DropdownMenuGroup,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n} from \"@/components/ui/dropdown-menu\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface DropdownWrapperProps {\r\n trigger: React.ReactNode;\r\n children: React.ReactNode;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n sideOffset?: number;\r\n className?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function DropdownWrapper({\r\n trigger,\r\n children,\r\n align = \"end\",\r\n side = \"bottom\",\r\n sideOffset = 4,\r\n className,\r\n contentClassName,\r\n ...props\r\n}: DropdownWrapperProps) {\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align={align}\r\n side={side}\r\n sideOffset={sideOffset}\r\n className={cn(\"min-w-[160px]\", contentClassName)}\r\n >\r\n {children}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface ActionDropdownItem {\r\n type?: \"item\" | \"separator\" | \"label\" | \"group\";\r\n key?: string;\r\n label?: string | (() => string);\r\n icon?: LucideIcon;\r\n onClick?: (e: React.MouseEvent) => void;\r\n disabled?: boolean;\r\n hidden?: boolean;\r\n variant?: \"default\" | \"destructive\";\r\n shortcut?: string;\r\n className?: string;\r\n items?: ActionDropdownItem[];\r\n}\r\n\r\nexport interface ActionDropdownProps {\r\n items?: ActionDropdownItem[];\r\n triggerIcon?: LucideIcon;\r\n triggerVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n triggerSize?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n triggerClassName?: string;\r\n triggerLabel?: string;\r\n showOnHover?: boolean;\r\n align?: \"start\" | \"center\" | \"end\";\r\n contentClassName?: string;\r\n onOpenChange?: (open: boolean) => void;\r\n stopPropagation?: boolean;\r\n}\r\n\r\nexport function ActionDropdown({\r\n items = [],\r\n triggerIcon: TriggerIcon = MoreHorizontal,\r\n triggerVariant = \"ghost\",\r\n triggerSize = \"sm\",\r\n triggerClassName,\r\n triggerLabel,\r\n showOnHover = false,\r\n align = \"end\",\r\n contentClassName,\r\n onOpenChange,\r\n stopPropagation = true,\r\n ...props\r\n}: ActionDropdownProps) {\r\n const handleTriggerClick = (e: React.MouseEvent) => {\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n const trigger = (\r\n <Button\r\n variant={triggerVariant}\r\n size={triggerSize}\r\n onClick={handleTriggerClick}\r\n className={cn(\r\n showOnHover && \"opacity-0 group-hover:opacity-100 transition-opacity\",\r\n triggerClassName\r\n )}\r\n >\r\n <TriggerIcon className=\"h-4 w-4\" />\r\n {triggerLabel && <span className=\"ml-2\">{triggerLabel}</span>}\r\n <span className=\"sr-only\">Open menu</span>\r\n </Button>\r\n );\r\n\r\n const handleItemClick = (item: ActionDropdownItem) => (e: React.MouseEvent) => {\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n item.onClick?.(e);\r\n };\r\n\r\n return (\r\n <DropdownMenu onOpenChange={onOpenChange} {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align={align}\r\n className={cn(\"min-w-[180px]\", contentClassName)}\r\n >\r\n {items.map((item, index) => {\r\n if (item.hidden) return null;\r\n\r\n if (item.type === \"separator\") {\r\n return <DropdownMenuSeparator key={item.key || `separator-${index}`} />;\r\n }\r\n\r\n if (item.type === \"label\") {\r\n return (\r\n <DropdownMenuGroup key={item.key || `label-${index}`}>\r\n <DropdownMenuLabel className={item.className}>\r\n {item.label}\r\n </DropdownMenuLabel>\r\n </DropdownMenuGroup>\r\n );\r\n }\r\n\r\n if (item.type === \"group\") {\r\n return (\r\n <DropdownMenuGroup key={item.key || `group-${index}`}>\r\n {item.items?.map((groupItem, groupIndex) => {\r\n if (groupItem.hidden) return null;\r\n\r\n const GroupItemIcon = groupItem.icon;\r\n const groupItemLabel =\r\n typeof groupItem.label === \"function\" ? groupItem.label() : groupItem.label;\r\n return (\r\n <DropdownMenuItem\r\n key={groupItem.key || `group-item-${groupIndex}`}\r\n onClick={handleItemClick(groupItem)}\r\n disabled={groupItem.disabled}\r\n className={cn(\r\n groupItem.variant === \"destructive\" &&\r\n \"text-destructive focus:text-destructive\",\r\n groupItem.className\r\n )}\r\n >\r\n {GroupItemIcon && <GroupItemIcon className=\"h-4 w-4\" />}\r\n <span>{groupItemLabel}</span>\r\n {groupItem.shortcut && (\r\n <span className=\"ml-auto text-xs tracking-widest text-muted-foreground\">\r\n {groupItem.shortcut}\r\n </span>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuGroup>\r\n );\r\n }\r\n\r\n const ItemIcon = item.icon;\r\n const displayLabel =\r\n typeof item.label === \"function\" ? item.label() : item.label;\r\n\r\n return (\r\n <DropdownMenuItem\r\n key={item.key || `item-${index}`}\r\n onClick={handleItemClick(item)}\r\n disabled={item.disabled}\r\n className={cn(\r\n item.variant === \"destructive\" &&\r\n \"text-destructive focus:text-destructive\",\r\n item.className\r\n )}\r\n >\r\n {ItemIcon && <ItemIcon className=\"h-4 w-4\" />}\r\n <span>{displayLabel}</span>\r\n {item.shortcut && (\r\n <span className=\"ml-auto text-xs tracking-widest text-muted-foreground\">\r\n {item.shortcut}\r\n </span>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface SelectDropdownOption {\r\n value: string;\r\n label: string;\r\n icon?: LucideIcon;\r\n}\r\n\r\nexport interface SelectDropdownProps {\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function SelectDropdown({\r\n value,\r\n onValueChange,\r\n placeholder = \"Select option...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: SelectDropdownProps) {\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n !selectedOption && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n {selectedOption ? selectedOption.label : placeholder}\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n {options.map((option) => (\r\n <DropdownMenuItem\r\n key={option.value}\r\n onClick={() => onValueChange?.(option.value)}\r\n className={cn(\"cursor-pointer\", value === option.value && \"bg-accent\")}\r\n >\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface CheckboxDropdownProps {\r\n values?: string[];\r\n onValuesChange?: (values: string[]) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n showSelectedCount?: boolean;\r\n}\r\n\r\nexport function CheckboxDropdown({\r\n values = [],\r\n onValuesChange,\r\n placeholder = \"Select options...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n showSelectedCount = true,\r\n ...props\r\n}: CheckboxDropdownProps) {\r\n const selectedOptions = options.filter((option) => values.includes(option.value));\r\n const displayText =\r\n selectedOptions.length > 0\r\n ? showSelectedCount\r\n ? `${selectedOptions.length} selected`\r\n : selectedOptions.map((opt) => opt.label).join(\", \")\r\n : placeholder;\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n selectedOptions.length === 0 && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n <span className=\"truncate\">{displayText}</span>\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n const handleCheckedChange = (optionValue: string, checked: boolean) => {\r\n if (checked) {\r\n onValuesChange?.([...values, optionValue]);\r\n } else {\r\n onValuesChange?.(values.filter((value) => value !== optionValue));\r\n }\r\n };\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n {options.map((option) => (\r\n <DropdownMenuCheckboxItem\r\n key={option.value}\r\n checked={values.includes(option.value)}\r\n onCheckedChange={(checked: boolean) => handleCheckedChange(option.value, checked)}\r\n >\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuCheckboxItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface RadioDropdownProps {\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function RadioDropdown({\r\n value,\r\n onValueChange,\r\n placeholder = \"Select option...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: RadioDropdownProps) {\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n !selectedOption && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n {selectedOption ? selectedOption.label : placeholder}\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n <DropdownMenuRadioGroup value={value} onValueChange={onValueChange}>\r\n {options.map((option) => (\r\n <DropdownMenuRadioItem key={option.value} value={option.value}>\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuRadioItem>\r\n ))}\r\n </DropdownMenuRadioGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ComponentType, ReactNode } from \"react\";\r\nimport { LucideProps } from \"lucide-react\";\r\nimport { CopyText } from \"./copy-button\";\r\n\r\nexport interface InfoRowProps {\r\n label: string;\r\n value: ReactNode;\r\n copyable?: boolean;\r\n icon?: ComponentType<LucideProps>;\r\n}\r\n\r\nexport function InfoRow({ label, value, copyable = false, icon: Icon }: InfoRowProps) {\r\n if (!value && value !== 0) return null;\r\n\r\n return (\r\n <div className=\"flex flex-col sm:flex-row sm:justify-between sm:items-center py-3 gap-2 group hover:bg-muted rounded-md px-3 -mx-3 transition-colors\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />}\r\n <span className=\"text-sm font-medium text-muted-foreground truncate\">{label}</span>\r\n </div>\r\n <div className=\"sm:text-right min-w-0 flex-shrink-0\">\r\n {copyable ? (\r\n <CopyText\r\n value={String(value)}\r\n textClassName=\"text-foreground font-semibold\"\r\n maxLength={40}\r\n className=\"justify-start sm:justify-end\"\r\n />\r\n ) : (\r\n <span\r\n className=\"font-semibold text-foreground block truncate max-w-full sm:max-w-[250px]\"\r\n title={value?.toString() || \"N/A\"}\r\n >\r\n {value?.toString() || \"N/A\"}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { cva, VariantProps } from \"class-variance-authority\";\r\nimport { Item, ItemContent, ItemDescription } from \"@/components/ui/item\";\r\nimport { cn } from \"../utils\";\r\n\r\n/**\r\n * Item Component Helpers\r\n */\r\n\r\nconst iconItemMediaVariants = cva(\r\n \"rounded-xl flex items-center justify-center shrink-0\",\r\n {\r\n variants: {\r\n iconBg: {\r\n primary: \"bg-primary/10 text-primary\",\r\n gold: \"bg-primary/20 text-primary\",\r\n muted: \"bg-muted text-foreground\",\r\n gradient: \"bg-gradient-to-br from-primary/20 to-primary/10 text-primary\",\r\n none: \"bg-transparent\",\r\n },\r\n iconSize: {\r\n sm: \"size-8\",\r\n md: \"size-10 md:size-12\",\r\n lg: \"size-12 md:size-14\",\r\n xl: \"size-16 md:size-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n iconBg: \"primary\",\r\n iconSize: \"md\",\r\n },\r\n }\r\n);\r\n\r\nconst iconSizeMap = {\r\n sm: 16,\r\n md: 20,\r\n lg: 24,\r\n xl: 32,\r\n};\r\n\r\nexport interface IconItemMediaProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof iconItemMediaVariants> {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const IconItemMedia = React.memo(function IconItemMedia({\r\n icon,\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n className,\r\n children,\r\n ...props\r\n}: IconItemMediaProps) {\r\n return (\r\n <div\r\n data-slot=\"item-media\"\r\n role=\"presentation\"\r\n className={cn(iconItemMediaVariants({ iconBg, iconSize }), className)}\r\n {...props}\r\n >\r\n {children || icon}\r\n </div>\r\n );\r\n});\r\n\r\nIconItemMedia.displayName = \"IconItemMedia\";\r\n\r\nexport interface FeatureItemProps {\r\n icon?: React.ReactNode;\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"gradient-light\" | \"gradient\";\r\n size?: \"sm\" | \"default\" | \"lg\";\r\n layout?: \"vertical\" | \"horizontal\";\r\n titleAs?: React.ElementType;\r\n className?: string;\r\n titleClassName?: string;\r\n descriptionClassName?: string;\r\n iconClassName?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const FeatureItem = React.memo(function FeatureItem({\r\n icon,\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n title,\r\n description,\r\n variant = \"outline\",\r\n size = \"default\",\r\n layout = \"vertical\",\r\n titleAs = \"h3\",\r\n className,\r\n titleClassName,\r\n descriptionClassName,\r\n iconClassName,\r\n children,\r\n ...props\r\n}: FeatureItemProps) {\r\n const hasGradientBorder = variant === \"gradient-light\" || variant === \"gradient\";\r\n const TitleComponent = titleAs;\r\n\r\n if (hasGradientBorder) {\r\n return (\r\n <div\r\n className={cn(\r\n variant === \"gradient-light\" ? \"gradient-border-light\" : \"gradient-border\",\r\n \"rounded-2xl hover:gradient-border-hover transition-all duration-300\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"gradient-border-inner rounded-2xl p-6 flex\",\r\n layout === \"vertical\"\r\n ? \"flex-col items-start gap-4\"\r\n : \"flex-row items-center gap-4\"\r\n )}\r\n >\r\n {icon && (\r\n <IconItemMedia\r\n icon={icon}\r\n iconBg={iconBg}\r\n iconSize={iconSize}\r\n className={cn(layout === \"vertical\" ? \"\" : \"shrink-0\", iconClassName)}\r\n />\r\n )}\r\n <div className=\"flex flex-col gap-2 flex-1\">\r\n {title && (\r\n <TitleComponent\r\n className={cn(\r\n \"text-base md:text-lg font-semibold text-foreground leading-tight\",\r\n titleClassName\r\n )}\r\n >\r\n {title}\r\n </TitleComponent>\r\n )}\r\n {description && (\r\n <p\r\n className={cn(\r\n \"text-sm text-muted-foreground leading-relaxed\",\r\n descriptionClassName\r\n )}\r\n >\r\n {description}\r\n </p>\r\n )}\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <Item\r\n variant={variant}\r\n size={size}\r\n className={cn(layout === \"vertical\" && \"flex-col items-start\", className)}\r\n {...props}\r\n >\r\n {icon && (\r\n <IconItemMedia\r\n icon={icon}\r\n iconBg={iconBg}\r\n iconSize={iconSize}\r\n className={iconClassName}\r\n />\r\n )}\r\n <ItemContent>\r\n {title && (\r\n <TitleComponent\r\n data-slot=\"item-title\"\r\n className={cn(\r\n \"text-base md:text-lg font-semibold text-foreground leading-tight mb-2\",\r\n titleClassName\r\n )}\r\n >\r\n {title}\r\n </TitleComponent>\r\n )}\r\n {description && (\r\n <ItemDescription\r\n className={cn(\r\n \"text-sm text-muted-foreground leading-relaxed\",\r\n descriptionClassName\r\n )}\r\n >\r\n {description}\r\n </ItemDescription>\r\n )}\r\n {children}\r\n </ItemContent>\r\n </Item>\r\n );\r\n});\r\n\r\nFeatureItem.displayName = \"FeatureItem\";\r\n\r\nexport interface FeatureListItem {\r\n id?: string;\r\n icon?: React.ReactNode;\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n title: string;\r\n description?: string;\r\n}\r\n\r\nexport interface FeatureListProps {\r\n items?: FeatureListItem[];\r\n columns?: 2 | 3 | 4;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"gradient-light\" | \"gradient\";\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n layout?: \"vertical\" | \"horizontal\";\r\n className?: string;\r\n itemClassName?: string;\r\n}\r\n\r\nexport function FeatureList({\r\n items = [],\r\n columns = 3,\r\n variant = \"outline\",\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n layout = \"vertical\",\r\n className,\r\n itemClassName,\r\n ...props\r\n}: FeatureListProps) {\r\n const gridCols: Record<number, string> = {\r\n 2: \"md:grid-cols-2\",\r\n 3: \"md:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"md:grid-cols-2 lg:grid-cols-4\",\r\n };\r\n\r\n return (\r\n <div\r\n role=\"list\"\r\n className={cn(\"grid gap-6\", gridCols[columns] || gridCols[3], className)}\r\n {...props}\r\n >\r\n {items.map((item, index) => (\r\n <FeatureItem\r\n key={item.id || item.title || index}\r\n icon={item.icon}\r\n iconBg={item.iconBg || iconBg}\r\n iconSize={item.iconSize || iconSize}\r\n title={item.title}\r\n description={item.description}\r\n variant={variant}\r\n layout={layout}\r\n className={itemClassName}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nFeatureList.displayName = \"FeatureList\";\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Moon, Sun } from \"lucide-react\";\r\nimport { useTheme } from \"next-themes\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuTrigger,\r\n} from \"@/components/ui/dropdown-menu\";\r\n\r\nexport function ModeToggle() {\r\n const { theme, setTheme } = useTheme();\r\n const [mounted, setMounted] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n setMounted(true);\r\n }, []);\r\n\r\n if (!mounted) {\r\n return (\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Sun className=\"h-[1.2rem] w-[1.2rem]\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </Button>\r\n );\r\n }\r\n\r\n return (\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger render={<Button variant=\"ghost\" size=\"icon\" />}>\r\n <Sun className=\"h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0\" />\r\n <Moon className=\"absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuRadioGroup value={theme} onValueChange={setTheme}>\r\n <DropdownMenuRadioItem value=\"light\">Light</DropdownMenuRadioItem>\r\n <DropdownMenuRadioItem value=\"dark\">Dark</DropdownMenuRadioItem>\r\n <DropdownMenuRadioItem value=\"system\">System</DropdownMenuRadioItem>\r\n </DropdownMenuRadioGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { ChevronDown } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@/components/ui/command\";\r\nimport { InputGroup, InputGroupAddon, InputGroupInput } from \"@/components/ui/input-group\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface Country {\r\n code: string;\r\n name: string;\r\n dialCode: string;\r\n flag: string;\r\n}\r\n\r\n// Common countries with emoji flags - prioritize UK and common countries\r\nconst COUNTRIES: Country[] = [\r\n { code: \"GB\", name: \"United Kingdom\", dialCode: \"+44\", flag: \"🇬🇧\" },\r\n { code: \"US\", name: \"United States\", dialCode: \"+1\", flag: \"🇺🇸\" },\r\n { code: \"IE\", name: \"Ireland\", dialCode: \"+353\", flag: \"🇮🇪\" },\r\n { code: \"FR\", name: \"France\", dialCode: \"+33\", flag: \"🇫🇷\" },\r\n { code: \"DE\", name: \"Germany\", dialCode: \"+49\", flag: \"🇩🇪\" },\r\n { code: \"IT\", name: \"Italy\", dialCode: \"+39\", flag: \"🇮🇹\" },\r\n { code: \"ES\", name: \"Spain\", dialCode: \"+34\", flag: \"🇪🇸\" },\r\n { code: \"NL\", name: \"Netherlands\", dialCode: \"+31\", flag: \"🇳🇱\" },\r\n { code: \"BE\", name: \"Belgium\", dialCode: \"+32\", flag: \"🇧🇪\" },\r\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\", flag: \"🇵🇹\" },\r\n { code: \"CH\", name: \"Switzerland\", dialCode: \"+41\", flag: \"🇨🇭\" },\r\n { code: \"AT\", name: \"Austria\", dialCode: \"+43\", flag: \"🇦🇹\" },\r\n { code: \"SE\", name: \"Sweden\", dialCode: \"+46\", flag: \"🇸🇪\" },\r\n { code: \"NO\", name: \"Norway\", dialCode: \"+47\", flag: \"🇳🇴\" },\r\n { code: \"DK\", name: \"Denmark\", dialCode: \"+45\", flag: \"🇩🇰\" },\r\n { code: \"PL\", name: \"Poland\", dialCode: \"+48\", flag: \"🇵🇱\" },\r\n { code: \"GR\", name: \"Greece\", dialCode: \"+30\", flag: \"🇬🇷\" },\r\n { code: \"CZ\", name: \"Czech Republic\", dialCode: \"+420\", flag: \"🇨🇿\" },\r\n { code: \"RO\", name: \"Romania\", dialCode: \"+40\", flag: \"🇷🇴\" },\r\n { code: \"HU\", name: \"Hungary\", dialCode: \"+36\", flag: \"🇭🇺\" },\r\n { code: \"AU\", name: \"Australia\", dialCode: \"+61\", flag: \"🇦🇺\" },\r\n { code: \"NZ\", name: \"New Zealand\", dialCode: \"+64\", flag: \"🇳🇿\" },\r\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\", flag: \"🇨🇦\" },\r\n { code: \"IN\", name: \"India\", dialCode: \"+91\", flag: \"🇮🇳\" },\r\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\", flag: \"🇵🇰\" },\r\n { code: \"BD\", name: \"Bangladesh\", dialCode: \"+880\", flag: \"🇧🇩\" },\r\n { code: \"AE\", name: \"UAE\", dialCode: \"+971\", flag: \"🇦🇪\" },\r\n { code: \"SA\", name: \"Saudi Arabia\", dialCode: \"+966\", flag: \"🇸🇦\" },\r\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\", flag: \"🇶🇦\" },\r\n { code: \"KW\", name: \"Kuwait\", dialCode: \"+965\", flag: \"🇰🇼\" },\r\n { code: \"SG\", name: \"Singapore\", dialCode: \"+65\", flag: \"🇸🇬\" },\r\n { code: \"MY\", name: \"Malaysia\", dialCode: \"+60\", flag: \"🇲🇾\" },\r\n { code: \"JP\", name: \"Japan\", dialCode: \"+81\", flag: \"🇯🇵\" },\r\n { code: \"KR\", name: \"South Korea\", dialCode: \"+82\", flag: \"🇰🇷\" },\r\n { code: \"CN\", name: \"China\", dialCode: \"+86\", flag: \"🇨🇳\" },\r\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\", flag: \"🇭🇰\" },\r\n { code: \"TW\", name: \"Taiwan\", dialCode: \"+886\", flag: \"🇹🇼\" },\r\n { code: \"TH\", name: \"Thailand\", dialCode: \"+66\", flag: \"🇹🇭\" },\r\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\", flag: \"🇵🇭\" },\r\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\", flag: \"🇻🇳\" },\r\n { code: \"ID\", name: \"Indonesia\", dialCode: \"+62\", flag: \"🇮🇩\" },\r\n { code: \"ZA\", name: \"South Africa\", dialCode: \"+27\", flag: \"🇿🇦\" },\r\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\", flag: \"🇳🇬\" },\r\n { code: \"EG\", name: \"Egypt\", dialCode: \"+20\", flag: \"🇪🇬\" },\r\n { code: \"BR\", name: \"Brazil\", dialCode: \"+55\", flag: \"🇧🇷\" },\r\n { code: \"MX\", name: \"Mexico\", dialCode: \"+52\", flag: \"🇲🇽\" },\r\n { code: \"AR\", name: \"Argentina\", dialCode: \"+54\", flag: \"🇦🇷\" },\r\n { code: \"TR\", name: \"Turkey\", dialCode: \"+90\", flag: \"🇹🇷\" },\r\n { code: \"RU\", name: \"Russia\", dialCode: \"+7\", flag: \"🇷🇺\" },\r\n { code: \"IL\", name: \"Israel\", dialCode: \"+972\", flag: \"🇮🇱\" },\r\n];\r\n\r\nconst getCountryByCode = (code: string) => COUNTRIES.find((c) => c.code === code);\r\n\r\nexport interface PhoneInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n onChange?: (value: string) => void;\r\n defaultCountry?: string;\r\n}\r\n\r\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\r\n (\r\n {\r\n className,\r\n onChange,\r\n value,\r\n defaultCountry = \"GB\",\r\n disabled,\r\n placeholder = \"Phone number\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [searchValue, setSearchValue] = React.useState(\"\");\r\n\r\n // Parse the value to extract country and number\r\n const parseValue = React.useCallback(\r\n (val: any) => {\r\n const valString = val ? String(val) : \"\";\r\n if (!valString) {\r\n return {\r\n country: getCountryByCode(defaultCountry) || COUNTRIES[0],\r\n number: \"\",\r\n };\r\n }\r\n\r\n // Try to match country by dial code\r\n const cleanVal = valString.replace(/\\s/g, \"\");\r\n for (const country of COUNTRIES) {\r\n if (cleanVal.startsWith(country.dialCode)) {\r\n return {\r\n country,\r\n number: cleanVal.slice(country.dialCode.length),\r\n };\r\n }\r\n }\r\n\r\n // Default to selected country\r\n return {\r\n country: getCountryByCode(defaultCountry) || COUNTRIES[0],\r\n number: cleanVal.replace(/^\\+/, \"\"),\r\n };\r\n },\r\n [defaultCountry]\r\n );\r\n\r\n const { country, number } = parseValue(value);\r\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(country);\r\n\r\n // Update selected country when value changes\r\n React.useEffect(() => {\r\n const parsed = parseValue(value);\r\n setSelectedCountry(parsed.country);\r\n }, [value, parseValue]);\r\n\r\n const handleCountryChange = (newCountry: Country) => {\r\n setSelectedCountry(newCountry);\r\n setIsOpen(false);\r\n // Update the full value with new country code\r\n if (number) {\r\n onChange?.(newCountry.dialCode + number);\r\n }\r\n };\r\n\r\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newNumber = e.target.value.replace(/[^\\d]/g, \"\");\r\n if (newNumber) {\r\n onChange?.(selectedCountry.dialCode + newNumber);\r\n } else {\r\n onChange?.(\"\");\r\n }\r\n };\r\n\r\n return (\r\n <InputGroup className={className}>\r\n <InputGroupAddon align=\"inline-start\" className=\"p-0 overflow-hidden\">\r\n <Popover\r\n open={isOpen}\r\n modal\r\n onOpenChange={(open: boolean) => {\r\n setIsOpen(open);\r\n if (open) setSearchValue(\"\");\r\n }}\r\n >\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className=\"gap-1.5 rounded-none border-r px-3 focus:z-10 min-w-[90px] h-full\"\r\n disabled={disabled}\r\n />\r\n }\r\n >\r\n <span className=\"text-base leading-none\">\r\n {selectedCountry.flag}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {selectedCountry.dialCode}\r\n </span>\r\n <ChevronDown className=\"size-3.5 opacity-50\" />\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[280px] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput\r\n value={searchValue}\r\n onValueChange={setSearchValue}\r\n placeholder=\"Search country...\"\r\n />\r\n <CommandList>\r\n <ScrollArea className=\"h-64\">\r\n <CommandEmpty>No country found.</CommandEmpty>\r\n <CommandGroup>\r\n {COUNTRIES.filter(\r\n (c) =>\r\n c.name.toLowerCase().includes(searchValue.toLowerCase()) ||\r\n c.dialCode.includes(searchValue) ||\r\n c.code.toLowerCase().includes(searchValue.toLowerCase())\r\n ).map((c) => (\r\n <CommandItem\r\n key={c.code}\r\n className=\"gap-2 cursor-pointer\"\r\n onSelect={() => handleCountryChange(c)}\r\n value={`${c.name} ${c.code} ${c.dialCode}`} \r\n >\r\n <span className=\"text-base\">{c.flag}</span>\r\n <span className=\"flex-1 text-sm\">{c.name}</span>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {c.dialCode}\r\n </span>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n </InputGroupAddon>\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"tel\"\r\n inputMode=\"numeric\"\r\n className=\"rounded-s-none\"\r\n placeholder={placeholder}\r\n value={number}\r\n onChange={handleNumberChange}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n </InputGroup>\r\n );\r\n }\r\n);\r\n\r\nPhoneInput.displayName = \"PhoneInput\";\r\n\r\nexport { PhoneInput };\r\n","\"use client\";\r\n\r\nimport { ReactNode, ComponentType } from \"react\";\r\nimport { ChevronDownIcon, ChevronUpIcon, MinusIcon, LucideProps } from \"lucide-react\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface PillProps {\r\n variant?: \"default\" | \"secondary\" | \"destructive\" | \"outline\";\r\n themed?: boolean;\r\n className?: string;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function Pill({\r\n variant = \"secondary\",\r\n themed = false,\r\n className,\r\n ...props\r\n}: PillProps) {\r\n return (\r\n <Badge\r\n className={cn(\"gap-2 rounded-full px-3 py-1.5 font-normal\", className)}\r\n variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport interface PillAvatarProps {\r\n fallback?: string;\r\n className?: string;\r\n src?: string;\r\n alt?: string;\r\n}\r\n\r\nexport function PillAvatar({ fallback, className, src, alt, ...props }: PillAvatarProps) {\r\n return (\r\n <Avatar className={cn(\"-ml-1 h-4 w-4\", className)}>\r\n <AvatarImage src={src} alt={alt} {...props} />\r\n <AvatarFallback>{fallback}</AvatarFallback>\r\n </Avatar>\r\n );\r\n}\r\n\r\nexport interface PillButtonProps {\r\n className?: string;\r\n children?: ReactNode;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function PillButton({ className, ...props }: PillButtonProps) {\r\n return (\r\n <Button\r\n className={cn(\"-my-2 -mr-2 size-6 rounded-full p-0.5 hover:bg-foreground/5\", className)}\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport interface PillStatusProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function PillStatus({ children, className, ...props }: PillStatusProps) {\r\n return (\r\n <div\r\n className={cn(\"flex items-center gap-2 border-r pr-2 font-medium\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface PillIndicatorProps {\r\n variant?: \"success\" | \"error\" | \"warning\" | \"info\";\r\n pulse?: boolean;\r\n}\r\n\r\nexport function PillIndicator({ variant = \"success\", pulse = false }: PillIndicatorProps) {\r\n return (\r\n <span className=\"relative flex size-2\">\r\n {pulse && (\r\n <span\r\n className={cn(\r\n \"absolute inline-flex h-full w-full animate-ping rounded-full opacity-75\",\r\n variant === \"success\" && \"bg-emerald-400\",\r\n variant === \"error\" && \"bg-rose-400\",\r\n variant === \"warning\" && \"bg-amber-400\",\r\n variant === \"info\" && \"bg-sky-400\"\r\n )}\r\n />\r\n )}\r\n <span\r\n className={cn(\r\n \"relative inline-flex size-2 rounded-full\",\r\n variant === \"success\" && \"bg-emerald-500\",\r\n variant === \"error\" && \"bg-rose-500\",\r\n variant === \"warning\" && \"bg-amber-500\",\r\n variant === \"info\" && \"bg-sky-500\"\r\n )}\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nexport interface PillDeltaProps {\r\n className?: string;\r\n delta?: number;\r\n}\r\n\r\nexport function PillDelta({ className, delta }: PillDeltaProps) {\r\n if (!delta) {\r\n return <MinusIcon className={cn(\"size-3 text-muted-foreground\", className)} />;\r\n }\r\n\r\n if (delta > 0) {\r\n return <ChevronUpIcon className={cn(\"size-3 text-emerald-500\", className)} />;\r\n }\r\n\r\n return <ChevronDownIcon className={cn(\"size-3 text-rose-500\", className)} />;\r\n}\r\n\r\nexport interface PillIconProps extends LucideProps {\r\n icon: ComponentType<LucideProps>;\r\n className?: string;\r\n}\r\n\r\nexport function PillIcon({ icon: Icon, className, ...props }: PillIconProps) {\r\n return (\r\n <Icon className={cn(\"size-3 text-muted-foreground\", className)} size={12} {...props} />\r\n );\r\n}\r\n\r\nexport interface PillAvatarGroupProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function PillAvatarGroup({ children, className, ...props }: PillAvatarGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"-space-x-1 flex items-center\",\r\n \"[&>*:not(:first-of-type)]:mask-[radix-gradient(circle_9px_at_-4px_50%,transparent_99%,white_100%)]\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { memo, useMemo, ReactNode } from \"react\";\r\nimport {\r\n Tabs,\r\n TabsList,\r\n TabsTrigger,\r\n TabsContent,\r\n} from \"@/components/ui/tabs\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst LIST_BASE_CLASS =\r\n \"flex flex-wrap items-center justify-start gap-1 h-auto rounded-md p-1 shadow-sm transition-colors\";\r\n\r\nconst LIST_VARIANTS: Record<string, string> = {\r\n default: \"border border-border/50 bg-muted/60 backdrop-blur-sm\",\r\n primary: \"border border-primary/30 bg-primary/10\",\r\n secondary: \"border border-secondary/40 bg-secondary/10\",\r\n outline: \"border border-border bg-background\",\r\n ghost: \"border border-transparent bg-transparent shadow-none\",\r\n underline:\r\n \"w-full mb-4 rounded-none border-b border-border/60 bg-transparent p-0 shadow-none gap-6\",\r\n};\r\n\r\nconst TRIGGER_VARIANTS: Record<string, string> = {\r\n default:\r\n \"text-muted-foreground hover:bg-muted/40 hover:text-foreground data-active:bg-background data-active:text-foreground data-active:shadow-sm\",\r\n primary:\r\n \"text-primary hover:bg-primary/10 hover:text-primary data-active:bg-primary data-active:text-primary-foreground\",\r\n secondary:\r\n \"text-secondary-foreground hover:bg-secondary/10 hover:text-secondary-foreground data-active:bg-secondary data-active:text-secondary-foreground\",\r\n outline:\r\n \"text-foreground hover:bg-accent/40 hover:text-accent-foreground data-active:bg-accent data-active:text-accent-foreground\",\r\n ghost:\r\n \"text-muted-foreground hover:bg-muted/30 hover:text-foreground data-active:bg-muted data-active:text-foreground\",\r\n underline:\r\n \"text-muted-foreground rounded-none px-0 py-2 hover:bg-transparent hover:text-primary border-b-2 border-transparent data-active:border-primary data-active:text-primary data-active:shadow-none\",\r\n};\r\n\r\nexport interface TabsWrapperProps {\r\n defaultValue?: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n children: ReactNode;\r\n className?: string;\r\n listClassName?: string;\r\n contentClassName?: string;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n orientation?: \"horizontal\" | \"vertical\";\r\n layout?: \"default\" | \"flex\" | \"sidebar\";\r\n withScrollArea?: boolean;\r\n scrollAreaClassName?: string;\r\n}\r\n\r\nexport const TabsWrapper = memo(function TabsWrapper({\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n children,\r\n className,\r\n listClassName,\r\n contentClassName,\r\n variant = \"default\",\r\n orientation = \"horizontal\",\r\n layout = \"default\",\r\n withScrollArea = false,\r\n scrollAreaClassName,\r\n ...props\r\n}: TabsWrapperProps) {\r\n const isFlexLayout = useMemo(\r\n () => layout === \"flex\" || layout === \"sidebar\",\r\n [layout]\r\n );\r\n\r\n const computedClasses = useMemo(\r\n () => ({\r\n root: cn(\"w-full\", isFlexLayout && \"flex-1 flex flex-col\", className),\r\n list: cn(\r\n LIST_BASE_CLASS,\r\n isFlexLayout ? \"w-full\" : \"w-fit\",\r\n !isFlexLayout && variant !== \"underline\" && \"mb-6\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n listClassName\r\n ),\r\n }),\r\n [isFlexLayout, className, variant, listClassName]\r\n );\r\n\r\n return (\r\n <Tabs\r\n defaultValue={defaultValue}\r\n value={value}\r\n onValueChange={onValueChange}\r\n orientation={orientation}\r\n className={computedClasses.root}\r\n {...props}\r\n >\r\n <TabsList className={computedClasses.list}>{children}</TabsList>\r\n </Tabs>\r\n );\r\n});\r\n\r\nexport interface TabTriggerProps {\r\n value: string;\r\n children: ReactNode;\r\n className?: string;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n icon?: ReactNode;\r\n hideTextOnMobile?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TabTrigger = memo(function TabTrigger({\r\n value,\r\n children,\r\n className,\r\n variant = \"default\",\r\n icon,\r\n hideTextOnMobile = false,\r\n disabled = false,\r\n ...props\r\n}: TabTriggerProps) {\r\n const computedClassName = useMemo(\r\n () =>\r\n cn(\r\n \"flex items-center gap-2 transition-colors duration-200\",\r\n TRIGGER_VARIANTS[variant] ?? TRIGGER_VARIANTS.default,\r\n className\r\n ),\r\n [variant, className]\r\n );\r\n\r\n return (\r\n <TabsTrigger\r\n value={value}\r\n disabled={disabled}\r\n className={computedClassName}\r\n {...props}\r\n >\r\n {icon}\r\n {hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline\">{children}</span>\r\n ) : (\r\n children\r\n )}\r\n </TabsTrigger>\r\n );\r\n});\r\n\r\nexport interface TabContentProps {\r\n value: string;\r\n children: ReactNode;\r\n className?: string;\r\n withScrollArea?: boolean;\r\n scrollAreaClassName?: string;\r\n padding?: boolean;\r\n keepMounted?: boolean;\r\n}\r\n\r\nexport const TabContent = memo(function TabContent({\r\n value,\r\n children,\r\n className,\r\n withScrollArea = false,\r\n scrollAreaClassName,\r\n padding = true,\r\n keepMounted = false,\r\n ...props\r\n}: TabContentProps) {\r\n const contentClassName = useMemo(\r\n () =>\r\n cn(\r\n \"space-y-4\",\r\n padding && !withScrollArea && \"mt-6\",\r\n withScrollArea && \"mt-0 h-full\",\r\n className\r\n ),\r\n [padding, withScrollArea, className]\r\n );\r\n\r\n const scrollAreaPaddingClassName = useMemo(\r\n () => cn(padding && \"px-6 py-4\"),\r\n [padding]\r\n );\r\n\r\n return (\r\n <TabsContent value={value} keepMounted={keepMounted} className={contentClassName} {...props}>\r\n {withScrollArea ? (\r\n <ScrollArea className={cn(\"h-full\", scrollAreaClassName)}>\r\n <div className={scrollAreaPaddingClassName}>{children}</div>\r\n </ScrollArea>\r\n ) : (\r\n children\r\n )}\r\n </TabsContent>\r\n );\r\n});\r\n\r\nexport interface DynamicTabItem {\r\n value: string;\r\n label: ReactNode;\r\n content: ReactNode;\r\n icon?: ReactNode;\r\n disabled?: boolean;\r\n hideTextOnMobile?: boolean;\r\n}\r\n\r\nexport interface DynamicTabsProps {\r\n tabs?: DynamicTabItem[];\r\n defaultValue?: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n layout?: \"default\" | \"flex\" | \"sidebar\";\r\n className?: string;\r\n listClassName?: string;\r\n listWrapperClassName?: string;\r\n contentClassName?: string;\r\n scrollable?: boolean;\r\n}\r\n\r\nexport const DynamicTabs = memo(function DynamicTabs({\r\n tabs = [],\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n variant = \"default\",\r\n layout = \"default\",\r\n className,\r\n listClassName,\r\n listWrapperClassName,\r\n contentClassName,\r\n scrollable = false,\r\n ...props\r\n}: DynamicTabsProps) {\r\n const isFlexLayout = useMemo(\r\n () => layout === \"flex\" || layout === \"sidebar\",\r\n [layout]\r\n );\r\n const useSheetDefaults = isFlexLayout && scrollable;\r\n\r\n const computedClasses = useMemo(\r\n () => ({\r\n root: cn(\r\n \"w-full\",\r\n isFlexLayout && \"flex-1 flex flex-col min-h-0\",\r\n className\r\n ),\r\n listWrapper: cn(\r\n \"w-full\",\r\n useSheetDefaults ? \"px-0\" : \"px-6\",\r\n listWrapperClassName\r\n ),\r\n flexList: cn(\r\n \"flex flex-wrap items-center justify-center gap-1 h-auto\",\r\n variant === \"underline\"\r\n ? \"rounded-none border-b border-border/60 bg-transparent p-0 shadow-none gap-6\"\r\n : \"rounded-md p-1 shadow-sm backdrop-blur-sm\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n useSheetDefaults && \"mb-4 gap-0.5\",\r\n listClassName\r\n ),\r\n standardList: cn(\r\n LIST_BASE_CLASS,\r\n variant !== \"underline\" && \"w-fit mb-6\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n listClassName\r\n ),\r\n contentWrapper: cn(isFlexLayout && \"flex-1 min-h-0 overflow-hidden\"),\r\n flexContent: cn(\r\n \"mt-0 h-full\",\r\n useSheetDefaults && \"px-1\",\r\n contentClassName\r\n ),\r\n standardContent: cn(\r\n isFlexLayout ? \"h-full\" : \"space-y-4 mt-6\",\r\n contentClassName\r\n ),\r\n }),\r\n [\r\n isFlexLayout,\r\n useSheetDefaults,\r\n className,\r\n listWrapperClassName,\r\n listClassName,\r\n variant,\r\n contentClassName,\r\n ]\r\n );\r\n\r\n return (\r\n <Tabs\r\n defaultValue={defaultValue}\r\n value={value}\r\n onValueChange={onValueChange}\r\n className={computedClasses.root}\r\n {...props}\r\n >\r\n {isFlexLayout ? (\r\n <div className={computedClasses.listWrapper}>\r\n <TabsList className={computedClasses.flexList}>\r\n {tabs.map((tab) => (\r\n <TabTrigger\r\n key={tab.value}\r\n value={tab.value}\r\n variant={variant}\r\n disabled={tab.disabled}\r\n className=\"justify-center px-3 py-2 text-xs sm:text-sm shrink-0\"\r\n >\r\n {tab.icon}\r\n {tab.hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline\">{tab.label}</span>\r\n ) : (\r\n tab.label\r\n )}\r\n </TabTrigger>\r\n ))}\r\n </TabsList>\r\n </div>\r\n ) : (\r\n <TabsList className={computedClasses.standardList}>\r\n {tabs.map((tab) => (\r\n <TabTrigger\r\n key={tab.value}\r\n value={tab.value}\r\n variant={variant}\r\n disabled={tab.disabled}\r\n className=\"whitespace-nowrap\"\r\n >\r\n {tab.icon}\r\n {tab.hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline text-sm\">{tab.label}</span>\r\n ) : (\r\n <span className=\"text-sm\">{tab.label}</span>\r\n )}\r\n </TabTrigger>\r\n ))}\r\n </TabsList>\r\n )}\r\n\r\n <div className={computedClasses.contentWrapper}>\r\n {isFlexLayout && scrollable ? (\r\n <ScrollArea className=\"h-full w-full\">\r\n {tabs.map((tab) => (\r\n <TabsContent\r\n key={tab.value}\r\n value={tab.value}\r\n className={computedClasses.flexContent}\r\n >\r\n {tab.content}\r\n </TabsContent>\r\n ))}\r\n </ScrollArea>\r\n ) : (\r\n tabs.map((tab) => (\r\n <TabsContent\r\n key={tab.value}\r\n value={tab.value}\r\n className={computedClasses.standardContent}\r\n >\r\n {tab.content}\r\n </TabsContent>\r\n ))\r\n )}\r\n </div>\r\n </Tabs>\r\n );\r\n});\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n ResizableHandle,\r\n ResizablePanel,\r\n ResizablePanelGroup,\r\n} from \"@/components/ui/resizable\";\r\nimport { useMediaQuery } from \"../hooks/use-media-query\";\r\nimport { DynamicTabs } from \"./tabs-wrapper\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface PanelConfig {\r\n title?: string;\r\n icon?: ReactNode;\r\n content: ReactNode;\r\n badge?: ReactNode;\r\n}\r\n\r\nexport interface ResponsiveSplitLayoutProps {\r\n leftPanel: PanelConfig;\r\n rightPanel: PanelConfig;\r\n className?: string;\r\n leftPanelClassName?: string;\r\n rightPanelClassName?: string;\r\n variant?: \"default\" | \"tabs\" | \"fixed\";\r\n desktopVariant?: \"default\" | \"tabs\" | \"fixed\";\r\n mobileVariant?: \"default\" | \"tabs\" | \"fixed\";\r\n defaultLayout?: [number, number];\r\n minSizes?: [number, number];\r\n rightPanelWidth?: number;\r\n persistLayoutKey?: string;\r\n mobileBreakpoint?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n forceMobile?: boolean;\r\n forceDesktop?: boolean;\r\n}\r\n\r\nexport function ResponsiveSplitLayout({\r\n leftPanel,\r\n rightPanel,\r\n className,\r\n leftPanelClassName,\r\n rightPanelClassName,\r\n variant = \"default\",\r\n desktopVariant,\r\n mobileVariant,\r\n defaultLayout = [50, 50],\r\n minSizes = [20, 20],\r\n rightPanelWidth = 400,\r\n persistLayoutKey,\r\n mobileBreakpoint = \"md\",\r\n forceMobile = false,\r\n forceDesktop = false,\r\n}: ResponsiveSplitLayoutProps) {\r\n const [mobileView, setMobileView] = useState<\"left\" | \"right\">(\"left\");\r\n\r\n const breakpoints = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n };\r\n\r\n const mobileMaxWidth = breakpoints[mobileBreakpoint] - 1;\r\n const isMobileMedia = useMediaQuery(`(max-width: ${mobileMaxWidth}px)`, false);\r\n const isMobile = forceDesktop ? false : forceMobile ? true : isMobileMedia;\r\n\r\n const effectiveMobileVariant = mobileVariant ?? variant;\r\n const effectiveDesktopVariant = desktopVariant ?? variant;\r\n\r\n // Mobile view with tabs\r\n if (isMobile && effectiveMobileVariant === \"tabs\") {\r\n const tabs = [\r\n {\r\n value: \"left\",\r\n label: (\r\n <div className=\"flex items-center gap-2\">\r\n {leftPanel.icon}\r\n {leftPanel.title || \"Left\"}\r\n </div>\r\n ),\r\n content: (\r\n <div className={cn(\"h-full overflow-y-auto\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n ),\r\n },\r\n {\r\n value: \"right\",\r\n label: (\r\n <div className=\"flex items-center gap-2\">\r\n {rightPanel.icon}\r\n {rightPanel.title || \"Right\"}\r\n {rightPanel.badge && (\r\n <span className=\"ml-1 bg-primary text-primary-foreground text-xs rounded-full h-5 w-5 flex items-center justify-center\">\r\n {rightPanel.badge}\r\n </span>\r\n )}\r\n </div>\r\n ),\r\n content: (\r\n <div className={cn(\"h-full overflow-y-auto\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n <div className={cn(\"h-full flex flex-col\", className)}>\r\n <DynamicTabs\r\n tabs={tabs}\r\n defaultValue=\"left\"\r\n value={mobileView}\r\n onValueChange={(val) => setMobileView(val as \"left\" | \"right\")}\r\n variant=\"default\"\r\n layout=\"flex\"\r\n className=\"h-full\"\r\n listWrapperClassName=\"px-4 py-2 flex-shrink-0\"\r\n contentClassName=\"mt-0 flex-1 min-h-0\"\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Mobile view with navigation buttons (default)\r\n if (isMobile) {\r\n const showLeft = mobileView === \"left\";\r\n const showRight = mobileView === \"right\";\r\n\r\n return (\r\n <div className={cn(\"flex flex-col h-full\", className)}>\r\n <div className=\"flex-1 overflow-hidden\">\r\n <div className={cn(\"h-full\", !showLeft && \"hidden\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n\r\n <div className={cn(\"h-full\", !showRight && \"hidden\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n </div>\r\n\r\n <div className=\"border-t p-4 bg-background\">\r\n <div className=\"flex items-center justify-between max-w-md mx-auto\">\r\n <Button\r\n variant={mobileView === \"left\" ? \"default\" : \"outline\"}\r\n onClick={() => setMobileView(\"left\")}\r\n className=\"flex-1 mr-2\"\r\n >\r\n {mobileView === \"right\" && <ArrowLeft className=\"h-4 w-4 mr-2\" />}\r\n {leftPanel.icon}\r\n <span className=\"ml-2\">{leftPanel.title || \"Left\"}</span>\r\n </Button>\r\n\r\n <Button\r\n variant={mobileView === \"right\" ? \"default\" : \"outline\"}\r\n onClick={() => setMobileView(\"right\")}\r\n className=\"flex-1 ml-2 relative\"\r\n >\r\n <span className=\"mr-2\">{rightPanel.title || \"Right\"}</span>\r\n {rightPanel.icon}\r\n {mobileView === \"left\" && <ArrowRight className=\"h-4 w-4 ml-2\" />}\r\n {rightPanel.badge && (\r\n <span className=\"absolute -top-2 -right-2 bg-primary text-primary-foreground text-xs rounded-full h-6 w-6 flex items-center justify-center\">\r\n {rightPanel.badge}\r\n </span>\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view with fixed right panel width\r\n if (effectiveDesktopVariant === \"fixed\") {\r\n return (\r\n <div className={cn(\"flex h-full\", className)}>\r\n <div className={cn(\"flex-1 overflow-auto border-r\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n\r\n <div\r\n className={cn(\"overflow-auto\", rightPanelClassName)}\r\n style={{\r\n width: rightPanelWidth,\r\n minWidth: rightPanelWidth,\r\n flexShrink: 0,\r\n }}\r\n >\r\n {rightPanel.content}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view with resizable panels (default)\r\n return (\r\n <ResizablePanelGroup\r\n direction=\"horizontal\"\r\n className={cn(\"h-full\", className)}\r\n autoSaveId={persistLayoutKey}\r\n >\r\n <ResizablePanel defaultSize={defaultLayout[0]} minSize={minSizes[0]}>\r\n <div className={cn(\"h-full overflow-auto\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n </ResizablePanel>\r\n\r\n <ResizableHandle withHandle />\r\n\r\n <ResizablePanel defaultSize={defaultLayout[1]} minSize={minSizes[1]}>\r\n <div className={cn(\"h-full overflow-auto\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n </ResizablePanel>\r\n </ResizablePanelGroup>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { memo, useMemo, useCallback, type ReactNode } from \"react\";\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetDescription,\r\n SheetFooter,\r\n SheetTrigger,\r\n} from \"@/components/ui/sheet\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { ClientSubmitButton } from \"./client-submit-button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Size variants configuration\r\n// Using !important to override base sheet.tsx sm:max-w-sm constraint\r\nconst SIZE_VARIANTS = {\r\n sm: \"sm:!max-w-md\",\r\n default: \"w-full sm:!max-w-md md:!max-w-lg\",\r\n lg: \"w-full sm:!max-w-lg md:!max-w-2xl lg:!max-w-4xl\",\r\n xl: \"w-full sm:!max-w-2xl md:!max-w-4xl lg:!max-w-5xl\",\r\n full: \"w-full !max-w-full\",\r\n mobile: \"w-[85%] !max-w-sm\",\r\n \"mobile-nav\": \"!w-[300px] sm:!w-[350px]\",\r\n} as const;\r\n\r\ntype SizeVariant = keyof typeof SIZE_VARIANTS;\r\n\r\nconst getPadding = (size: SizeVariant, type: \"default\" | \"header\" | \"footer\" = \"default\") => {\r\n const isFullSize = size === \"full\";\r\n\r\n if (type === \"header\" || type === \"footer\") {\r\n return isFullSize ? \"px-6 lg:px-8\" : \"px-4\";\r\n }\r\n\r\n return isFullSize ? \"p-6 lg:p-8\" : \"p-4\";\r\n};\r\n\r\nexport interface SheetWrapperProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title?: string;\r\n description?: string;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n header?: ReactNode;\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n size?: SizeVariant;\r\n modal?: boolean;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n innerClassName?: string;\r\n hideHeader?: boolean;\r\n hideTitle?: boolean;\r\n hideDescription?: boolean;\r\n hideCloseButton?: boolean;\r\n disableContentPadding?: boolean;\r\n}\r\n\r\nexport const SheetWrapper = memo(function SheetWrapper({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n footer,\r\n header,\r\n side = \"right\",\r\n size = \"default\",\r\n modal = true,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n innerClassName,\r\n hideHeader = false,\r\n hideTitle = false,\r\n hideDescription = false,\r\n hideCloseButton = false,\r\n disableContentPadding = false,\r\n}: SheetWrapperProps) {\r\n const computedClasses = useMemo(\r\n () => ({\r\n header: cn(\"border-b pb-4 pt-6\", getPadding(size, \"header\"), headerClassName),\r\n inner: cn(\r\n \"flex-1 overflow-y-auto\",\r\n !disableContentPadding && getPadding(size),\r\n innerClassName\r\n ),\r\n footer: cn(\r\n \"border-t bg-muted/30 pt-4 pb-6 mt-auto\",\r\n getPadding(size, \"footer\"),\r\n footerClassName\r\n ),\r\n }),\r\n [size, headerClassName, innerClassName, footerClassName, disableContentPadding]\r\n );\r\n\r\n const shouldHideTitle = !!header || hideTitle;\r\n const shouldHideDescription = !!header || hideDescription;\r\n\r\n return (\r\n <Sheet open={open} onOpenChange={onOpenChange} modal={modal}>\r\n <SheetContent\r\n side={side}\r\n showCloseButton={!hideCloseButton}\r\n className={cn(SIZE_VARIANTS[size], \"flex flex-col p-0\", contentClassName, className)}\r\n >\r\n {!hideHeader && (\r\n <SheetHeader className={computedClasses.header}>\r\n <SheetTitle className={shouldHideTitle ? \"sr-only\" : \"\"}>\r\n {title || \"Sheet\"}\r\n </SheetTitle>\r\n {description && (\r\n <SheetDescription className={shouldHideDescription ? \"sr-only\" : \"\"}>\r\n {description}\r\n </SheetDescription>\r\n )}\r\n {header}\r\n </SheetHeader>\r\n )}\r\n\r\n <div className={computedClasses.inner}>{children}</div>\r\n\r\n {footer && <SheetFooter className={computedClasses.footer}>{footer}</SheetFooter>}\r\n </SheetContent>\r\n </Sheet>\r\n );\r\n});\r\n\r\nexport interface FormSheetProps extends Omit<SheetWrapperProps, \"footer\"> {\r\n onSubmit?: () => void;\r\n onCancel?: () => void;\r\n submitLabel?: string;\r\n cancelLabel?: string;\r\n submitDisabled?: boolean;\r\n submitLoading?: boolean;\r\n formId?: string;\r\n}\r\n\r\nexport const FormSheet = memo(function FormSheet({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n onSubmit,\r\n onCancel,\r\n submitLabel = \"Submit\",\r\n cancelLabel = \"Cancel\",\r\n submitDisabled = false,\r\n submitLoading = false,\r\n formId,\r\n size = \"lg\",\r\n ...props\r\n}: FormSheetProps) {\r\n const handleCancel = useCallback(() => {\r\n onCancel?.();\r\n onOpenChange?.(false);\r\n }, [onCancel, onOpenChange]);\r\n\r\n const footer = useMemo(\r\n () => (\r\n <div className=\"flex flex-col sm:flex-row gap-2 w-full\">\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className=\"flex-1\"\r\n onClick={handleCancel}\r\n disabled={submitDisabled || submitLoading}\r\n >\r\n {cancelLabel}\r\n </Button>\r\n <ClientSubmitButton\r\n form={formId}\r\n className=\"flex-1\"\r\n disabled={submitDisabled}\r\n loading={submitLoading}\r\n loadingText=\"Saving...\"\r\n >\r\n {submitLabel}\r\n </ClientSubmitButton>\r\n </div>\r\n ),\r\n [cancelLabel, submitLabel, submitDisabled, submitLoading, formId, handleCancel]\r\n );\r\n\r\n return (\r\n <SheetWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n size={size}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </SheetWrapper>\r\n );\r\n});\r\n\r\nexport interface ConfirmSheetProps extends Omit<SheetWrapperProps, \"footer\"> {\r\n onConfirm?: () => void;\r\n onCancel?: () => void;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n confirmVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n confirmDisabled?: boolean;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nexport const ConfirmSheet = memo(function ConfirmSheet({\r\n open,\r\n onOpenChange,\r\n title = \"Confirm Action\",\r\n description,\r\n children,\r\n onConfirm,\r\n onCancel,\r\n confirmLabel = \"Confirm\",\r\n cancelLabel = \"Cancel\",\r\n confirmVariant = \"default\",\r\n confirmDisabled = false,\r\n confirmLoading = false,\r\n size = \"sm\",\r\n ...props\r\n}: ConfirmSheetProps) {\r\n const handleConfirm = useCallback(() => {\r\n onConfirm?.();\r\n }, [onConfirm]);\r\n\r\n const handleCancel = useCallback(() => {\r\n onCancel?.();\r\n onOpenChange?.(false);\r\n }, [onCancel, onOpenChange]);\r\n\r\n const footer = useMemo(\r\n () => (\r\n <div className=\"flex gap-2 w-full\">\r\n <Button type=\"button\" variant=\"outline\" className=\"flex-1\" onClick={handleCancel}>\r\n {cancelLabel}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant={confirmVariant}\r\n className=\"flex-1\"\r\n onClick={handleConfirm}\r\n disabled={confirmDisabled || confirmLoading}\r\n >\r\n {confirmLoading ? \"Loading...\" : confirmLabel}\r\n </Button>\r\n </div>\r\n ),\r\n [\r\n cancelLabel,\r\n confirmLabel,\r\n confirmVariant,\r\n confirmDisabled,\r\n confirmLoading,\r\n handleConfirm,\r\n handleCancel,\r\n ]\r\n );\r\n\r\n return (\r\n <SheetWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n size={size}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </SheetWrapper>\r\n );\r\n});\r\n\r\n// Export base components for composition\r\nexport { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter };\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface TableWrapperColumn {\r\n key?: string;\r\n header: ReactNode;\r\n className?: string;\r\n cellClassName?: string;\r\n render?: (item: any, index: number) => ReactNode;\r\n}\r\n\r\nexport interface TableWrapperEmptyState {\r\n icon?: ReactNode;\r\n title?: string;\r\n description?: string;\r\n}\r\n\r\nexport interface TableWrapperProps {\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n icon?: ReactNode;\r\n children?: ReactNode;\r\n columns?: TableWrapperColumn[];\r\n data?: any[];\r\n renderRow?: (item: any, index: number) => ReactNode;\r\n emptyState?: TableWrapperEmptyState;\r\n className?: string;\r\n tableClassName?: string;\r\n maxHeight?: string;\r\n}\r\n\r\nexport function TableWrapper({\r\n title,\r\n description,\r\n icon,\r\n children,\r\n columns,\r\n data,\r\n renderRow,\r\n emptyState,\r\n className,\r\n tableClassName,\r\n maxHeight = \"500px\",\r\n ...props\r\n}: TableWrapperProps) {\r\n const hasData = data && data.length > 0;\r\n\r\n const defaultEmptyState = emptyState || {\r\n icon: icon,\r\n title: \"No data available\",\r\n description: \"There are no items to display\",\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)} {...props}>\r\n {(title || description) && (\r\n <div className=\"space-y-1\">\r\n {title && <h3 className=\"text-lg font-semibold\">{title}</h3>}\r\n {description && (\r\n <p className=\"text-sm text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!hasData ? (\r\n <div className=\"flex flex-col items-center justify-center h-48 text-muted-foreground border rounded-lg\">\r\n {defaultEmptyState.icon && (\r\n <div className=\"h-12 w-12 mb-4 opacity-50\">{defaultEmptyState.icon}</div>\r\n )}\r\n <p className=\"text-lg\">{defaultEmptyState.title}</p>\r\n {defaultEmptyState.description && (\r\n <p className=\"text-sm\">{defaultEmptyState.description}</p>\r\n )}\r\n </div>\r\n ) : (\r\n <div\r\n className={cn(\r\n \"relative overflow-auto border rounded-lg\",\r\n maxHeight && `max-h-[${maxHeight}]`\r\n )}\r\n >\r\n <Table className={tableClassName}>\r\n {columns && (\r\n <TableHeader>\r\n <TableRow>\r\n {columns.map((column, index) => (\r\n <TableHead\r\n key={`table-column-head-${column.key ?? column.header ?? index}`}\r\n className={cn(column.className)}\r\n >\r\n {column.header}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n )}\r\n <TableBody>\r\n {data?.map((item, index) =>\r\n renderRow ? (\r\n renderRow(item, index)\r\n ) : (\r\n <TableRow key={`table-row-${index}`}>{children}</TableRow>\r\n )\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface SimpleTableProps extends Omit<TableWrapperProps, \"renderRow\" | \"children\"> {\r\n columns: TableWrapperColumn[];\r\n data: any[];\r\n}\r\n\r\nexport function SimpleTable({\r\n title,\r\n data,\r\n columns,\r\n emptyState,\r\n className,\r\n ...props\r\n}: SimpleTableProps) {\r\n const renderRow = (item: any, index: number) => (\r\n <TableRow key={`simple-table-row-${index}`}>\r\n {columns.map((column, colIndex) => (\r\n <TableCell\r\n key={`simple-table-cell-${column.key ?? column.header ?? colIndex}`}\r\n className={column.cellClassName}\r\n >\r\n {column.render ? column.render(item, index) : item[column.key!]}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n );\r\n\r\n return (\r\n <TableWrapper\r\n title={title}\r\n data={data}\r\n columns={columns}\r\n renderRow={renderRow}\r\n emptyState={emptyState}\r\n className={className}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { type ReactNode } from \"react\";\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipTrigger,\r\n} from \"@/components/ui/tooltip\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface TooltipWrapperProps {\r\n children: ReactNode;\r\n content: ReactNode;\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n align?: \"start\" | \"center\" | \"end\";\r\n delay?: number;\r\n sideOffset?: number;\r\n className?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function TooltipWrapper({\r\n children,\r\n content,\r\n side = \"top\",\r\n align = \"center\",\r\n delay = 700,\r\n sideOffset = 4,\r\n className,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: TooltipWrapperProps) {\r\n if (disabled || !content) {\r\n return <>{children}</>;\r\n }\r\n\r\n return (\r\n <Tooltip delay={delay} {...props}>\r\n <TooltipTrigger className={className} render={children} />\r\n <TooltipContent side={side} align={align} sideOffset={sideOffset} className={cn(contentClassName)}>\r\n {content}\r\n </TooltipContent>\r\n </Tooltip>\r\n );\r\n}\r\n\r\nexport interface ButtonTooltipProps extends Omit<TooltipWrapperProps, \"content\"> {\r\n tooltip: ReactNode;\r\n variant?: \"default\" | \"outline\" | \"ghost\";\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n}\r\n\r\nexport function ButtonTooltip({\r\n children,\r\n tooltip,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n className,\r\n ...props\r\n}: ButtonTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} {...props}>\r\n {children}\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface IconTooltipProps extends Omit<TooltipWrapperProps, \"content\" | \"children\"> {\r\n icon: ReactNode;\r\n tooltip: ReactNode;\r\n iconClassName?: string;\r\n size?: number;\r\n}\r\n\r\nexport function IconTooltip({\r\n icon,\r\n tooltip,\r\n className,\r\n iconClassName,\r\n size = 16,\r\n ...props\r\n}: IconTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} className={className} {...props}>\r\n <div className={cn(\"cursor-pointer\", iconClassName)}>\r\n {typeof icon === \"string\" ? <span style={{ fontSize: size }}>{icon}</span> : icon}\r\n </div>\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface InfoTooltipProps extends Omit<TooltipWrapperProps, \"content\" | \"children\"> {\r\n tooltip: ReactNode;\r\n size?: number;\r\n}\r\n\r\nexport function InfoTooltip({ tooltip, className, size = 16, ...props }: InfoTooltipProps) {\r\n return (\r\n <TooltipWrapper\r\n content={tooltip}\r\n className={cn(\"inline-flex items-center\", className)}\r\n {...props}\r\n >\r\n <div\r\n className=\"rounded-full bg-muted text-muted-foreground hover:bg-muted/80 transition-colors cursor-help inline-flex items-center justify-center\"\r\n style={{ width: size, height: size, fontSize: size * 0.6 }}\r\n >\r\n ?\r\n </div>\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface ActionTooltipProps extends Omit<TooltipWrapperProps, \"content\"> {\r\n tooltip: ReactNode;\r\n action?: () => void;\r\n variant?: \"ghost\" | \"outline\";\r\n size?: \"sm\" | \"icon\";\r\n}\r\n\r\nexport function ActionTooltip({\r\n children,\r\n tooltip,\r\n action,\r\n variant = \"ghost\",\r\n size = \"sm\",\r\n className,\r\n ...props\r\n}: ActionTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} {...props}>\r\n <button\r\n onClick={action}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\r\n \"disabled:opacity-50 disabled:pointer-events-none\",\r\n variant === \"ghost\" && \"hover:bg-accent hover:text-accent-foreground\",\r\n variant === \"outline\" && \"border border-input hover:bg-accent hover:text-accent-foreground\",\r\n size === \"sm\" && \"h-8 px-2\",\r\n size === \"icon\" && \"h-8 w-8\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n </TooltipWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ChangeEvent, ReactNode, InputHTMLAttributes } from \"react\";\r\nimport * as React from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupInput,\r\n} from \"@/components/ui/input-group\";\r\nimport { cn } from \"../../utils\";\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\ninterface TransformFunctions {\r\n input?: (value: unknown) => string;\r\n output?: (value: string) => unknown;\r\n}\r\n\r\nexport interface FormInputProps<TFieldValues extends FieldValues = FieldValues> {\r\n // React Hook Form\r\n control?: Control<TFieldValues>;\r\n name: FieldPath<TFieldValues> | string;\r\n\r\n // Field configuration\r\n label?: string;\r\n placeholder?: string;\r\n description?: string;\r\n helperText?: string; // Alias for description\r\n required?: boolean;\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n type?: string;\r\n\r\n // Styling\r\n className?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n inputGroupClassName?: string;\r\n\r\n // Input group addons (PascalCase)\r\n IconLeft?: ReactNode;\r\n IconRight?: ReactNode;\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n // Input group addons (camelCase aliases)\r\n iconLeft?: ReactNode;\r\n iconRight?: ReactNode;\r\n addonLeft?: ReactNode;\r\n addonRight?: ReactNode;\r\n\r\n // Value transformation\r\n transform?: TransformFunctions;\r\n onValueChange?: (value: unknown) => void;\r\n\r\n // Direct usage (without react-hook-form)\r\n value?: string | number;\r\n onChange?: (value: unknown) => void;\r\n\r\n // HTML input attributes\r\n min?: number | string;\r\n max?: number | string;\r\n step?: number | string;\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: string;\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n inputMode?: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"];\r\n enterKeyHint?: InputHTMLAttributes<HTMLInputElement>[\"enterKeyHint\"];\r\n}\r\n\r\n// ============================================================================\r\n// COMPONENT\r\n// ============================================================================\r\n\r\n/**\r\n * FormInput - Text input with react-hook-form integration\r\n *\r\n * Features:\r\n * - Works with react-hook-form Controller\r\n * - Supports input groups with icons/addons\r\n * - Value transformation (input/output)\r\n * - Can be used standalone without form\r\n *\r\n * @example\r\n * ```tsx\r\n * // With react-hook-form\r\n * <FormInput\r\n * control={form.control}\r\n * name=\"email\"\r\n * type=\"email\"\r\n * label=\"Email\"\r\n * placeholder=\"user@example.com\"\r\n * required\r\n * />\r\n *\r\n * // With icon\r\n * <FormInput\r\n * control={form.control}\r\n * name=\"search\"\r\n * IconLeft={<SearchIcon />}\r\n * placeholder=\"Search...\"\r\n * />\r\n * ```\r\n */\r\nexport function FormInput<TFieldValues extends FieldValues = FieldValues>({\r\n control,\r\n name,\r\n label,\r\n placeholder,\r\n description,\r\n helperText,\r\n required,\r\n disabled,\r\n readOnly,\r\n type = \"text\",\r\n className,\r\n labelClassName,\r\n inputClassName,\r\n inputGroupClassName,\r\n // PascalCase variants\r\n IconLeft,\r\n IconRight,\r\n AddonLeft,\r\n AddonRight,\r\n // camelCase variants\r\n iconLeft,\r\n iconRight,\r\n addonLeft,\r\n addonRight,\r\n onValueChange,\r\n transform,\r\n value,\r\n onChange,\r\n min,\r\n max,\r\n step,\r\n minLength,\r\n maxLength,\r\n pattern,\r\n autoComplete,\r\n autoFocus,\r\n inputMode,\r\n enterKeyHint,\r\n}: FormInputProps<TFieldValues>) {\r\n // Support both PascalCase and camelCase for icons/addons\r\n const resolvedIconLeft = IconLeft || iconLeft;\r\n const resolvedIconRight = IconRight || iconRight;\r\n const resolvedAddonLeft = AddonLeft || addonLeft;\r\n const resolvedAddonRight = AddonRight || addonRight;\r\n\r\n // Use helperText as alias for description\r\n const descriptionText = description || helperText;\r\n\r\n const handleChange = (\r\n e: ChangeEvent<HTMLInputElement>,\r\n field?: { onChange: (value: unknown) => void }\r\n ) => {\r\n const newValue = transform?.output\r\n ? transform.output(e.target.value)\r\n : e.target.value;\r\n\r\n if (field) {\r\n field.onChange(newValue);\r\n } else if (onChange) {\r\n onChange(newValue);\r\n }\r\n\r\n onValueChange?.(newValue);\r\n };\r\n\r\n // Determine if we need InputGroup (has icons or addons)\r\n const hasInputGroup =\r\n resolvedIconLeft || resolvedIconRight || resolvedAddonLeft || resolvedAddonRight;\r\n\r\n const renderInput = (\r\n field?: {\r\n value: unknown;\r\n onChange: (value: unknown) => void;\r\n onBlur: () => void;\r\n name: string;\r\n ref: React.Ref<HTMLInputElement>;\r\n },\r\n isDisabled?: boolean,\r\n fieldState?: { invalid?: boolean; error?: { message?: string } }\r\n ) => {\r\n const rawValue = field\r\n ? transform?.input\r\n ? transform.input(field.value)\r\n : field.value\r\n : transform?.input\r\n ? transform.input(value)\r\n : value;\r\n const safeValue = (rawValue as string) ?? \"\";\r\n\r\n // Build input props - only include valid HTML attributes\r\n const inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\r\n ref?: React.Ref<HTMLInputElement>;\r\n } = {\r\n id: name,\r\n name: field?.name || name,\r\n type,\r\n disabled: isDisabled,\r\n readOnly,\r\n placeholder,\r\n value: safeValue,\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => handleChange(e, field),\r\n onBlur: field?.onBlur,\r\n \"aria-invalid\": fieldState?.invalid || undefined,\r\n };\r\n\r\n // Add optional HTML input attributes only if defined\r\n if (min !== undefined) inputProps.min = min;\r\n if (max !== undefined) inputProps.max = max;\r\n if (step !== undefined) inputProps.step = step;\r\n if (minLength !== undefined) inputProps.minLength = minLength;\r\n if (maxLength !== undefined) inputProps.maxLength = maxLength;\r\n if (pattern !== undefined) inputProps.pattern = pattern;\r\n if (autoComplete !== undefined) inputProps.autoComplete = autoComplete;\r\n if (autoFocus !== undefined) inputProps.autoFocus = autoFocus;\r\n if (inputMode !== undefined) inputProps.inputMode = inputMode;\r\n if (enterKeyHint !== undefined) inputProps.enterKeyHint = enterKeyHint;\r\n\r\n // Add field ref if present\r\n if (field?.ref) {\r\n inputProps.ref = field.ref;\r\n }\r\n\r\n if (hasInputGroup) {\r\n return (\r\n <InputGroup\r\n className={cn(inputGroupClassName)}\r\n data-disabled={isDisabled}\r\n >\r\n {(resolvedAddonLeft || resolvedIconLeft) && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {resolvedAddonLeft || resolvedIconLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput {...inputProps} className={inputClassName} />\r\n {(resolvedAddonRight || resolvedIconRight) && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {resolvedAddonRight || resolvedIconRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n );\r\n }\r\n\r\n return <Input {...inputProps} className={inputClassName} />;\r\n };\r\n\r\n // Direct usage without React Hook Form\r\n if (!control) {\r\n return (\r\n <Field className={className} data-disabled={disabled}>\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderInput(undefined, disabled, undefined)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n </Field>\r\n );\r\n }\r\n\r\n // Using with React Hook Form\r\n return (\r\n <Controller\r\n name={name as FieldPath<TFieldValues>}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field\r\n className={className}\r\n data-disabled={disabled}\r\n data-invalid={fieldState.invalid}\r\n >\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderInput(field, disabled, fieldState)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n {fieldState.invalid && fieldState.error && (\r\n <FieldError errors={[fieldState.error]} />\r\n )}\r\n </Field>\r\n )}\r\n />\r\n );\r\n}\r\n\r\n// Default export for flexibility\r\nexport default FormInput;\r\n","\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupTextarea,\n} from \"@/components/ui/input-group\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface FormTextareaProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n rows?: number;\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n textareaClassName?: string;\n inputGroupClassName?: string;\n\n // Input group addons (PascalCase)\n IconLeft?: React.ReactNode;\n IconRight?: React.ReactNode;\n AddonLeft?: React.ReactNode;\n AddonRight?: React.ReactNode;\n // Input group addons (camelCase aliases)\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n addonLeft?: React.ReactNode;\n addonRight?: React.ReactNode;\n\n // HTML textarea attributes\n minLength?: number;\n maxLength?: number;\n autoComplete?: string;\n autoFocus?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * FormTextarea - Textarea with react-hook-form integration\n *\n * @example\n * ```tsx\n * <FormTextarea\n * control={form.control}\n * name=\"bio\"\n * label=\"Biography\"\n * placeholder=\"Tell us about yourself...\"\n * rows={5}\n * />\n * ```\n */\nexport function FormTextarea<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n readOnly,\n placeholder,\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n textareaClassName,\n inputGroupClassName,\n // PascalCase variants\n IconLeft,\n IconRight,\n AddonLeft,\n AddonRight,\n // camelCase variants\n iconLeft,\n iconRight,\n addonLeft,\n addonRight,\n rows = 3,\n minLength,\n maxLength,\n autoComplete,\n autoFocus,\n}: FormTextareaProps<TFieldValues>) {\n // Support both PascalCase and camelCase for icons/addons\n const resolvedIconLeft = IconLeft || iconLeft;\n const resolvedIconRight = IconRight || iconRight;\n const resolvedAddonLeft = AddonLeft || addonLeft;\n const resolvedAddonRight = AddonRight || addonRight;\n\n const descriptionText = description || helperText;\n\n // Determine if we need InputGroup (has icons or addons)\n const hasInputGroup =\n resolvedIconLeft || resolvedIconRight || resolvedAddonLeft || resolvedAddonRight;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (value: string) => {\n setLocalValue(value);\n propOnChange?.(value);\n onValueChange?.(value);\n };\n\n const renderTextarea = (\n field?: {\n value: string;\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => void;\n onBlur: () => void;\n name: string;\n ref: React.Ref<HTMLTextAreaElement>;\n },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean; error?: { message?: string } }\n ) => {\n // Get value from either form field or direct props\n const value = field ? field.value : localValue;\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n\n if (field) {\n field.onChange(e);\n } else {\n handleDirectValueChange(newValue);\n }\n\n onValueChange?.(newValue);\n };\n\n // Build textarea props - only include valid HTML attributes\n const textareaProps: React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n ref?: React.Ref<HTMLTextAreaElement>;\n } = {\n id: name,\n name: field?.name || name,\n value: value ?? \"\",\n placeholder,\n disabled: isDisabled,\n readOnly,\n rows,\n onChange: handleChange,\n onBlur: field?.onBlur,\n \"aria-invalid\": fieldState?.invalid || undefined,\n };\n\n // Add optional HTML textarea attributes only if defined\n if (minLength !== undefined) textareaProps.minLength = minLength;\n if (maxLength !== undefined) textareaProps.maxLength = maxLength;\n if (autoComplete !== undefined) textareaProps.autoComplete = autoComplete;\n if (autoFocus !== undefined) textareaProps.autoFocus = autoFocus;\n\n // Add field ref if present\n if (field?.ref) {\n textareaProps.ref = field.ref;\n }\n\n if (hasInputGroup) {\n return (\n <InputGroup\n className={cn(inputGroupClassName)}\n data-disabled={isDisabled}\n >\n {(resolvedAddonLeft || resolvedIconLeft) && (\n <InputGroupAddon align=\"inline-start\">\n {resolvedAddonLeft || resolvedIconLeft}\n </InputGroupAddon>\n )}\n <InputGroupTextarea\n {...textareaProps}\n className={cn(\"overflow-auto resize-none\", textareaClassName)}\n />\n {(resolvedAddonRight || resolvedIconRight) && (\n <InputGroupAddon align=\"inline-end\">\n {resolvedAddonRight || resolvedIconRight}\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n }\n\n return (\n <Textarea\n {...textareaProps}\n className={cn(\"overflow-auto resize-none\", textareaClassName)}\n />\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderTextarea(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderTextarea(field, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default FormTextarea;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SelectGroup,\n SelectLabel,\n} from \"@/components/ui/select\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: string;\n items: SelectOption[];\n}\n\nexport interface SelectInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: SelectOption[];\n groups?: SelectOptionGroup[];\n allOption?: SelectOption;\n\n // Value handling\n valueKey?: string;\n displayKey?: string;\n value?: string | number;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n triggerClassName?: string;\n contentClassName?: string;\n itemClassName?: string;\n Icon?: React.ComponentType<{ className?: string }>;\n\n // Select behavior\n defaultOpen?: boolean;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n sideOffset?: number;\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SelectInput - Select dropdown with react-hook-form integration\n *\n * Features:\n * - Flat and grouped options\n * - Custom placeholder\n * - Optional \"All\" option (use placeholder text to match)\n * - Custom styling\n *\n * Note: For \"All\" options with value=\"\", the placeholder will be shown when selected.\n * Make sure your placeholder text matches what you want to display for \"All\".\n *\n * @example\n * ```tsx\n * // Basic usage\n * <SelectInput\n * control={form.control}\n * name=\"role\"\n * label=\"Role\"\n * items={[\n * { value: \"admin\", label: \"Admin\" },\n * { value: \"user\", label: \"User\" },\n * ]}\n * />\n *\n * // With \"All\" option - placeholder shows when \"All\" is selected\n * <SelectInput\n * name=\"status\"\n * label=\"Status\"\n * items={[\n * { value: \"\", label: \"All\" }, // This will show placeholder when selected\n * { value: \"active\", label: \"Active\" },\n * ]}\n * placeholder=\"All\" // Make sure this matches the \"All\" label\n * />\n * ```\n */\nexport function SelectInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n items = [],\n groups = [],\n name,\n label,\n placeholder = \"Select option\",\n allOption,\n description,\n helperText,\n required,\n disabled,\n className,\n labelClassName,\n triggerClassName,\n contentClassName,\n itemClassName,\n Icon,\n onValueChange,\n value: propValue,\n defaultOpen,\n side = \"bottom\",\n sideOffset = 4,\n align = \"start\",\n alignOffset = 0,\n}: SelectInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // Special value for \"clear/all\" options - Base UI Select doesn't handle empty strings well\n const CLEAR_VALUE = \"__CLEAR__\";\n\n // Filter out items with undefined or null values only\n const filteredItems = items.filter((item) => {\n const val = item.value;\n return val !== undefined && val !== null;\n });\n const displayItems = allOption ? [allOption, ...filteredItems] : filteredItems;\n\n // Filter groups to remove items with undefined/null values\n const filteredGroups = groups\n .map((group) => ({\n ...group,\n items: group.items.filter((item) => {\n const val = item.value;\n return val !== undefined && val !== null;\n }),\n }))\n .filter((group) => group.items.length > 0);\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue?.toString() || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue.toString());\n }\n }, [propValue]);\n\n const renderSelect = (\n field?: { value: unknown; onChange: (value: string) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Use field value if React Hook Form is used, otherwise use local state\n const rawValue = field ? field.value?.toString() : localValue;\n\n const handleChange = (newValue: string) => {\n // Convert CLEAR_VALUE back to empty string for the actual value\n const actualValue = newValue === CLEAR_VALUE ? \"\" : newValue;\n if (field) {\n field.onChange(actualValue);\n } else {\n setLocalValue(actualValue);\n }\n onValueChange?.(actualValue);\n };\n\n // Helper to get value from item - convert empty strings to CLEAR_VALUE\n const getItemValue = (item: SelectOption, fallback: string): string => {\n const val =\n item.value !== undefined && item.value !== null\n ? item.value.toString()\n : fallback;\n // Convert empty string to CLEAR_VALUE for Select compatibility\n return val === \"\" ? CLEAR_VALUE : val;\n };\n\n // Helper to get label from item\n const getItemLabel = (item: SelectOption): string => {\n return item.label;\n };\n\n const getUniqueReactKey = (\n item: SelectOption,\n fallback: string,\n seen: Map<string, number>\n ): string => {\n const itemValue = getItemValue(item, fallback);\n const itemLabel = getItemLabel(item);\n const baseKey = `${itemValue}::${itemLabel}`;\n const nextCount = (seen.get(baseKey) ?? 0) + 1;\n seen.set(baseKey, nextCount);\n return nextCount === 1 ? baseKey : `${baseKey}::${nextCount}`;\n };\n\n // Render grouped options\n const renderGroupedContent = () => {\n if (filteredGroups.length === 0) return null;\n\n return filteredGroups.map((group, groupIdx) => {\n const seenKeys = new Map<string, number>();\n\n return (\n <SelectGroup key={`group-${groupIdx}`}>\n {group.label && <SelectLabel>{group.label}</SelectLabel>}\n {group.items.map((item, idx) => {\n const itemValue = getItemValue(item, `item-${groupIdx}-${idx}`);\n return (\n <SelectItem\n key={getUniqueReactKey(item, `item-${groupIdx}-${idx}`, seenKeys)}\n value={itemValue}\n className={cn(\"cursor-pointer\", itemClassName)}\n disabled={item.disabled}\n >\n {getItemLabel(item)}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n });\n };\n\n // Render flat options\n const renderFlatContent = () => {\n if (displayItems.length === 0) {\n return (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No options available\n </div>\n );\n }\n\n const seenKeys = new Map<string, number>();\n return displayItems.map((item, idx) => {\n const itemValue = getItemValue(item, `item-${idx}`);\n return (\n <SelectItem\n key={getUniqueReactKey(item, `item-${idx}`, seenKeys)}\n value={itemValue}\n className={cn(\"cursor-pointer\", itemClassName)}\n disabled={item.disabled}\n >\n {getItemLabel(item)}\n </SelectItem>\n );\n });\n };\n\n // Pass value to Select:\n // - If rawValue is \"\" (empty string), pass CLEAR_VALUE to match the \"All\" SelectItem\n // - If rawValue has a real value, pass it to match the corresponding SelectItem\n // - If rawValue is undefined/null, pass undefined to show placeholder\n const selectValue = rawValue === \"\"\n ? CLEAR_VALUE\n : rawValue\n ? rawValue\n : undefined;\n\n // Find the label for the current value to display in the trigger\n // This is needed because Base UI Select doesn't auto-match value to item label\n const findSelectedLabel = (): string | undefined => {\n if (!rawValue && rawValue !== \"\") return undefined;\n\n // Check in flat items\n for (const item of displayItems) {\n const itemVal = item.value?.toString() ?? \"\";\n if (itemVal === rawValue || (itemVal === \"\" && rawValue === \"\")) {\n return item.label;\n }\n }\n\n // Check in grouped items\n for (const group of filteredGroups) {\n for (const item of group.items) {\n const itemVal = item.value?.toString() ?? \"\";\n if (itemVal === rawValue) {\n return item.label;\n }\n }\n }\n\n return undefined;\n };\n\n const selectedLabel = findSelectedLabel();\n\n return (\n <Select\n onValueChange={handleChange}\n value={selectValue}\n disabled={isDisabled}\n defaultOpen={defaultOpen}\n >\n <SelectTrigger\n className={cn(\"w-full\", triggerClassName)}\n aria-invalid={fieldState?.invalid || undefined}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4 text-primary\" />}\n <SelectValue placeholder={placeholder}>\n {selectedLabel}\n </SelectValue>\n </SelectTrigger>\n <SelectContent\n className={cn(contentClassName)}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n >\n {filteredGroups.length > 0 ? renderGroupedContent() : renderFlatContent()}\n </SelectContent>\n </Select>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderSelect(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderSelect(field, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default SelectInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface CheckboxItem {\n id: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Checkbox items (for multi-checkbox)\n items?: CheckboxItem[];\n\n // Value handling (for direct usage)\n value?: string[];\n onChange?: (values: string[]) => void;\n onValueChange?: (values: string[]) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n checkboxClassName?: string;\n itemClassName?: string;\n itemLabelClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * CheckboxInput - Checkbox group with react-hook-form integration\n *\n * Features:\n * - Multiple checkbox items\n * - Array value support\n * - Can be used standalone\n *\n * @example\n * ```tsx\n * <CheckboxInput\n * control={form.control}\n * name=\"features\"\n * label=\"Features\"\n * items={[\n * { id: \"wifi\", label: \"WiFi\" },\n * { id: \"parking\", label: \"Parking\" },\n * { id: \"pool\", label: \"Pool\" },\n * ]}\n * />\n * ```\n */\nexport function CheckboxInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n items = [],\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n checkboxClassName,\n itemClassName,\n itemLabelClassName,\n}: CheckboxInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // For direct usage without React Hook Form\n const [localValues, setLocalValues] = useState<string[]>(propValue || []);\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValues(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValues: string[]) => {\n setLocalValues(newValues);\n propOnChange?.(newValues);\n onValueChange?.(newValues);\n };\n\n const renderCheckboxes = (\n field?: { value: string[]; onChange: (values: string[]) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get values from either form field or direct props\n const values: string[] = field?.value || localValues || [];\n\n const handleCheckedChange = (itemId: string, checked: boolean) => {\n const newValues = checked\n ? [...values, itemId]\n : values.filter((value) => value !== itemId);\n\n if (field) {\n field.onChange(newValues);\n } else {\n handleDirectValueChange(newValues);\n }\n\n onValueChange?.(newValues);\n };\n\n return (\n <div data-slot=\"checkbox-group\" className=\"space-y-2\">\n {items.map((item) => (\n <div\n key={item.id}\n className={cn(\"flex items-center gap-2\", itemClassName)}\n >\n <Checkbox\n id={`${name}-${item.id}`}\n className={checkboxClassName}\n checked={values.includes(item.id)}\n disabled={isDisabled || item.disabled}\n onCheckedChange={(checked: boolean) =>\n handleCheckedChange(item.id, checked)\n }\n aria-invalid={fieldState?.invalid || undefined}\n />\n <label\n htmlFor={`${name}-${item.id}`}\n className={cn(\n \"text-sm font-normal cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n itemLabelClassName\n )}\n >\n {item.label}\n </label>\n </div>\n ))}\n </div>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCheckboxes(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCheckboxes(\n field as { value: string[]; onChange: (values: string[]) => void },\n disabled,\n fieldState\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default CheckboxInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface RadioChoice {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Radio options\n choices?: RadioChoice[];\n items?: RadioChoice[]; // Alias for choices (for FormKit compatibility)\n\n // Layout\n orientation?: \"vertical\" | \"horizontal\";\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n radioGroupClassName?: string;\n radioItemClassName?: string;\n radioLabelClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * RadioInput - Radio group with react-hook-form integration\n *\n * @example\n * ```tsx\n * <RadioInput\n * control={form.control}\n * name=\"plan\"\n * label=\"Select Plan\"\n * choices={[\n * { value: \"free\", label: \"Free\" },\n * { value: \"pro\", label: \"Pro\" },\n * { value: \"enterprise\", label: \"Enterprise\" },\n * ]}\n * orientation=\"horizontal\"\n * />\n * ```\n */\nexport function RadioInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n choices = [],\n items,\n orientation = \"vertical\",\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n radioGroupClassName,\n radioItemClassName,\n radioLabelClassName,\n}: RadioInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // Support both 'choices' and 'items' prop names\n const radioOptions = items || choices;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValue: string) => {\n setLocalValue(newValue);\n propOnChange?.(newValue);\n onValueChange?.(newValue);\n };\n\n const renderRadioGroup = (\n field?: { value: string; onChange: (value: string) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get value from either form field or direct props\n const value = field ? field.value : localValue;\n\n const handleValueChange = (newValue: string) => {\n if (field) {\n field.onChange(newValue);\n } else {\n handleDirectValueChange(newValue);\n }\n\n onValueChange?.(newValue);\n };\n\n return (\n <RadioGroup\n value={value}\n onValueChange={handleValueChange}\n disabled={isDisabled}\n aria-invalid={fieldState?.invalid || undefined}\n className={cn(\n orientation === \"horizontal\"\n ? \"flex flex-row flex-wrap gap-4\"\n : \"flex flex-col gap-3\",\n radioGroupClassName\n )}\n >\n {radioOptions.map((choice) => (\n <div\n key={choice.value}\n className={cn(\n \"flex items-center gap-2\",\n radioItemClassName\n )}\n >\n <RadioGroupItem\n id={`${name}-${choice.value}`}\n value={choice.value}\n disabled={isDisabled || choice.disabled}\n />\n <label\n htmlFor={`${name}-${choice.value}`}\n className={cn(\n \"text-sm font-normal cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n radioLabelClassName\n )}\n >\n {choice.label}\n </label>\n </div>\n ))}\n </RadioGroup>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderRadioGroup(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderRadioGroup(\n field as { value: string; onChange: (value: string) => void },\n disabled,\n fieldState\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default RadioInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SwitchInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Layout\n orientation?: \"horizontal\" | \"vertical\";\n\n // Value handling\n value?: boolean;\n onChange?: (value: boolean) => void;\n onValueChange?: (value: boolean) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n switchClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SwitchInput - Toggle switch with react-hook-form integration\n *\n * @example\n * ```tsx\n * <SwitchInput\n * control={form.control}\n * name=\"notifications\"\n * label=\"Enable notifications\"\n * description=\"Receive email updates\"\n * />\n * ```\n */\nexport function SwitchInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n orientation = \"horizontal\",\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n switchClassName,\n}: SwitchInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<boolean>(propValue || false);\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValue: boolean) => {\n setLocalValue(newValue);\n propOnChange?.(newValue);\n onValueChange?.(newValue);\n };\n\n const renderSwitch = (\n field?: { value: boolean; onChange: (value: boolean) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get value from either form field or direct props\n const value = field ? (field.value ?? false) : (localValue ?? false);\n\n const handleCheckedChange = (checked: boolean) => {\n if (field) {\n field.onChange(checked);\n } else {\n handleDirectValueChange(checked);\n }\n\n onValueChange?.(checked);\n };\n\n return (\n <Switch\n id={name}\n checked={value}\n onCheckedChange={handleCheckedChange}\n disabled={isDisabled}\n className={switchClassName}\n aria-invalid={fieldState?.invalid || undefined}\n />\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field\n className={className}\n data-disabled={disabled}\n orientation={orientation}\n >\n {renderSwitch(undefined, disabled, undefined)}\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n orientation={orientation}\n >\n {renderSwitch(\n field as { value: boolean; onChange: (value: boolean) => void },\n disabled,\n fieldState\n )}\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </FieldContent>\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default SwitchInput;\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { Control, FieldValues } from \"react-hook-form\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { CalendarIcon, X } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\ntype DateValue = Date | string | null | undefined;\r\n\r\nexport interface DateInputProps {\r\n // React Hook Form\r\n control?: Control<FieldValues>;\r\n name: string;\r\n\r\n // Field configuration\r\n label?: string;\r\n placeholder?: string;\r\n description?: string;\r\n helperText?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n\r\n // Date constraints\r\n minDate?: DateValue;\r\n maxDate?: DateValue;\r\n\r\n // Value handling\r\n value?: DateValue;\r\n onChange?: (date: Date | undefined) => void;\r\n onValueChange?: (date: Date | undefined) => void;\r\n\r\n // Styling\r\n className?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n\r\n // Options\r\n Icon?: React.ComponentType<{ className?: string }>;\r\n allowClear?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// HELPERS\r\n// ============================================================================\r\n\r\n/**\r\n * Convert various date formats to Date object\r\n */\r\nfunction toDate(val: DateValue): Date | undefined {\r\n if (!val) return undefined;\r\n if (val instanceof Date) return val;\r\n // Handle YYYY-MM-DD format\r\n if (typeof val === \"string\" && /^\\d{4}-\\d{2}-\\d{2}$/.test(val)) {\r\n const [y, m, d] = val.split(\"-\").map(Number);\r\n const dt = new Date(y!, (m || 1) - 1, d || 1);\r\n return isNaN(dt.getTime()) ? undefined : dt;\r\n }\r\n const dt = new Date(val);\r\n return isNaN(dt.getTime()) ? undefined : dt;\r\n}\r\n\r\n// ============================================================================\r\n// COMPONENT\r\n// ============================================================================\r\n\r\n/**\r\n * DateInput - Date picker with react-hook-form integration\r\n *\r\n * @example\r\n * ```tsx\r\n * <DateInput\r\n * control={form.control}\r\n * name=\"birthDate\"\r\n * label=\"Date of Birth\"\r\n * minDate=\"1900-01-01\"\r\n * maxDate={new Date()}\r\n * />\r\n * ```\r\n */\r\nexport function DateInput({\r\n control,\r\n name,\r\n label,\r\n description,\r\n helperText,\r\n placeholder = \"Pick a date\",\r\n required,\r\n disabled,\r\n className,\r\n labelClassName,\r\n inputClassName,\r\n minDate,\r\n maxDate,\r\n onValueChange,\r\n value: propValue,\r\n onChange: propOnChange,\r\n Icon = CalendarIcon,\r\n allowClear = true,\r\n}: DateInputProps) {\r\n const descriptionText = description || helperText;\r\n\r\n // Check if date should be disabled\r\n const isDateDisabled = (date: Date): boolean => {\r\n if (!date) return false;\r\n const minDateObj = toDate(minDate);\r\n const maxDateObj = toDate(maxDate);\r\n if (minDateObj && date < minDateObj) return true;\r\n if (maxDateObj && date > maxDateObj) return true;\r\n return false;\r\n };\r\n\r\n // Render the date picker UI\r\n const renderDateInput = (\r\n field?: { value: DateValue; onChange: (date: Date | undefined) => void },\r\n isDisabled?: boolean\r\n ) => {\r\n const value = field ? field.value : propValue;\r\n const selected = toDate(value);\r\n const [open, setOpen] = useState(false);\r\n\r\n const handleSelect = (date: Date | undefined) => {\r\n if (field) field.onChange(date);\r\n else if (propOnChange) propOnChange(date);\r\n onValueChange?.(date);\r\n setOpen(false);\r\n };\r\n\r\n const handleClear = (e: React.MouseEvent) => {\r\n e?.stopPropagation?.();\r\n if (field) field.onChange(undefined);\r\n else if (propOnChange) propOnChange(undefined);\r\n onValueChange?.(undefined);\r\n };\r\n\r\n const displayText = selected\r\n ? selected.toLocaleDateString(\"en-US\", {\r\n month: \"short\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n })\r\n : placeholder;\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !selected && \"text-muted-foreground\",\r\n inputClassName\r\n )}\r\n disabled={isDisabled}\r\n />\r\n }\r\n >\r\n <Icon className=\"mr-2 h-4 w-4\" />\r\n {displayText}\r\n {allowClear && selected && !isDisabled && (\r\n <X\r\n className=\"ml-auto h-4 w-4 opacity-50 hover:opacity-100\"\r\n onClick={handleClear}\r\n />\r\n )}\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"single\"\r\n defaultMonth={selected}\r\n selected={selected}\r\n onSelect={handleSelect}\r\n disabled={isDateDisabled}\r\n initialFocus\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n };\r\n\r\n // Direct usage without React Hook Form\r\n if (!control) {\r\n return (\r\n <Field className={className} data-disabled={disabled}>\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderDateInput(undefined, disabled)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n </Field>\r\n );\r\n }\r\n\r\n // Using with React Hook Form via Controller\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field\r\n className={className}\r\n data-disabled={disabled}\r\n data-invalid={fieldState.invalid}\r\n >\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderDateInput(field as { value: DateValue; onChange: (date: Date | undefined) => void }, disabled)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n {fieldState.invalid && fieldState.error && (\r\n <FieldError errors={[fieldState.error]} />\r\n )}\r\n </Field>\r\n )}\r\n />\r\n );\r\n}\r\n\r\nexport default DateInput;\r\n","\"use client\";\n\nimport { useState, useRef, useCallback, useMemo, type ClipboardEvent, type KeyboardEvent, type ChangeEvent } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues } from \"react-hook-form\";\nimport { X, Plus, Tag } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldContent,\n} from \"@/components/ui/field\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n InputGroup,\n InputGroupInput,\n InputGroupAddon,\n} from \"@/components/ui/input-group\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TagInputProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Tag behavior\n maxTags?: number;\n allowDuplicates?: boolean;\n delimiter?: string;\n\n // Suggestions\n suggestions?: string[];\n suggestionLimit?: number;\n\n // Value handling\n value?: string[];\n onChange?: (tags: string[]) => void;\n onValueChange?: (tags: string[]) => void;\n\n // Tag validation/transformation\n validateTag?: (tag: string) => boolean;\n transformTag?: (tag: string) => string;\n formatTag?: (tag: string) => string;\n\n // Styling\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n\n // Additional props\n [key: string]: unknown;\n}\n\ninterface RenderTagInputProps {\n field: { value: string[]; onChange: (tags: string[]) => void } | null;\n disabled?: boolean;\n error?: string | null;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * TagInput - Tag/chip input with react-hook-form integration\n *\n * @example\n * ```tsx\n * <TagInput\n * control={form.control}\n * name=\"tags\"\n * label=\"Tags\"\n * placeholder=\"Add tags...\"\n * maxTags={10}\n * suggestions={[\"react\", \"typescript\", \"nextjs\"]}\n * />\n * ```\n */\nexport function TagInput({\n control,\n name,\n label,\n description,\n helperText,\n placeholder = \"Add tag...\",\n required,\n disabled,\n className,\n labelClassName,\n inputClassName,\n maxTags,\n allowDuplicates = false,\n suggestions = [],\n suggestionLimit = 8,\n value: propValue = [],\n onChange: propOnChange,\n onValueChange,\n delimiter = \",\",\n validateTag,\n transformTag,\n formatTag,\n ...props\n}: TagInputProps) {\n const descriptionText = description || helperText;\n const [inputValue, setInputValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Parse and validate multiple tags from a string\n const parseMultipleTags = useCallback(\n (input: string): string[] => {\n if (!input.trim()) return [];\n\n return input\n .split(delimiter)\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0)\n .map((tag) => (transformTag ? transformTag(tag) : tag))\n .filter((tag) => !validateTag || validateTag(tag));\n },\n [delimiter, validateTag, transformTag]\n );\n\n // Add multiple tags at once\n const handleAddMultipleTags = useCallback(\n (\n tags: string[],\n newTags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n if (!newTags || newTags.length === 0) return tags;\n\n const updatedTags = [...tags];\n let addedCount = 0;\n\n for (const newTag of newTags) {\n if (!newTag.trim()) continue;\n\n const trimmedTag = newTag.trim();\n\n if (!allowDuplicates && updatedTags.includes(trimmedTag)) {\n continue;\n }\n\n if (maxTags && updatedTags.length >= maxTags) {\n break;\n }\n\n updatedTags.push(trimmedTag);\n addedCount++;\n }\n\n if (addedCount > 0) {\n if (field) {\n field.onChange(updatedTags);\n } else if (propOnChange) {\n propOnChange(updatedTags);\n }\n onValueChange?.(updatedTags);\n }\n\n return updatedTags;\n },\n [allowDuplicates, maxTags, propOnChange, onValueChange]\n );\n\n // Handle single tag addition\n const handleAddTag = useCallback(\n (\n tags: string[],\n newTag: string,\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n const tagsToAdd = parseMultipleTags(newTag);\n const updatedTags = handleAddMultipleTags(tags, tagsToAdd, field);\n setInputValue(\"\");\n return updatedTags;\n },\n [parseMultipleTags, handleAddMultipleTags]\n );\n\n const handleRemoveTag = useCallback(\n (\n tags: string[],\n indexToRemove: number,\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n const updatedTags = tags.filter((_, index) => index !== indexToRemove);\n\n if (field) {\n field.onChange(updatedTags);\n } else if (propOnChange) {\n propOnChange(updatedTags);\n }\n\n onValueChange?.(updatedTags);\n return updatedTags;\n },\n [propOnChange, onValueChange]\n );\n\n // Handle input change\n const handleInputChange = useCallback(\n (\n e: ChangeEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n const value = e.target.value;\n\n if (value.includes(delimiter)) {\n const parts = value.split(delimiter);\n const completeTags = parts.slice(0, -1);\n const remainingInput = parts[parts.length - 1] || \"\";\n\n if (completeTags.length > 0) {\n handleAddMultipleTags(\n tags,\n completeTags.map((t) => t.trim()).filter((t) => t),\n field\n );\n }\n\n setInputValue(remainingInput);\n } else {\n setInputValue(value);\n }\n },\n [delimiter, handleAddMultipleTags]\n );\n\n // Handle paste events\n const handlePaste = useCallback(\n (\n e: ClipboardEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n e.preventDefault();\n const pastedText = e.clipboardData.getData(\"text\");\n const pastedTags = parseMultipleTags(pastedText);\n\n if (pastedTags.length > 0) {\n handleAddMultipleTags(tags, pastedTags, field);\n setInputValue(\"\");\n }\n },\n [parseMultipleTags, handleAddMultipleTags]\n );\n\n const handleKeyDown = useCallback(\n (\n e: KeyboardEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n if (e.key === \"Enter\" || e.key === delimiter) {\n e.preventDefault();\n handleAddTag(tags, inputValue, field);\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\n e.preventDefault();\n handleRemoveTag(tags, tags.length - 1, field);\n }\n },\n [delimiter, inputValue, handleAddTag, handleRemoveTag]\n );\n\n const getPlaceholder = useCallback(\n (tagsCount: number): string => {\n if (tagsCount === 0) {\n return placeholder.includes(\"comma\")\n ? placeholder\n : `${placeholder} (separate with ${delimiter} for multiple)`;\n }\n return \"Add another...\";\n },\n [placeholder, delimiter]\n );\n\n const canAddMoreTags = useCallback(\n (tagsLength: number): boolean => {\n return !maxTags || tagsLength < maxTags;\n },\n [maxTags]\n );\n\n const renderTagInput = ({ field, disabled: isDisabled, error }: RenderTagInputProps) => {\n const tags: string[] = field ? field.value || [] : propValue || [];\n const showInput = !isDisabled && canAddMoreTags(tags.length);\n const normalizedInputRaw = (inputValue || \"\").trim();\n const normalizedInput = (transformTag ? transformTag(normalizedInputRaw) : normalizedInputRaw)\n .toLowerCase()\n .trim();\n\n const filteredSuggestions = useMemo(() => {\n if (!normalizedInput) return [];\n const existingSet = new Set(tags.map((t) => t.toLowerCase()));\n return suggestions\n .filter(Boolean)\n .map((s) => (transformTag ? transformTag(s) : s))\n .filter((s) => s.toLowerCase().includes(normalizedInput))\n .filter((s) => allowDuplicates || !existingSet.has(s.toLowerCase()))\n .slice(0, suggestionLimit);\n }, [normalizedInput, tags, suggestions, transformTag, allowDuplicates, suggestionLimit]);\n\n return (\n <>\n {/* Tags Display Area */}\n {tags.length > 0 && (\n <div\n className={cn(\n \"flex flex-wrap gap-1.5 mb-3\",\n \"p-2.5 rounded-md bg-muted/30 border border-border/50\"\n )}\n >\n {tags.map((tag, index) => {\n const displayTag = formatTag ? formatTag(tag) : tag;\n\n return (\n <Badge\n key={`${tag}-${index}`}\n variant=\"secondary\"\n className={cn(\n \"group flex items-center gap-1.5 px-2.5 py-1\",\n \"bg-background border border-border shadow-sm\",\n \"hover:border-primary/50 transition-all duration-200\",\n \"animate-in fade-in-0 zoom-in-95\",\n isDisabled && \"opacity-60\"\n )}\n >\n <Tag className=\"h-3 w-3 text-muted-foreground\" />\n <span\n className=\"max-w-[200px] truncate text-sm font-medium\"\n title={displayTag}\n >\n {displayTag}\n </span>\n {!isDisabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-4 w-4 p-0 ml-0.5\",\n \"text-muted-foreground/60 hover:text-destructive\",\n \"hover:bg-destructive/10 rounded-sm\",\n \"transition-colors\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveTag(tags, index, field);\n }}\n aria-label={`Remove ${displayTag}`}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </Badge>\n );\n })}\n </div>\n )}\n\n {/* Input Field */}\n {showInput && (\n <div className=\"space-y-3\">\n <InputGroup className={cn(error && \"border-destructive\")}>\n <InputGroupAddon align=\"inline-start\">\n <Tag className=\"h-4 w-4\" />\n </InputGroupAddon>\n <InputGroupInput\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleInputChange(e, tags, field)}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => handleKeyDown(e, tags, field)}\n onPaste={(e: ClipboardEvent<HTMLInputElement>) => handlePaste(e, tags, field)}\n placeholder={getPlaceholder(tags.length)}\n disabled={isDisabled}\n aria-label=\"Add new tag\"\n aria-invalid={!!error}\n className={inputClassName}\n {...props}\n />\n {inputValue.trim() && (\n <InputGroupAddon align=\"inline-end\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-primary hover:text-primary hover:bg-primary/10\"\n onClick={() => handleAddTag(tags, inputValue, field)}\n aria-label=\"Add tag\"\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n </InputGroupAddon>\n )}\n </InputGroup>\n\n {/* Suggestions list */}\n {filteredSuggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 p-2 rounded-md bg-muted/30 border border-dashed\">\n <span className=\"text-xs text-muted-foreground font-medium w-full mb-1\">\n Suggestions:\n </span>\n {filteredSuggestions.map((sug) => (\n <Button\n key={sug}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"h-7 px-2.5 text-xs\",\n \"hover:border-primary/50 hover:bg-primary/5\",\n \"transition-all duration-200\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleAddMultipleTags(tags, [sug], field);\n setInputValue(\"\");\n }}\n aria-label={`Add ${formatTag ? formatTag(sug) : sug}`}\n >\n {formatTag ? formatTag(sug) : sug}\n <Plus className=\"h-3 w-3 ml-1.5 opacity-70\" />\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Status indicators */}\n {maxTags && (\n <div\n className={cn(\n \"text-xs font-medium mt-2 flex items-center gap-1.5\",\n tags.length >= maxTags\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n )}\n >\n <div\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n tags.length >= maxTags\n ? \"bg-destructive\"\n : \"bg-muted-foreground/50\"\n )}\n />\n {tags.length}/{maxTags} tags\n </div>\n )}\n </>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n <FieldContent>\n {renderTagInput({ field: null, disabled, error: null })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n <FieldContent>\n {renderTagInput({\n field: field as { value: string[]; onChange: (tags: string[]) => void },\n disabled,\n error: fieldState?.error?.message,\n })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </FieldContent>\n </Field>\n )}\n />\n );\n}\n\nexport default TagInput;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues } from \"react-hook-form\";\nimport { Check, ChevronDown, X, Tag as TagIcon } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldContent,\n} from \"@/components/ui/field\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { Input } from \"@/components/ui/input\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TagChoiceItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TagChoiceInputProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name?: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: TagChoiceItem[];\n\n // Value handling\n value?: string[];\n onValueChange?: (values: string[]) => void;\n\n // Styling\n className?: string;\n}\n\ninterface TagChoiceInputInternalProps {\n label?: string;\n description?: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n items: TagChoiceItem[];\n value: string[];\n onValueChange?: (values: string[]) => void;\n error?: string;\n}\n\n// ============================================================================\n// INTERNAL COMPONENT\n// ============================================================================\n\nfunction TagChoiceInputInternal({\n label,\n description,\n placeholder = \"Select...\",\n required,\n disabled,\n className,\n items = [],\n value = [],\n onValueChange,\n error,\n}: TagChoiceInputInternalProps) {\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const selectedValues = value || [];\n\n const handleSelect = (itemValue: string) => {\n const isSelected = selectedValues.includes(itemValue);\n const newValue = isSelected\n ? selectedValues.filter((v) => v !== itemValue)\n : [...selectedValues, itemValue];\n onValueChange?.(newValue);\n };\n\n const handleRemove = (valueToRemove: string) => {\n const newValue = selectedValues.filter((v) => v !== valueToRemove);\n onValueChange?.(newValue);\n };\n\n const filteredItems = items.filter((item) =>\n item.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <Field className={className} data-disabled={disabled} data-invalid={!!error}>\n {label && (\n <FieldLabel>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n\n <FieldContent>\n {/* Selected Tags Display */}\n {selectedValues.length > 0 && (\n <div\n className={cn(\n \"flex flex-wrap gap-1.5 mb-3\",\n \"p-2.5 rounded-md bg-muted/30 border border-border/50\"\n )}\n >\n {selectedValues.map((val) => {\n const item = items.find((i) => i.value === val);\n return (\n <Badge\n key={val}\n variant=\"secondary\"\n className={cn(\n \"group flex items-center gap-1.5 px-2.5 py-1\",\n \"bg-background border border-border shadow-sm\",\n \"hover:border-primary/50 transition-all duration-200\",\n disabled && \"opacity-60\"\n )}\n >\n <TagIcon className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">\n {item?.label || val}\n </span>\n {!disabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-4 w-4 p-0 ml-0.5\",\n \"text-muted-foreground/60 hover:text-destructive\",\n \"hover:bg-destructive/10 rounded-sm\",\n \"transition-colors\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(val);\n }}\n aria-label={`Remove ${item?.label || val}`}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </Badge>\n );\n })}\n </div>\n )}\n\n {/* Selection Trigger */}\n <Popover open={open} onOpenChange={setOpen} modal={true}>\n <PopoverTrigger\n render={\n <Button\n type=\"button\"\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"w-full justify-between h-auto min-h-[2.5rem] px-3 py-2\",\n \"hover:bg-accent/50 transition-colors\",\n error && \"border-destructive\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n />\n }\n >\n <div className=\"flex items-center gap-2\">\n <TagIcon className=\"h-4 w-4 text-muted-foreground\" />\n <span\n className={cn(\n \"text-sm\",\n selectedValues.length === 0 && \"text-muted-foreground\"\n )}\n >\n {selectedValues.length > 0\n ? `${selectedValues.length} selected`\n : placeholder}\n </span>\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 text-muted-foreground transition-transform duration-200\",\n open && \"rotate-180\"\n )}\n />\n </PopoverTrigger>\n <PopoverContent\n className=\"w-(--anchor-width) p-0\"\n align=\"start\"\n >\n <div className=\"p-2 border-b\">\n <Input\n placeholder=\"Search options...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"h-8\"\n />\n </div>\n <div className=\"max-h-[300px] overflow-y-auto p-1\">\n {filteredItems.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No options found\n </div>\n ) : (\n <div className=\"space-y-0.5\">\n {filteredItems.map((item) => {\n const isSelected = selectedValues.includes(item.value);\n return (\n <button\n key={item.value}\n type=\"button\"\n onClick={() => handleSelect(item.value)}\n disabled={item.disabled}\n className={cn(\n \"w-full flex items-center justify-between px-2 py-2\",\n \"text-sm rounded-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"transition-colors cursor-pointer\",\n isSelected && \"bg-primary/10 text-primary font-medium\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <span>{item.label}</span>\n {isSelected && <Check className=\"h-4 w-4 text-primary\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n <div className=\"border-t px-2 py-2 text-xs text-muted-foreground text-center\">\n {selectedValues.length > 0\n ? `${selectedValues.length} option${selectedValues.length > 1 ? \"s\" : \"\"} selected`\n : \"Select options from the list\"}\n </div>\n </PopoverContent>\n </Popover>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError errors={[{ message: error }]} />}\n </FieldContent>\n </Field>\n );\n}\n\nTagChoiceInputInternal.displayName = \"TagChoiceInputInternal\";\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * TagChoiceInput - Multi-select with tags display\n *\n * @example\n * ```tsx\n * <TagChoiceInput\n * control={form.control}\n * name=\"categories\"\n * label=\"Categories\"\n * items={[\n * { value: \"tech\", label: \"Technology\" },\n * { value: \"design\", label: \"Design\" },\n * ]}\n * />\n * ```\n */\nexport function TagChoiceInput({\n control,\n name,\n label,\n description,\n helperText,\n placeholder = \"Select...\",\n required,\n disabled,\n className,\n items = [],\n value: propValue = [],\n onValueChange,\n}: TagChoiceInputProps) {\n const descriptionText = description || helperText;\n\n if (control && name) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <TagChoiceInputInternal\n label={label}\n description={descriptionText}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={className}\n items={items}\n value={field.value || []}\n onValueChange={(val) => {\n field.onChange(val);\n onValueChange?.(val);\n }}\n error={fieldState?.error?.message}\n />\n )}\n />\n );\n }\n\n return (\n <TagChoiceInputInternal\n label={label}\n description={descriptionText}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={className}\n items={items}\n value={propValue}\n onValueChange={onValueChange}\n />\n );\n}\n\nTagChoiceInput.displayName = \"TagChoiceInput\";\n\nexport default TagChoiceInput;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues } from \"react-hook-form\";\nimport { Check, ChevronsUpDown } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/components/ui/command\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport type { ReactNode } from \"react\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxInputProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: ComboboxOption[];\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n triggerClassName?: string;\n\n // Custom rendering\n renderOption?: (option: ComboboxOption) => ReactNode;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/**\n * Generate a stable key for list items\n */\nfunction generateStableKey(item: ComboboxOption, index: number, prefix: string): string {\n return `${prefix}-${item.value}-${index}`;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * ComboboxInput - Searchable select with react-hook-form integration\n *\n * @example\n * ```tsx\n * <ComboboxInput\n * control={form.control}\n * name=\"country\"\n * label=\"Country\"\n * items={[\n * { value: \"us\", label: \"United States\" },\n * { value: \"uk\", label: \"United Kingdom\" },\n * ]}\n * searchPlaceholder=\"Search countries...\"\n * />\n * ```\n */\nexport function ComboboxInput({\n control,\n name,\n label,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search...\",\n emptyText = \"No items found.\",\n description,\n helperText,\n required,\n disabled,\n items = [],\n className,\n labelClassName,\n triggerClassName,\n onValueChange,\n renderOption,\n value: propValue,\n onChange: propOnChange,\n}: ComboboxInputProps) {\n const descriptionText = description || helperText;\n const [open, setOpen] = useState(false);\n\n const handleSelect = (\n selectedValue: string,\n field?: { onChange: (value: string) => void }\n ) => {\n if (field) {\n field.onChange(selectedValue);\n } else if (propOnChange) {\n propOnChange(selectedValue);\n }\n onValueChange?.(selectedValue);\n setOpen(false);\n };\n\n const renderCombobox = (\n currentValue: string | undefined,\n field?: { onChange: (value: string) => void },\n isDisabled?: boolean\n ) => {\n const selectedItem = items.find((item) => item.value === currentValue);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n render={\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={isDisabled}\n className={cn(\n \"w-full justify-between font-normal\",\n !currentValue && \"text-muted-foreground\",\n triggerClassName\n )}\n />\n }\n >\n {selectedItem ? selectedItem.label : placeholder}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </PopoverTrigger>\n <PopoverContent className=\"w-(--anchor-width) p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={searchPlaceholder} />\n <CommandList>\n <CommandEmpty>{emptyText}</CommandEmpty>\n <CommandGroup>\n {items.map((item, index) => {\n const itemKey = generateStableKey(item, index, name || \"combobox\");\n return (\n <CommandItem\n key={itemKey}\n value={item.label}\n disabled={item.disabled}\n onSelect={() => handleSelect(item.value, field)}\n >\n {renderOption ? renderOption(item) : item.label}\n <Check\n className={cn(\n \"ml-auto h-4 w-4\",\n currentValue === item.value ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCombobox(propValue, undefined, disabled)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCombobox(field.value, field, disabled)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\nexport default ComboboxInput;\n","\"use client\";\n\nimport { forwardRef, type ChangeEvent } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldError as RHFFieldError } from \"react-hook-form\";\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\nimport { Field, FieldLabel, FieldDescription, FieldError } from \"@/components/ui/field\";\nimport { Wand2 } from \"lucide-react\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SlugFieldProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Slug generation\n sourceValue?: string;\n onGenerate?: (sourceValue: string) => string;\n\n // Value handling\n value?: string;\n onChange?: (e: { target: { value: string } }) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n\n // Error (for direct usage)\n error?: RHFFieldError;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/**\n * Generates a URL-friendly slug from a string\n */\nexport function generateSlug(text: string | undefined): string {\n if (!text) return \"\";\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\") // Remove special characters\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\n .replace(/-+/g, \"-\") // Replace multiple hyphens with single hyphen\n .replace(/^-+|-+$/g, \"\"); // Remove leading/trailing hyphens\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SlugField - URL slug input with auto-generation\n *\n * @example\n * ```tsx\n * <SlugField\n * control={form.control}\n * name=\"slug\"\n * label=\"URL Slug\"\n * sourceValue={form.watch(\"title\")}\n * description=\"This will be used in the page URL\"\n * required\n * />\n * ```\n */\nconst SlugField = forwardRef<HTMLInputElement, SlugFieldProps>(\n (\n {\n control,\n name,\n description,\n helperText,\n required,\n label,\n placeholder = \"my-page-slug\",\n disabled,\n sourceValue,\n onGenerate,\n className,\n inputClassName,\n labelClassName,\n onValueChange,\n value,\n onChange,\n error,\n },\n ref\n ) => {\n const descriptionText = description || helperText;\n\n const handleGenerate = (\n _currentValue: string | undefined,\n fieldOnChange?: (value: string) => void\n ) => {\n const newSlug = onGenerate\n ? onGenerate(sourceValue || \"\")\n : generateSlug(sourceValue);\n fieldOnChange?.(newSlug);\n onValueChange?.(newSlug);\n };\n\n const renderInput = (\n fieldValue: string | undefined,\n fieldOnChange?: (value: string) => void,\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean; error?: RHFFieldError }\n ) => {\n return (\n <InputGroup>\n <InputGroupInput\n ref={ref}\n id={name}\n type=\"text\"\n disabled={isDisabled}\n placeholder={placeholder}\n value={fieldValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n fieldOnChange?.(newValue);\n onValueChange?.(newValue);\n }}\n aria-invalid={fieldState?.invalid}\n className={inputClassName}\n />\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n type=\"button\"\n size=\"sm\"\n onClick={() => handleGenerate(fieldValue, fieldOnChange)}\n disabled={isDisabled || !sourceValue}\n title=\"Generate slug from source\"\n >\n <Wand2 className=\"h-4 w-4\" />\n Generate\n </InputGroupButton>\n </InputGroupAddon>\n </InputGroup>\n );\n };\n\n // With react-hook-form\n if (control && name) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderInput(field.value, field.onChange, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n }\n\n // Direct usage (without react-hook-form)\n const handleDirectChange = (newValue: string) => {\n onChange?.({ target: { value: newValue } });\n onValueChange?.(newValue);\n };\n\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderInput(value, handleDirectChange, disabled, { error })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {error && <FieldError errors={[error]} />}\n </Field>\n );\n }\n);\n\nSlugField.displayName = \"SlugField\";\n\nexport default SlugField;\nexport { SlugField };\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\nexport interface FormErrorSummaryProps {\r\n /** Form errors object from react-hook-form */\r\n errors?: Record<string, unknown>;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom title text */\r\n title?: string;\r\n}\r\n\r\n// Helper to flatten nested errors\r\nconst flattenErrors = (\r\n errors: Record<string, unknown>,\r\n prefix = \"\"\r\n): Array<{ field: string; message: string }> => {\r\n const flattened: Array<{ field: string; message: string }> = [];\r\n\r\n Object.entries(errors).forEach(([key, value]) => {\r\n const path = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (value && typeof value === \"object\" && \"message\" in value) {\r\n // This is an error object\r\n flattened.push({ field: path, message: String(value.message) });\r\n } else if (value && typeof value === \"object\") {\r\n // This is a nested object, recurse\r\n flattened.push(...flattenErrors(value as Record<string, unknown>, path));\r\n }\r\n });\r\n\r\n return flattened;\r\n};\r\n\r\n/**\r\n * FormErrorSummary - Displays a summary of form validation errors\r\n *\r\n * Takes react-hook-form errors object and displays all errors in a list.\r\n * Automatically flattens nested errors for complex form structures.\r\n */\r\nexport function FormErrorSummary({\r\n errors,\r\n className,\r\n title = \"Please fix the following errors:\",\r\n}: FormErrorSummaryProps) {\r\n if (!errors || Object.keys(errors).length === 0) {\r\n return null;\r\n }\r\n\r\n const errorList = flattenErrors(errors);\r\n\r\n if (errorList.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"bg-destructive/15 p-3 rounded-md border border-destructive/20\",\r\n className\r\n )}\r\n >\r\n <h4 className=\"text-sm font-medium text-destructive mb-2\">{title}</h4>\r\n <ul className=\"text-sm text-destructive space-y-1\">\r\n {errorList.map(({ field, message }, index) => (\r\n <li key={`${field}-${index}`} className=\"flex items-start gap-2\">\r\n <span className=\"text-destructive\">•</span>\r\n <span>\r\n <strong>{field}:</strong> {message}\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../../utils\";\r\nimport { CalendarIcon, X } from \"lucide-react\";\r\n\r\nexport interface DateRange {\r\n from?: Date;\r\n to?: Date;\r\n}\r\n\r\nexport interface DateRangeFilterProps {\r\n /** Initial start date */\r\n initialStartDate?: Date;\r\n /** Initial end date */\r\n initialEndDate?: Date;\r\n /** Callback when filter is applied (receives startDate, endDate) */\r\n onFilter?: (startDate: Date | null, endDate: Date | null) => void;\r\n /** Callback when filter is cleared */\r\n onClear?: () => void;\r\n /** Additional classes for the container */\r\n className?: string;\r\n /** Additional classes for trigger button */\r\n buttonClassName?: string;\r\n /** Placeholder text when no date selected */\r\n placeholder?: string;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Align popover to the right */\r\n alignRight?: boolean;\r\n /** Number of months to display */\r\n numberOfMonths?: number;\r\n}\r\n\r\n/**\r\n * DateRangeFilter - A date range picker for filtering\r\n *\r\n * Features:\r\n * - Only applies filter when explicitly submitted\r\n * - Supports clearing filters\r\n * - Uses Popover to show calendar on click\r\n * - Configurable min/max dates\r\n */\r\nexport function DateRangeFilter({\r\n initialStartDate,\r\n initialEndDate,\r\n onFilter,\r\n onClear,\r\n className,\r\n buttonClassName,\r\n placeholder = \"Pick a date range\",\r\n minDate,\r\n maxDate,\r\n alignRight = true,\r\n numberOfMonths = 1,\r\n}: DateRangeFilterProps) {\r\n // Internal state for range selection (before applying)\r\n const [dateRange, setDateRange] = React.useState<DateRange | undefined>(\r\n initialStartDate || initialEndDate\r\n ? { from: initialStartDate, to: initialEndDate }\r\n : undefined\r\n );\r\n\r\n // Applied state (shown on button)\r\n const [appliedRange, setAppliedRange] = React.useState(dateRange);\r\n\r\n // Popover open state\r\n const [open, setOpen] = React.useState(false);\r\n\r\n // Update state when props change\r\n React.useEffect(() => {\r\n const newRange =\r\n initialStartDate || initialEndDate\r\n ? { from: initialStartDate, to: initialEndDate }\r\n : undefined;\r\n setDateRange(newRange);\r\n setAppliedRange(newRange);\r\n }, [initialStartDate, initialEndDate]);\r\n\r\n // Handle applying the filter\r\n const handleApplyFilter = () => {\r\n setAppliedRange(dateRange);\r\n onFilter?.(dateRange?.from || null, dateRange?.to || null);\r\n setOpen(false);\r\n };\r\n\r\n // Handle clearing the filter\r\n const handleClearFilter = (e?: React.MouseEvent) => {\r\n e?.stopPropagation?.();\r\n setDateRange(undefined);\r\n setAppliedRange(undefined);\r\n onClear?.();\r\n setOpen(false);\r\n };\r\n\r\n // Format the display text\r\n const getDisplayText = () => {\r\n if (!appliedRange?.from && !appliedRange?.to) return placeholder;\r\n\r\n const formatDate = (date: Date) => {\r\n return date.toLocaleDateString(\"en-US\", {\r\n month: \"short\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n });\r\n };\r\n\r\n if (appliedRange.from && appliedRange.to) {\r\n return `${formatDate(appliedRange.from)} - ${formatDate(appliedRange.to)}`;\r\n }\r\n if (appliedRange.from) return `From ${formatDate(appliedRange.from)}`;\r\n if (appliedRange.to) return `Until ${formatDate(appliedRange.to)}`;\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !(appliedRange?.from || appliedRange?.to) &&\r\n \"text-muted-foreground\",\r\n buttonClassName\r\n )}\r\n />\r\n }\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {getDisplayText()}\r\n {(appliedRange?.from || appliedRange?.to) && (\r\n <X\r\n className=\"ml-auto h-4 w-4 opacity-50 hover:opacity-100\"\r\n onClick={handleClearFilter}\r\n />\r\n )}\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className=\"w-auto p-0\"\r\n align={alignRight ? \"end\" : \"start\"}\r\n side=\"bottom\"\r\n >\r\n <div className=\"p-3 space-y-4\">\r\n <Calendar\r\n mode=\"range\"\r\n defaultMonth={dateRange?.from}\r\n selected={dateRange}\r\n onSelect={setDateRange}\r\n disabled={(date: Date) => {\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n return false;\r\n }}\r\n numberOfMonths={numberOfMonths}\r\n initialFocus\r\n />\r\n\r\n {/* Action buttons */}\r\n <div className=\"flex justify-between gap-2 pt-2 border-t\">\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => handleClearFilter()}\r\n >\r\n Clear\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n size=\"sm\"\r\n onClick={handleApplyFilter}\r\n disabled={!dateRange?.from && !dateRange?.to}\r\n >\r\n Apply Filter\r\n </Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { format, isValid } from \"date-fns\";\r\nimport { Controller, Control } from \"react-hook-form\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../../utils\";\r\nimport { CalendarIcon, X, LucideIcon } from \"lucide-react\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\nexport interface DateRangeValue {\r\n from?: Date | string;\r\n to?: Date | string;\r\n}\r\n\r\nexport interface DateRangeInputProps {\r\n /** React Hook Form control */\r\n control?: Control<any>;\r\n /** Field name for form registration */\r\n name?: string;\r\n /** Field label */\r\n label?: string;\r\n /** Description text below the input */\r\n description?: string;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Whether the field is required */\r\n required?: boolean;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Additional className for the wrapper */\r\n className?: string;\r\n /** Additional className for the label */\r\n labelClassName?: string;\r\n /** Additional className for the button */\r\n buttonClassName?: string;\r\n /** Additional className for the calendar popover */\r\n calendarClassName?: string;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Array of disabled dates */\r\n disabledDates?: Date[];\r\n /** Array of disabled days (0-6, where 0 is Sunday) */\r\n disabledDays?: number[];\r\n /** Callback when value changes */\r\n onValueChange?: (range: DateRangeValue) => void;\r\n /** Custom validation function for date range */\r\n validateDateRange?: (range: DateRangeValue) => boolean;\r\n /** Function to clear form errors */\r\n clearErrors?: (name: string) => void;\r\n /** Custom description component */\r\n descriptionComponent?: ReactNode;\r\n /** Whether to show clear button */\r\n allowClear?: boolean;\r\n /** Whether to show badge with date range */\r\n showBadge?: boolean;\r\n /** Custom icon component */\r\n Icon?: LucideIcon;\r\n /** Transform functions for input/output */\r\n transform?: {\r\n input: (value: any) => DateRangeValue;\r\n output: (range: DateRangeValue) => any;\r\n };\r\n}\r\n\r\n// ============================================\r\n// Helper Components\r\n// ============================================\r\n\r\ninterface DateRangePopoverProps {\r\n dateRange: DateRangeValue;\r\n placeholder: string;\r\n disabled?: boolean;\r\n buttonClassName?: string;\r\n calendarClassName?: string;\r\n allowClear: boolean;\r\n showBadge: boolean;\r\n Icon: LucideIcon;\r\n formatDateRange: (range: DateRangeValue) => string;\r\n isDateDisabled: (date: Date) => boolean;\r\n handleDateRangeSelect: (range: DateRangeValue | undefined) => void;\r\n handleClear: (e: React.MouseEvent) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nfunction DateRangePopover({\r\n dateRange,\r\n placeholder,\r\n disabled,\r\n buttonClassName,\r\n calendarClassName,\r\n allowClear,\r\n showBadge,\r\n Icon,\r\n formatDateRange,\r\n isDateDisabled,\r\n handleDateRangeSelect,\r\n handleClear,\r\n minDate,\r\n maxDate,\r\n}: DateRangePopoverProps) {\r\n const hasValue = dateRange?.from || dateRange?.to;\r\n\r\n return (\r\n <Popover>\r\n <PopoverTrigger asChild>\r\n <div className=\"relative\">\r\n <Button\r\n variant={hasValue ? \"outline\" : \"secondary\"}\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !hasValue && \"text-muted-foreground\",\r\n disabled && \"cursor-not-allowed opacity-50\",\r\n hasValue && allowClear && \"pr-8\",\r\n buttonClassName\r\n )}\r\n disabled={disabled}\r\n type=\"button\"\r\n >\r\n <Icon className=\"mr-2 h-4 w-4\" />\r\n {hasValue ? (\r\n <span>\r\n {formatDateRange(dateRange)}\r\n {showBadge && dateRange?.from && dateRange?.to && (\r\n <span className=\"ml-2 text-xs bg-secondary text-secondary-foreground py-0.5 px-2 rounded-full\">\r\n {formatDateRange(dateRange)}\r\n </span>\r\n )}\r\n </span>\r\n ) : (\r\n <span>{placeholder}</span>\r\n )}\r\n </Button>\r\n {hasValue && allowClear && !disabled && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className=\"absolute right-0 top-0 h-full px-2 hover:bg-transparent\"\r\n onClick={handleClear}\r\n >\r\n <X className=\"h-4 w-4 text-muted-foreground hover:text-foreground\" />\r\n <span className=\"sr-only\">Clear date range</span>\r\n </Button>\r\n )}\r\n </div>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className={cn(\"w-auto p-0\", calendarClassName)}\r\n align=\"start\"\r\n >\r\n <Calendar\r\n mode=\"range\"\r\n selected={dateRange as any}\r\n onSelect={handleDateRangeSelect as any}\r\n disabled={isDateDisabled}\r\n initialFocus\r\n {...(minDate && { fromDate: minDate })}\r\n {...(maxDate && { toDate: maxDate })}\r\n />\r\n <div className=\"p-3 border-t border-border\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={handleClear}\r\n disabled={!hasValue}\r\n className=\"w-full\"\r\n >\r\n Clear Date Range\r\n </Button>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n\r\n// ============================================\r\n// Main Component\r\n// ============================================\r\n\r\nconst defaultTransform = {\r\n input: (value: any): DateRangeValue =>\r\n value\r\n ? {\r\n from: value.from ? new Date(value.from) : undefined,\r\n to: value.to ? new Date(value.to) : undefined,\r\n }\r\n : { from: undefined, to: undefined },\r\n output: (range: DateRangeValue) => ({\r\n from: range?.from\r\n ? range.from instanceof Date\r\n ? range.from.toISOString()\r\n : range.from\r\n : undefined,\r\n to: range?.to\r\n ? range.to instanceof Date\r\n ? range.to.toISOString()\r\n : range.to\r\n : undefined,\r\n }),\r\n};\r\n\r\n/**\r\n * DateRangeInput - Date range picker with react-hook-form integration\r\n *\r\n * @example\r\n * ```tsx\r\n * <DateRangeInput\r\n * control={control}\r\n * name=\"dateRange\"\r\n * label=\"Select Dates\"\r\n * placeholder=\"Pick a date range\"\r\n * />\r\n * ```\r\n */\r\nexport function DateRangeInput({\r\n control,\r\n name,\r\n label,\r\n description,\r\n placeholder = \"Select date range\",\r\n required,\r\n disabled,\r\n className,\r\n labelClassName,\r\n buttonClassName,\r\n calendarClassName,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n disabledDays,\r\n onValueChange,\r\n validateDateRange,\r\n clearErrors,\r\n descriptionComponent,\r\n allowClear = true,\r\n showBadge = true,\r\n Icon = CalendarIcon,\r\n transform = defaultTransform,\r\n}: DateRangeInputProps) {\r\n const [localDateRange, setLocalDateRange] = useState<DateRangeValue>({\r\n from: undefined,\r\n to: undefined,\r\n });\r\n\r\n const formatDateRange = (range: DateRangeValue): string => {\r\n if (!range || (!range.from && !range.to)) return \"\";\r\n\r\n const fromDate = range.from instanceof Date ? range.from : range.from ? new Date(range.from) : null;\r\n const toDate = range.to instanceof Date ? range.to : range.to ? new Date(range.to) : null;\r\n\r\n const fromFormatted = fromDate && isValid(fromDate) ? format(fromDate, \"MMM d\") : \"\";\r\n const toFormatted = toDate && isValid(toDate) ? format(toDate, \"MMM d\") : \"\";\r\n\r\n if (fromFormatted && toFormatted) {\r\n return `${fromFormatted} - ${toFormatted}`;\r\n } else if (fromFormatted) {\r\n return `From ${fromFormatted}`;\r\n } else if (toFormatted) {\r\n return `Until ${toFormatted}`;\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const isDateDisabled = (date: Date): boolean => {\r\n if (!date || !isValid(date)) return true;\r\n if (disabled) return true;\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n if (disabledDates?.some((d) => d.getTime() === date.getTime())) return true;\r\n if (disabledDays?.includes(date.getDay())) return true;\r\n return false;\r\n };\r\n\r\n const handleDateRangeSelect = (\r\n range: DateRangeValue | undefined,\r\n field?: any\r\n ) => {\r\n if (disabled) return;\r\n\r\n const safeRange = range || { from: undefined, to: undefined };\r\n\r\n if (validateDateRange && !validateDateRange(safeRange)) {\r\n return;\r\n }\r\n\r\n if (field) {\r\n const transformedValue = transform.output(safeRange);\r\n field.onChange(transformedValue);\r\n } else {\r\n setLocalDateRange(safeRange);\r\n }\r\n\r\n onValueChange?.(safeRange);\r\n\r\n if (clearErrors && name) {\r\n clearErrors(name);\r\n }\r\n };\r\n\r\n const handleClear = (field: any | null, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n const emptyRange = { from: undefined, to: undefined };\r\n\r\n if (field) {\r\n field.onChange(emptyRange);\r\n } else {\r\n setLocalDateRange(emptyRange);\r\n }\r\n\r\n onValueChange?.(emptyRange);\r\n\r\n if (clearErrors && name) {\r\n clearErrors(name);\r\n }\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n control={control}\r\n name={name}\r\n render={({ field, fieldState }) => {\r\n const dateRange = transform.input(field.value);\r\n\r\n return (\r\n <Field\r\n className={cn(\"w-full\", className)}\r\n data-invalid={!!fieldState.error}\r\n >\r\n {label && (\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <FieldLabel className={cn(\"grow\", labelClassName)}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n <span className=\"text-muted-foreground shrink-0\">\r\n <Icon className=\"h-4 w-4\" />\r\n </span>\r\n </div>\r\n )}\r\n\r\n <DateRangePopover\r\n dateRange={dateRange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n buttonClassName={buttonClassName}\r\n calendarClassName={calendarClassName}\r\n allowClear={allowClear}\r\n showBadge={showBadge}\r\n Icon={Icon}\r\n formatDateRange={formatDateRange}\r\n isDateDisabled={isDateDisabled}\r\n handleDateRangeSelect={(range) =>\r\n handleDateRangeSelect(range, field)\r\n }\r\n handleClear={(e) => handleClear(field, e)}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n\r\n {description && !descriptionComponent && (\r\n <FieldDescription>{description}</FieldDescription>\r\n )}\r\n\r\n {descriptionComponent && (\r\n <div className=\"text-sm text-muted-foreground\">\r\n {descriptionComponent}\r\n </div>\r\n )}\r\n\r\n <FieldError\r\n errors={fieldState.error ? [fieldState.error] : undefined}\r\n />\r\n </Field>\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n // Standalone without form\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n {label && (\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <div className={cn(\"text-sm font-medium flex-grow\", labelClassName)}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </div>\r\n <span className=\"text-muted-foreground flex-shrink-0\">\r\n <Icon className=\"h-4 w-4\" />\r\n </span>\r\n </div>\r\n )}\r\n\r\n <DateRangePopover\r\n dateRange={localDateRange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n buttonClassName={buttonClassName}\r\n calendarClassName={calendarClassName}\r\n allowClear={allowClear}\r\n showBadge={showBadge}\r\n Icon={Icon}\r\n formatDateRange={formatDateRange}\r\n isDateDisabled={isDateDisabled}\r\n handleDateRangeSelect={(range) => handleDateRangeSelect(range)}\r\n handleClear={(e) => handleClear(null, e)}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n\r\n {description && (\r\n <div className=\"text-sm text-muted-foreground mt-1\">{description}</div>\r\n )}\r\n\r\n {descriptionComponent && (\r\n <div className=\"text-sm text-muted-foreground\">{descriptionComponent}</div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Composable Search Component System\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Search } from \"@classytic/fluid\";\r\n *\r\n * function MySearch() {\r\n * const searchHook = useMySearch();\r\n *\r\n * return (\r\n * <Search.Root hook={searchHook}>\r\n * <Search.Container>\r\n * <Search.Input placeholder=\"Search...\" />\r\n * <Search.Filters>\r\n * <SelectInput ... />\r\n * <TagChoiceInput ... />\r\n * </Search.Filters>\r\n * <Search.Actions />\r\n * </Search.Container>\r\n * </Search.Root>\r\n * );\r\n * }\r\n * ```\r\n */\r\n\r\nexport { SearchRoot as Root, type SearchRootProps } from \"./search-root\";\r\nexport { SearchInput as Input, type SearchInputProps } from \"./search-input\";\r\nexport {\r\n SearchTypeInput as TypeInput,\r\n type SearchTypeInputProps,\r\n type SearchTypeOption,\r\n} from \"./search-type-input\";\r\nexport { SearchFilters as Filters, type SearchFiltersProps } from \"./search-filters\";\r\nexport { SearchActions as Actions, type SearchActionsProps } from \"./search-actions\";\r\nexport { SearchContainer as Container, type SearchContainerProps } from \"./search-container\";\r\nexport {\r\n SearchFilterActions as FilterActions,\r\n type SearchFilterActionsProps,\r\n} from \"./search-filter-actions\";\r\nexport { useSearch, SearchProvider, type SearchProviderProps } from \"./search-context\";\r\n","\"use client\";\r\n\r\nimport { createContext, useContext, type ReactNode } from \"react\";\r\nimport type { UseBaseSearchReturn } from \"../../hooks/use-base-search\";\r\n\r\nconst SearchContext = createContext<UseBaseSearchReturn | undefined>(undefined);\r\n\r\nexport interface SearchProviderProps {\r\n children: ReactNode;\r\n value: UseBaseSearchReturn;\r\n}\r\n\r\nexport function SearchProvider({ children, value }: SearchProviderProps) {\r\n return (\r\n <SearchContext.Provider value={value}>{children}</SearchContext.Provider>\r\n );\r\n}\r\n\r\nexport function useSearch(): UseBaseSearchReturn {\r\n const context = useContext(SearchContext);\r\n if (!context) {\r\n throw new Error(\"useSearch must be used within SearchProvider\");\r\n }\r\n return context;\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\nimport { SearchProvider } from \"./search-context\";\r\nimport type { UseBaseSearchReturn } from \"../../hooks/use-base-search\";\r\n\r\nexport interface SearchRootProps {\r\n children: ReactNode;\r\n hook: UseBaseSearchReturn;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Root search component that provides context to all child components\r\n *\r\n * @example\r\n * <Search.Root hook={useMySearch()}>\r\n * <Search.Input />\r\n * <Search.Filters />\r\n * <Search.Actions />\r\n * </Search.Root>\r\n */\r\nexport function SearchRoot({ children, hook, className }: SearchRootProps) {\r\n return (\r\n <SearchProvider value={hook}>\r\n <div className={cn(\"w-full\", className)}>{children}</div>\r\n </SearchProvider>\r\n );\r\n}\r\n","\"use client\";\n\nimport type { KeyboardEvent, ChangeEvent } from \"react\";\nimport { Search, X } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupButton,\n} from \"@/components/ui/input-group\";\nimport { useSearch } from \"./search-context\";\n\nexport interface SearchInputProps {\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Search input component using modern shadcn InputGroup pattern\n *\n * @example\n * <Search.Input placeholder=\"Search...\" />\n */\nexport function SearchInput({\n placeholder = \"Search...\",\n className,\n disabled,\n showIcon = true,\n showClearButton = false,\n onKeyDown,\n ...props\n}: SearchInputProps) {\n const { searchValue, setSearchValue, handleSearch } = useSearch();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && event.key === \"Enter\" && !disabled) {\n handleSearch?.();\n }\n };\n\n return (\n <InputGroup\n className={cn(\"h-10 flex-1 shadow-sm\", className)}\n data-disabled={disabled || undefined}\n >\n {showIcon && (\n <InputGroupAddon align=\"inline-start\">\n <Search className=\"size-4\" />\n </InputGroupAddon>\n )}\n\n <InputGroupInput\n {...props}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setSearchValue?.(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"text-base\"\n />\n\n {showClearButton && searchValue && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => setSearchValue?.(\"\")}\n disabled={disabled}\n >\n <X className=\"size-4\" />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n}\n","\"use client\";\n\nimport type { KeyboardEvent, ChangeEvent } from \"react\";\nimport { Search, X } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupButton,\n} from \"@/components/ui/input-group\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { useSearch } from \"./search-context\";\n\nexport interface SearchTypeOption {\n value: string;\n label: string;\n}\n\nexport interface SearchTypeInputProps {\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n searchTypeOptions?: SearchTypeOption[];\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Search input component with type selector using InputGroup pattern\n *\n * @example\n * <Search.TypeInput\n * placeholder=\"Search...\"\n * searchTypeOptions={[\n * { value: \"_id\", label: \"ID\" },\n * { value: \"customerPhone\", label: \"Phone\" },\n * { value: \"customerEmail\", label: \"Email\" },\n * ]}\n * />\n */\nexport function SearchTypeInput({\n placeholder = \"Search...\",\n className,\n disabled,\n showIcon = true,\n showClearButton = false,\n searchTypeOptions = [],\n onKeyDown,\n ...props\n}: SearchTypeInputProps) {\n const { searchValue, setSearchValue, searchType, setSearchType, handleSearch } =\n useSearch();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && event.key === \"Enter\" && !disabled) {\n handleSearch?.();\n }\n };\n\n const selectedOption = searchTypeOptions.find((opt) => opt.value === searchType);\n\n return (\n <InputGroup\n className={cn(\"h-10 flex-1 shadow-sm\", className)}\n data-disabled={disabled || undefined}\n >\n {showIcon && (\n <InputGroupAddon align=\"inline-start\">\n <Search className=\"size-4\" />\n </InputGroupAddon>\n )}\n\n {/* Search Type Selector */}\n {searchTypeOptions.length > 0 && (\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <Select\n value={searchType}\n onValueChange={setSearchType}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-7 w-auto border-0 bg-transparent px-2 text-sm font-medium shadow-none focus:ring-0\">\n <SelectValue>\n {selectedOption?.label || searchTypeOptions[0]?.label}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {searchTypeOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div className=\"h-6 w-px bg-border ml-1\" />\n </InputGroupAddon>\n )}\n\n <InputGroupInput\n {...props}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setSearchValue?.(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"text-base\"\n />\n\n {showClearButton && searchValue && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => setSearchValue?.(\"\")}\n disabled={disabled}\n >\n <X className=\"size-4\" />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n}\n","\"use client\";\r\n\r\nimport { Search } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { useSearch } from \"./search-context\";\r\n\r\nexport interface SearchFilterActionsProps {\r\n onClose?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * Filter actions component (Reset/Apply buttons)\r\n * Used inside filter popovers/sheets\r\n */\r\nexport function SearchFilterActions({ onClose, disabled }: SearchFilterActionsProps) {\r\n const { handleSearch, clearSearch, hasActiveFilters } = useSearch();\r\n\r\n const handleApply = () => {\r\n handleSearch?.();\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className=\"flex gap-2 border-t bg-muted/30 p-4 pt-3 -mx-4 -mb-4\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={clearSearch}\r\n className=\"flex-1\"\r\n disabled={disabled || !hasActiveFilters}\r\n >\r\n Reset\r\n </Button>\r\n <Button size=\"sm\" onClick={handleApply} className=\"flex-1\" disabled={disabled}>\r\n <Search size={16} className=\"mr-2\" />\r\n Apply\r\n </Button>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, type ReactNode } from \"react\";\r\nimport { Filter } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { SheetWrapper } from \"../sheet-wrapper\";\r\nimport { useIsMobile } from \"../../hooks/use-mobile\";\r\nimport { useSearch } from \"./search-context\";\r\nimport { SearchFilterActions } from \"./search-filter-actions\";\r\n\r\nexport interface SearchFiltersProps {\r\n children: ReactNode;\r\n title?: string;\r\n description?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Search filters component with mobile sheet support\r\n *\r\n * @example\r\n * <Search.Filters>\r\n * <TagChoiceInput label=\"Category\" ... />\r\n * <SelectInput label=\"Status\" ... />\r\n * </Search.Filters>\r\n */\r\nexport function SearchFilters({\r\n children,\r\n title = \"Filters\",\r\n description = \"Refine your search results\",\r\n disabled,\r\n className,\r\n}: SearchFiltersProps) {\r\n const { hasActiveFilters, filters = {} } = useSearch();\r\n const isMobile = useIsMobile();\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n // Count active filters (excluding default \"all\" values)\r\n const activeFilterCount = Object.values(filters).filter((value) => {\r\n if (Array.isArray(value)) {\r\n return value.filter(Boolean).length > 0;\r\n }\r\n if (typeof value === \"string\") {\r\n // Exclude \"all\" as it's the default/neutral state\r\n return value.trim().length > 0 && value !== \"all\";\r\n }\r\n if (typeof value === \"number\") {\r\n return value !== undefined && value !== null && !Number.isNaN(value);\r\n }\r\n if (typeof value === \"boolean\") {\r\n return value;\r\n }\r\n return Boolean(value);\r\n }).length;\r\n\r\n const FilterContent = () => (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-4\">{children}</div>\r\n <SearchFilterActions onClose={() => setIsOpen(false)} />\r\n </div>\r\n );\r\n\r\n const triggerButton = (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n className={cn(\r\n \"relative h-10 w-10 shrink-0 px-0 sm:w-auto sm:px-4\",\r\n hasActiveFilters && \"bg-primary/10 border-primary hover:bg-primary/15\"\r\n )}\r\n disabled={disabled}\r\n aria-label=\"Open filters\"\r\n >\r\n <Filter className=\"size-4\" />\r\n <span className=\"hidden sm:inline ml-2\">Filters</span>\r\n {activeFilterCount > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-xs font-medium text-primary-foreground\"\r\n >\r\n {activeFilterCount}\r\n </Badge>\r\n )}\r\n </Button>\r\n );\r\n\r\n if (isMobile) {\r\n return (\r\n <>\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n className={cn(\r\n \"relative h-10 w-10 shrink-0 px-0\",\r\n hasActiveFilters && \"bg-primary/10 border-primary hover:bg-primary/15\"\r\n )}\r\n disabled={disabled}\r\n aria-label=\"Open filters\"\r\n onClick={() => setIsOpen(true)}\r\n >\r\n <Filter className=\"size-4\" />\r\n {activeFilterCount > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-xs font-medium text-primary-foreground\"\r\n >\r\n {activeFilterCount}\r\n </Badge>\r\n )}\r\n </Button>\r\n <SheetWrapper\r\n open={isOpen}\r\n onOpenChange={setIsOpen}\r\n title={title}\r\n description={description}\r\n side=\"bottom\"\r\n size=\"default\"\r\n >\r\n <FilterContent />\r\n </SheetWrapper>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger render={triggerButton} />\r\n <PopoverContent className=\"w-80 p-4 sm:w-96\" align=\"end\" sideOffset={8}>\r\n <FilterContent />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Search, RotateCcw } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { useSearch } from \"./search-context\";\r\nimport { useIsMobile } from \"../../hooks/use-mobile\";\r\n\r\nexport interface SearchActionsProps {\r\n showSearchButton?: boolean;\r\n showClearButton?: boolean;\r\n searchButtonText?: string;\r\n clearButtonText?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Search action buttons\r\n */\r\nexport function SearchActions({\r\n showSearchButton = true,\r\n showClearButton = true,\r\n searchButtonText,\r\n clearButtonText = \"Clear\",\r\n disabled,\r\n className,\r\n}: SearchActionsProps) {\r\n const { handleSearch, clearSearch, searchValue, hasActiveFilters, hasActiveSearch } =\r\n useSearch();\r\n const isMobile = useIsMobile();\r\n\r\n const canSearch = Boolean(searchValue?.trim() || hasActiveFilters);\r\n const canClear = Boolean(searchValue?.trim() || hasActiveFilters || hasActiveSearch);\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n {showClearButton &&\r\n canClear &&\r\n (isMobile ? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={clearSearch}\r\n aria-label={clearButtonText}\r\n title={clearButtonText}\r\n className=\"shrink-0\"\r\n >\r\n <RotateCcw />\r\n </Button>\r\n ) : (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n onClick={clearSearch}\r\n className=\"h-10 shrink-0\"\r\n >\r\n {clearButtonText}\r\n </Button>\r\n ))}\r\n {showSearchButton && (\r\n <Button\r\n size=\"default\"\r\n onClick={handleSearch}\r\n disabled={disabled || !canSearch}\r\n className=\"h-10 shrink-0 px-3 sm:px-4\"\r\n >\r\n <Search\r\n size={16}\r\n className={cn(searchButtonText ? \"mr-2\" : \"sm:mr-2\")}\r\n />\r\n <span className=\"hidden sm:inline\">{searchButtonText || \"Search\"}</span>\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\nexport interface SearchContainerProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Container for search input and action buttons\r\n * Provides responsive layout\r\n *\r\n * @example\r\n * <Search.Container>\r\n * <Search.Input />\r\n * <Search.Filters />\r\n * <Search.Actions />\r\n * </Search.Container>\r\n */\r\nexport function SearchContainer({ children, className }: SearchContainerProps) {\r\n return (\r\n <div className={cn(\"flex items-center gap-2 flex-1\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useId, useMemo, memo, ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\ninterface FieldContextValue {\r\n id: string;\r\n disabled: boolean;\r\n invalid: boolean;\r\n}\r\n\r\nconst FieldContext = createContext<FieldContextValue | null>(null);\r\n\r\ninterface FieldRootProps {\r\n children: ReactNode;\r\n className?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\n/**\r\n * Simple field wrapper with consistent structure\r\n * Structure: Root > InputContainer > (Label, Icon, Control) + Error\r\n */\r\nexport const Root = memo(function FieldRoot({\r\n children,\r\n className,\r\n disabled = false,\r\n invalid = false\r\n}: FieldRootProps) {\r\n const id = useId();\r\n\r\n const value = useMemo(() => ({\r\n id,\r\n disabled,\r\n invalid,\r\n }), [id, disabled, invalid]);\r\n\r\n return (\r\n <FieldContext.Provider value={value}>\r\n <div className={cn(\"w-full\", className)}>\r\n {children}\r\n </div>\r\n </FieldContext.Provider>\r\n );\r\n});\r\n\r\ninterface FieldLabelProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Label = memo(function FieldLabel({ children, className }: FieldLabelProps) {\r\n const ctx = useContext(FieldContext);\r\n return (\r\n <label\r\n htmlFor={ctx?.id}\r\n className={cn(\r\n \"absolute left-3 top-0 -translate-y-1/2 bg-background px-2\",\r\n \"text-xs font-medium text-muted-foreground z-10\",\r\n \"group-focus-within:text-primary whitespace-nowrap\",\r\n ctx?.disabled && \"opacity-60\",\r\n ctx?.invalid && \"text-destructive\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </label>\r\n );\r\n});\r\n\r\ninterface FieldErrorProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Error = memo(function FieldError({ children, className }: FieldErrorProps) {\r\n if (!children) return null;\r\n return (\r\n <p className={cn(\"text-xs text-destructive mt-1.5\", className)}>\r\n {children}\r\n </p>\r\n );\r\n});\r\n\r\ninterface FieldIconProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Icon = memo(function FieldIcon({ children, className }: FieldIconProps) {\r\n return (\r\n <div className={cn(\r\n \"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none z-10\",\r\n \"text-muted-foreground\",\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n});\r\n\r\nexport const Field = {\r\n Root,\r\n Label,\r\n Error,\r\n Icon,\r\n};\r\n\r\nexport default Field;\r\n","\"use client\";\r\n\r\nimport { forwardRef, ChangeEvent, InputHTMLAttributes, ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactInputProps<T extends FieldValues = FieldValues>\r\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n type?: string;\r\n\r\n // InputGroup addons\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactInput - Enhanced form input with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with icons, buttons, and text addons\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nconst CompactInput = forwardRef<HTMLInputElement, CompactInputProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n type = \"text\",\r\n\r\n // InputGroup addons\r\n AddonLeft,\r\n AddonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML input attributes\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ...props\r\n}, ref) => {\r\n // Determine if we need InputGroup\r\n const hasInputGroup = AddonLeft || AddonRight;\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n name,\r\n type,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <InputGroup>\r\n {AddonLeft && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {AddonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput {...inputProps} />\r\n {AddonRight && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {AddonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n );\r\n }\r\n\r\n // Simple input\r\n return <Input {...inputProps} />;\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLInputElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactInput.displayName = \"CompactInput\";\r\n\r\nexport { CompactInput };\r\nexport type { CompactInputProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ChangeEvent, TextareaHTMLAttributes, ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Textarea } from \"@/components/ui/textarea\";\r\nimport { InputGroup, InputGroupTextarea, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactTextareaProps<T extends FieldValues = FieldValues>\r\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n rows?: number;\r\n\r\n // InputGroup addons\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTextarea - Enhanced textarea with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with addons\r\n * - Character counter with maxLength\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nconst CompactTextarea = forwardRef<HTMLTextAreaElement, CompactTextareaProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n rows = 3,\r\n\r\n // InputGroup addons\r\n AddonLeft,\r\n AddonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML textarea attributes\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ...props\r\n}, ref) => {\r\n const hasInputGroup = AddonLeft || AddonRight;\r\n\r\n const renderTextarea = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const currentCharCount = fieldValue?.length || 0;\r\n\r\n const textareaProps = {\r\n ref,\r\n id: name,\r\n name,\r\n disabled: isDisabled,\r\n placeholder,\r\n rows,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"resize-none pt-3\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <>\r\n <InputGroup>\r\n {AddonLeft && (\r\n <InputGroupAddon align=\"block-start\">\r\n {AddonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupTextarea {...textareaProps} />\r\n {AddonRight && (\r\n <InputGroupAddon align=\"block-end\">\r\n {AddonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Simple textarea\r\n return (\r\n <>\r\n <Textarea {...textareaProps} />\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLTextAreaElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactTextarea.displayName = \"CompactTextarea\";\r\n\r\nexport { CompactTextarea };\r\nexport type { CompactTextareaProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Field } from \"./field\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue\r\n} from \"@/components/ui/select\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactSelectProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n items?: SelectOption[];\r\n\r\n // Styling\r\n className?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSelect - Simple, clean select dropdown\r\n *\r\n * @example\r\n * <CompactSelect\r\n * label=\"Status\"\r\n * items={[\r\n * { value: \"active\", label: \"Active\" },\r\n * { value: \"inactive\", label: \"Inactive\" }\r\n * ]}\r\n * />\r\n */\r\nconst CompactSelect = forwardRef<HTMLButtonElement, CompactSelectProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"Select option\",\r\n disabled,\r\n items = [],\r\n\r\n // Styling\r\n className,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={field.value}\r\n onValueChange={(val: string) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n id={name}\r\n className={cn(\r\n \"h-11\",\r\n fieldState?.error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <Field.Root disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={value}\r\n onValueChange={onValueChange}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n className={cn(\r\n \"h-11\",\r\n error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactSelect.displayName = \"CompactSelect\";\r\n\r\nexport { CompactSelect };\r\nexport type { CompactSelectProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ReactNode, ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { Plus, Minus } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactNumberInputProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Number configuration\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n\r\n // Display options\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: number | string) => void;\r\n\r\n // Direct usage\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactNumberInput - A space-efficient number input with optional increment/decrement buttons\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - Optional increment/decrement buttons\r\n * - Support for min/max/step values\r\n * - Prefix/suffix support\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nconst CompactNumberInput = forwardRef<HTMLInputElement, CompactNumberInputProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n\r\n // Number configuration\r\n min = 0,\r\n max,\r\n step = 1,\r\n\r\n // Display options\r\n prefix,\r\n suffix,\r\n showButtons = false,\r\n buttonVariant = \"ghost\",\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n defaultValue,\r\n onChange,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={fieldState?.error?.message}\r\n value={field.value ?? \"\"}\r\n onChange={(val) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n {...props}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={error}\r\n value={value ?? \"\"}\r\n defaultValue={defaultValue}\r\n onChange={onChange}\r\n onValueChange={onValueChange}\r\n {...props}\r\n />\r\n );\r\n});\r\n\r\ninterface CompactNumberInputInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n error?: string;\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n disabled?: boolean;\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n onValueChange?: (value: number | string) => void;\r\n}\r\n\r\nconst CompactNumberInputInternal = forwardRef<HTMLInputElement, CompactNumberInputInternalProps>(({\r\n label,\r\n placeholder,\r\n min = 0,\r\n max,\r\n step = 1,\r\n prefix,\r\n suffix,\r\n showButtons,\r\n buttonVariant,\r\n error,\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onValueChange,\r\n ...props\r\n}, ref) => {\r\n const handleIncrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue + step;\r\n if (max === undefined || newValue <= max) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleDecrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue - step;\r\n if (newValue >= min) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n if (val === \"\") {\r\n onChange?.(\"\");\r\n onValueChange?.(\"\");\r\n return;\r\n }\r\n\r\n const numVal = Number(val);\r\n if (!isNaN(numVal)) {\r\n if ((min !== undefined && numVal < min) || (max !== undefined && numVal > max)) {\r\n return;\r\n }\r\n onChange?.(numVal);\r\n onValueChange?.(numVal);\r\n }\r\n };\r\n\r\n // With increment/decrement buttons\r\n if (showButtons) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup>\r\n <InputGroupAddon align=\"inline-start\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleDecrement}\r\n disabled={disabled || Number(value) <= min}\r\n >\r\n <Minus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\"text-center\", inputClassName, className)}\r\n {...props}\r\n />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleIncrement}\r\n disabled={disabled || (max !== undefined && Number(value) >= max)}\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // With prefix/suffix\r\n if (prefix || suffix) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup>\r\n {prefix && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {typeof prefix === \"string\" ? <span className=\"text-xs\">{prefix}</span> : prefix}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(inputClassName, className)}\r\n {...props}\r\n />\r\n {suffix && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {typeof suffix === \"string\" ? <span className=\"text-xs\">{suffix}</span> : suffix}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // Simple input\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <Input\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\r\n \"h-11 transition-all duration-200\",\r\n error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName,\r\n className\r\n )}\r\n {...props}\r\n />\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactNumberInput.displayName = \"CompactNumberInput\";\r\nCompactNumberInputInternal.displayName = \"CompactNumberInputInternal\";\r\n\r\nexport { CompactNumberInput };\r\nexport type { CompactNumberInputProps };\r\n","\"use client\";\r\n\r\nimport { useState, useRef, forwardRef, RefObject } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { X, Plus, Check } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface Choice {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactTagChoiceProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n\r\n // Display\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n\r\n // Data\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n\r\n // Styling\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n\r\n // Direct usage\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n onValueChange?: (value: string[]) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTagChoice - A compact tag selection input\r\n *\r\n * Features:\r\n * - Multi-select tag interface\r\n * - Maximum selection limit\r\n * - Popover for selecting options\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nconst CompactTagChoice = forwardRef<HTMLDivElement, CompactTagChoiceProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n\r\n // Display\r\n label,\r\n description,\r\n placeholder = \"Select options...\",\r\n required,\r\n disabled,\r\n\r\n // Data\r\n choices = [],\r\n maxSelections,\r\n\r\n // Styling\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n\r\n // Direct usage\r\n value: propValue = [],\r\n onChange: propOnChange,\r\n onValueChange,\r\n error,\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n error={fieldState?.error?.message}\r\n value={field.value || []}\r\n onChange={(vals) => {\r\n field.onChange(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={cn(className, containerClassName)}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n value={propValue}\r\n onChange={(vals) => {\r\n propOnChange?.(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={containerClassName}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n className={className}\r\n error={error}\r\n />\r\n );\r\n});\r\n\r\ninterface CompactTagChoiceInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n error?: string;\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n}\r\n\r\nconst CompactTagChoiceInternal = forwardRef<HTMLDivElement, CompactTagChoiceInternalProps>(({\r\n label,\r\n placeholder,\r\n disabled,\r\n value = [],\r\n onChange,\r\n choices = [],\r\n maxSelections,\r\n error,\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n}, ref) => {\r\n const [open, setOpen] = useState(false);\r\n const triggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n const availableChoices = choices.filter((c) => !value.includes(c.value));\r\n\r\n const addChoice = (choiceValue: string) => {\r\n if (value.includes(choiceValue)) return;\r\n if (maxSelections && value.length >= maxSelections) return;\r\n const updated = [...value, choiceValue];\r\n onChange?.(updated);\r\n };\r\n\r\n const removeChoice = (choiceValue: string) => {\r\n const updated = value.filter((v) => v !== choiceValue);\r\n onChange?.(updated);\r\n };\r\n\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n\r\n <div\r\n className={cn(\r\n \"min-h-[2.5rem] w-full rounded-md border border-input bg-background px-3 py-2 text-sm\",\r\n \"ring-offset-background focus-within:ring-1 focus-within:ring-primary/20\",\r\n \"hover:border-primary/50 transition-all duration-200\",\r\n error && \"border-destructive focus-within:ring-destructive/20\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n inputClassName\r\n )}\r\n ref={ref}\r\n >\r\n <div className=\"flex flex-wrap gap-1 mb-2\">\r\n {value.map((val) => {\r\n const choice = choices.find((c) => c.value === val);\r\n return (\r\n <Badge key={val} variant=\"secondary\" className=\"flex items-center gap-1 px-2 py-1\">\r\n <span>{choice?.label ?? val}</span>\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-auto p-0 text-muted-foreground hover:text-foreground\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n removeChoice(val);\r\n }}\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </Button>\r\n )}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n\r\n {!disabled && availableChoices.length > 0 && (!maxSelections || value.length < maxSelections) && (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n ref={triggerRef}\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-auto p-1 text-muted-foreground hover:text-foreground\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setOpen(true);\r\n }}\r\n >\r\n <Plus className=\"h-3 w-3 mr-1\" />\r\n {value.length === 0 ? placeholder : \"Add more...\"}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[220px] p-0\" align=\"start\">\r\n <div className=\"p-1\">\r\n {availableChoices.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">No options available</div>\r\n ) : (\r\n <div className=\"space-y-1\">\r\n {availableChoices.map((choice) => (\r\n <div\r\n key={choice.value}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n addChoice(choice.value);\r\n }}\r\n className=\"flex items-center justify-between px-2 py-2 text-sm rounded-sm hover:bg-accent hover:text-accent-foreground cursor-pointer\"\r\n >\r\n <span>{choice.label}</span>\r\n {value.includes(choice.value) && <Check className=\"h-4 w-4\" />}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n <div className=\"border-t px-2 py-2 text-xs text-muted-foreground\">Click to select • Click outside to close</div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n\r\n {maxSelections && (\r\n <div className=\"text-xs text-muted-foreground mt-1\">{value.length}/{maxSelections} selected</div>\r\n )}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactTagChoice.displayName = \"CompactTagChoice\";\r\nCompactTagChoiceInternal.displayName = \"CompactTagChoiceInternal\";\r\n\r\nexport { CompactTagChoice };\r\nexport type { CompactTagChoiceProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ReactNode, ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path, FieldError } from \"react-hook-form\";\r\nimport { Wand2 } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\n/**\r\n * Generates a URL-friendly slug from a string\r\n */\r\nfunction generateSlug(text: string): string {\r\n if (!text) return \"\";\r\n return text\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, \"\") // Remove special characters\r\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\r\n .replace(/-+/g, \"-\") // Replace multiple hyphens with single hyphen\r\n .replace(/^-+|-+$/g, \"\"); // Remove leading/trailing hyphens\r\n}\r\n\r\ninterface CompactSlugFieldProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Icon support\r\n icon?: ReactNode;\r\n\r\n // Slug generation\r\n sourceValue?: string;\r\n onGenerate?: (source: string) => string;\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement> | { target: { value: string } }) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSlugField - Compact slug input with auto-generation\r\n *\r\n * Features:\r\n * - Compact design with floating label\r\n * - Auto-generate slug from source field\r\n * - Manual editing support\r\n * - InputGroup with generate button\r\n * - Form integration via control prop\r\n */\r\nconst CompactSlugField = forwardRef<HTMLInputElement, CompactSlugFieldProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"my-page-slug\",\r\n disabled,\r\n\r\n // Icon support\r\n icon,\r\n\r\n // Slug generation\r\n sourceValue,\r\n onGenerate,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n\r\n const handleGenerate = (currentValue: string | undefined, fieldOnChange: (value: string) => void) => {\r\n const newSlug = onGenerate ? onGenerate(sourceValue || \"\") : generateSlug(sourceValue || \"\");\r\n fieldOnChange(newSlug);\r\n onValueChange?.(newSlug);\r\n };\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: (value: string) => void,\r\n isDisabled: boolean | undefined,\r\n fieldState?: { error?: FieldError | { message?: string } }\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n type: \"text\" as const,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11\",\r\n fieldState?.error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n ...props,\r\n };\r\n\r\n return (\r\n <>\r\n {/* Icon support (outside InputGroup) */}\r\n {icon && (\r\n <Field.Icon>\r\n {icon}\r\n </Field.Icon>\r\n )}\r\n\r\n <InputGroup>\r\n <InputGroupInput {...inputProps} className={cn(inputProps.className, icon && \"pl-9\")} />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n size=\"sm\"\r\n onClick={() => handleGenerate(fieldValue, fieldOnChange)}\r\n disabled={isDisabled || !sourceValue}\r\n title=\"Generate slug from name\"\r\n >\r\n <Wand2 className=\"h-4 w-4\" />\r\n Generate\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage (without react-hook-form)\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } });\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, { error: error ? { message: error } : undefined })}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactSlugField.displayName = \"CompactSlugField\";\r\n\r\nexport { CompactSlugField, generateSlug };\r\nexport type { CompactSlugFieldProps };\r\n","\"use client\";\r\n\r\nimport { useState, useMemo, useCallback, ReactNode } from \"react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameMonth,\r\n isSameDay,\r\n addMonths,\r\n subMonths,\r\n getDay,\r\n} from \"date-fns\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst WEEKDAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n\r\nexport interface CalendarEvent {\r\n id: string;\r\n date: Date | string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface EventCalendarProps<T extends CalendarEvent> {\r\n /** Events to display on the calendar */\r\n events?: T[];\r\n /** Currently selected date */\r\n selectedDate?: Date | null;\r\n /** Callback when a date is selected */\r\n onDateSelect?: (date: Date, events: T[]) => void;\r\n /** Callback when month changes */\r\n onMonthChange?: (date: Date) => void;\r\n /** Initial month to display */\r\n initialMonth?: Date;\r\n /** Custom render for day cell content */\r\n renderDayContent?: (date: Date, events: T[], isSelected: boolean) => ReactNode;\r\n /** Custom render for event indicators */\r\n renderEventIndicators?: (events: T[]) => ReactNode;\r\n /** Get events for a specific date (custom filtering) */\r\n getEventsForDate?: (date: Date, events: T[]) => T[];\r\n /** Additional class names */\r\n className?: string;\r\n /** Header content (left side) */\r\n headerLeft?: ReactNode;\r\n /** Header content (right side, before navigation) */\r\n headerRight?: ReactNode;\r\n /** Minimum cell height */\r\n minCellHeight?: string;\r\n /** Show week numbers */\r\n showWeekNumbers?: boolean;\r\n /** Loading state */\r\n isLoading?: boolean;\r\n}\r\n\r\n/**\r\n * EventCalendar - A reusable calendar component for displaying events\r\n *\r\n * Can be used for attendance tracking, scheduling, etc.\r\n */\r\nexport function EventCalendar<T extends CalendarEvent>({\r\n events = [],\r\n selectedDate: controlledSelectedDate,\r\n onDateSelect,\r\n onMonthChange,\r\n initialMonth = new Date(),\r\n renderDayContent,\r\n renderEventIndicators,\r\n getEventsForDate,\r\n className,\r\n headerLeft,\r\n headerRight,\r\n minCellHeight = \"5rem\",\r\n showWeekNumbers = false,\r\n isLoading = false,\r\n}: EventCalendarProps<T>) {\r\n const [currentMonth, setCurrentMonth] = useState(initialMonth);\r\n const [internalSelectedDate, setInternalSelectedDate] = useState<Date | null>(null);\r\n\r\n const selectedDate = controlledSelectedDate ?? internalSelectedDate;\r\n\r\n // Generate days for the current month\r\n // Always render 6 rows (42 cells) for consistent layout\r\n const { days, paddingDaysBefore, paddingDaysAfter } = useMemo(() => {\r\n const monthStart = startOfMonth(currentMonth);\r\n const monthEnd = endOfMonth(currentMonth);\r\n const daysInMonth = eachDayOfInterval({ start: monthStart, end: monthEnd });\r\n const startDayOfWeek = getDay(monthStart);\r\n\r\n // Calculate total cells needed (always 6 rows = 42 cells)\r\n const totalCells = 42;\r\n const usedCells = startDayOfWeek + daysInMonth.length;\r\n const trailingPadding = totalCells - usedCells;\r\n\r\n return {\r\n days: daysInMonth,\r\n paddingDaysBefore: startDayOfWeek,\r\n paddingDaysAfter: trailingPadding,\r\n };\r\n }, [currentMonth]);\r\n\r\n // Default event filtering by date\r\n const defaultGetEventsForDate = useCallback(\r\n (date: Date, allEvents: T[]): T[] => {\r\n return allEvents.filter((event) => {\r\n const eventDate = typeof event.date === \"string\" ? new Date(event.date) : event.date;\r\n return isSameDay(eventDate, date);\r\n });\r\n },\r\n []\r\n );\r\n\r\n const getEvents = getEventsForDate || defaultGetEventsForDate;\r\n\r\n // Navigation handlers\r\n const handlePrevMonth = useCallback(() => {\r\n const newMonth = subMonths(currentMonth, 1);\r\n setCurrentMonth(newMonth);\r\n onMonthChange?.(newMonth);\r\n }, [currentMonth, onMonthChange]);\r\n\r\n const handleNextMonth = useCallback(() => {\r\n const newMonth = addMonths(currentMonth, 1);\r\n setCurrentMonth(newMonth);\r\n onMonthChange?.(newMonth);\r\n }, [currentMonth, onMonthChange]);\r\n\r\n // Date selection handler\r\n const handleDateClick = useCallback(\r\n (date: Date) => {\r\n const dayEvents = getEvents(date, events);\r\n setInternalSelectedDate(date);\r\n onDateSelect?.(date, dayEvents);\r\n },\r\n [events, getEvents, onDateSelect]\r\n );\r\n\r\n // Default event indicators\r\n const defaultRenderEventIndicators = useCallback((dayEvents: T[]) => {\r\n if (dayEvents.length === 0) return null;\r\n\r\n return (\r\n <div className=\"flex gap-0.5 mt-1\">\r\n {dayEvents.slice(0, 3).map((_, idx) => (\r\n <div\r\n key={idx}\r\n className=\"h-1.5 w-1.5 rounded-full bg-primary\"\r\n />\r\n ))}\r\n {dayEvents.length > 3 && (\r\n <span className=\"text-[10px] text-muted-foreground ml-0.5\">\r\n +{dayEvents.length - 3}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }, []);\r\n\r\n const renderIndicators = renderEventIndicators || defaultRenderEventIndicators;\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-4\">\r\n {headerLeft}\r\n <h2 className=\"text-lg font-semibold\">\r\n {format(currentMonth, \"MMMM yyyy\")}\r\n </h2>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {headerRight}\r\n <div className=\"flex gap-1\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={handlePrevMonth}\r\n disabled={isLoading}\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={handleNextMonth}\r\n disabled={isLoading}\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Calendar Grid */}\r\n <div className=\"rounded-lg border overflow-hidden\">\r\n {/* Weekday headers */}\r\n <div\r\n className={cn(\r\n \"grid bg-muted/50\",\r\n showWeekNumbers ? \"grid-cols-8\" : \"grid-cols-7\"\r\n )}\r\n >\r\n {showWeekNumbers && (\r\n <div className=\"px-2 py-3 text-center text-xs font-medium text-muted-foreground border-r\">\r\n Wk\r\n </div>\r\n )}\r\n {WEEKDAYS.map((day) => (\r\n <div\r\n key={day}\r\n className=\"px-2 py-3 text-center text-xs font-medium text-muted-foreground\"\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Days grid - always 6 rows for consistent layout */}\r\n <div\r\n className={cn(\r\n \"grid gap-px bg-border\",\r\n showWeekNumbers ? \"grid-cols-8\" : \"grid-cols-7\"\r\n )}\r\n >\r\n {/* Padding cells for start of month */}\r\n {Array.from({ length: paddingDaysBefore }).map((_, index) => (\r\n <div\r\n key={`padding-start-${index}`}\r\n className=\"bg-card\"\r\n style={{ minHeight: minCellHeight }}\r\n />\r\n ))}\r\n\r\n {/* Day cells */}\r\n {days.map((day) => {\r\n const dayEvents = getEvents(day, events);\r\n const isToday = isSameDay(day, new Date());\r\n const isSelected = selectedDate ? isSameDay(day, selectedDate) : false;\r\n const isCurrentMonth = isSameMonth(day, currentMonth);\r\n\r\n return (\r\n <div\r\n key={day.toISOString()}\r\n className={cn(\r\n \"bg-card p-2 cursor-pointer transition-colors hover:bg-muted/50\",\r\n isSelected && \"ring-2 ring-primary ring-inset bg-primary/5\",\r\n !isCurrentMonth && \"opacity-50\",\r\n isLoading && \"pointer-events-none opacity-50\"\r\n )}\r\n style={{ minHeight: minCellHeight }}\r\n onClick={() => handleDateClick(day)}\r\n >\r\n {renderDayContent ? (\r\n renderDayContent(day, dayEvents, isSelected)\r\n ) : (\r\n <>\r\n <div\r\n className={cn(\r\n \"flex h-7 w-7 items-center justify-center rounded-full text-sm\",\r\n isToday && \"bg-primary text-primary-foreground font-semibold\"\r\n )}\r\n >\r\n {format(day, \"d\")}\r\n </div>\r\n {renderIndicators(dayEvents)}\r\n </>\r\n )}\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Padding cells for end of month (to fill 6 rows) */}\r\n {Array.from({ length: paddingDaysAfter }).map((_, index) => (\r\n <div\r\n key={`padding-end-${index}`}\r\n className=\"bg-card\"\r\n style={{ minHeight: minCellHeight }}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * CalendarDayDetail - Side panel component for showing selected day details\r\n */\r\nexport interface CalendarDayDetailProps {\r\n date: Date | null;\r\n title?: string;\r\n emptyMessage?: string;\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CalendarDayDetail({\r\n date,\r\n title,\r\n emptyMessage = \"Click on a day to see details\",\r\n children,\r\n className,\r\n}: CalendarDayDetailProps) {\r\n return (\r\n <div className={cn(\"rounded-lg border bg-card\", className)}>\r\n <div className=\"p-4 border-b\">\r\n <h3 className=\"font-semibold\">\r\n {date ? format(date, \"EEEE, MMMM d\") : title || \"Select a day\"}\r\n </h3>\r\n </div>\r\n <div className=\"p-4\">\r\n {!date ? (\r\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * CalendarWithDetail - Calendar with integrated detail panel\r\n */\r\nexport interface CalendarWithDetailProps<T extends CalendarEvent>\r\n extends Omit<EventCalendarProps<T>, \"onDateSelect\"> {\r\n /** Render detail panel content */\r\n renderDetail?: (date: Date, events: T[]) => ReactNode;\r\n /** Detail panel title when no date selected */\r\n detailTitle?: string;\r\n /** Detail panel empty message */\r\n detailEmptyMessage?: string;\r\n /** Layout direction */\r\n layout?: \"horizontal\" | \"vertical\";\r\n /** Detail panel position */\r\n detailPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\r\n /** Callback when date is selected */\r\n onDateSelect?: (date: Date, events: T[]) => void;\r\n}\r\n\r\nexport function CalendarWithDetail<T extends CalendarEvent>({\r\n renderDetail,\r\n detailTitle,\r\n detailEmptyMessage,\r\n layout = \"horizontal\",\r\n detailPosition = \"right\",\r\n onDateSelect,\r\n ...calendarProps\r\n}: CalendarWithDetailProps<T>) {\r\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\r\n const [selectedEvents, setSelectedEvents] = useState<T[]>([]);\r\n\r\n const handleDateSelect = useCallback(\r\n (date: Date, events: T[]) => {\r\n setSelectedDate(date);\r\n setSelectedEvents(events);\r\n onDateSelect?.(date, events);\r\n },\r\n [onDateSelect]\r\n );\r\n\r\n const isHorizontal = layout === \"horizontal\";\r\n const detailFirst = detailPosition === \"left\" || detailPosition === \"top\";\r\n\r\n const calendarElement = (\r\n <EventCalendar\r\n {...calendarProps}\r\n selectedDate={selectedDate}\r\n onDateSelect={handleDateSelect}\r\n />\r\n );\r\n\r\n const detailElement = (\r\n <CalendarDayDetail\r\n date={selectedDate}\r\n title={detailTitle}\r\n emptyMessage={detailEmptyMessage}\r\n className={isHorizontal ? \"min-w-[300px]\" : \"\"}\r\n >\r\n {selectedDate && renderDetail?.(selectedDate, selectedEvents)}\r\n </CalendarDayDetail>\r\n );\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"gap-4\",\r\n isHorizontal ? \"flex\" : \"flex flex-col\",\r\n isHorizontal && \"items-start\"\r\n )}\r\n >\r\n {detailFirst ? (\r\n <>\r\n {detailElement}\r\n <div className=\"flex-1\">{calendarElement}</div>\r\n </>\r\n ) : (\r\n <>\r\n <div className={isHorizontal ? \"flex-1\" : \"\"}>{calendarElement}</div>\r\n {detailElement}\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/lib/filter-utils.ts","../src/hooks/use-mobile.ts","../src/hooks/use-base-search.ts","../src/hooks/use-media-query.ts","../src/hooks/use-scroll-detection.ts","../src/components/accordion-wrapper.tsx","../src/components/display-heading.tsx","../src/components/social-icons.tsx","../src/components/thumbnail.tsx","../src/components/custom-pagination.tsx","../src/components/api-pagination.tsx","../src/components/card-wrapper.tsx","../src/components/skeleton-wrappers.tsx","../src/components/client-submit-button.tsx","../src/components/collapsible-wrapper.tsx","../src/components/confirm-dialog.tsx","../src/components/error-state.tsx","../src/components/copy-button.tsx","../src/components/data-table.tsx","../src/components/dialog-wrapper.tsx","../src/components/dropdown-wrapper.tsx","../src/components/info-row.tsx","../src/components/item-helpers.tsx","../src/components/mode-toggle.tsx","../src/components/phone-input.tsx","../src/components/pill.tsx","../src/components/tabs-wrapper.tsx","../src/components/responsive-split-layout.tsx","../src/components/sheet-wrapper.tsx","../src/components/table-wrapper.tsx","../src/components/tooltip-wrapper.tsx","../src/components/form/form-input.tsx","../src/components/form/form-textarea.tsx","../src/components/form/select-input.tsx","../src/components/form/checkbox-input.tsx","../src/components/form/radio-input.tsx","../src/components/form/switch-input.tsx","../src/components/form/date-input.tsx","../src/components/form/tag-input.tsx","../src/components/form/tag-choice-input.tsx","../src/components/form/combobox-input.tsx","../src/components/form/slug-field.tsx","../src/components/form/form-error-summary.tsx","../src/components/form/date-range-filter.tsx","../src/components/form/date-range-input.tsx","../src/components/search/index.ts","../src/components/search/search-context.tsx","../src/components/search/search-root.tsx","../src/components/search/search-input.tsx","../src/components/search/search-type-input.tsx","../src/components/search/search-filter-actions.tsx","../src/components/search/search-filters.tsx","../src/components/search/search-actions.tsx","../src/components/search/search-container.tsx","../src/components/compact/field.tsx","../src/components/compact/compact-input.tsx","../src/components/compact/compact-textarea.tsx","../src/components/compact/compact-select.tsx","../src/components/compact/compact-number-input.tsx","../src/components/compact/compact-tag-choice.tsx","../src/components/compact/compact-slug-field.tsx","../src/components/event-calendar.tsx","../src/layout/section.tsx","../src/layout/container.tsx"],"names":["React","useState","useCallback","AccordionSection","FaqAccordion","jsxs","jsx","useEffect","Fragment","sizes","_","Button","React2","TableRow","TableCell","Table","TableHeader","TableHead","TableBody","ChevronDown","Icon","React3","IconItemMedia","FeatureItem","React4","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuRadioGroup","DropdownMenuRadioItem","country","ScrollArea","memo","TabsWrapper","useMemo","TabTrigger","TabContent","DynamicTabs","SIZE_VARIANTS","SheetWrapper","FormSheet","ConfirmSheet","InputGroup","InputGroupAddon","InputGroupInput","Field","FieldLabel","FieldDescription","Controller","FieldError","dt","Popover","PopoverTrigger","PopoverContent","useRef","Badge","X","FieldContent","TagIcon","Input","Check","BaseComboboxInput","forwardRef","React6","CalendarIcon","Calendar","toDate","Search","InputGroupButton","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","createContext","useContext","Error","InputGroupTextarea","Textarea","Plus","generateSlug","Wand2","format","ChevronLeft","ChevronRight"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\r\n * Filter utilities for building URL parameters\r\n * Simplified approach since backend handles all operator parsing\r\n */\r\n\r\nexport interface FilterConfig {\r\n paramName: string;\r\n type?: \"array\" | \"string\" | \"number\" | \"boolean\";\r\n defaultValue?: unknown;\r\n}\r\n\r\nexport interface SearchConfig {\r\n basePath: string;\r\n searchFields?: Record<string, string>;\r\n filterFields?: Record<string, FilterConfig>;\r\n defaultSearchType?: string;\r\n}\r\n\r\n/**\r\n * Build URL parameters from filters object\r\n */\r\nexport function buildFilterParams(\r\n filters: Record<string, unknown>,\r\n filterConfig: Record<string, FilterConfig>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n Object.entries(filters).forEach(([key, value]) => {\r\n const config = filterConfig[key];\r\n if (!config || !value) return;\r\n\r\n // Skip empty arrays and default values\r\n if (Array.isArray(value) && value.length === 0) return;\r\n if (value === config.defaultValue) return;\r\n\r\n // Handle array filters\r\n if (config.type === \"array\" && Array.isArray(value)) {\r\n if (value.length > 1) {\r\n // Multiple values: use [in] operator\r\n params.set(`${config.paramName}[in]`, value.join(\",\"));\r\n } else if (value.length === 1) {\r\n // Single value: direct assignment\r\n params.set(config.paramName, value[0] as string);\r\n }\r\n } else {\r\n // Non-array filters: direct assignment\r\n params.set(config.paramName, String(value));\r\n }\r\n });\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Build search parameters from search state\r\n */\r\nexport function buildSearchParams(\r\n searchType: string,\r\n searchValue: string,\r\n searchFields: Record<string, string>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n if (searchValue.trim() && searchFields[searchType]) {\r\n const paramName = searchFields[searchType];\r\n params.set(paramName, searchValue.trim());\r\n }\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Build listing status parameters (inventory-specific)\r\n */\r\nexport function buildListingStatusParams(\r\n listingStatus: Record<string, boolean | undefined>\r\n): URLSearchParams {\r\n const params = new URLSearchParams();\r\n\r\n Object.entries(listingStatus).forEach(([platform, hasListings]) => {\r\n if (hasListings !== undefined) {\r\n const operator = hasListings ? \"gt\" : \"eq\";\r\n params.set(`total_list.${platform}[${operator}]`, \"0\");\r\n }\r\n });\r\n\r\n return params;\r\n}\r\n\r\n/**\r\n * Clear specific parameter types from URLSearchParams\r\n */\r\nexport function clearSearchAndFilterParams(\r\n params: URLSearchParams,\r\n config: SearchConfig\r\n): void {\r\n const { searchFields = {}, filterFields = {} } = config;\r\n\r\n // Clear search params\r\n Object.values(searchFields).forEach((paramName) => {\r\n params.delete(paramName);\r\n });\r\n\r\n // Clear filter params\r\n Object.values(filterFields).forEach((fieldConfig) => {\r\n params.delete(fieldConfig.paramName);\r\n // Also clear potential [in] variations\r\n const baseField = fieldConfig.paramName.replace(/\\[.*\\]$/, \"\");\r\n params.delete(`${baseField}[in]`);\r\n });\r\n\r\n // Clear listing status params\r\n const keysToDelete: string[] = [];\r\n for (const [key] of params.entries()) {\r\n if (key.startsWith(\"total_list.\")) {\r\n keysToDelete.push(key);\r\n }\r\n }\r\n keysToDelete.forEach((key) => params.delete(key));\r\n\r\n params.delete(\"page\"); // Reset pagination\r\n}\r\n\r\n/**\r\n * Get API-ready parameters from URL\r\n */\r\nexport function getApiParams(\r\n searchParams: URLSearchParams\r\n): Record<string, string> {\r\n const params: Record<string, string> = {};\r\n\r\n for (const [key, value] of searchParams.entries()) {\r\n params[key] = value;\r\n }\r\n\r\n return params;\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\nexport function useIsMobile() {\r\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\r\n\r\n React.useEffect(() => {\r\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\r\n const onChange = () => {\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\r\n };\r\n mql.addEventListener(\"change\", onChange);\r\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, []);\r\n\r\n return !!isMobile;\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useCallback } from \"react\";\r\nimport { useRouter, useSearchParams } from \"next/navigation\";\r\nimport {\r\n buildFilterParams,\r\n buildSearchParams,\r\n clearSearchAndFilterParams,\r\n getApiParams,\r\n type FilterConfig,\r\n type SearchConfig,\r\n} from \"../lib/filter-utils\";\r\n\r\nexport interface UseBaseSearchConfig {\r\n basePath: string;\r\n searchFields?: Record<string, string>;\r\n filterFields?: Record<string, FilterConfig>;\r\n defaultSearchType?: string;\r\n}\r\n\r\nexport interface UseBaseSearchReturn {\r\n // Search state\r\n searchType: string;\r\n setSearchType: (type: string) => void;\r\n searchValue: string;\r\n setSearchValue: (value: string) => void;\r\n\r\n // Filter state\r\n filters: Record<string, unknown>;\r\n setFilters: React.Dispatch<React.SetStateAction<Record<string, unknown>>>;\r\n updateFilter: (key: string, value: unknown) => void;\r\n\r\n // Actions\r\n handleSearch: () => void;\r\n clearSearch: () => void;\r\n getSearchParams: () => Record<string, string>;\r\n\r\n // Status\r\n hasActiveSearch: boolean;\r\n hasActiveFilters: boolean;\r\n}\r\n\r\n/**\r\n * Base search hook that provides common search functionality\r\n * Can be extended by specific search hooks for different entities\r\n * Supports bracket syntax: field[operator]=value\r\n */\r\nexport function useBaseSearch(config: UseBaseSearchConfig): UseBaseSearchReturn {\r\n const {\r\n basePath,\r\n searchFields = {},\r\n filterFields = {},\r\n defaultSearchType = Object.keys(searchFields)[0] || \"\",\r\n } = config;\r\n\r\n const router = useRouter();\r\n const searchParams = useSearchParams();\r\n\r\n // Initialize search type from URL params\r\n const [searchType, setSearchType] = useState(() => {\r\n for (const [type, paramName] of Object.entries(searchFields)) {\r\n if (searchParams.has(paramName)) {\r\n return type;\r\n }\r\n }\r\n return defaultSearchType;\r\n });\r\n\r\n // Initialize search value from URL params\r\n const [searchValue, setSearchValue] = useState(() => {\r\n for (const paramName of Object.values(searchFields)) {\r\n const value = searchParams.get(paramName);\r\n if (value) return value;\r\n }\r\n return \"\";\r\n });\r\n\r\n // Initialize filter states\r\n const [filters, setFilters] = useState<Record<string, unknown>>(() => {\r\n const initialFilters: Record<string, unknown> = {};\r\n Object.entries(filterFields).forEach(([key, fieldConfig]) => {\r\n const paramValue = searchParams.get(fieldConfig.paramName);\r\n if (paramValue) {\r\n if (fieldConfig.type === \"array\") {\r\n initialFilters[key] = paramValue.split(\",\");\r\n } else {\r\n initialFilters[key] = paramValue;\r\n }\r\n } else {\r\n initialFilters[key] =\r\n fieldConfig.defaultValue || (fieldConfig.type === \"array\" ? [] : \"\");\r\n }\r\n });\r\n return initialFilters;\r\n });\r\n\r\n // Handle search submission\r\n const handleSearch = useCallback(() => {\r\n const params = new URLSearchParams(searchParams);\r\n\r\n // Clear existing search and filter params\r\n clearSearchAndFilterParams(params, config);\r\n\r\n // Add search params\r\n const searchParamsNew = buildSearchParams(searchType, searchValue, searchFields);\r\n for (const [key, value] of searchParamsNew) {\r\n params.set(key, value);\r\n }\r\n\r\n // Add filter params\r\n const filterParams = buildFilterParams(filters, filterFields);\r\n for (const [key, value] of filterParams) {\r\n params.set(key, value);\r\n }\r\n\r\n // Update URL\r\n router.push(`${basePath}?${params.toString()}`);\r\n }, [\r\n searchType,\r\n searchValue,\r\n filters,\r\n searchFields,\r\n filterFields,\r\n searchParams,\r\n router,\r\n basePath,\r\n config,\r\n ]);\r\n\r\n // Clear search and filters\r\n const clearSearch = useCallback(() => {\r\n const params = new URLSearchParams(searchParams);\r\n\r\n // Clear all search and filter params\r\n clearSearchAndFilterParams(params, config);\r\n\r\n // Reset state\r\n setSearchValue(\"\");\r\n // Reset search type back to default for consistency\r\n setSearchType(defaultSearchType);\r\n const resetFilters: Record<string, unknown> = {};\r\n Object.entries(filterFields).forEach(([key, fieldConfig]) => {\r\n resetFilters[key] =\r\n fieldConfig.defaultValue || (fieldConfig.type === \"array\" ? [] : \"\");\r\n });\r\n setFilters(resetFilters);\r\n\r\n const next = params.toString();\r\n // If no params remain, navigate to clean basePath\r\n router.push(next ? `${basePath}?${next}` : `${basePath}`);\r\n }, [searchParams, router, basePath, config, defaultSearchType, filterFields]);\r\n\r\n // Get current search params for API\r\n const getSearchParamsForApi = useCallback(() => {\r\n return getApiParams(searchParams);\r\n }, [searchParams]);\r\n\r\n // Update individual filter\r\n const updateFilter = useCallback((key: string, value: unknown) => {\r\n setFilters((prev) => ({\r\n ...prev,\r\n [key]: value,\r\n }));\r\n }, []);\r\n\r\n // Check if there are active searches or filters\r\n const hasActiveSearch = Object.values(searchFields).some((paramName) => {\r\n return searchParams.has(paramName);\r\n });\r\n\r\n const hasActiveFilters = Object.values(filterFields).some((fieldConfig) => {\r\n const baseField = fieldConfig.paramName.replace(/\\[.*\\]$/, \"\");\r\n return (\r\n searchParams.has(fieldConfig.paramName) ||\r\n searchParams.has(`${baseField}[in]`) ||\r\n searchParams.has(baseField)\r\n );\r\n });\r\n\r\n return {\r\n // Search state\r\n searchType,\r\n setSearchType,\r\n searchValue,\r\n setSearchValue,\r\n\r\n // Filter state\r\n filters,\r\n setFilters,\r\n updateFilter,\r\n\r\n // Actions\r\n handleSearch,\r\n clearSearch,\r\n getSearchParams: getSearchParamsForApi,\r\n\r\n // Status\r\n hasActiveSearch,\r\n hasActiveFilters,\r\n };\r\n}\r\n","import { useSyncExternalStore } from \"react\";\r\n\r\nexport function useMediaQuery(query: string, defaultValue = false) {\r\n const getSnapshot = () => window.matchMedia(query).matches;\r\n const getServerSnapshot = () => defaultValue;\r\n\r\n const subscribe = (onStoreChange: () => void) => {\r\n const media = window.matchMedia(query);\r\n const handler = () => onStoreChange();\r\n media.addEventListener(\"change\", handler);\r\n return () => media.removeEventListener(\"change\", handler);\r\n };\r\n\r\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\r\n}\r\n","import { useState, useCallback, RefObject } from \"react\";\r\n\r\ninterface ScrollState {\r\n canScrollLeft: boolean;\r\n canScrollRight: boolean;\r\n isScrollable: boolean;\r\n}\r\n\r\nexport const useScrollDetection = (\r\n ref: RefObject<HTMLDivElement | null>,\r\n delay = 100\r\n) => {\r\n const [scrollState, setScrollState] = useState<ScrollState>({\r\n canScrollLeft: false,\r\n canScrollRight: false,\r\n isScrollable: false,\r\n });\r\n\r\n const checkScroll = useCallback(() => {\r\n const scrollContainer = ref.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainer;\r\n const isScrollable = scrollWidth > clientWidth;\r\n const canScrollLeft = scrollLeft > 5;\r\n const canScrollRight = scrollLeft < scrollWidth - clientWidth - 5;\r\n\r\n setScrollState((prev) => {\r\n if (\r\n prev.canScrollLeft !== canScrollLeft ||\r\n prev.canScrollRight !== canScrollRight ||\r\n prev.isScrollable !== isScrollable\r\n ) {\r\n return { canScrollLeft, canScrollRight, isScrollable };\r\n }\r\n return prev;\r\n });\r\n }, [ref]);\r\n\r\n const debouncedCheckScroll = useCallback(() => {\r\n const timeoutId = setTimeout(checkScroll, delay);\r\n return () => clearTimeout(timeoutId);\r\n }, [checkScroll, delay]);\r\n\r\n return { ...scrollState, checkScroll: debouncedCheckScroll };\r\n};\r\n","\"use client\";\r\n\r\nimport { ReactNode, memo } from \"react\";\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionTrigger,\r\n AccordionContent,\r\n} from \"@/components/ui/accordion\";\r\nimport { cn } from \"../utils\";\r\n\r\n// ============================================================================\r\n// SINGLE ACCORDION SECTION\r\n// ============================================================================\r\n\r\nexport interface AccordionSectionProps {\r\n title: string;\r\n icon?: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n badge?: ReactNode;\r\n}\r\n\r\n/**\r\n * AccordionSection - Single collapsible section with smooth animation\r\n *\r\n * @example\r\n * ```tsx\r\n * <AccordionSection title=\"Settings\" icon={<Settings className=\"h-4 w-4\" />}>\r\n * <div>Content here</div>\r\n * </AccordionSection>\r\n * ```\r\n */\r\nexport const AccordionSection = memo(function AccordionSection({\r\n title,\r\n icon,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n badge,\r\n}: AccordionSectionProps) {\r\n return (\r\n <Accordion\r\n defaultValue={defaultOpen ? [\"section\"] : []}\r\n className={className}\r\n >\r\n <AccordionItem value=\"section\" className=\"border-0\">\r\n <AccordionTrigger className=\"py-3 hover:no-underline\">\r\n <div className=\"flex items-center gap-2\">\r\n {icon && <span className=\"text-muted-foreground\">{icon}</span>}\r\n <span className=\"font-medium\">{title}</span>\r\n {badge}\r\n </div>\r\n </AccordionTrigger>\r\n <AccordionContent>\r\n <div className=\"pt-2\">{children}</div>\r\n </AccordionContent>\r\n </AccordionItem>\r\n </Accordion>\r\n );\r\n});\r\n\r\n// ============================================================================\r\n// FAQ / GROUPED ACCORDION\r\n// ============================================================================\r\n\r\nexport interface FaqItem {\r\n id: string;\r\n question: string;\r\n answer: ReactNode;\r\n}\r\n\r\nexport interface FaqAccordionProps {\r\n items: FaqItem[];\r\n defaultOpen?: string;\r\n className?: string;\r\n /** Allow multiple items to be open at once */\r\n openMultiple?: boolean;\r\n}\r\n\r\n/**\r\n * FaqAccordion - FAQ-style accordion where only one item can be open by default\r\n *\r\n * @example\r\n * ```tsx\r\n * <FaqAccordion\r\n * items={[\r\n * { id: \"1\", question: \"What is this?\", answer: \"A FAQ accordion\" },\r\n * { id: \"2\", question: \"How does it work?\", answer: \"Click to expand\" },\r\n * ]}\r\n * />\r\n * ```\r\n */\r\nexport const FaqAccordion = memo(function FaqAccordion({\r\n items,\r\n defaultOpen,\r\n className,\r\n openMultiple = false,\r\n}: FaqAccordionProps) {\r\n return (\r\n <Accordion\r\n defaultValue={defaultOpen ? [defaultOpen] : []}\r\n openMultiple={openMultiple}\r\n className={cn(\"w-full\", className)}\r\n >\r\n {items.map((item) => (\r\n <AccordionItem key={item.id} value={item.id}>\r\n <AccordionTrigger className=\"text-left\">\r\n {item.question}\r\n </AccordionTrigger>\r\n <AccordionContent>{item.answer}</AccordionContent>\r\n </AccordionItem>\r\n ))}\r\n </Accordion>\r\n );\r\n});\r\n","import { ReactNode, ElementType } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface DisplayHeadingProps {\r\n children: ReactNode;\r\n size?: \"lg\" | \"xl\" | \"2xl\";\r\n align?: \"left\" | \"center\" | \"right\";\r\n className?: string;\r\n highlightText?: string;\r\n highlightColor?: \"primary\" | \"secondary\" | \"accent\" | \"gradient\";\r\n as?: ElementType;\r\n}\r\n\r\n/**\r\n * DisplayHeading - Reusable component for hero/display headings\r\n * Provides consistent typography across the platform\r\n */\r\nexport function DisplayHeading({\r\n children,\r\n size = \"xl\",\r\n align = \"center\",\r\n className,\r\n highlightText,\r\n highlightColor = \"primary\",\r\n as: Component = \"h1\",\r\n ...props\r\n}: DisplayHeadingProps) {\r\n const sizeClasses = {\r\n lg: \"text-3xl lg:text-5xl\",\r\n xl: \"text-4xl lg:text-6xl\",\r\n \"2xl\": \"text-5xl lg:text-7xl\",\r\n };\r\n\r\n const alignClasses = {\r\n left: \"text-left\",\r\n center: \"text-center\",\r\n right: \"text-right\",\r\n };\r\n\r\n const highlightClasses = {\r\n primary: \"text-primary\",\r\n secondary: \"text-secondary\",\r\n accent: \"text-accent\",\r\n gradient:\r\n \"bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent\",\r\n };\r\n\r\n const renderContent = () => {\r\n if (typeof children !== \"string\" || !highlightText) {\r\n return children;\r\n }\r\n\r\n const parts = children.split(highlightText);\r\n return (\r\n <>\r\n {parts[0]}\r\n <span className={highlightClasses[highlightColor]}>{highlightText}</span>\r\n {parts[1]}\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <Component\r\n className={cn(\r\n \"font-bold tracking-tight text-balance leading-[1.1]\",\r\n sizeClasses[size],\r\n alignClasses[align],\r\n className\r\n )}\r\n {...props}\r\n >\r\n {renderContent()}\r\n </Component>\r\n );\r\n}\r\n","// Social media SVG icons\r\n\r\nexport const FacebookIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\"></path>\r\n </svg>\r\n);\r\n\r\nexport const GoogleIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" />\r\n </svg>\r\n);\r\n\r\nexport const TwitterXIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 1200 1227\"\r\n width=\"18\"\r\n height=\"18\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z\" />\r\n </svg>\r\n);\r\n\r\nexport const InstagramIcon = () => (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" ry=\"5\"></rect>\r\n <path d=\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\"></path>\r\n <line x1=\"17.5\" y1=\"6.5\" x2=\"17.51\" y2=\"6.5\"></line>\r\n </svg>\r\n);\r\n\r\nexport const WhatsAppIcon = () => (\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\r\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z\" />\r\n </svg>\r\n);\r\n","\"use client\";\r\n\r\nimport Image from \"next/image\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst aspectRatios = {\r\n square: \"aspect-square\",\r\n video: \"aspect-video\",\r\n portrait: \"aspect-[3/4]\",\r\n};\r\n\r\nconst sizes = {\r\n small: \"w-16 h-16\",\r\n medium: \"w-32 h-32\",\r\n large: \"w-48 h-48\",\r\n full: \"w-full h-full\",\r\n};\r\n\r\nexport interface ThumbnailProps {\r\n src?: string;\r\n alt?: string;\r\n aspect?: \"square\" | \"video\" | \"portrait\";\r\n size?: \"small\" | \"medium\" | \"large\" | \"full\";\r\n className?: string;\r\n fallback?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function Thumbnail({\r\n src,\r\n alt,\r\n aspect = \"square\",\r\n size = \"medium\",\r\n className,\r\n fallback = \"/placeholder.svg\",\r\n onClick,\r\n}: ThumbnailProps) {\r\n // If a custom size is provided through className, use that instead of predefined sizes\r\n const sizeClass = className?.includes(\"w-\") ? \"\" : sizes[size];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative rounded-md overflow-hidden\",\r\n aspectRatios[aspect],\r\n sizeClass,\r\n onClick && \"cursor-pointer\",\r\n className\r\n )}\r\n onClick={onClick}\r\n >\r\n <Image\r\n src={src || fallback}\r\n alt={alt || \"Thumbnail\"}\r\n fill\r\n className=\"object-cover\"\r\n sizes={getSizes(size)}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nconst getSizes = (size: \"small\" | \"medium\" | \"large\" | \"full\") => {\r\n switch (size) {\r\n case \"small\":\r\n return \"64px\";\r\n case \"medium\":\r\n return \"128px\";\r\n case \"large\":\r\n return \"192px\";\r\n case \"full\":\r\n return \"(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw\";\r\n default:\r\n return \"128px\";\r\n }\r\n};\r\n\r\nexport default Thumbnail;\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n Pagination,\r\n PaginationContent,\r\n PaginationItem,\r\n PaginationLink,\r\n PaginationNext,\r\n PaginationPrevious,\r\n} from \"@/components/ui/pagination\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CustomPaginationProps {\r\n page: number;\r\n pages: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n onPageChange: (page: number) => void;\r\n}\r\n\r\nexport function CustomPagination({\r\n page,\r\n onPageChange,\r\n pages,\r\n hasPrev,\r\n hasNext,\r\n}: CustomPaginationProps) {\r\n const [isMobile, setIsMobile] = useState(false);\r\n const currentPageNum = Number(page);\r\n\r\n useEffect(() => {\r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 640);\r\n };\r\n\r\n checkMobile();\r\n window.addEventListener(\"resize\", checkMobile);\r\n return () => window.removeEventListener(\"resize\", checkMobile);\r\n }, []);\r\n\r\n if (pages <= 1) return null;\r\n\r\n const getPageNumbers = (): (number | string)[] => {\r\n const delta = isMobile ? 1 : 2;\r\n const range: number[] = [];\r\n const rangeWithDots: (number | string)[] = [];\r\n\r\n for (\r\n let i = Math.max(2, currentPageNum - delta);\r\n i <= Math.min(pages - 1, currentPageNum + delta);\r\n i++\r\n ) {\r\n range.push(i);\r\n }\r\n\r\n if (currentPageNum - delta > 2) {\r\n rangeWithDots.push(1, \"...\");\r\n } else {\r\n rangeWithDots.push(1);\r\n }\r\n\r\n rangeWithDots.push(...range);\r\n\r\n if (currentPageNum + delta < pages - 1) {\r\n rangeWithDots.push(\"...\", pages);\r\n } else if (pages > 1) {\r\n if (!range.includes(pages)) {\r\n rangeWithDots.push(pages);\r\n }\r\n }\r\n\r\n return [...new Set(rangeWithDots)];\r\n };\r\n\r\n if (isMobile && pages > 5) {\r\n return (\r\n <Pagination className=\"mx-0 w-auto\">\r\n <PaginationContent className=\"gap-1\">\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => (hasPrev ? onPageChange(currentPageNum - 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors h-8 px-2 text-xs\",\r\n !hasPrev && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasPrev && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasPrev}\r\n />\r\n </PaginationItem>\r\n\r\n <PaginationItem>\r\n <div className=\"flex h-8 items-center justify-center px-3 text-xs font-medium bg-primary text-primary-foreground rounded-md\">\r\n {currentPageNum} / {pages}\r\n </div>\r\n </PaginationItem>\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => (hasNext ? onPageChange(currentPageNum + 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors h-8 px-2 text-xs\",\r\n !hasNext && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasNext && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasNext}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n );\r\n }\r\n\r\n return (\r\n <Pagination className=\"mx-0 w-auto\">\r\n <PaginationContent className=\"gap-1 flex-wrap\">\r\n <PaginationItem>\r\n <PaginationPrevious\r\n onClick={() => (hasPrev ? onPageChange(currentPageNum - 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 px-2 text-xs\" : \"h-9 px-3 text-sm\",\r\n !hasPrev && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasPrev && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasPrev}\r\n />\r\n </PaginationItem>\r\n\r\n {getPageNumbers().map((pageNum, index) => (\r\n <PaginationItem key={`pagination-page-${pageNum}-${index}`}>\r\n {pageNum === \"...\" ? (\r\n <span\r\n className={cn(\r\n \"flex items-center justify-center text-muted-foreground\",\r\n isMobile ? \"h-8 w-8 text-xs\" : \"h-9 w-9 text-sm\"\r\n )}\r\n >\r\n ...\r\n </span>\r\n ) : (\r\n <PaginationLink\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 w-8 text-xs p-0\" : \"h-9 w-9 text-sm p-0\",\r\n \"hover:bg-accent hover:text-accent-foreground\",\r\n Number(currentPageNum) === Number(pageNum) &&\r\n \"bg-primary text-primary-foreground hover:bg-primary/90\"\r\n )}\r\n onClick={() =>\r\n typeof pageNum === \"number\" ? onPageChange(pageNum) : undefined\r\n }\r\n isActive={Number(currentPageNum) === Number(pageNum)}\r\n aria-label={`Go to page ${pageNum}`}\r\n aria-current={\r\n Number(currentPageNum) === Number(pageNum) ? \"page\" : undefined\r\n }\r\n >\r\n {pageNum}\r\n </PaginationLink>\r\n )}\r\n </PaginationItem>\r\n ))}\r\n\r\n <PaginationItem>\r\n <PaginationNext\r\n onClick={() => (hasNext ? onPageChange(currentPageNum + 1) : undefined)}\r\n className={cn(\r\n \"cursor-pointer transition-colors\",\r\n isMobile ? \"h-8 px-2 text-xs\" : \"h-9 px-3 text-sm\",\r\n !hasNext && \"pointer-events-none opacity-50 cursor-not-allowed\",\r\n hasNext && \"hover:bg-accent hover:text-accent-foreground\"\r\n )}\r\n aria-disabled={!hasNext}\r\n />\r\n </PaginationItem>\r\n </PaginationContent>\r\n </Pagination>\r\n );\r\n}\r\n\r\nexport interface PaginationInfoProps {\r\n page: number;\r\n total: number;\r\n limit?: number;\r\n}\r\n\r\nexport function PaginationInfo({ page, total, limit = 10 }: PaginationInfoProps) {\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n useEffect(() => {\r\n const checkMobile = () => {\r\n setIsMobile(window.innerWidth < 640);\r\n };\r\n\r\n checkMobile();\r\n window.addEventListener(\"resize\", checkMobile);\r\n return () => window.removeEventListener(\"resize\", checkMobile);\r\n }, []);\r\n\r\n if (total === 0) {\r\n return (\r\n <div className=\"flex-1 text-sm text-muted-foreground\">\r\n <p>No entries found</p>\r\n </div>\r\n );\r\n }\r\n\r\n const startEntry = (page - 1) * limit + 1;\r\n const endEntry = Math.min(page * limit, total);\r\n\r\n return (\r\n <div className=\"flex-1 text-sm text-muted-foreground\">\r\n <p className={cn(\"whitespace-nowrap\", isMobile && \"text-xs\")}>\r\n {isMobile ? (\r\n <span>\r\n {startEntry.toLocaleString()}-{endEntry.toLocaleString()} of{\" \"}\r\n {total.toLocaleString()}\r\n </span>\r\n ) : (\r\n <span>\r\n Showing{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {startEntry.toLocaleString()}\r\n </span>{\" \"}\r\n to{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {endEntry.toLocaleString()}\r\n </span>{\" \"}\r\n of{\" \"}\r\n <span className=\"font-medium text-foreground\">\r\n {total.toLocaleString()}\r\n </span>{\" \"}\r\n {total === 1 ? \"result\" : \"results\"}\r\n </span>\r\n )}\r\n </p>\r\n </div>\r\n );\r\n}\r\n\r\nexport type { CustomPaginationProps as CustomPaginationPropsExport };\r\nexport type { PaginationInfoProps as PaginationInfoPropsExport };\r\n","\"use client\";\r\n\r\nimport { CustomPagination, PaginationInfo } from \"./custom-pagination\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ApiPaginationData {\r\n total: number;\r\n pages: number;\r\n page: number;\r\n limit: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n}\r\n\r\nexport interface ApiPaginationProps extends Partial<ApiPaginationData> {\r\n onPageChange?: (page: number) => void;\r\n className?: string;\r\n showInfo?: boolean;\r\n infoPosition?: \"left\" | \"right\";\r\n}\r\n\r\n/**\r\n * ApiPagination - A reusable pagination component for API-driven data\r\n */\r\nexport function ApiPagination({\r\n total = 0,\r\n limit = 10,\r\n pages = 1,\r\n page = 1,\r\n hasNext = false,\r\n hasPrev = false,\r\n onPageChange = () => {},\r\n className,\r\n showInfo = true,\r\n infoPosition = \"left\",\r\n}: ApiPaginationProps) {\r\n const infoComponent = showInfo && (\r\n <div className=\"shrink-0\">\r\n <PaginationInfo total={total} page={page} limit={limit} />\r\n </div>\r\n );\r\n\r\n const paginationComponent = (\r\n <div className=\"flex justify-center sm:justify-end\">\r\n <CustomPagination\r\n page={page}\r\n pages={pages}\r\n hasPrev={hasPrev}\r\n hasNext={hasNext}\r\n onPageChange={onPageChange}\r\n />\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"shrink-0 bg-muted/30 rounded-lg border border-border p-3 mb-2\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between sm:gap-4\">\r\n {infoPosition === \"left\" ? (\r\n <>\r\n <div className=\"order-2 sm:order-1\">{infoComponent}</div>\r\n <div className=\"order-1 sm:order-2\">{paginationComponent}</div>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"order-1 sm:order-1\">{paginationComponent}</div>\r\n <div className=\"order-2 sm:order-2\">{infoComponent}</div>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport {\r\n Card,\r\n CardContent,\r\n CardHeader,\r\n CardTitle,\r\n CardDescription,\r\n CardFooter,\r\n} from \"@/components/ui/card\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CardWrapperProps {\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"elevated\" | \"primary\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\";\r\n size?: \"sm\" | \"default\" | \"lg\" | \"xl\";\r\n hideHeader?: boolean;\r\n}\r\n\r\nexport function CardWrapper({\r\n title,\r\n description,\r\n children,\r\n footer,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n variant = \"default\",\r\n size = \"default\",\r\n hideHeader = false,\r\n ...props\r\n}: CardWrapperProps) {\r\n const variants = {\r\n default: \"\",\r\n outline: \"border-2\",\r\n ghost: \"border-0 shadow-none bg-transparent\",\r\n elevated: \"shadow-lg border-0\",\r\n primary: \"border-primary/20 bg-primary/5\",\r\n secondary: \"border-secondary/20 bg-secondary/5\",\r\n destructive: \"border-destructive/20 bg-destructive/5\",\r\n success: \"border-green-500/20 bg-green-500/5\",\r\n warning: \"border-yellow-500/20 bg-yellow-500/5\",\r\n };\r\n\r\n const sizes = {\r\n sm: \"p-3\",\r\n default: \"p-6\",\r\n lg: \"p-8\",\r\n xl: \"p-10\",\r\n };\r\n\r\n const contentSizes = {\r\n sm: \"pt-3\",\r\n default: \"pt-6\",\r\n lg: \"pt-8\",\r\n xl: \"pt-10\",\r\n };\r\n\r\n return (\r\n <Card className={cn(variants[variant], className)} {...props}>\r\n {!hideHeader && (title || description) && (\r\n <CardHeader className={cn(sizes[size], \"pb-4\", headerClassName)}>\r\n {title && (\r\n <CardTitle className=\"text-lg font-semibold\">{title}</CardTitle>\r\n )}\r\n {description && <CardDescription>{description}</CardDescription>}\r\n </CardHeader>\r\n )}\r\n\r\n <CardContent\r\n className={cn(hideHeader ? sizes[size] : contentSizes[size], contentClassName)}\r\n >\r\n {children}\r\n </CardContent>\r\n\r\n {footer && (\r\n <CardFooter className={cn(sizes[size], \"pt-4 border-t\", footerClassName)}>\r\n <div className=\"w-full\">{footer}</div>\r\n </CardFooter>\r\n )}\r\n </Card>\r\n );\r\n}\r\n\r\nexport interface DataCardProps extends Omit<CardWrapperProps, \"children\"> {\r\n data: Array<{ label: string; value: ReactNode; color?: string }>;\r\n}\r\n\r\nexport function DataCard({ title, data, className, ...props }: DataCardProps) {\r\n return (\r\n <CardWrapper title={title} className={cn(\"space-y-4\", className)} {...props}>\r\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\r\n {data.map((item, index) => (\r\n <div key={index} className=\"space-y-1\">\r\n <p className=\"text-sm text-muted-foreground\">{item.label}</p>\r\n <p className={cn(\"text-lg font-semibold\", item.color && `text-${item.color}-600`)}>\r\n {item.value}\r\n </p>\r\n </div>\r\n ))}\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface LoadingCardProps extends Omit<CardWrapperProps, \"children\"> {}\r\n\r\nexport function LoadingCard({ title, description, className, ...props }: LoadingCardProps) {\r\n return (\r\n <CardWrapper title={title} description={description} className={className} {...props}>\r\n <div className=\"flex items-center justify-center py-8\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-primary\"></div>\r\n <span className=\"ml-2\">Loading...</span>\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface StatsCardProps extends Omit<CardWrapperProps, \"children\" | \"variant\"> {\r\n value: ReactNode;\r\n icon?: ReactNode;\r\n trend?: { type: \"up\" | \"down\" | \"neutral\"; value: string };\r\n /** Visual variant for the card and icon styling */\r\n statsVariant?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n /** Additional class for the icon wrapper */\r\n iconClassName?: string;\r\n}\r\n\r\nexport function StatsCard({\r\n title,\r\n value,\r\n description,\r\n icon,\r\n trend,\r\n className,\r\n statsVariant = \"default\",\r\n iconClassName,\r\n ...props\r\n}: StatsCardProps) {\r\n // Variant styles for the card background\r\n const cardVariants = {\r\n default: \"\",\r\n success: \"bg-green-50 border-green-200 dark:bg-green-950/30 dark:border-green-900\",\r\n warning: \"bg-yellow-50 border-yellow-200 dark:bg-yellow-950/30 dark:border-yellow-900\",\r\n danger: \"bg-red-50 border-red-200 dark:bg-red-950/30 dark:border-red-900\",\r\n info: \"bg-blue-50 border-blue-200 dark:bg-blue-950/30 dark:border-blue-900\",\r\n };\r\n\r\n // Variant styles for the icon\r\n const iconVariants = {\r\n default: \"text-muted-foreground\",\r\n success: \"text-green-600 dark:text-green-400\",\r\n warning: \"text-yellow-600 dark:text-yellow-400\",\r\n danger: \"text-red-600 dark:text-red-400\",\r\n info: \"text-blue-600 dark:text-blue-400\",\r\n };\r\n\r\n // Icon wrapper styles (for when icon needs background)\r\n const iconWrapperVariants = {\r\n default: \"bg-muted border border-border\",\r\n success: \"bg-green-100/50 dark:bg-green-900/30\",\r\n warning: \"bg-yellow-100/50 dark:bg-yellow-900/30\",\r\n danger: \"bg-red-100/50 dark:bg-red-900/30\",\r\n info: \"bg-blue-100/50 dark:bg-blue-900/30\",\r\n };\r\n\r\n return (\r\n <CardWrapper\r\n className={cn(\"relative overflow-hidden\", cardVariants[statsVariant], className)}\r\n size=\"sm\"\r\n hideHeader\r\n {...props}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"space-y-1\">\r\n <p className=\"text-sm font-medium text-muted-foreground\">{title}</p>\r\n <p className=\"text-2xl font-bold\">{value}</p>\r\n {description && (\r\n <p className=\"text-xs text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n {icon && (\r\n <div className={cn(\r\n \"p-2 rounded-md\",\r\n iconWrapperVariants[statsVariant],\r\n iconVariants[statsVariant],\r\n iconClassName\r\n )}>\r\n {icon}\r\n </div>\r\n )}\r\n </div>\r\n {trend && (\r\n <div\r\n className={cn(\r\n \"absolute top-2 right-2 text-xs px-2 py-1 rounded-full\",\r\n trend.type === \"up\" && \"bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300\",\r\n trend.type === \"down\" && \"bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300\",\r\n trend.type === \"neutral\" && \"bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300\"\r\n )}\r\n >\r\n {trend.value}\r\n </div>\r\n )}\r\n </CardWrapper>\r\n );\r\n}\r\n\r\nexport interface DraggableCardProps extends Omit<CardWrapperProps, \"children\"> {\r\n subtitle?: ReactNode;\r\n badges?: ReactNode;\r\n actions?: ReactNode;\r\n details?: ReactNode;\r\n dragHandleProps?: any;\r\n isDragging?: boolean;\r\n isHidden?: boolean;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function DraggableCard({\r\n title,\r\n subtitle,\r\n badges,\r\n actions,\r\n details,\r\n dragHandleProps,\r\n className,\r\n isDragging,\r\n isHidden,\r\n children,\r\n ...props\r\n}: DraggableCardProps) {\r\n return (\r\n <CardWrapper\r\n hideHeader\r\n className={cn(\r\n \"transition-all\",\r\n isDragging && \"shadow-lg rotate-2\",\r\n isHidden && \"opacity-50\",\r\n className\r\n )}\r\n contentClassName=\"!pt-4\"\r\n {...props}\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n {dragHandleProps && (\r\n <div {...dragHandleProps} className=\"mt-1 cursor-grab hover:text-foreground\">\r\n {dragHandleProps.icon || (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n className=\"text-muted-foreground\"\r\n >\r\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\r\n </svg>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"flex-1 min-w-0 space-y-3\">\r\n <div className=\"flex flex-wrap items-center gap-2\">\r\n {title && <h4 className=\"font-medium\">{title}</h4>}\r\n {badges && <div className=\"flex flex-wrap gap-1\">{badges}</div>}\r\n </div>\r\n\r\n {subtitle && (\r\n <p className=\"text-xs text-muted-foreground break-words\">{subtitle}</p>\r\n )}\r\n\r\n {details}\r\n {children}\r\n </div>\r\n\r\n {actions && (\r\n <div className=\"flex items-center gap-2 flex-shrink-0\">{actions}</div>\r\n )}\r\n </div>\r\n </CardWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Skeleton } from \"@/components/ui/skeleton\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { cn } from \"../utils\";\r\n\r\n// ============================================================================\r\n// SKELETON TABLE\r\n// ============================================================================\r\n\r\nexport interface SkeletonTableProps {\r\n /** Number of skeleton rows */\r\n rows?: number;\r\n /** Number of skeleton columns */\r\n columns?: number;\r\n /** Optional column headers - if provided, shows text instead of skeleton */\r\n headers?: string[];\r\n /** Additional CSS classes */\r\n className?: string;\r\n}\r\n\r\n/**\r\n * SkeletonTable - Loading skeleton for tables\r\n * Matches DataTable structure for consistent loading states\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonTable rows={5} columns={4} />\r\n * <SkeletonTable headers={[\"Name\", \"Email\", \"Status\"]} rows={10} />\r\n * ```\r\n */\r\nexport function SkeletonTable({\r\n rows = 5,\r\n columns = 6,\r\n headers,\r\n className,\r\n}: SkeletonTableProps) {\r\n const columnCount = headers?.length || columns;\r\n\r\n return (\r\n <div className={cn(\"rounded-md border\", className)}>\r\n <Table>\r\n <TableHeader>\r\n <TableRow>\r\n {headers\r\n ? headers.map((header, i) => (\r\n <TableHead key={i}>{header}</TableHead>\r\n ))\r\n : Array.from({ length: columnCount }).map((_, i) => (\r\n <TableHead key={i}>\r\n <Skeleton className=\"h-4 w-20\" />\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n <TableBody>\r\n {Array.from({ length: rows }).map((_, rowIndex) => (\r\n <TableRow key={rowIndex}>\r\n {Array.from({ length: columnCount }).map((_, colIndex) => (\r\n <TableCell key={colIndex}>\r\n <Skeleton className=\"h-4 w-full\" />\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON LIST\r\n// ============================================================================\r\n\r\nexport interface SkeletonListProps {\r\n /** Number of skeleton items */\r\n items?: number;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Show avatar placeholder */\r\n showAvatar?: boolean;\r\n /** Avatar shape */\r\n avatarShape?: \"circle\" | \"square\";\r\n}\r\n\r\n/**\r\n * SkeletonList - Compact skeleton for lists with avatars\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonList items={5} />\r\n * <SkeletonList items={3} showAvatar={false} />\r\n * ```\r\n */\r\nexport function SkeletonList({\r\n items = 3,\r\n className,\r\n showAvatar = true,\r\n avatarShape = \"circle\",\r\n}: SkeletonListProps) {\r\n return (\r\n <div className={cn(\"space-y-3\", className)}>\r\n {Array.from({ length: items }).map((_, i) => (\r\n <div key={i} className=\"flex items-center gap-3\">\r\n {showAvatar && (\r\n <Skeleton\r\n className={cn(\r\n \"h-10 w-10 flex-shrink-0\",\r\n avatarShape === \"circle\" ? \"rounded-full\" : \"rounded-md\"\r\n )}\r\n />\r\n )}\r\n <div className=\"flex-1 space-y-2\">\r\n <Skeleton className=\"h-4 w-full\" />\r\n <Skeleton className=\"h-3 w-3/4\" />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON CARD\r\n// ============================================================================\r\n\r\nexport interface SkeletonCardProps {\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Show action buttons placeholder */\r\n showActions?: boolean;\r\n /** Number of text lines */\r\n lines?: number;\r\n}\r\n\r\n/**\r\n * SkeletonCard - Card skeleton for grid layouts\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonCard />\r\n * <SkeletonCard showActions={false} lines={2} />\r\n * ```\r\n */\r\nexport function SkeletonCard({\r\n className,\r\n showActions = true,\r\n lines = 3,\r\n}: SkeletonCardProps) {\r\n return (\r\n <div className={cn(\"rounded-lg border p-4 space-y-3\", className)}>\r\n <Skeleton className=\"h-5 w-3/4\" />\r\n {Array.from({ length: lines - 1 }).map((_, i) => (\r\n <Skeleton\r\n key={i}\r\n className={cn(\"h-4\", i === lines - 2 ? \"w-5/6\" : \"w-full\")}\r\n />\r\n ))}\r\n {showActions && (\r\n <div className=\"flex gap-2 pt-2\">\r\n <Skeleton className=\"h-8 w-20\" />\r\n <Skeleton className=\"h-8 w-20\" />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================================================\r\n// SKELETON GRID\r\n// ============================================================================\r\n\r\nexport interface SkeletonGridProps {\r\n /** Number of skeleton cards */\r\n cards?: number;\r\n /** Grid columns configuration */\r\n columns?: 1 | 2 | 3 | 4;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Props passed to each SkeletonCard */\r\n cardProps?: Omit<SkeletonCardProps, \"className\">;\r\n}\r\n\r\n/**\r\n * SkeletonGrid - Grid of skeleton cards\r\n *\r\n * @example\r\n * ```tsx\r\n * <SkeletonGrid cards={6} columns={3} />\r\n * ```\r\n */\r\nexport function SkeletonGrid({\r\n cards = 6,\r\n columns = 3,\r\n className,\r\n cardProps,\r\n}: SkeletonGridProps) {\r\n const gridCols = {\r\n 1: \"grid-cols-1\",\r\n 2: \"grid-cols-1 sm:grid-cols-2\",\r\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\r\n };\r\n\r\n return (\r\n <div className={cn(\"grid gap-4\", gridCols[columns], className)}>\r\n {Array.from({ length: cards }).map((_, i) => (\r\n <SkeletonCard key={i} {...cardProps} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { LoaderIcon } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ClientSubmitButtonProps {\r\n children: ReactNode;\r\n disabled?: boolean;\r\n loading?: boolean;\r\n loadingText?: string;\r\n className?: string;\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n form?: string;\r\n}\r\n\r\nexport function ClientSubmitButton({\r\n children,\r\n disabled,\r\n loading = false,\r\n loadingText,\r\n className,\r\n variant,\r\n size,\r\n form,\r\n ...props\r\n}: ClientSubmitButtonProps) {\r\n const isDisabled = loading || disabled;\r\n const content = loading && loadingText ? loadingText : children;\r\n\r\n return (\r\n <Button\r\n type=\"submit\"\r\n form={form}\r\n aria-disabled={isDisabled}\r\n aria-busy={loading}\r\n className={cn(\"relative\", className)}\r\n disabled={isDisabled}\r\n variant={variant}\r\n size={size}\r\n {...props}\r\n >\r\n {content}\r\n {loading && (\r\n <span className=\"animate-spin absolute right-4\">\r\n <LoaderIcon />\r\n </span>\r\n )}\r\n <span aria-live=\"polite\" className=\"sr-only\" role=\"status\">\r\n {loading ? \"Loading\" : \"Submit form\"}\r\n </span>\r\n </Button>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode, isValidElement, cloneElement, ReactElement } from \"react\";\r\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\r\nimport {\r\n Collapsible,\r\n CollapsibleContent,\r\n CollapsibleTrigger,\r\n} from \"@/components/ui/collapsible\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface CollapsibleWrapperProps {\r\n children: ReactNode;\r\n trigger: ReactNode;\r\n defaultOpen?: boolean;\r\n open?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n /** @deprecated Use render prop pattern with trigger element instead */\r\n triggerAsChild?: boolean;\r\n triggerVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n triggerSize?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n className?: string;\r\n showChevron?: boolean;\r\n chevronPosition?: \"left\" | \"right\";\r\n disabled?: boolean;\r\n}\r\n\r\nexport function CollapsibleWrapper({\r\n children,\r\n trigger,\r\n defaultOpen = false,\r\n open,\r\n onOpenChange,\r\n triggerAsChild = false,\r\n triggerVariant = \"outline\",\r\n triggerSize = \"sm\",\r\n triggerClassName,\r\n contentClassName,\r\n className,\r\n showChevron = true,\r\n chevronPosition = \"right\",\r\n disabled = false,\r\n ...props\r\n}: CollapsibleWrapperProps) {\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n\r\n const isOpen = open !== undefined ? open : internalOpen;\r\n const handleOpenChange = onOpenChange || setInternalOpen;\r\n\r\n const chevronElement = showChevron && (\r\n <div\r\n className={cn(\r\n \"flex items-center\",\r\n chevronPosition === \"left\" && \"order-first mr-2\",\r\n chevronPosition === \"right\" && \"ml-2\"\r\n )}\r\n >\r\n {isOpen ? (\r\n <ChevronUp className=\"h-4 w-4\" />\r\n ) : (\r\n <ChevronDown className=\"h-4 w-4\" />\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <Collapsible\r\n open={isOpen}\r\n onOpenChange={handleOpenChange}\r\n disabled={disabled}\r\n className={cn(\"w-full\", className)}\r\n {...props}\r\n >\r\n {triggerAsChild && isValidElement(trigger) ? (\r\n <CollapsibleTrigger render={trigger as ReactElement} />\r\n ) : (\r\n <CollapsibleTrigger\r\n render={\r\n <Button\r\n variant={triggerVariant}\r\n size={triggerSize}\r\n disabled={disabled}\r\n className={cn(\"justify-between\", triggerClassName)}\r\n />\r\n }\r\n >\r\n {trigger}\r\n {chevronElement}\r\n </CollapsibleTrigger>\r\n )}\r\n\r\n <CollapsibleContent className={cn(\"mt-2\", contentClassName)}>\r\n {children}\r\n </CollapsibleContent>\r\n </Collapsible>\r\n );\r\n}\r\n\r\nexport interface CollapsibleCardProps {\r\n title: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function CollapsibleCard({\r\n title,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapsibleCardProps) {\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n return (\r\n <Collapsible\r\n open={isOpen}\r\n onOpenChange={setIsOpen}\r\n className={cn(\"border rounded-lg overflow-hidden\", className)}\r\n {...props}\r\n >\r\n <CollapsibleTrigger\r\n render={\r\n <div\r\n className={cn(\r\n \"flex items-center justify-between w-full px-4 py-3 cursor-pointer transition-colors hover:bg-secondary/5\",\r\n headerClassName\r\n )}\r\n />\r\n }\r\n >\r\n <span className=\"font-medium\">{title}</span>\r\n <ChevronDown\r\n className={cn(\r\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n />\r\n </CollapsibleTrigger>\r\n <CollapsibleContent>\r\n <div className={cn(\"px-4 py-3 border-t\", contentClassName)}>\r\n {children}\r\n </div>\r\n </CollapsibleContent>\r\n </Collapsible>\r\n );\r\n}\r\n\r\nexport interface CollapsibleSectionProps {\r\n label: ReactNode;\r\n children: ReactNode;\r\n defaultOpen?: boolean;\r\n className?: string;\r\n labelClassName?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function CollapsibleSection({\r\n label,\r\n children,\r\n defaultOpen = false,\r\n className,\r\n labelClassName,\r\n contentClassName,\r\n ...props\r\n}: CollapsibleSectionProps) {\r\n return (\r\n <CollapsibleWrapper\r\n trigger={label}\r\n defaultOpen={defaultOpen}\r\n triggerVariant=\"ghost\"\r\n triggerSize=\"sm\"\r\n triggerClassName={cn(\"h-8 px-2 font-medium justify-between\", labelClassName)}\r\n contentClassName={cn(\"pl-4 mt-1\", contentClassName)}\r\n className={cn(\"space-y-1\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </CollapsibleWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { ReactNode } from \"react\";\r\nimport { AlertTriangle, Loader2 } from \"lucide-react\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogAction,\r\n AlertDialogCancel,\r\n AlertDialogContent,\r\n AlertDialogDescription,\r\n AlertDialogFooter,\r\n AlertDialogHeader,\r\n AlertDialogTitle,\r\n AlertDialogTrigger,\r\n} from \"@/components/ui/alert-dialog\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ConfirmDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n /** Trigger element that opens the dialog */\r\n trigger?: React.ReactElement;\r\n title?: string;\r\n description?: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n isLoading?: boolean;\r\n onConfirm?: () => void;\r\n onCancel?: () => void;\r\n icon?: ReactNode;\r\n children?: ReactNode;\r\n className?: string;\r\n /** Header className */\r\n headerClassName?: string;\r\n /** Description className */\r\n descriptionClassName?: string;\r\n /** Footer className */\r\n footerClassName?: string;\r\n /** Whether to show the cancel button (default: true) */\r\n showCancel?: boolean;\r\n}\r\n\r\nexport function ConfirmDialog({\r\n open,\r\n onOpenChange,\r\n trigger,\r\n title = \"Are you sure?\",\r\n description = \"This action cannot be undone.\",\r\n confirmText = \"Confirm\",\r\n cancelText = \"Cancel\",\r\n variant = \"destructive\",\r\n isLoading = false,\r\n onConfirm,\r\n onCancel,\r\n icon,\r\n children,\r\n className,\r\n headerClassName,\r\n descriptionClassName,\r\n footerClassName,\r\n showCancel = true,\r\n ...props\r\n}: ConfirmDialogProps) {\r\n const handleConfirm = () => {\r\n if (onConfirm) {\r\n onConfirm();\r\n }\r\n };\r\n\r\n const handleCancel = () => {\r\n if (onCancel) {\r\n onCancel();\r\n } else {\r\n onOpenChange(false);\r\n }\r\n };\r\n\r\n // Extract children and element for Base UI render prop pattern\r\n const triggerChildren = (trigger?.props as { children?: ReactNode })?.children;\r\n const triggerElement = trigger\r\n ? React.cloneElement(trigger, { children: undefined } as Record<string, unknown>)\r\n : null;\r\n\r\n return (\r\n <AlertDialog open={open} onOpenChange={onOpenChange} {...props}>\r\n {triggerElement && (\r\n <AlertDialogTrigger render={triggerElement}>\r\n {triggerChildren}\r\n </AlertDialogTrigger>\r\n )}\r\n <AlertDialogContent className={cn(\"max-w-md\", className)}>\r\n <AlertDialogHeader className={cn(headerClassName)}>\r\n <AlertDialogTitle className=\"flex items-center gap-2\">\r\n {icon ||\r\n (variant === \"destructive\" && (\r\n <AlertTriangle className=\"h-5 w-5 text-destructive\" />\r\n ))}\r\n {title}\r\n </AlertDialogTitle>\r\n {description && (\r\n <AlertDialogDescription className={cn(descriptionClassName)}>\r\n {description}\r\n </AlertDialogDescription>\r\n )}\r\n </AlertDialogHeader>\r\n\r\n {children && <div className=\"py-4\">{children}</div>}\r\n\r\n <AlertDialogFooter className={cn(footerClassName)}>\r\n {showCancel && (\r\n <AlertDialogCancel onClick={handleCancel} disabled={isLoading}>\r\n {cancelText}\r\n </AlertDialogCancel>\r\n )}\r\n {onConfirm && (\r\n <AlertDialogAction\r\n onClick={handleConfirm}\r\n disabled={isLoading}\r\n variant={variant}\r\n >\r\n {isLoading ? (\r\n <div className=\"flex items-center gap-2\">\r\n <Loader2 className=\"h-4 w-4 animate-spin\" />\r\n Loading...\r\n </div>\r\n ) : (\r\n confirmText\r\n )}\r\n </AlertDialogAction>\r\n )}\r\n </AlertDialogFooter>\r\n </AlertDialogContent>\r\n </AlertDialog>\r\n );\r\n}\r\n\r\n// Specialized delete confirmation dialog\r\nexport interface DeleteConfirmDialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n onConfirm?: () => void;\r\n isLoading?: boolean;\r\n itemName?: string;\r\n itemDetails?: ReactNode;\r\n}\r\n\r\nexport function DeleteConfirmDialog({\r\n open,\r\n onOpenChange,\r\n onConfirm,\r\n isLoading = false,\r\n itemName = \"item\",\r\n itemDetails,\r\n ...props\r\n}: DeleteConfirmDialogProps) {\r\n return (\r\n <ConfirmDialog\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title=\"Delete Item\"\r\n description={`Are you sure you want to delete this ${itemName}? This action cannot be undone.`}\r\n confirmText=\"Yes, Delete\"\r\n cancelText=\"No\"\r\n variant=\"destructive\"\r\n isLoading={isLoading}\r\n onConfirm={onConfirm}\r\n {...props}\r\n >\r\n {itemDetails && (\r\n <div className=\"bg-muted/50 p-3 rounded-md\">\r\n <div className=\"text-sm space-y-1\">{itemDetails}</div>\r\n </div>\r\n )}\r\n </ConfirmDialog>\r\n );\r\n}\r\n\r\n// Info/Warning alert (no cancel button)\r\nexport interface InfoAlertProps extends Omit<ConfirmDialogProps, \"showCancel\" | \"variant\"> {\r\n confirmText?: string;\r\n}\r\n\r\n/**\r\n * InfoAlert - Information/warning alert with only confirm button (no cancel)\r\n *\r\n * @example\r\n * ```tsx\r\n * <InfoAlert\r\n * open={open}\r\n * onOpenChange={setOpen}\r\n * title=\"Session expired\"\r\n * description=\"Please log in again\"\r\n * confirmText=\"OK\"\r\n * onConfirm={() => setOpen(false)}\r\n * />\r\n * ```\r\n */\r\nexport function InfoAlert({\r\n title,\r\n description,\r\n confirmText = \"OK\",\r\n onConfirm,\r\n onOpenChange,\r\n ...props\r\n}: InfoAlertProps) {\r\n return (\r\n <ConfirmDialog\r\n title={title}\r\n description={description}\r\n confirmText={confirmText}\r\n variant=\"default\"\r\n showCancel={false}\r\n onConfirm={onConfirm || (() => onOpenChange(false))}\r\n onOpenChange={onOpenChange}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { AlertCircle, RefreshCw } from \"lucide-react\";\r\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface ErrorStateProps {\r\n /** Error title */\r\n title?: string;\r\n /** Error message or Error object */\r\n error: string | Error | { message?: string } | null | undefined;\r\n /** Optional retry callback */\r\n onRetry?: () => void;\r\n /** Alert variant */\r\n variant?: \"default\" | \"destructive\";\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom icon */\r\n icon?: ReactNode;\r\n}\r\n\r\n/**\r\n * ErrorState Component\r\n *\r\n * Reusable error display component with retry functionality\r\n * Used for consistent error handling across pages\r\n */\r\nexport function ErrorState({\r\n title = \"Error\",\r\n error,\r\n onRetry,\r\n variant = \"destructive\",\r\n className,\r\n icon,\r\n}: ErrorStateProps) {\r\n const errorMessage =\r\n typeof error === \"string\"\r\n ? error\r\n : (error as { message?: string })?.message || \"Something went wrong. Please try again.\";\r\n\r\n return (\r\n <Alert variant={variant} className={cn(className)}>\r\n {icon || <AlertCircle className=\"h-4 w-4\" />}\r\n <AlertTitle>{title}</AlertTitle>\r\n <AlertDescription className=\"mt-2 flex flex-col gap-3\">\r\n <p className=\"text-sm\">{errorMessage}</p>\r\n {onRetry && (\r\n <div>\r\n <Button\r\n onClick={onRetry}\r\n variant=\"outline\"\r\n size=\"sm\"\r\n className=\"gap-2\"\r\n >\r\n <RefreshCw className=\"h-3 w-3\" />\r\n Try Again\r\n </Button>\r\n </div>\r\n )}\r\n </AlertDescription>\r\n </Alert>\r\n );\r\n}\r\n\r\nexport interface ErrorStateInlineProps {\r\n /** Error message or Error object */\r\n error: string | Error | { message?: string } | null | undefined;\r\n /** Optional retry callback */\r\n onRetry?: () => void;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom icon */\r\n icon?: ReactNode;\r\n}\r\n\r\n/**\r\n * Inline ErrorState variant - more compact for table cells\r\n */\r\nexport function ErrorStateInline({\r\n error,\r\n onRetry,\r\n className,\r\n icon,\r\n}: ErrorStateInlineProps) {\r\n const errorMessage =\r\n typeof error === \"string\"\r\n ? error\r\n : (error as { message?: string })?.message || \"Error loading data\";\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center gap-2 text-sm text-destructive\",\r\n className\r\n )}\r\n >\r\n {icon || <AlertCircle className=\"h-4 w-4\" />}\r\n <span>{errorMessage}</span>\r\n {onRetry && (\r\n <Button\r\n onClick={onRetry}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-6 px-2 gap-1\"\r\n >\r\n <RefreshCw className=\"h-3 w-3\" />\r\n Retry\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { Copy, Check } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Simple clipboard utility\r\nasync function copyToClipboard(\r\n text: string,\r\n options?: { showToast?: boolean; successMessage?: string; errorMessage?: string }\r\n): Promise<boolean> {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface CopyButtonProps {\r\n value: string;\r\n className?: string;\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n variant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n showToast?: boolean;\r\n toastMessage?: string;\r\n errorMessage?: string;\r\n timeout?: number;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function CopyButton({\r\n value,\r\n className,\r\n size = \"sm\",\r\n variant = \"ghost\",\r\n showToast = true,\r\n toastMessage = \"Copied to clipboard\",\r\n errorMessage = \"Failed to copy to clipboard\",\r\n timeout = 2000,\r\n children,\r\n ...props\r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n if (!value) return;\r\n\r\n const success = await copyToClipboard(value, {\r\n showToast,\r\n successMessage: toastMessage,\r\n errorMessage,\r\n });\r\n\r\n if (success) {\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), timeout);\r\n }\r\n };\r\n\r\n return (\r\n <Button\r\n variant={variant}\r\n size={size}\r\n className={cn(\"h-6 w-6 p-0\", className)}\r\n onClick={handleCopy}\r\n disabled={!value}\r\n {...props}\r\n >\r\n {children ||\r\n (copied ? (\r\n <Check className=\"h-3 w-3 text-green-600\" />\r\n ) : (\r\n <Copy className=\"h-3 w-3\" />\r\n ))}\r\n </Button>\r\n );\r\n}\r\n\r\nexport interface CopyTextProps {\r\n value: string;\r\n displayValue?: string;\r\n className?: string;\r\n textClassName?: string;\r\n buttonClassName?: string;\r\n maxLength?: number;\r\n showButton?: boolean;\r\n}\r\n\r\nexport function CopyText({\r\n value,\r\n displayValue,\r\n className,\r\n textClassName,\r\n buttonClassName,\r\n maxLength = 30,\r\n showButton = true,\r\n ...buttonProps\r\n}: CopyTextProps) {\r\n const truncatedValue =\r\n displayValue ||\r\n (value && value.length > maxLength\r\n ? `${value.substring(0, maxLength)}...`\r\n : value || \"N/A\");\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n <span className={cn(\"font-medium\", textClassName)} title={value || \"N/A\"}>\r\n {truncatedValue}\r\n </span>\r\n {showButton && value && (\r\n <CopyButton value={value} className={buttonClassName} {...buttonProps} />\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CopyCodeBlockProps {\r\n value: string;\r\n className?: string;\r\n language?: string;\r\n showLineNumbers?: boolean;\r\n}\r\n\r\nexport function CopyCodeBlock({\r\n value,\r\n className,\r\n language,\r\n showLineNumbers = false,\r\n ...buttonProps\r\n}: CopyCodeBlockProps) {\r\n return (\r\n <div className={cn(\"relative group\", className)}>\r\n <pre className=\"bg-muted p-4 rounded-md overflow-x-auto text-sm\">\r\n <code className={language ? `language-${language}` : \"\"}>{value}</code>\r\n </pre>\r\n <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <CopyButton value={value} variant=\"secondary\" size=\"sm\" {...buttonProps} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport {\r\n ColumnDef,\r\n flexRender,\r\n getCoreRowModel,\r\n getSortedRowModel,\r\n SortingState,\r\n useReactTable,\r\n RowSelectionState,\r\n} from \"@tanstack/react-table\";\r\nimport { useState, useRef, useEffect, useCallback, useMemo, RefObject } from \"react\";\r\nimport { ArrowUpDown, ArrowUp, ArrowDown, ChevronLeft, ChevronRight, Search } from \"lucide-react\";\r\nimport { useScrollDetection } from \"../hooks/use-scroll-detection\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { ScrollArea, ScrollBar } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\nimport { ApiPagination, ApiPaginationData } from \"./api-pagination\";\r\n\r\n// Scroll detection hook moved to hooks/use-scroll-detection.ts\r\n\r\ninterface ScrollButtonProps {\r\n direction: \"left\" | \"right\";\r\n onClick: () => void;\r\n visible: boolean;\r\n className?: string;\r\n}\r\n\r\nconst ScrollButton = ({ direction, onClick, visible, className }: ScrollButtonProps) => {\r\n if (!visible) return null;\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n onClick();\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n \"absolute top-1/2 -translate-y-1/2 z-50\",\r\n \"flex items-center justify-center\",\r\n \"size-10 rounded-md shadow-lg border-2 border-border\",\r\n \"bg-background hover:bg-muted\",\r\n \"transition-transform duration-200\",\r\n \"hover:scale-105 active:scale-95\",\r\n direction === \"left\" ? \"left-2\" : \"right-2\",\r\n className\r\n )}\r\n onClick={handleClick}\r\n onMouseDown={(e) => e.stopPropagation()}\r\n aria-label={`Scroll ${direction}`}\r\n >\r\n {direction === \"left\" ? (\r\n <ChevronLeft className=\"size-5\" />\r\n ) : (\r\n <ChevronRight className=\"size-5\" />\r\n )}\r\n </button>\r\n );\r\n};\r\n\r\nexport interface DataTablePaginationProps extends Partial<ApiPaginationData> {\r\n onPageChange?: (page: number) => void;\r\n}\r\n\r\nexport interface DataTableProps<TData, TValue> {\r\n columns: ColumnDef<TData, TValue>[];\r\n data: TData[];\r\n isLoading?: boolean;\r\n pagination?: DataTablePaginationProps;\r\n enableSorting?: boolean;\r\n enableRowSelection?: boolean;\r\n onRowSelectionChange?: (selectedRows: TData[]) => void;\r\n className?: string;\r\n}\r\n\r\nexport function DataTable<TData, TValue>({\r\n columns,\r\n data,\r\n isLoading = false,\r\n pagination,\r\n enableSorting = false,\r\n enableRowSelection = false,\r\n onRowSelectionChange,\r\n className,\r\n}: DataTableProps<TData, TValue>) {\r\n const [sorting, setSorting] = useState<SortingState>([]);\r\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\r\n const scrollAreaRef = useRef<HTMLDivElement>(null);\r\n const { canScrollLeft, canScrollRight, isScrollable, checkScroll } =\r\n useScrollDetection(scrollAreaRef);\r\n\r\n const {\r\n total = 0,\r\n limit = 10,\r\n pages = 1,\r\n page = 1,\r\n hasNext = false,\r\n hasPrev = false,\r\n onPageChange = () => {},\r\n } = pagination ?? {};\r\n\r\n const table = useReactTable({\r\n data,\r\n columns,\r\n getCoreRowModel: getCoreRowModel(),\r\n getSortedRowModel: enableSorting ? getSortedRowModel() : undefined,\r\n onSortingChange: setSorting,\r\n onRowSelectionChange: enableRowSelection\r\n ? (updater) => {\r\n setRowSelection(updater);\r\n if (onRowSelectionChange) {\r\n const newSelection =\r\n typeof updater === \"function\" ? updater(rowSelection) : updater;\r\n const selectedRows = data.filter((_, index) => newSelection[index]);\r\n onRowSelectionChange(selectedRows);\r\n }\r\n }\r\n : undefined,\r\n state: {\r\n sorting,\r\n rowSelection: enableRowSelection ? rowSelection : undefined,\r\n },\r\n enableRowSelection,\r\n });\r\n\r\n const scrollHorizontally = useCallback((direction: \"left\" | \"right\") => {\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n const scrollAmount = Math.min(300, scrollContainer.clientWidth * 0.8);\r\n scrollContainer.scrollBy({\r\n left: direction === \"left\" ? -scrollAmount : scrollAmount,\r\n behavior: \"smooth\",\r\n });\r\n }, []);\r\n\r\n const handleWheel = useCallback(\r\n (e: WheelEvent) => {\r\n if (!isScrollable) return;\r\n\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer?.contains(e.target as Node)) return;\r\n\r\n if (e.shiftKey || Math.abs(e.deltaX) > Math.abs(e.deltaY)) {\r\n e.preventDefault();\r\n const delta = e.deltaY || e.deltaX;\r\n scrollContainer.scrollBy({\r\n left: delta,\r\n behavior: \"auto\",\r\n });\r\n }\r\n },\r\n [isScrollable]\r\n );\r\n\r\n useEffect(() => {\r\n const scrollContainer = scrollAreaRef.current?.querySelector(\r\n '[data-slot=\"scroll-area-viewport\"]'\r\n ) as HTMLElement | null;\r\n if (!scrollContainer) return;\r\n\r\n checkScroll();\r\n\r\n scrollContainer.addEventListener(\"scroll\", checkScroll, { passive: true });\r\n scrollContainer.addEventListener(\"wheel\", handleWheel, { passive: false });\r\n\r\n return () => {\r\n scrollContainer.removeEventListener(\"scroll\", checkScroll);\r\n scrollContainer.removeEventListener(\"wheel\", handleWheel);\r\n };\r\n }, [checkScroll, handleWheel]);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(checkScroll, 150);\r\n return () => clearTimeout(timer);\r\n }, [data, checkScroll]);\r\n\r\n const loadingState = useMemo(\r\n () => (\r\n <div className=\"w-full h-full min-h-[24rem] flex items-center justify-center bg-background/50 rounded-lg border border-border\">\r\n <div className=\"flex flex-col items-center gap-3\">\r\n <div className=\"animate-spin rounded-full h-8 w-8 border-2 border-primary border-t-transparent\" />\r\n <p className=\"text-sm text-muted-foreground\">Loading data...</p>\r\n </div>\r\n </div>\r\n ),\r\n []\r\n );\r\n\r\n const emptyState = useMemo(\r\n () => (\r\n <TableRow>\r\n <TableCell colSpan={columns.length} className=\"h-32 text-center\">\r\n <div className=\"flex flex-col items-center justify-center py-8\">\r\n <div className=\"rounded-full bg-muted p-3 mb-4\">\r\n <Search className=\"h-6 w-6 text-muted-foreground\" />\r\n </div>\r\n <p className=\"text-lg font-medium text-foreground mb-1\">No results found</p>\r\n <p className=\"text-sm text-muted-foreground\">\r\n Try adjusting your search or filters\r\n </p>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ),\r\n [columns.length]\r\n );\r\n\r\n if (isLoading) {\r\n return loadingState;\r\n }\r\n\r\n return (\r\n <div className={cn(\"flex flex-col h-full gap-4\", className)}>\r\n <div className=\"flex-1 min-h-0 rounded-lg border overflow-hidden bg-background shadow-sm relative\">\r\n <ScrollArea ref={scrollAreaRef} className=\"h-full w-full\">\r\n <div className=\"min-w-full\">\r\n <Table>\r\n <TableHeader className=\"sticky top-0 z-10 bg-muted/50 backdrop-blur-sm\">\r\n {table.getHeaderGroups().map((headerGroup) => (\r\n <TableRow\r\n key={headerGroup.id}\r\n className=\"border-b border-border hover:bg-transparent\"\r\n >\r\n {headerGroup.headers.map((header) => (\r\n <TableHead\r\n key={header.id}\r\n className={cn(\r\n \"bg-muted/50 font-semibold text-foreground h-12 px-4 whitespace-nowrap\",\r\n \"first:rounded-tl-lg last:rounded-tr-lg\"\r\n )}\r\n >\r\n {header.isPlaceholder ? null : enableSorting &&\r\n header.column.getCanSort() ? (\r\n <Button\r\n variant=\"ghost\"\r\n onClick={() =>\r\n header.column.toggleSorting(\r\n header.column.getIsSorted() === \"asc\"\r\n )\r\n }\r\n className=\"h-auto p-0 font-semibold hover:bg-transparent whitespace-nowrap\"\r\n >\r\n {flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )}\r\n {header.column.getIsSorted() === \"asc\" ? (\r\n <ArrowUp className=\"ml-2 h-4 w-4\" />\r\n ) : header.column.getIsSorted() === \"desc\" ? (\r\n <ArrowDown className=\"ml-2 h-4 w-4\" />\r\n ) : (\r\n <ArrowUpDown className=\"ml-2 h-4 w-4 opacity-50\" />\r\n )}\r\n </Button>\r\n ) : (\r\n flexRender(\r\n header.column.columnDef.header,\r\n header.getContext()\r\n )\r\n )}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n ))}\r\n </TableHeader>\r\n\r\n <TableBody>\r\n {table.getRowModel().rows?.length ? (\r\n table.getRowModel().rows.map((row, index) => (\r\n <TableRow\r\n key={row.id}\r\n className={cn(\r\n \"hover:bg-muted/50 transition-colors border-b border-border/50\",\r\n index % 2 === 0 ? \"bg-background\" : \"bg-muted/20\"\r\n )}\r\n >\r\n {row.getVisibleCells().map((cell) => (\r\n <TableCell\r\n key={cell.id}\r\n className=\"px-4 py-3 text-sm whitespace-nowrap\"\r\n >\r\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n ))\r\n ) : (\r\n emptyState\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n <ScrollBar orientation=\"horizontal\" />\r\n </ScrollArea>\r\n\r\n {/* Scroll navigation buttons */}\r\n {canScrollLeft && (\r\n <ScrollButton\r\n direction=\"left\"\r\n onClick={() => scrollHorizontally(\"left\")}\r\n visible={true}\r\n />\r\n )}\r\n {canScrollRight && (\r\n <ScrollButton\r\n direction=\"right\"\r\n onClick={() => scrollHorizontally(\"right\")}\r\n visible={true}\r\n />\r\n )}\r\n </div>\r\n\r\n {pagination && (\r\n <ApiPagination\r\n total={total}\r\n limit={limit}\r\n pages={pages}\r\n page={page}\r\n hasNext={hasNext}\r\n hasPrev={hasPrev}\r\n onPageChange={onPageChange}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { type ReactNode } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogFooter,\r\n DialogTrigger,\r\n} from \"@/components/ui/dialog\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Size variants configuration\r\n// Using !important to override base dialog.tsx sm:max-w-md constraint\r\nconst SIZE_VARIANTS = {\r\n sm: \"sm:!max-w-sm\",\r\n default: \"sm:!max-w-md\",\r\n lg: \"sm:!max-w-lg md:!max-w-2xl\",\r\n xl: \"sm:!max-w-2xl md:!max-w-4xl\",\r\n \"2xl\": \"sm:!max-w-4xl md:!max-w-6xl\",\r\n full: \"!max-w-[95vw] !h-[95vh]\",\r\n} as const;\r\n\r\ntype SizeVariant = keyof typeof SIZE_VARIANTS;\r\n\r\nexport interface DialogWrapperProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n trigger?: ReactNode;\r\n size?: SizeVariant;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n hideHeader?: boolean;\r\n hideTitle?: boolean;\r\n hideDescription?: boolean;\r\n hideCloseButton?: boolean;\r\n}\r\n\r\nexport function DialogWrapper({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n footer,\r\n trigger,\r\n size = \"default\",\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n hideHeader = false,\r\n hideTitle = false,\r\n hideDescription = false,\r\n hideCloseButton = false,\r\n ...props\r\n}: DialogWrapperProps) {\r\n return (\r\n <Dialog open={open} onOpenChange={onOpenChange} {...props}>\r\n {trigger && <DialogTrigger render={trigger} />}\r\n <DialogContent\r\n showCloseButton={!hideCloseButton}\r\n className={cn(SIZE_VARIANTS[size], contentClassName, className)}\r\n >\r\n {!hideHeader && (\r\n <DialogHeader className={cn(\"space-y-2\", headerClassName)}>\r\n {hideTitle ? (\r\n <DialogTitle className=\"sr-only\">{title || \"Dialog\"}</DialogTitle>\r\n ) : (\r\n <DialogTitle>{title || \"Dialog\"}</DialogTitle>\r\n )}\r\n {description &&\r\n (hideDescription ? (\r\n <DialogDescription className=\"sr-only\">\r\n {description}\r\n </DialogDescription>\r\n ) : (\r\n <DialogDescription>{description}</DialogDescription>\r\n ))}\r\n </DialogHeader>\r\n )}\r\n\r\n {children}\r\n\r\n {footer && (\r\n <DialogFooter className={cn(\"gap-2\", footerClassName)}>\r\n {footer}\r\n </DialogFooter>\r\n )}\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport interface FormDialogProps extends Omit<DialogWrapperProps, \"footer\"> {\r\n onSubmit?: () => void;\r\n onCancel?: () => void;\r\n submitText?: string;\r\n cancelText?: string;\r\n isLoading?: boolean;\r\n submitDisabled?: boolean;\r\n}\r\n\r\nexport function FormDialog({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n onSubmit,\r\n onCancel,\r\n submitText = \"Save\",\r\n cancelText = \"Cancel\",\r\n isLoading = false,\r\n submitDisabled = false,\r\n ...props\r\n}: FormDialogProps) {\r\n const footer = (\r\n <>\r\n <Button\r\n variant=\"outline\"\r\n onClick={onCancel || (() => onOpenChange(false))}\r\n disabled={isLoading}\r\n >\r\n {cancelText}\r\n </Button>\r\n <Button onClick={onSubmit} disabled={isLoading || submitDisabled}>\r\n {isLoading ? \"Loading...\" : submitText}\r\n </Button>\r\n </>\r\n );\r\n\r\n return (\r\n <DialogWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </DialogWrapper>\r\n );\r\n}\r\n\r\n// Export base components for composition\r\nexport {\r\n Dialog,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogTitle,\r\n DialogDescription,\r\n DialogFooter,\r\n};\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { MoreHorizontal, ChevronDown, LucideIcon } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuTrigger,\r\n DropdownMenuSeparator,\r\n DropdownMenuLabel,\r\n DropdownMenuGroup,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n} from \"@/components/ui/dropdown-menu\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface DropdownWrapperProps {\r\n trigger: React.ReactNode;\r\n children: React.ReactNode;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n sideOffset?: number;\r\n className?: string;\r\n contentClassName?: string;\r\n}\r\n\r\nexport function DropdownWrapper({\r\n trigger,\r\n children,\r\n align = \"end\",\r\n side = \"bottom\",\r\n sideOffset = 4,\r\n className,\r\n contentClassName,\r\n ...props\r\n}: DropdownWrapperProps) {\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align={align}\r\n side={side}\r\n sideOffset={sideOffset}\r\n className={cn(\"min-w-[160px]\", contentClassName)}\r\n >\r\n {children}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface ActionDropdownItem {\r\n type?: \"item\" | \"separator\" | \"label\" | \"group\";\r\n key?: string;\r\n label?: string | (() => string);\r\n icon?: LucideIcon;\r\n onClick?: (e: React.MouseEvent) => void;\r\n disabled?: boolean;\r\n hidden?: boolean;\r\n variant?: \"default\" | \"destructive\";\r\n shortcut?: string;\r\n className?: string;\r\n items?: ActionDropdownItem[];\r\n}\r\n\r\nexport interface ActionDropdownProps {\r\n items?: ActionDropdownItem[];\r\n triggerIcon?: LucideIcon;\r\n triggerVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n triggerSize?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n triggerClassName?: string;\r\n triggerLabel?: string;\r\n showOnHover?: boolean;\r\n align?: \"start\" | \"center\" | \"end\";\r\n contentClassName?: string;\r\n onOpenChange?: (open: boolean) => void;\r\n stopPropagation?: boolean;\r\n}\r\n\r\nexport function ActionDropdown({\r\n items = [],\r\n triggerIcon: TriggerIcon = MoreHorizontal,\r\n triggerVariant = \"ghost\",\r\n triggerSize = \"sm\",\r\n triggerClassName,\r\n triggerLabel,\r\n showOnHover = false,\r\n align = \"end\",\r\n contentClassName,\r\n onOpenChange,\r\n stopPropagation = true,\r\n ...props\r\n}: ActionDropdownProps) {\r\n const handleTriggerClick = (e: React.MouseEvent) => {\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n };\r\n\r\n const trigger = (\r\n <Button\r\n variant={triggerVariant}\r\n size={triggerSize}\r\n onClick={handleTriggerClick}\r\n className={cn(\r\n showOnHover && \"opacity-0 group-hover:opacity-100 transition-opacity\",\r\n triggerClassName\r\n )}\r\n >\r\n <TriggerIcon className=\"h-4 w-4\" />\r\n {triggerLabel && <span className=\"ml-2\">{triggerLabel}</span>}\r\n <span className=\"sr-only\">Open menu</span>\r\n </Button>\r\n );\r\n\r\n const handleItemClick = (item: ActionDropdownItem) => (e: React.MouseEvent) => {\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n item.onClick?.(e);\r\n };\r\n\r\n return (\r\n <DropdownMenu onOpenChange={onOpenChange} {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align={align}\r\n className={cn(\"min-w-[180px]\", contentClassName)}\r\n >\r\n {items.map((item, index) => {\r\n if (item.hidden) return null;\r\n\r\n if (item.type === \"separator\") {\r\n return <DropdownMenuSeparator key={item.key || `separator-${index}`} />;\r\n }\r\n\r\n if (item.type === \"label\") {\r\n return (\r\n <DropdownMenuGroup key={item.key || `label-${index}`}>\r\n <DropdownMenuLabel className={item.className}>\r\n {item.label}\r\n </DropdownMenuLabel>\r\n </DropdownMenuGroup>\r\n );\r\n }\r\n\r\n if (item.type === \"group\") {\r\n return (\r\n <DropdownMenuGroup key={item.key || `group-${index}`}>\r\n {item.items?.map((groupItem, groupIndex) => {\r\n if (groupItem.hidden) return null;\r\n\r\n const GroupItemIcon = groupItem.icon;\r\n const groupItemLabel =\r\n typeof groupItem.label === \"function\" ? groupItem.label() : groupItem.label;\r\n return (\r\n <DropdownMenuItem\r\n key={groupItem.key || `group-item-${groupIndex}`}\r\n onClick={handleItemClick(groupItem)}\r\n disabled={groupItem.disabled}\r\n className={cn(\r\n groupItem.variant === \"destructive\" &&\r\n \"text-destructive focus:text-destructive\",\r\n groupItem.className\r\n )}\r\n >\r\n {GroupItemIcon && <GroupItemIcon className=\"h-4 w-4\" />}\r\n <span>{groupItemLabel}</span>\r\n {groupItem.shortcut && (\r\n <span className=\"ml-auto text-xs tracking-widest text-muted-foreground\">\r\n {groupItem.shortcut}\r\n </span>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuGroup>\r\n );\r\n }\r\n\r\n const ItemIcon = item.icon;\r\n const displayLabel =\r\n typeof item.label === \"function\" ? item.label() : item.label;\r\n\r\n return (\r\n <DropdownMenuItem\r\n key={item.key || `item-${index}`}\r\n onClick={handleItemClick(item)}\r\n disabled={item.disabled}\r\n className={cn(\r\n item.variant === \"destructive\" &&\r\n \"text-destructive focus:text-destructive\",\r\n item.className\r\n )}\r\n >\r\n {ItemIcon && <ItemIcon className=\"h-4 w-4\" />}\r\n <span>{displayLabel}</span>\r\n {item.shortcut && (\r\n <span className=\"ml-auto text-xs tracking-widest text-muted-foreground\">\r\n {item.shortcut}\r\n </span>\r\n )}\r\n </DropdownMenuItem>\r\n );\r\n })}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface SelectDropdownOption {\r\n value: string;\r\n label: string;\r\n icon?: LucideIcon;\r\n}\r\n\r\nexport interface SelectDropdownProps {\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function SelectDropdown({\r\n value,\r\n onValueChange,\r\n placeholder = \"Select option...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: SelectDropdownProps) {\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n !selectedOption && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n {selectedOption ? selectedOption.label : placeholder}\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n {options.map((option) => (\r\n <DropdownMenuItem\r\n key={option.value}\r\n onClick={() => onValueChange?.(option.value)}\r\n className={cn(\"cursor-pointer\", value === option.value && \"bg-accent\")}\r\n >\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface CheckboxDropdownProps {\r\n values?: string[];\r\n onValuesChange?: (values: string[]) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n showSelectedCount?: boolean;\r\n}\r\n\r\nexport function CheckboxDropdown({\r\n values = [],\r\n onValuesChange,\r\n placeholder = \"Select options...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n showSelectedCount = true,\r\n ...props\r\n}: CheckboxDropdownProps) {\r\n const selectedOptions = options.filter((option) => values.includes(option.value));\r\n const displayText =\r\n selectedOptions.length > 0\r\n ? showSelectedCount\r\n ? `${selectedOptions.length} selected`\r\n : selectedOptions.map((opt) => opt.label).join(\", \")\r\n : placeholder;\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n selectedOptions.length === 0 && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n <span className=\"truncate\">{displayText}</span>\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n const handleCheckedChange = (optionValue: string, checked: boolean) => {\r\n if (checked) {\r\n onValuesChange?.([...values, optionValue]);\r\n } else {\r\n onValuesChange?.(values.filter((value) => value !== optionValue));\r\n }\r\n };\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n {options.map((option) => (\r\n <DropdownMenuCheckboxItem\r\n key={option.value}\r\n checked={values.includes(option.value)}\r\n onCheckedChange={(checked: boolean) => handleCheckedChange(option.value, checked)}\r\n >\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuCheckboxItem>\r\n ))}\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n\r\nexport interface RadioDropdownProps {\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n placeholder?: string;\r\n options?: SelectDropdownOption[];\r\n triggerClassName?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function RadioDropdown({\r\n value,\r\n onValueChange,\r\n placeholder = \"Select option...\",\r\n options = [],\r\n triggerClassName,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: RadioDropdownProps) {\r\n const selectedOption = options.find((option) => option.value === value);\r\n\r\n const trigger = (\r\n <Button\r\n variant=\"outline\"\r\n disabled={disabled}\r\n className={cn(\r\n \"w-full justify-between\",\r\n !selectedOption && \"text-muted-foreground\",\r\n triggerClassName\r\n )}\r\n >\r\n {selectedOption ? selectedOption.label : placeholder}\r\n <ChevronDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n );\r\n\r\n return (\r\n <DropdownMenu {...props}>\r\n <DropdownMenuTrigger render={trigger} />\r\n <DropdownMenuContent\r\n align=\"start\"\r\n className={cn(\r\n \"w-full min-w-(--anchor-width)\",\r\n contentClassName\r\n )}\r\n >\r\n <DropdownMenuRadioGroup value={value} onValueChange={onValueChange}>\r\n {options.map((option) => (\r\n <DropdownMenuRadioItem key={option.value} value={option.value}>\r\n {option.icon && <option.icon className=\"mr-2 h-4 w-4\" />}\r\n {option.label}\r\n </DropdownMenuRadioItem>\r\n ))}\r\n </DropdownMenuRadioGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { ComponentType, ReactNode } from \"react\";\r\nimport { LucideProps } from \"lucide-react\";\r\nimport { CopyText } from \"./copy-button\";\r\n\r\nexport interface InfoRowProps {\r\n label: string;\r\n value: ReactNode;\r\n copyable?: boolean;\r\n icon?: ComponentType<LucideProps>;\r\n}\r\n\r\nexport function InfoRow({ label, value, copyable = false, icon: Icon }: InfoRowProps) {\r\n if (!value && value !== 0) return null;\r\n\r\n return (\r\n <div className=\"flex flex-col sm:flex-row sm:justify-between sm:items-center py-3 gap-2 group hover:bg-muted rounded-md px-3 -mx-3 transition-colors\">\r\n <div className=\"flex items-center gap-2 min-w-0\">\r\n {Icon && <Icon className=\"h-4 w-4 text-muted-foreground flex-shrink-0\" />}\r\n <span className=\"text-sm font-medium text-muted-foreground truncate\">{label}</span>\r\n </div>\r\n <div className=\"sm:text-right min-w-0 flex-shrink-0\">\r\n {copyable ? (\r\n <CopyText\r\n value={String(value)}\r\n textClassName=\"text-foreground font-semibold\"\r\n maxLength={40}\r\n className=\"justify-start sm:justify-end\"\r\n />\r\n ) : (\r\n <span\r\n className=\"font-semibold text-foreground block truncate max-w-full sm:max-w-[250px]\"\r\n title={value?.toString() || \"N/A\"}\r\n >\r\n {value?.toString() || \"N/A\"}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { cva, VariantProps } from \"class-variance-authority\";\r\nimport { Item, ItemContent, ItemDescription } from \"@/components/ui/item\";\r\nimport { cn } from \"../utils\";\r\n\r\n/**\r\n * Item Component Helpers\r\n */\r\n\r\nconst iconItemMediaVariants = cva(\r\n \"rounded-xl flex items-center justify-center shrink-0\",\r\n {\r\n variants: {\r\n iconBg: {\r\n primary: \"bg-primary/10 text-primary\",\r\n gold: \"bg-primary/20 text-primary\",\r\n muted: \"bg-muted text-foreground\",\r\n gradient: \"bg-gradient-to-br from-primary/20 to-primary/10 text-primary\",\r\n none: \"bg-transparent\",\r\n },\r\n iconSize: {\r\n sm: \"size-8\",\r\n md: \"size-10 md:size-12\",\r\n lg: \"size-12 md:size-14\",\r\n xl: \"size-16 md:size-20\",\r\n },\r\n },\r\n defaultVariants: {\r\n iconBg: \"primary\",\r\n iconSize: \"md\",\r\n },\r\n }\r\n);\r\n\r\nconst iconSizeMap = {\r\n sm: 16,\r\n md: 20,\r\n lg: 24,\r\n xl: 32,\r\n};\r\n\r\nexport interface IconItemMediaProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof iconItemMediaVariants> {\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const IconItemMedia = React.memo(function IconItemMedia({\r\n icon,\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n className,\r\n children,\r\n ...props\r\n}: IconItemMediaProps) {\r\n return (\r\n <div\r\n data-slot=\"item-media\"\r\n role=\"presentation\"\r\n className={cn(iconItemMediaVariants({ iconBg, iconSize }), className)}\r\n {...props}\r\n >\r\n {children || icon}\r\n </div>\r\n );\r\n});\r\n\r\nIconItemMedia.displayName = \"IconItemMedia\";\r\n\r\nexport interface FeatureItemProps {\r\n icon?: React.ReactNode;\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"gradient-light\" | \"gradient\";\r\n size?: \"sm\" | \"default\" | \"lg\";\r\n layout?: \"vertical\" | \"horizontal\";\r\n titleAs?: React.ElementType;\r\n className?: string;\r\n titleClassName?: string;\r\n descriptionClassName?: string;\r\n iconClassName?: string;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const FeatureItem = React.memo(function FeatureItem({\r\n icon,\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n title,\r\n description,\r\n variant = \"outline\",\r\n size = \"default\",\r\n layout = \"vertical\",\r\n titleAs = \"h3\",\r\n className,\r\n titleClassName,\r\n descriptionClassName,\r\n iconClassName,\r\n children,\r\n ...props\r\n}: FeatureItemProps) {\r\n const hasGradientBorder = variant === \"gradient-light\" || variant === \"gradient\";\r\n const TitleComponent = titleAs;\r\n\r\n if (hasGradientBorder) {\r\n return (\r\n <div\r\n className={cn(\r\n variant === \"gradient-light\" ? \"gradient-border-light\" : \"gradient-border\",\r\n \"rounded-2xl hover:gradient-border-hover transition-all duration-300\",\r\n className\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"gradient-border-inner rounded-2xl p-6 flex\",\r\n layout === \"vertical\"\r\n ? \"flex-col items-start gap-4\"\r\n : \"flex-row items-center gap-4\"\r\n )}\r\n >\r\n {icon && (\r\n <IconItemMedia\r\n icon={icon}\r\n iconBg={iconBg}\r\n iconSize={iconSize}\r\n className={cn(layout === \"vertical\" ? \"\" : \"shrink-0\", iconClassName)}\r\n />\r\n )}\r\n <div className=\"flex flex-col gap-2 flex-1\">\r\n {title && (\r\n <TitleComponent\r\n className={cn(\r\n \"text-base md:text-lg font-semibold text-foreground leading-tight\",\r\n titleClassName\r\n )}\r\n >\r\n {title}\r\n </TitleComponent>\r\n )}\r\n {description && (\r\n <p\r\n className={cn(\r\n \"text-sm text-muted-foreground leading-relaxed\",\r\n descriptionClassName\r\n )}\r\n >\r\n {description}\r\n </p>\r\n )}\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <Item\r\n variant={variant}\r\n size={size}\r\n className={cn(layout === \"vertical\" && \"flex-col items-start\", className)}\r\n {...props}\r\n >\r\n {icon && (\r\n <IconItemMedia\r\n icon={icon}\r\n iconBg={iconBg}\r\n iconSize={iconSize}\r\n className={iconClassName}\r\n />\r\n )}\r\n <ItemContent>\r\n {title && (\r\n <TitleComponent\r\n data-slot=\"item-title\"\r\n className={cn(\r\n \"text-base md:text-lg font-semibold text-foreground leading-tight mb-2\",\r\n titleClassName\r\n )}\r\n >\r\n {title}\r\n </TitleComponent>\r\n )}\r\n {description && (\r\n <ItemDescription\r\n className={cn(\r\n \"text-sm text-muted-foreground leading-relaxed\",\r\n descriptionClassName\r\n )}\r\n >\r\n {description}\r\n </ItemDescription>\r\n )}\r\n {children}\r\n </ItemContent>\r\n </Item>\r\n );\r\n});\r\n\r\nFeatureItem.displayName = \"FeatureItem\";\r\n\r\nexport interface FeatureListItem {\r\n id?: string;\r\n icon?: React.ReactNode;\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n title: string;\r\n description?: string;\r\n}\r\n\r\nexport interface FeatureListProps {\r\n items?: FeatureListItem[];\r\n columns?: 2 | 3 | 4;\r\n variant?: \"default\" | \"outline\" | \"ghost\" | \"gradient-light\" | \"gradient\";\r\n iconBg?: \"primary\" | \"gold\" | \"muted\" | \"gradient\" | \"none\";\r\n iconSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n layout?: \"vertical\" | \"horizontal\";\r\n className?: string;\r\n itemClassName?: string;\r\n}\r\n\r\nexport function FeatureList({\r\n items = [],\r\n columns = 3,\r\n variant = \"outline\",\r\n iconBg = \"primary\",\r\n iconSize = \"md\",\r\n layout = \"vertical\",\r\n className,\r\n itemClassName,\r\n ...props\r\n}: FeatureListProps) {\r\n const gridCols: Record<number, string> = {\r\n 2: \"md:grid-cols-2\",\r\n 3: \"md:grid-cols-2 lg:grid-cols-3\",\r\n 4: \"md:grid-cols-2 lg:grid-cols-4\",\r\n };\r\n\r\n return (\r\n <div\r\n role=\"list\"\r\n className={cn(\"grid gap-6\", gridCols[columns] || gridCols[3], className)}\r\n {...props}\r\n >\r\n {items.map((item, index) => (\r\n <FeatureItem\r\n key={item.id || item.title || index}\r\n icon={item.icon}\r\n iconBg={item.iconBg || iconBg}\r\n iconSize={item.iconSize || iconSize}\r\n title={item.title}\r\n description={item.description}\r\n variant={variant}\r\n layout={layout}\r\n className={itemClassName}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nFeatureList.displayName = \"FeatureList\";\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Moon, Sun } from \"lucide-react\";\r\nimport { useTheme } from \"next-themes\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n DropdownMenu,\r\n DropdownMenuContent,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuRadioItem,\r\n DropdownMenuTrigger,\r\n} from \"@/components/ui/dropdown-menu\";\r\n\r\nexport function ModeToggle() {\r\n const { theme, setTheme } = useTheme();\r\n const [mounted, setMounted] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n setMounted(true);\r\n }, []);\r\n\r\n if (!mounted) {\r\n return (\r\n <Button variant=\"ghost\" size=\"icon\">\r\n <Sun className=\"h-[1.2rem] w-[1.2rem]\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </Button>\r\n );\r\n }\r\n\r\n return (\r\n <DropdownMenu modal={false}>\r\n <DropdownMenuTrigger render={<Button variant=\"ghost\" size=\"icon\" />}>\r\n <Sun className=\"h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0\" />\r\n <Moon className=\"absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100\" />\r\n <span className=\"sr-only\">Toggle theme</span>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent align=\"end\">\r\n <DropdownMenuRadioGroup value={theme} onValueChange={setTheme}>\r\n <DropdownMenuRadioItem value=\"light\">Light</DropdownMenuRadioItem>\r\n <DropdownMenuRadioItem value=\"dark\">Dark</DropdownMenuRadioItem>\r\n <DropdownMenuRadioItem value=\"system\">System</DropdownMenuRadioItem>\r\n </DropdownMenuRadioGroup>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { ChevronDown } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@/components/ui/command\";\r\nimport { InputGroup, InputGroupAddon, InputGroupInput } from \"@/components/ui/input-group\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface Country {\r\n code: string;\r\n name: string;\r\n dialCode: string;\r\n flag: string;\r\n}\r\n\r\n// Common countries with emoji flags - prioritize UK and common countries\r\nconst COUNTRIES: Country[] = [\r\n { code: \"GB\", name: \"United Kingdom\", dialCode: \"+44\", flag: \"🇬🇧\" },\r\n { code: \"US\", name: \"United States\", dialCode: \"+1\", flag: \"🇺🇸\" },\r\n { code: \"IE\", name: \"Ireland\", dialCode: \"+353\", flag: \"🇮🇪\" },\r\n { code: \"FR\", name: \"France\", dialCode: \"+33\", flag: \"🇫🇷\" },\r\n { code: \"DE\", name: \"Germany\", dialCode: \"+49\", flag: \"🇩🇪\" },\r\n { code: \"IT\", name: \"Italy\", dialCode: \"+39\", flag: \"🇮🇹\" },\r\n { code: \"ES\", name: \"Spain\", dialCode: \"+34\", flag: \"🇪🇸\" },\r\n { code: \"NL\", name: \"Netherlands\", dialCode: \"+31\", flag: \"🇳🇱\" },\r\n { code: \"BE\", name: \"Belgium\", dialCode: \"+32\", flag: \"🇧🇪\" },\r\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\", flag: \"🇵🇹\" },\r\n { code: \"CH\", name: \"Switzerland\", dialCode: \"+41\", flag: \"🇨🇭\" },\r\n { code: \"AT\", name: \"Austria\", dialCode: \"+43\", flag: \"🇦🇹\" },\r\n { code: \"SE\", name: \"Sweden\", dialCode: \"+46\", flag: \"🇸🇪\" },\r\n { code: \"NO\", name: \"Norway\", dialCode: \"+47\", flag: \"🇳🇴\" },\r\n { code: \"DK\", name: \"Denmark\", dialCode: \"+45\", flag: \"🇩🇰\" },\r\n { code: \"PL\", name: \"Poland\", dialCode: \"+48\", flag: \"🇵🇱\" },\r\n { code: \"GR\", name: \"Greece\", dialCode: \"+30\", flag: \"🇬🇷\" },\r\n { code: \"CZ\", name: \"Czech Republic\", dialCode: \"+420\", flag: \"🇨🇿\" },\r\n { code: \"RO\", name: \"Romania\", dialCode: \"+40\", flag: \"🇷🇴\" },\r\n { code: \"HU\", name: \"Hungary\", dialCode: \"+36\", flag: \"🇭🇺\" },\r\n { code: \"AU\", name: \"Australia\", dialCode: \"+61\", flag: \"🇦🇺\" },\r\n { code: \"NZ\", name: \"New Zealand\", dialCode: \"+64\", flag: \"🇳🇿\" },\r\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\", flag: \"🇨🇦\" },\r\n { code: \"IN\", name: \"India\", dialCode: \"+91\", flag: \"🇮🇳\" },\r\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\", flag: \"🇵🇰\" },\r\n { code: \"BD\", name: \"Bangladesh\", dialCode: \"+880\", flag: \"🇧🇩\" },\r\n { code: \"AE\", name: \"UAE\", dialCode: \"+971\", flag: \"🇦🇪\" },\r\n { code: \"SA\", name: \"Saudi Arabia\", dialCode: \"+966\", flag: \"🇸🇦\" },\r\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\", flag: \"🇶🇦\" },\r\n { code: \"KW\", name: \"Kuwait\", dialCode: \"+965\", flag: \"🇰🇼\" },\r\n { code: \"SG\", name: \"Singapore\", dialCode: \"+65\", flag: \"🇸🇬\" },\r\n { code: \"MY\", name: \"Malaysia\", dialCode: \"+60\", flag: \"🇲🇾\" },\r\n { code: \"JP\", name: \"Japan\", dialCode: \"+81\", flag: \"🇯🇵\" },\r\n { code: \"KR\", name: \"South Korea\", dialCode: \"+82\", flag: \"🇰🇷\" },\r\n { code: \"CN\", name: \"China\", dialCode: \"+86\", flag: \"🇨🇳\" },\r\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\", flag: \"🇭🇰\" },\r\n { code: \"TW\", name: \"Taiwan\", dialCode: \"+886\", flag: \"🇹🇼\" },\r\n { code: \"TH\", name: \"Thailand\", dialCode: \"+66\", flag: \"🇹🇭\" },\r\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\", flag: \"🇵🇭\" },\r\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\", flag: \"🇻🇳\" },\r\n { code: \"ID\", name: \"Indonesia\", dialCode: \"+62\", flag: \"🇮🇩\" },\r\n { code: \"ZA\", name: \"South Africa\", dialCode: \"+27\", flag: \"🇿🇦\" },\r\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\", flag: \"🇳🇬\" },\r\n { code: \"EG\", name: \"Egypt\", dialCode: \"+20\", flag: \"🇪🇬\" },\r\n { code: \"BR\", name: \"Brazil\", dialCode: \"+55\", flag: \"🇧🇷\" },\r\n { code: \"MX\", name: \"Mexico\", dialCode: \"+52\", flag: \"🇲🇽\" },\r\n { code: \"AR\", name: \"Argentina\", dialCode: \"+54\", flag: \"🇦🇷\" },\r\n { code: \"TR\", name: \"Turkey\", dialCode: \"+90\", flag: \"🇹🇷\" },\r\n { code: \"RU\", name: \"Russia\", dialCode: \"+7\", flag: \"🇷🇺\" },\r\n { code: \"IL\", name: \"Israel\", dialCode: \"+972\", flag: \"🇮🇱\" },\r\n];\r\n\r\nconst getCountryByCode = (code: string) => COUNTRIES.find((c) => c.code === code);\r\n\r\nexport interface PhoneInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n onChange?: (value: string) => void;\r\n defaultCountry?: string;\r\n}\r\n\r\nconst PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\r\n (\r\n {\r\n className,\r\n onChange,\r\n value,\r\n defaultCountry = \"GB\",\r\n disabled,\r\n placeholder = \"Phone number\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [searchValue, setSearchValue] = React.useState(\"\");\r\n\r\n // Parse the value to extract country and number\r\n const parseValue = React.useCallback(\r\n (val: any) => {\r\n const valString = val ? String(val) : \"\";\r\n if (!valString) {\r\n return {\r\n country: getCountryByCode(defaultCountry) || COUNTRIES[0],\r\n number: \"\",\r\n };\r\n }\r\n\r\n // Try to match country by dial code\r\n const cleanVal = valString.replace(/\\s/g, \"\");\r\n for (const country of COUNTRIES) {\r\n if (cleanVal.startsWith(country.dialCode)) {\r\n return {\r\n country,\r\n number: cleanVal.slice(country.dialCode.length),\r\n };\r\n }\r\n }\r\n\r\n // Default to selected country\r\n return {\r\n country: getCountryByCode(defaultCountry) || COUNTRIES[0],\r\n number: cleanVal.replace(/^\\+/, \"\"),\r\n };\r\n },\r\n [defaultCountry]\r\n );\r\n\r\n const { country, number } = parseValue(value);\r\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(country);\r\n\r\n // Update selected country when value changes\r\n React.useEffect(() => {\r\n const parsed = parseValue(value);\r\n setSelectedCountry(parsed.country);\r\n }, [value, parseValue]);\r\n\r\n const handleCountryChange = (newCountry: Country) => {\r\n setSelectedCountry(newCountry);\r\n setIsOpen(false);\r\n // Update the full value with new country code\r\n if (number) {\r\n onChange?.(newCountry.dialCode + number);\r\n }\r\n };\r\n\r\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newNumber = e.target.value.replace(/[^\\d]/g, \"\");\r\n if (newNumber) {\r\n onChange?.(selectedCountry.dialCode + newNumber);\r\n } else {\r\n onChange?.(\"\");\r\n }\r\n };\r\n\r\n return (\r\n <InputGroup className={className}>\r\n <InputGroupAddon align=\"inline-start\" className=\"p-0 overflow-hidden\">\r\n <Popover\r\n open={isOpen}\r\n modal\r\n onOpenChange={(open: boolean) => {\r\n setIsOpen(open);\r\n if (open) setSearchValue(\"\");\r\n }}\r\n >\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className=\"gap-1.5 rounded-none border-r px-3 focus:z-10 min-w-[90px] h-full\"\r\n disabled={disabled}\r\n >\r\n <span className=\"text-base leading-none\">\r\n {selectedCountry.flag}\r\n </span>\r\n <span className=\"text-xs text-muted-foreground\">\r\n {selectedCountry.dialCode}\r\n </span>\r\n <ChevronDown className=\"size-3.5 opacity-50\" />\r\n </Button>\r\n }\r\n />\r\n <PopoverContent className=\"w-[280px] p-0\" align=\"start\">\r\n <Command>\r\n <CommandInput\r\n value={searchValue}\r\n onValueChange={setSearchValue}\r\n placeholder=\"Search country...\"\r\n />\r\n <CommandList>\r\n <ScrollArea className=\"h-64\">\r\n <CommandEmpty>No country found.</CommandEmpty>\r\n <CommandGroup>\r\n {COUNTRIES.filter(\r\n (c) =>\r\n c.name.toLowerCase().includes(searchValue.toLowerCase()) ||\r\n c.dialCode.includes(searchValue) ||\r\n c.code.toLowerCase().includes(searchValue.toLowerCase())\r\n ).map((c) => (\r\n <CommandItem\r\n key={c.code}\r\n className=\"gap-2 cursor-pointer\"\r\n onSelect={() => handleCountryChange(c)}\r\n value={`${c.name} ${c.code} ${c.dialCode}`} \r\n >\r\n <span className=\"text-base\">{c.flag}</span>\r\n <span className=\"flex-1 text-sm\">{c.name}</span>\r\n <span className=\"text-sm text-muted-foreground\">\r\n {c.dialCode}\r\n </span>\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n </InputGroupAddon>\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"tel\"\r\n inputMode=\"numeric\"\r\n className=\"rounded-s-none\"\r\n placeholder={placeholder}\r\n value={number}\r\n onChange={handleNumberChange}\r\n disabled={disabled}\r\n {...props}\r\n />\r\n </InputGroup>\r\n );\r\n }\r\n);\r\n\r\nPhoneInput.displayName = \"PhoneInput\";\r\n\r\nexport { PhoneInput };\r\n","\"use client\";\r\n\r\nimport { ReactNode, ComponentType } from \"react\";\r\nimport { ChevronDownIcon, ChevronUpIcon, MinusIcon, LucideProps } from \"lucide-react\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface PillProps {\r\n variant?: \"default\" | \"secondary\" | \"destructive\" | \"outline\";\r\n themed?: boolean;\r\n className?: string;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function Pill({\r\n variant = \"secondary\",\r\n themed = false,\r\n className,\r\n ...props\r\n}: PillProps) {\r\n return (\r\n <Badge\r\n className={cn(\"gap-2 rounded-full px-3 py-1.5 font-normal\", className)}\r\n variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport interface PillAvatarProps {\r\n fallback?: string;\r\n className?: string;\r\n src?: string;\r\n alt?: string;\r\n}\r\n\r\nexport function PillAvatar({ fallback, className, src, alt, ...props }: PillAvatarProps) {\r\n return (\r\n <Avatar className={cn(\"-ml-1 h-4 w-4\", className)}>\r\n <AvatarImage src={src} alt={alt} {...props} />\r\n <AvatarFallback>{fallback}</AvatarFallback>\r\n </Avatar>\r\n );\r\n}\r\n\r\nexport interface PillButtonProps {\r\n className?: string;\r\n children?: ReactNode;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function PillButton({ className, ...props }: PillButtonProps) {\r\n return (\r\n <Button\r\n className={cn(\"-my-2 -mr-2 size-6 rounded-full p-0.5 hover:bg-foreground/5\", className)}\r\n size=\"icon\"\r\n variant=\"ghost\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport interface PillStatusProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function PillStatus({ children, className, ...props }: PillStatusProps) {\r\n return (\r\n <div\r\n className={cn(\"flex items-center gap-2 border-r pr-2 font-medium\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface PillIndicatorProps {\r\n variant?: \"success\" | \"error\" | \"warning\" | \"info\";\r\n pulse?: boolean;\r\n}\r\n\r\nexport function PillIndicator({ variant = \"success\", pulse = false }: PillIndicatorProps) {\r\n return (\r\n <span className=\"relative flex size-2\">\r\n {pulse && (\r\n <span\r\n className={cn(\r\n \"absolute inline-flex h-full w-full animate-ping rounded-full opacity-75\",\r\n variant === \"success\" && \"bg-emerald-400\",\r\n variant === \"error\" && \"bg-rose-400\",\r\n variant === \"warning\" && \"bg-amber-400\",\r\n variant === \"info\" && \"bg-sky-400\"\r\n )}\r\n />\r\n )}\r\n <span\r\n className={cn(\r\n \"relative inline-flex size-2 rounded-full\",\r\n variant === \"success\" && \"bg-emerald-500\",\r\n variant === \"error\" && \"bg-rose-500\",\r\n variant === \"warning\" && \"bg-amber-500\",\r\n variant === \"info\" && \"bg-sky-500\"\r\n )}\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nexport interface PillDeltaProps {\r\n className?: string;\r\n delta?: number;\r\n}\r\n\r\nexport function PillDelta({ className, delta }: PillDeltaProps) {\r\n if (!delta) {\r\n return <MinusIcon className={cn(\"size-3 text-muted-foreground\", className)} />;\r\n }\r\n\r\n if (delta > 0) {\r\n return <ChevronUpIcon className={cn(\"size-3 text-emerald-500\", className)} />;\r\n }\r\n\r\n return <ChevronDownIcon className={cn(\"size-3 text-rose-500\", className)} />;\r\n}\r\n\r\nexport interface PillIconProps extends LucideProps {\r\n icon: ComponentType<LucideProps>;\r\n className?: string;\r\n}\r\n\r\nexport function PillIcon({ icon: Icon, className, ...props }: PillIconProps) {\r\n return (\r\n <Icon className={cn(\"size-3 text-muted-foreground\", className)} size={12} {...props} />\r\n );\r\n}\r\n\r\nexport interface PillAvatarGroupProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function PillAvatarGroup({ children, className, ...props }: PillAvatarGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"-space-x-1 flex items-center\",\r\n \"[&>*:not(:first-of-type)]:mask-[radix-gradient(circle_9px_at_-4px_50%,transparent_99%,white_100%)]\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { memo, useMemo, ReactNode } from \"react\";\r\nimport {\r\n Tabs,\r\n TabsList,\r\n TabsTrigger,\r\n TabsContent,\r\n} from \"@/components/ui/tabs\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst LIST_BASE_CLASS =\r\n \"flex flex-wrap items-center justify-start gap-1 h-auto rounded-md p-1 shadow-sm transition-colors\";\r\n\r\nconst LIST_VARIANTS: Record<string, string> = {\r\n default: \"border border-border/50 bg-muted/60 backdrop-blur-sm\",\r\n primary: \"border border-primary/30 bg-primary/10\",\r\n secondary: \"border border-secondary/40 bg-secondary/10\",\r\n outline: \"border border-border bg-background\",\r\n ghost: \"border border-transparent bg-transparent shadow-none\",\r\n underline:\r\n \"w-full mb-4 rounded-none border-b border-border/60 bg-transparent p-0 shadow-none gap-6\",\r\n};\r\n\r\nconst TRIGGER_VARIANTS: Record<string, string> = {\r\n default:\r\n \"text-muted-foreground hover:bg-muted/40 hover:text-foreground data-active:bg-background data-active:text-foreground data-active:shadow-sm\",\r\n primary:\r\n \"text-primary hover:bg-primary/10 hover:text-primary data-active:bg-primary data-active:text-primary-foreground\",\r\n secondary:\r\n \"text-secondary-foreground hover:bg-secondary/10 hover:text-secondary-foreground data-active:bg-secondary data-active:text-secondary-foreground\",\r\n outline:\r\n \"text-foreground hover:bg-accent/40 hover:text-accent-foreground data-active:bg-accent data-active:text-accent-foreground\",\r\n ghost:\r\n \"text-muted-foreground hover:bg-muted/30 hover:text-foreground data-active:bg-muted data-active:text-foreground\",\r\n underline:\r\n \"text-muted-foreground rounded-none px-0 py-2 hover:bg-transparent hover:text-primary border-b-2 border-transparent data-active:border-primary data-active:text-primary data-active:shadow-none\",\r\n};\r\n\r\nexport interface TabsWrapperProps {\r\n defaultValue?: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n children: ReactNode;\r\n className?: string;\r\n listClassName?: string;\r\n contentClassName?: string;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n orientation?: \"horizontal\" | \"vertical\";\r\n layout?: \"default\" | \"flex\" | \"sidebar\";\r\n withScrollArea?: boolean;\r\n scrollAreaClassName?: string;\r\n}\r\n\r\nexport const TabsWrapper = memo(function TabsWrapper({\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n children,\r\n className,\r\n listClassName,\r\n contentClassName,\r\n variant = \"default\",\r\n orientation = \"horizontal\",\r\n layout = \"default\",\r\n withScrollArea = false,\r\n scrollAreaClassName,\r\n ...props\r\n}: TabsWrapperProps) {\r\n const isFlexLayout = useMemo(\r\n () => layout === \"flex\" || layout === \"sidebar\",\r\n [layout]\r\n );\r\n\r\n const computedClasses = useMemo(\r\n () => ({\r\n root: cn(\"w-full\", isFlexLayout && \"flex-1 flex flex-col\", className),\r\n list: cn(\r\n LIST_BASE_CLASS,\r\n isFlexLayout ? \"w-full\" : \"w-fit\",\r\n !isFlexLayout && variant !== \"underline\" && \"mb-6\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n listClassName\r\n ),\r\n }),\r\n [isFlexLayout, className, variant, listClassName]\r\n );\r\n\r\n return (\r\n <Tabs\r\n defaultValue={defaultValue}\r\n value={value}\r\n onValueChange={onValueChange}\r\n orientation={orientation}\r\n className={computedClasses.root}\r\n {...props}\r\n >\r\n <TabsList className={computedClasses.list}>{children}</TabsList>\r\n </Tabs>\r\n );\r\n});\r\n\r\nexport interface TabTriggerProps {\r\n value: string;\r\n children: ReactNode;\r\n className?: string;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n icon?: ReactNode;\r\n hideTextOnMobile?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TabTrigger = memo(function TabTrigger({\r\n value,\r\n children,\r\n className,\r\n variant = \"default\",\r\n icon,\r\n hideTextOnMobile = false,\r\n disabled = false,\r\n ...props\r\n}: TabTriggerProps) {\r\n const computedClassName = useMemo(\r\n () =>\r\n cn(\r\n \"flex items-center gap-2 transition-colors duration-200\",\r\n TRIGGER_VARIANTS[variant] ?? TRIGGER_VARIANTS.default,\r\n className\r\n ),\r\n [variant, className]\r\n );\r\n\r\n return (\r\n <TabsTrigger\r\n value={value}\r\n disabled={disabled}\r\n className={computedClassName}\r\n {...props}\r\n >\r\n {icon}\r\n {hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline\">{children}</span>\r\n ) : (\r\n children\r\n )}\r\n </TabsTrigger>\r\n );\r\n});\r\n\r\nexport interface TabContentProps {\r\n value: string;\r\n children: ReactNode;\r\n className?: string;\r\n withScrollArea?: boolean;\r\n scrollAreaClassName?: string;\r\n padding?: boolean;\r\n keepMounted?: boolean;\r\n}\r\n\r\nexport const TabContent = memo(function TabContent({\r\n value,\r\n children,\r\n className,\r\n withScrollArea = false,\r\n scrollAreaClassName,\r\n padding = true,\r\n keepMounted = false,\r\n ...props\r\n}: TabContentProps) {\r\n const contentClassName = useMemo(\r\n () =>\r\n cn(\r\n \"space-y-4\",\r\n padding && !withScrollArea && \"mt-6\",\r\n withScrollArea && \"mt-0 h-full\",\r\n className\r\n ),\r\n [padding, withScrollArea, className]\r\n );\r\n\r\n const scrollAreaPaddingClassName = useMemo(\r\n () => cn(padding && \"px-6 py-4\"),\r\n [padding]\r\n );\r\n\r\n return (\r\n <TabsContent value={value} keepMounted={keepMounted} className={contentClassName} {...props}>\r\n {withScrollArea ? (\r\n <ScrollArea className={cn(\"h-full\", scrollAreaClassName)}>\r\n <div className={scrollAreaPaddingClassName}>{children}</div>\r\n </ScrollArea>\r\n ) : (\r\n children\r\n )}\r\n </TabsContent>\r\n );\r\n});\r\n\r\nexport interface DynamicTabItem {\r\n value: string;\r\n label: ReactNode;\r\n content: ReactNode;\r\n icon?: ReactNode;\r\n disabled?: boolean;\r\n hideTextOnMobile?: boolean;\r\n}\r\n\r\nexport interface DynamicTabsProps {\r\n tabs?: DynamicTabItem[];\r\n defaultValue?: string;\r\n value?: string;\r\n onValueChange?: (value: string) => void;\r\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"underline\";\r\n layout?: \"default\" | \"flex\" | \"sidebar\";\r\n className?: string;\r\n listClassName?: string;\r\n listWrapperClassName?: string;\r\n contentClassName?: string;\r\n scrollable?: boolean;\r\n}\r\n\r\nexport const DynamicTabs = memo(function DynamicTabs({\r\n tabs = [],\r\n defaultValue,\r\n value,\r\n onValueChange,\r\n variant = \"default\",\r\n layout = \"default\",\r\n className,\r\n listClassName,\r\n listWrapperClassName,\r\n contentClassName,\r\n scrollable = false,\r\n ...props\r\n}: DynamicTabsProps) {\r\n const isFlexLayout = useMemo(\r\n () => layout === \"flex\" || layout === \"sidebar\",\r\n [layout]\r\n );\r\n const useSheetDefaults = isFlexLayout && scrollable;\r\n\r\n const computedClasses = useMemo(\r\n () => ({\r\n root: cn(\r\n \"w-full\",\r\n isFlexLayout && \"flex-1 flex flex-col min-h-0\",\r\n className\r\n ),\r\n listWrapper: cn(\r\n \"w-full\",\r\n useSheetDefaults ? \"px-0\" : \"px-6\",\r\n listWrapperClassName\r\n ),\r\n flexList: cn(\r\n \"flex flex-wrap items-center justify-center gap-1 h-auto\",\r\n variant === \"underline\"\r\n ? \"rounded-none border-b border-border/60 bg-transparent p-0 shadow-none gap-6\"\r\n : \"rounded-md p-1 shadow-sm backdrop-blur-sm\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n useSheetDefaults && \"mb-4 gap-0.5\",\r\n listClassName\r\n ),\r\n standardList: cn(\r\n LIST_BASE_CLASS,\r\n variant !== \"underline\" && \"w-fit mb-6\",\r\n LIST_VARIANTS[variant] ?? LIST_VARIANTS.default,\r\n listClassName\r\n ),\r\n contentWrapper: cn(isFlexLayout && \"flex-1 min-h-0 overflow-hidden\"),\r\n flexContent: cn(\r\n \"mt-0 h-full\",\r\n useSheetDefaults && \"px-1\",\r\n contentClassName\r\n ),\r\n standardContent: cn(\r\n isFlexLayout ? \"h-full\" : \"space-y-4 mt-6\",\r\n contentClassName\r\n ),\r\n }),\r\n [\r\n isFlexLayout,\r\n useSheetDefaults,\r\n className,\r\n listWrapperClassName,\r\n listClassName,\r\n variant,\r\n contentClassName,\r\n ]\r\n );\r\n\r\n return (\r\n <Tabs\r\n defaultValue={defaultValue}\r\n value={value}\r\n onValueChange={onValueChange}\r\n className={computedClasses.root}\r\n {...props}\r\n >\r\n {isFlexLayout ? (\r\n <div className={computedClasses.listWrapper}>\r\n <TabsList className={computedClasses.flexList}>\r\n {tabs.map((tab) => (\r\n <TabTrigger\r\n key={tab.value}\r\n value={tab.value}\r\n variant={variant}\r\n disabled={tab.disabled}\r\n className=\"justify-center px-3 py-2 text-xs sm:text-sm shrink-0\"\r\n >\r\n {tab.icon}\r\n {tab.hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline\">{tab.label}</span>\r\n ) : (\r\n tab.label\r\n )}\r\n </TabTrigger>\r\n ))}\r\n </TabsList>\r\n </div>\r\n ) : (\r\n <TabsList className={computedClasses.standardList}>\r\n {tabs.map((tab) => (\r\n <TabTrigger\r\n key={tab.value}\r\n value={tab.value}\r\n variant={variant}\r\n disabled={tab.disabled}\r\n className=\"whitespace-nowrap\"\r\n >\r\n {tab.icon}\r\n {tab.hideTextOnMobile ? (\r\n <span className=\"hidden sm:inline text-sm\">{tab.label}</span>\r\n ) : (\r\n <span className=\"text-sm\">{tab.label}</span>\r\n )}\r\n </TabTrigger>\r\n ))}\r\n </TabsList>\r\n )}\r\n\r\n <div className={computedClasses.contentWrapper}>\r\n {isFlexLayout && scrollable ? (\r\n <ScrollArea className=\"h-full w-full\">\r\n {tabs.map((tab) => (\r\n <TabsContent\r\n key={tab.value}\r\n value={tab.value}\r\n className={computedClasses.flexContent}\r\n >\r\n {tab.content}\r\n </TabsContent>\r\n ))}\r\n </ScrollArea>\r\n ) : (\r\n tabs.map((tab) => (\r\n <TabsContent\r\n key={tab.value}\r\n value={tab.value}\r\n className={computedClasses.standardContent}\r\n >\r\n {tab.content}\r\n </TabsContent>\r\n ))\r\n )}\r\n </div>\r\n </Tabs>\r\n );\r\n});\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n ResizableHandle,\r\n ResizablePanel,\r\n ResizablePanelGroup,\r\n} from \"@/components/ui/resizable\";\r\nimport { useMediaQuery } from \"../hooks/use-media-query\";\r\nimport { DynamicTabs } from \"./tabs-wrapper\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface PanelConfig {\r\n title?: string;\r\n icon?: ReactNode;\r\n content: ReactNode;\r\n badge?: ReactNode;\r\n}\r\n\r\nexport interface ResponsiveSplitLayoutProps {\r\n leftPanel: PanelConfig;\r\n rightPanel: PanelConfig;\r\n className?: string;\r\n leftPanelClassName?: string;\r\n rightPanelClassName?: string;\r\n variant?: \"default\" | \"tabs\" | \"fixed\";\r\n desktopVariant?: \"default\" | \"tabs\" | \"fixed\";\r\n mobileVariant?: \"default\" | \"tabs\" | \"fixed\";\r\n defaultLayout?: [number, number];\r\n minSizes?: [number, number];\r\n rightPanelWidth?: number;\r\n persistLayoutKey?: string;\r\n mobileBreakpoint?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n forceMobile?: boolean;\r\n forceDesktop?: boolean;\r\n}\r\n\r\nexport function ResponsiveSplitLayout({\r\n leftPanel,\r\n rightPanel,\r\n className,\r\n leftPanelClassName,\r\n rightPanelClassName,\r\n variant = \"default\",\r\n desktopVariant,\r\n mobileVariant,\r\n defaultLayout = [50, 50],\r\n minSizes = [20, 20],\r\n rightPanelWidth = 400,\r\n persistLayoutKey,\r\n mobileBreakpoint = \"md\",\r\n forceMobile = false,\r\n forceDesktop = false,\r\n}: ResponsiveSplitLayoutProps) {\r\n const [mobileView, setMobileView] = useState<\"left\" | \"right\">(\"left\");\r\n\r\n const breakpoints = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n };\r\n\r\n const mobileMaxWidth = breakpoints[mobileBreakpoint] - 1;\r\n const isMobileMedia = useMediaQuery(`(max-width: ${mobileMaxWidth}px)`, false);\r\n const isMobile = forceDesktop ? false : forceMobile ? true : isMobileMedia;\r\n\r\n const effectiveMobileVariant = mobileVariant ?? variant;\r\n const effectiveDesktopVariant = desktopVariant ?? variant;\r\n\r\n // Mobile view with tabs\r\n if (isMobile && effectiveMobileVariant === \"tabs\") {\r\n const tabs = [\r\n {\r\n value: \"left\",\r\n label: (\r\n <div className=\"flex items-center gap-2\">\r\n {leftPanel.icon}\r\n {leftPanel.title || \"Left\"}\r\n </div>\r\n ),\r\n content: (\r\n <div className={cn(\"h-full overflow-y-auto\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n ),\r\n },\r\n {\r\n value: \"right\",\r\n label: (\r\n <div className=\"flex items-center gap-2\">\r\n {rightPanel.icon}\r\n {rightPanel.title || \"Right\"}\r\n {rightPanel.badge && (\r\n <span className=\"ml-1 bg-primary text-primary-foreground text-xs rounded-full h-5 w-5 flex items-center justify-center\">\r\n {rightPanel.badge}\r\n </span>\r\n )}\r\n </div>\r\n ),\r\n content: (\r\n <div className={cn(\"h-full overflow-y-auto\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n ),\r\n },\r\n ];\r\n\r\n return (\r\n <div className={cn(\"h-full flex flex-col\", className)}>\r\n <DynamicTabs\r\n tabs={tabs}\r\n defaultValue=\"left\"\r\n value={mobileView}\r\n onValueChange={(val) => setMobileView(val as \"left\" | \"right\")}\r\n variant=\"default\"\r\n layout=\"flex\"\r\n className=\"h-full\"\r\n listWrapperClassName=\"px-4 py-2 flex-shrink-0\"\r\n contentClassName=\"mt-0 flex-1 min-h-0\"\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // Mobile view with navigation buttons (default)\r\n if (isMobile) {\r\n const showLeft = mobileView === \"left\";\r\n const showRight = mobileView === \"right\";\r\n\r\n return (\r\n <div className={cn(\"flex flex-col h-full\", className)}>\r\n <div className=\"flex-1 overflow-hidden\">\r\n <div className={cn(\"h-full\", !showLeft && \"hidden\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n\r\n <div className={cn(\"h-full\", !showRight && \"hidden\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n </div>\r\n\r\n <div className=\"border-t p-4 bg-background\">\r\n <div className=\"flex items-center justify-between max-w-md mx-auto\">\r\n <Button\r\n variant={mobileView === \"left\" ? \"default\" : \"outline\"}\r\n onClick={() => setMobileView(\"left\")}\r\n className=\"flex-1 mr-2\"\r\n >\r\n {mobileView === \"right\" && <ArrowLeft className=\"h-4 w-4 mr-2\" />}\r\n {leftPanel.icon}\r\n <span className=\"ml-2\">{leftPanel.title || \"Left\"}</span>\r\n </Button>\r\n\r\n <Button\r\n variant={mobileView === \"right\" ? \"default\" : \"outline\"}\r\n onClick={() => setMobileView(\"right\")}\r\n className=\"flex-1 ml-2 relative\"\r\n >\r\n <span className=\"mr-2\">{rightPanel.title || \"Right\"}</span>\r\n {rightPanel.icon}\r\n {mobileView === \"left\" && <ArrowRight className=\"h-4 w-4 ml-2\" />}\r\n {rightPanel.badge && (\r\n <span className=\"absolute -top-2 -right-2 bg-primary text-primary-foreground text-xs rounded-full h-6 w-6 flex items-center justify-center\">\r\n {rightPanel.badge}\r\n </span>\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view with fixed right panel width\r\n if (effectiveDesktopVariant === \"fixed\") {\r\n return (\r\n <div className={cn(\"flex h-full\", className)}>\r\n <div className={cn(\"flex-1 overflow-auto border-r\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n\r\n <div\r\n className={cn(\"overflow-auto\", rightPanelClassName)}\r\n style={{\r\n width: rightPanelWidth,\r\n minWidth: rightPanelWidth,\r\n flexShrink: 0,\r\n }}\r\n >\r\n {rightPanel.content}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Desktop view with resizable panels (default)\r\n return (\r\n <ResizablePanelGroup\r\n direction=\"horizontal\"\r\n className={cn(\"h-full\", className)}\r\n autoSaveId={persistLayoutKey}\r\n >\r\n <ResizablePanel defaultSize={defaultLayout[0]} minSize={minSizes[0]}>\r\n <div className={cn(\"h-full overflow-auto\", leftPanelClassName)}>\r\n {leftPanel.content}\r\n </div>\r\n </ResizablePanel>\r\n\r\n <ResizableHandle withHandle />\r\n\r\n <ResizablePanel defaultSize={defaultLayout[1]} minSize={minSizes[1]}>\r\n <div className={cn(\"h-full overflow-auto\", rightPanelClassName)}>\r\n {rightPanel.content}\r\n </div>\r\n </ResizablePanel>\r\n </ResizablePanelGroup>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { memo, useMemo, useCallback, type ReactNode } from \"react\";\r\nimport {\r\n Sheet,\r\n SheetContent,\r\n SheetHeader,\r\n SheetTitle,\r\n SheetDescription,\r\n SheetFooter,\r\n SheetTrigger,\r\n} from \"@/components/ui/sheet\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { ClientSubmitButton } from \"./client-submit-button\";\r\nimport { cn } from \"../utils\";\r\n\r\n// Size variants configuration\r\n// Using !important to override base sheet.tsx sm:max-w-sm constraint\r\nconst SIZE_VARIANTS = {\r\n sm: \"sm:!max-w-md\",\r\n default: \"w-full sm:!max-w-md md:!max-w-lg\",\r\n lg: \"w-full sm:!max-w-lg md:!max-w-2xl lg:!max-w-4xl\",\r\n xl: \"w-full sm:!max-w-2xl md:!max-w-4xl lg:!max-w-5xl\",\r\n full: \"w-full !max-w-full\",\r\n mobile: \"w-[85%] !max-w-sm\",\r\n \"mobile-nav\": \"!w-[300px] sm:!w-[350px]\",\r\n} as const;\r\n\r\ntype SizeVariant = keyof typeof SIZE_VARIANTS;\r\n\r\nconst getPadding = (size: SizeVariant, type: \"default\" | \"header\" | \"footer\" = \"default\") => {\r\n const isFullSize = size === \"full\";\r\n\r\n if (type === \"header\" || type === \"footer\") {\r\n return isFullSize ? \"px-6 lg:px-8\" : \"px-4\";\r\n }\r\n\r\n return isFullSize ? \"p-6 lg:p-8\" : \"p-4\";\r\n};\r\n\r\nexport interface SheetWrapperProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title?: string;\r\n description?: string;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n header?: ReactNode;\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n size?: SizeVariant;\r\n modal?: boolean;\r\n className?: string;\r\n headerClassName?: string;\r\n contentClassName?: string;\r\n footerClassName?: string;\r\n innerClassName?: string;\r\n hideHeader?: boolean;\r\n hideTitle?: boolean;\r\n hideDescription?: boolean;\r\n hideCloseButton?: boolean;\r\n disableContentPadding?: boolean;\r\n}\r\n\r\nexport const SheetWrapper = memo(function SheetWrapper({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n footer,\r\n header,\r\n side = \"right\",\r\n size = \"default\",\r\n modal = true,\r\n className,\r\n headerClassName,\r\n contentClassName,\r\n footerClassName,\r\n innerClassName,\r\n hideHeader = false,\r\n hideTitle = false,\r\n hideDescription = false,\r\n hideCloseButton = false,\r\n disableContentPadding = false,\r\n}: SheetWrapperProps) {\r\n const computedClasses = useMemo(\r\n () => ({\r\n header: cn(\"border-b pb-4 pt-6\", getPadding(size, \"header\"), headerClassName),\r\n inner: cn(\r\n \"flex-1 overflow-y-auto\",\r\n !disableContentPadding && getPadding(size),\r\n innerClassName\r\n ),\r\n footer: cn(\r\n \"border-t bg-muted/30 pt-4 pb-6 mt-auto\",\r\n getPadding(size, \"footer\"),\r\n footerClassName\r\n ),\r\n }),\r\n [size, headerClassName, innerClassName, footerClassName, disableContentPadding]\r\n );\r\n\r\n const shouldHideTitle = !!header || hideTitle;\r\n const shouldHideDescription = !!header || hideDescription;\r\n\r\n return (\r\n <Sheet open={open} onOpenChange={onOpenChange} modal={modal}>\r\n <SheetContent\r\n side={side}\r\n showCloseButton={!hideCloseButton}\r\n className={cn(SIZE_VARIANTS[size], \"flex flex-col p-0\", contentClassName, className)}\r\n >\r\n {!hideHeader && (\r\n <SheetHeader className={computedClasses.header}>\r\n <SheetTitle className={shouldHideTitle ? \"sr-only\" : \"\"}>\r\n {title || \"Sheet\"}\r\n </SheetTitle>\r\n {description && (\r\n <SheetDescription className={shouldHideDescription ? \"sr-only\" : \"\"}>\r\n {description}\r\n </SheetDescription>\r\n )}\r\n {header}\r\n </SheetHeader>\r\n )}\r\n\r\n <div className={computedClasses.inner}>{children}</div>\r\n\r\n {footer && <SheetFooter className={computedClasses.footer}>{footer}</SheetFooter>}\r\n </SheetContent>\r\n </Sheet>\r\n );\r\n});\r\n\r\nexport interface FormSheetProps extends Omit<SheetWrapperProps, \"footer\"> {\r\n onSubmit?: () => void;\r\n onCancel?: () => void;\r\n submitLabel?: string;\r\n cancelLabel?: string;\r\n submitDisabled?: boolean;\r\n submitLoading?: boolean;\r\n formId?: string;\r\n}\r\n\r\nexport const FormSheet = memo(function FormSheet({\r\n open,\r\n onOpenChange,\r\n title,\r\n description,\r\n children,\r\n onSubmit,\r\n onCancel,\r\n submitLabel = \"Submit\",\r\n cancelLabel = \"Cancel\",\r\n submitDisabled = false,\r\n submitLoading = false,\r\n formId,\r\n size = \"lg\",\r\n ...props\r\n}: FormSheetProps) {\r\n const handleCancel = useCallback(() => {\r\n onCancel?.();\r\n onOpenChange?.(false);\r\n }, [onCancel, onOpenChange]);\r\n\r\n const footer = useMemo(\r\n () => (\r\n <div className=\"flex flex-col sm:flex-row gap-2 w-full\">\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className=\"flex-1\"\r\n onClick={handleCancel}\r\n disabled={submitDisabled || submitLoading}\r\n >\r\n {cancelLabel}\r\n </Button>\r\n <ClientSubmitButton\r\n form={formId}\r\n className=\"flex-1\"\r\n disabled={submitDisabled}\r\n loading={submitLoading}\r\n loadingText=\"Saving...\"\r\n >\r\n {submitLabel}\r\n </ClientSubmitButton>\r\n </div>\r\n ),\r\n [cancelLabel, submitLabel, submitDisabled, submitLoading, formId, handleCancel]\r\n );\r\n\r\n return (\r\n <SheetWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n size={size}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </SheetWrapper>\r\n );\r\n});\r\n\r\nexport interface ConfirmSheetProps extends Omit<SheetWrapperProps, \"footer\"> {\r\n onConfirm?: () => void;\r\n onCancel?: () => void;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n confirmVariant?: \"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\";\r\n confirmDisabled?: boolean;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nexport const ConfirmSheet = memo(function ConfirmSheet({\r\n open,\r\n onOpenChange,\r\n title = \"Confirm Action\",\r\n description,\r\n children,\r\n onConfirm,\r\n onCancel,\r\n confirmLabel = \"Confirm\",\r\n cancelLabel = \"Cancel\",\r\n confirmVariant = \"default\",\r\n confirmDisabled = false,\r\n confirmLoading = false,\r\n size = \"sm\",\r\n ...props\r\n}: ConfirmSheetProps) {\r\n const handleConfirm = useCallback(() => {\r\n onConfirm?.();\r\n }, [onConfirm]);\r\n\r\n const handleCancel = useCallback(() => {\r\n onCancel?.();\r\n onOpenChange?.(false);\r\n }, [onCancel, onOpenChange]);\r\n\r\n const footer = useMemo(\r\n () => (\r\n <div className=\"flex gap-2 w-full\">\r\n <Button type=\"button\" variant=\"outline\" className=\"flex-1\" onClick={handleCancel}>\r\n {cancelLabel}\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n variant={confirmVariant}\r\n className=\"flex-1\"\r\n onClick={handleConfirm}\r\n disabled={confirmDisabled || confirmLoading}\r\n >\r\n {confirmLoading ? \"Loading...\" : confirmLabel}\r\n </Button>\r\n </div>\r\n ),\r\n [\r\n cancelLabel,\r\n confirmLabel,\r\n confirmVariant,\r\n confirmDisabled,\r\n confirmLoading,\r\n handleConfirm,\r\n handleCancel,\r\n ]\r\n );\r\n\r\n return (\r\n <SheetWrapper\r\n open={open}\r\n onOpenChange={onOpenChange}\r\n title={title}\r\n description={description}\r\n size={size}\r\n footer={footer}\r\n {...props}\r\n >\r\n {children}\r\n </SheetWrapper>\r\n );\r\n});\r\n\r\n// Export base components for composition\r\nexport { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter };\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport {\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n} from \"@/components/ui/table\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface TableWrapperColumn {\r\n key?: string;\r\n header: ReactNode;\r\n className?: string;\r\n cellClassName?: string;\r\n render?: (item: any, index: number) => ReactNode;\r\n}\r\n\r\nexport interface TableWrapperEmptyState {\r\n icon?: ReactNode;\r\n title?: string;\r\n description?: string;\r\n}\r\n\r\nexport interface TableWrapperProps {\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n icon?: ReactNode;\r\n children?: ReactNode;\r\n columns?: TableWrapperColumn[];\r\n data?: any[];\r\n renderRow?: (item: any, index: number) => ReactNode;\r\n emptyState?: TableWrapperEmptyState;\r\n className?: string;\r\n tableClassName?: string;\r\n maxHeight?: string;\r\n}\r\n\r\nexport function TableWrapper({\r\n title,\r\n description,\r\n icon,\r\n children,\r\n columns,\r\n data,\r\n renderRow,\r\n emptyState,\r\n className,\r\n tableClassName,\r\n maxHeight = \"500px\",\r\n ...props\r\n}: TableWrapperProps) {\r\n const hasData = data && data.length > 0;\r\n\r\n const defaultEmptyState = emptyState || {\r\n icon: icon,\r\n title: \"No data available\",\r\n description: \"There are no items to display\",\r\n };\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)} {...props}>\r\n {(title || description) && (\r\n <div className=\"space-y-1\">\r\n {title && <h3 className=\"text-lg font-semibold\">{title}</h3>}\r\n {description && (\r\n <p className=\"text-sm text-muted-foreground\">{description}</p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!hasData ? (\r\n <div className=\"flex flex-col items-center justify-center h-48 text-muted-foreground border rounded-lg\">\r\n {defaultEmptyState.icon && (\r\n <div className=\"h-12 w-12 mb-4 opacity-50\">{defaultEmptyState.icon}</div>\r\n )}\r\n <p className=\"text-lg\">{defaultEmptyState.title}</p>\r\n {defaultEmptyState.description && (\r\n <p className=\"text-sm\">{defaultEmptyState.description}</p>\r\n )}\r\n </div>\r\n ) : (\r\n <div\r\n className={cn(\r\n \"relative overflow-auto border rounded-lg\",\r\n maxHeight && `max-h-[${maxHeight}]`\r\n )}\r\n >\r\n <Table className={tableClassName}>\r\n {columns && (\r\n <TableHeader>\r\n <TableRow>\r\n {columns.map((column, index) => (\r\n <TableHead\r\n key={`table-column-head-${column.key ?? column.header ?? index}`}\r\n className={cn(column.className)}\r\n >\r\n {column.header}\r\n </TableHead>\r\n ))}\r\n </TableRow>\r\n </TableHeader>\r\n )}\r\n <TableBody>\r\n {data?.map((item, index) =>\r\n renderRow ? (\r\n renderRow(item, index)\r\n ) : (\r\n <TableRow key={`table-row-${index}`}>{children}</TableRow>\r\n )\r\n )}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface SimpleTableProps extends Omit<TableWrapperProps, \"renderRow\" | \"children\"> {\r\n columns: TableWrapperColumn[];\r\n data: any[];\r\n}\r\n\r\nexport function SimpleTable({\r\n title,\r\n data,\r\n columns,\r\n emptyState,\r\n className,\r\n ...props\r\n}: SimpleTableProps) {\r\n const renderRow = (item: any, index: number) => (\r\n <TableRow key={`simple-table-row-${index}`}>\r\n {columns.map((column, colIndex) => (\r\n <TableCell\r\n key={`simple-table-cell-${column.key ?? column.header ?? colIndex}`}\r\n className={column.cellClassName}\r\n >\r\n {column.render ? column.render(item, index) : item[column.key!]}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n );\r\n\r\n return (\r\n <TableWrapper\r\n title={title}\r\n data={data}\r\n columns={columns}\r\n renderRow={renderRow}\r\n emptyState={emptyState}\r\n className={className}\r\n {...props}\r\n />\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { type ReactNode } from \"react\";\r\nimport {\r\n Tooltip,\r\n TooltipContent,\r\n TooltipTrigger,\r\n} from \"@/components/ui/tooltip\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport interface TooltipWrapperProps {\r\n children: ReactNode;\r\n content: ReactNode;\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n align?: \"start\" | \"center\" | \"end\";\r\n delay?: number;\r\n sideOffset?: number;\r\n className?: string;\r\n contentClassName?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function TooltipWrapper({\r\n children,\r\n content,\r\n side = \"top\",\r\n align = \"center\",\r\n delay = 700,\r\n sideOffset = 4,\r\n className,\r\n contentClassName,\r\n disabled = false,\r\n ...props\r\n}: TooltipWrapperProps) {\r\n if (disabled || !content) {\r\n return <>{children}</>;\r\n }\r\n\r\n return (\r\n <Tooltip delay={delay} {...props}>\r\n <TooltipTrigger className={className} render={children} />\r\n <TooltipContent side={side} align={align} sideOffset={sideOffset} className={cn(contentClassName)}>\r\n {content}\r\n </TooltipContent>\r\n </Tooltip>\r\n );\r\n}\r\n\r\nexport interface ButtonTooltipProps extends Omit<TooltipWrapperProps, \"content\"> {\r\n tooltip: ReactNode;\r\n variant?: \"default\" | \"outline\" | \"ghost\";\r\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\";\r\n}\r\n\r\nexport function ButtonTooltip({\r\n children,\r\n tooltip,\r\n variant = \"outline\",\r\n size = \"icon\",\r\n className,\r\n ...props\r\n}: ButtonTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} {...props}>\r\n {children}\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface IconTooltipProps extends Omit<TooltipWrapperProps, \"content\" | \"children\"> {\r\n icon: ReactNode;\r\n tooltip: ReactNode;\r\n iconClassName?: string;\r\n size?: number;\r\n}\r\n\r\nexport function IconTooltip({\r\n icon,\r\n tooltip,\r\n className,\r\n iconClassName,\r\n size = 16,\r\n ...props\r\n}: IconTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} className={className} {...props}>\r\n <div className={cn(\"cursor-pointer\", iconClassName)}>\r\n {typeof icon === \"string\" ? <span style={{ fontSize: size }}>{icon}</span> : icon}\r\n </div>\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface InfoTooltipProps extends Omit<TooltipWrapperProps, \"content\" | \"children\"> {\r\n tooltip: ReactNode;\r\n size?: number;\r\n}\r\n\r\nexport function InfoTooltip({ tooltip, className, size = 16, ...props }: InfoTooltipProps) {\r\n return (\r\n <TooltipWrapper\r\n content={tooltip}\r\n className={cn(\"inline-flex items-center\", className)}\r\n {...props}\r\n >\r\n <div\r\n className=\"rounded-full bg-muted text-muted-foreground hover:bg-muted/80 transition-colors cursor-help inline-flex items-center justify-center\"\r\n style={{ width: size, height: size, fontSize: size * 0.6 }}\r\n >\r\n ?\r\n </div>\r\n </TooltipWrapper>\r\n );\r\n}\r\n\r\nexport interface ActionTooltipProps extends Omit<TooltipWrapperProps, \"content\"> {\r\n tooltip: ReactNode;\r\n action?: () => void;\r\n variant?: \"ghost\" | \"outline\";\r\n size?: \"sm\" | \"icon\";\r\n}\r\n\r\nexport function ActionTooltip({\r\n children,\r\n tooltip,\r\n action,\r\n variant = \"ghost\",\r\n size = \"sm\",\r\n className,\r\n ...props\r\n}: ActionTooltipProps) {\r\n return (\r\n <TooltipWrapper content={tooltip} {...props}>\r\n <button\r\n onClick={action}\r\n className={cn(\r\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\r\n \"disabled:opacity-50 disabled:pointer-events-none\",\r\n variant === \"ghost\" && \"hover:bg-accent hover:text-accent-foreground\",\r\n variant === \"outline\" && \"border border-input hover:bg-accent hover:text-accent-foreground\",\r\n size === \"sm\" && \"h-8 px-2\",\r\n size === \"icon\" && \"h-8 w-8\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n </TooltipWrapper>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ChangeEvent, ReactNode, InputHTMLAttributes } from \"react\";\r\nimport * as React from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\nimport {\r\n InputGroup,\r\n InputGroupAddon,\r\n InputGroupInput,\r\n} from \"@/components/ui/input-group\";\r\nimport { cn } from \"../../utils\";\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\ninterface TransformFunctions {\r\n input?: (value: unknown) => string;\r\n output?: (value: string) => unknown;\r\n}\r\n\r\nexport interface FormInputProps<TFieldValues extends FieldValues = FieldValues> {\r\n // React Hook Form\r\n control?: Control<TFieldValues>;\r\n name: FieldPath<TFieldValues> | string;\r\n\r\n // Field configuration\r\n label?: string;\r\n placeholder?: string;\r\n description?: string;\r\n helperText?: string; // Alias for description\r\n required?: boolean;\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n type?: string;\r\n\r\n // Styling\r\n className?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n inputGroupClassName?: string;\r\n\r\n // Input group addons (PascalCase)\r\n IconLeft?: ReactNode;\r\n IconRight?: ReactNode;\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n // Input group addons (camelCase aliases)\r\n iconLeft?: ReactNode;\r\n iconRight?: ReactNode;\r\n addonLeft?: ReactNode;\r\n addonRight?: ReactNode;\r\n\r\n // Value transformation\r\n transform?: TransformFunctions;\r\n onValueChange?: (value: unknown) => void;\r\n\r\n // Direct usage (without react-hook-form)\r\n value?: string | number;\r\n onChange?: (value: unknown) => void;\r\n\r\n // HTML input attributes\r\n min?: number | string;\r\n max?: number | string;\r\n step?: number | string;\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: string;\r\n autoComplete?: string;\r\n autoFocus?: boolean;\r\n inputMode?: InputHTMLAttributes<HTMLInputElement>[\"inputMode\"];\r\n enterKeyHint?: InputHTMLAttributes<HTMLInputElement>[\"enterKeyHint\"];\r\n}\r\n\r\n// ============================================================================\r\n// COMPONENT\r\n// ============================================================================\r\n\r\n/**\r\n * FormInput - Text input with react-hook-form integration\r\n *\r\n * Features:\r\n * - Works with react-hook-form Controller\r\n * - Supports input groups with icons/addons\r\n * - Value transformation (input/output)\r\n * - Can be used standalone without form\r\n *\r\n * @example\r\n * ```tsx\r\n * // With react-hook-form\r\n * <FormInput\r\n * control={form.control}\r\n * name=\"email\"\r\n * type=\"email\"\r\n * label=\"Email\"\r\n * placeholder=\"user@example.com\"\r\n * required\r\n * />\r\n *\r\n * // With icon\r\n * <FormInput\r\n * control={form.control}\r\n * name=\"search\"\r\n * IconLeft={<SearchIcon />}\r\n * placeholder=\"Search...\"\r\n * />\r\n * ```\r\n */\r\nexport function FormInput<TFieldValues extends FieldValues = FieldValues>({\r\n control,\r\n name,\r\n label,\r\n placeholder,\r\n description,\r\n helperText,\r\n required,\r\n disabled,\r\n readOnly,\r\n type = \"text\",\r\n className,\r\n labelClassName,\r\n inputClassName,\r\n inputGroupClassName,\r\n // PascalCase variants\r\n IconLeft,\r\n IconRight,\r\n AddonLeft,\r\n AddonRight,\r\n // camelCase variants\r\n iconLeft,\r\n iconRight,\r\n addonLeft,\r\n addonRight,\r\n onValueChange,\r\n transform,\r\n value,\r\n onChange,\r\n min,\r\n max,\r\n step,\r\n minLength,\r\n maxLength,\r\n pattern,\r\n autoComplete,\r\n autoFocus,\r\n inputMode,\r\n enterKeyHint,\r\n}: FormInputProps<TFieldValues>) {\r\n // Support both PascalCase and camelCase for icons/addons\r\n const resolvedIconLeft = IconLeft || iconLeft;\r\n const resolvedIconRight = IconRight || iconRight;\r\n const resolvedAddonLeft = AddonLeft || addonLeft;\r\n const resolvedAddonRight = AddonRight || addonRight;\r\n\r\n // Use helperText as alias for description\r\n const descriptionText = description || helperText;\r\n\r\n const handleChange = (\r\n e: ChangeEvent<HTMLInputElement>,\r\n field?: { onChange: (value: unknown) => void }\r\n ) => {\r\n const newValue = transform?.output\r\n ? transform.output(e.target.value)\r\n : e.target.value;\r\n\r\n if (field) {\r\n field.onChange(newValue);\r\n } else if (onChange) {\r\n onChange(newValue);\r\n }\r\n\r\n onValueChange?.(newValue);\r\n };\r\n\r\n // Determine if we need InputGroup (has icons or addons)\r\n const hasInputGroup =\r\n resolvedIconLeft || resolvedIconRight || resolvedAddonLeft || resolvedAddonRight;\r\n\r\n const renderInput = (\r\n field?: {\r\n value: unknown;\r\n onChange: (value: unknown) => void;\r\n onBlur: () => void;\r\n name: string;\r\n ref: React.Ref<HTMLInputElement>;\r\n },\r\n isDisabled?: boolean,\r\n fieldState?: { invalid?: boolean; error?: { message?: string } }\r\n ) => {\r\n const rawValue = field\r\n ? transform?.input\r\n ? transform.input(field.value)\r\n : field.value\r\n : transform?.input\r\n ? transform.input(value)\r\n : value;\r\n const safeValue = (rawValue as string) ?? \"\";\r\n\r\n // Build input props - only include valid HTML attributes\r\n const inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\r\n ref?: React.Ref<HTMLInputElement>;\r\n } = {\r\n id: name,\r\n name: field?.name || name,\r\n type,\r\n disabled: isDisabled,\r\n readOnly,\r\n placeholder,\r\n value: safeValue,\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => handleChange(e, field),\r\n onBlur: field?.onBlur,\r\n \"aria-invalid\": fieldState?.invalid || undefined,\r\n };\r\n\r\n // Add optional HTML input attributes only if defined\r\n if (min !== undefined) inputProps.min = min;\r\n if (max !== undefined) inputProps.max = max;\r\n if (step !== undefined) inputProps.step = step;\r\n if (minLength !== undefined) inputProps.minLength = minLength;\r\n if (maxLength !== undefined) inputProps.maxLength = maxLength;\r\n if (pattern !== undefined) inputProps.pattern = pattern;\r\n if (autoComplete !== undefined) inputProps.autoComplete = autoComplete;\r\n if (autoFocus !== undefined) inputProps.autoFocus = autoFocus;\r\n if (inputMode !== undefined) inputProps.inputMode = inputMode;\r\n if (enterKeyHint !== undefined) inputProps.enterKeyHint = enterKeyHint;\r\n\r\n // Add field ref if present\r\n if (field?.ref) {\r\n inputProps.ref = field.ref;\r\n }\r\n\r\n if (hasInputGroup) {\r\n return (\r\n <InputGroup\r\n className={cn(inputGroupClassName)}\r\n data-disabled={isDisabled}\r\n >\r\n {(resolvedAddonLeft || resolvedIconLeft) && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {resolvedAddonLeft || resolvedIconLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput {...inputProps} className={inputClassName} />\r\n {(resolvedAddonRight || resolvedIconRight) && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {resolvedAddonRight || resolvedIconRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n );\r\n }\r\n\r\n return <Input {...inputProps} className={inputClassName} />;\r\n };\r\n\r\n // Direct usage without React Hook Form\r\n if (!control) {\r\n return (\r\n <Field className={className} data-disabled={disabled}>\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderInput(undefined, disabled, undefined)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n </Field>\r\n );\r\n }\r\n\r\n // Using with React Hook Form\r\n return (\r\n <Controller\r\n name={name as FieldPath<TFieldValues>}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field\r\n className={className}\r\n data-disabled={disabled}\r\n data-invalid={fieldState.invalid}\r\n >\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderInput(field, disabled, fieldState)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n {fieldState.invalid && fieldState.error && (\r\n <FieldError errors={[fieldState.error]} />\r\n )}\r\n </Field>\r\n )}\r\n />\r\n );\r\n}\r\n\r\n// Default export for flexibility\r\nexport default FormInput;\r\n","\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupTextarea,\n} from \"@/components/ui/input-group\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface FormTextareaProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n rows?: number;\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n textareaClassName?: string;\n inputGroupClassName?: string;\n\n // Input group addons (PascalCase)\n IconLeft?: React.ReactNode;\n IconRight?: React.ReactNode;\n AddonLeft?: React.ReactNode;\n AddonRight?: React.ReactNode;\n // Input group addons (camelCase aliases)\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n addonLeft?: React.ReactNode;\n addonRight?: React.ReactNode;\n\n // HTML textarea attributes\n minLength?: number;\n maxLength?: number;\n autoComplete?: string;\n autoFocus?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * FormTextarea - Textarea with react-hook-form integration\n *\n * @example\n * ```tsx\n * <FormTextarea\n * control={form.control}\n * name=\"bio\"\n * label=\"Biography\"\n * placeholder=\"Tell us about yourself...\"\n * rows={5}\n * />\n * ```\n */\nexport function FormTextarea<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n readOnly,\n placeholder,\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n textareaClassName,\n inputGroupClassName,\n // PascalCase variants\n IconLeft,\n IconRight,\n AddonLeft,\n AddonRight,\n // camelCase variants\n iconLeft,\n iconRight,\n addonLeft,\n addonRight,\n rows = 3,\n minLength,\n maxLength,\n autoComplete,\n autoFocus,\n}: FormTextareaProps<TFieldValues>) {\n // Support both PascalCase and camelCase for icons/addons\n const resolvedIconLeft = IconLeft || iconLeft;\n const resolvedIconRight = IconRight || iconRight;\n const resolvedAddonLeft = AddonLeft || addonLeft;\n const resolvedAddonRight = AddonRight || addonRight;\n\n const descriptionText = description || helperText;\n\n // Determine if we need InputGroup (has icons or addons)\n const hasInputGroup =\n resolvedIconLeft || resolvedIconRight || resolvedAddonLeft || resolvedAddonRight;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (value: string) => {\n setLocalValue(value);\n propOnChange?.(value);\n onValueChange?.(value);\n };\n\n const renderTextarea = (\n field?: {\n value: string;\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => void;\n onBlur: () => void;\n name: string;\n ref: React.Ref<HTMLTextAreaElement>;\n },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean; error?: { message?: string } }\n ) => {\n // Get value from either form field or direct props\n const value = field ? field.value : localValue;\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n\n if (field) {\n field.onChange(e);\n } else {\n handleDirectValueChange(newValue);\n }\n\n onValueChange?.(newValue);\n };\n\n // Build textarea props - only include valid HTML attributes\n const textareaProps: React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n ref?: React.Ref<HTMLTextAreaElement>;\n } = {\n id: name,\n name: field?.name || name,\n value: value ?? \"\",\n placeholder,\n disabled: isDisabled,\n readOnly,\n rows,\n onChange: handleChange,\n onBlur: field?.onBlur,\n \"aria-invalid\": fieldState?.invalid || undefined,\n };\n\n // Add optional HTML textarea attributes only if defined\n if (minLength !== undefined) textareaProps.minLength = minLength;\n if (maxLength !== undefined) textareaProps.maxLength = maxLength;\n if (autoComplete !== undefined) textareaProps.autoComplete = autoComplete;\n if (autoFocus !== undefined) textareaProps.autoFocus = autoFocus;\n\n // Add field ref if present\n if (field?.ref) {\n textareaProps.ref = field.ref;\n }\n\n if (hasInputGroup) {\n return (\n <InputGroup\n className={cn(inputGroupClassName)}\n data-disabled={isDisabled}\n >\n {(resolvedAddonLeft || resolvedIconLeft) && (\n <InputGroupAddon align=\"inline-start\">\n {resolvedAddonLeft || resolvedIconLeft}\n </InputGroupAddon>\n )}\n <InputGroupTextarea\n {...textareaProps}\n className={cn(\"overflow-auto resize-none\", textareaClassName)}\n />\n {(resolvedAddonRight || resolvedIconRight) && (\n <InputGroupAddon align=\"inline-end\">\n {resolvedAddonRight || resolvedIconRight}\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n }\n\n return (\n <Textarea\n {...textareaProps}\n className={cn(\"overflow-auto resize-none\", textareaClassName)}\n />\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderTextarea(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderTextarea(field, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default FormTextarea;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SelectGroup,\n SelectLabel,\n} from \"@/components/ui/select\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: string;\n items: SelectOption[];\n}\n\nexport interface SelectInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: SelectOption[];\n groups?: SelectOptionGroup[];\n allOption?: SelectOption;\n\n // Value handling\n valueKey?: string;\n displayKey?: string;\n value?: string | number;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n triggerClassName?: string;\n contentClassName?: string;\n itemClassName?: string;\n Icon?: React.ComponentType<{ className?: string }>;\n\n // Select behavior\n defaultOpen?: boolean;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n sideOffset?: number;\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SelectInput - Select dropdown with react-hook-form integration\n *\n * Features:\n * - Flat and grouped options\n * - Custom placeholder\n * - Optional \"All\" option (use placeholder text to match)\n * - Custom styling\n *\n * Note: For \"All\" options with value=\"\", the placeholder will be shown when selected.\n * Make sure your placeholder text matches what you want to display for \"All\".\n *\n * @example\n * ```tsx\n * // Basic usage\n * <SelectInput\n * control={form.control}\n * name=\"role\"\n * label=\"Role\"\n * items={[\n * { value: \"admin\", label: \"Admin\" },\n * { value: \"user\", label: \"User\" },\n * ]}\n * />\n *\n * // With \"All\" option - placeholder shows when \"All\" is selected\n * <SelectInput\n * name=\"status\"\n * label=\"Status\"\n * items={[\n * { value: \"\", label: \"All\" }, // This will show placeholder when selected\n * { value: \"active\", label: \"Active\" },\n * ]}\n * placeholder=\"All\" // Make sure this matches the \"All\" label\n * />\n * ```\n */\nexport function SelectInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n items = [],\n groups = [],\n name,\n label,\n placeholder = \"Select option\",\n allOption,\n description,\n helperText,\n required,\n disabled,\n className,\n labelClassName,\n triggerClassName,\n contentClassName,\n itemClassName,\n Icon,\n onValueChange,\n value: propValue,\n defaultOpen,\n side = \"bottom\",\n sideOffset = 4,\n align = \"start\",\n alignOffset = 0,\n}: SelectInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // Special value for \"clear/all\" options - Base UI Select doesn't handle empty strings well\n const CLEAR_VALUE = \"__CLEAR__\";\n\n // Filter out items with undefined or null values only\n const filteredItems = items.filter((item) => {\n const val = item.value;\n return val !== undefined && val !== null;\n });\n const displayItems = allOption ? [allOption, ...filteredItems] : filteredItems;\n\n // Filter groups to remove items with undefined/null values\n const filteredGroups = groups\n .map((group) => ({\n ...group,\n items: group.items.filter((item) => {\n const val = item.value;\n return val !== undefined && val !== null;\n }),\n }))\n .filter((group) => group.items.length > 0);\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue?.toString() || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue.toString());\n }\n }, [propValue]);\n\n const renderSelect = (\n field?: { value: unknown; onChange: (value: string) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Use field value if React Hook Form is used, otherwise use local state\n const rawValue = field ? field.value?.toString() : localValue;\n\n const handleChange = (newValue: string) => {\n // Convert CLEAR_VALUE back to empty string for the actual value\n const actualValue = newValue === CLEAR_VALUE ? \"\" : newValue;\n if (field) {\n field.onChange(actualValue);\n } else {\n setLocalValue(actualValue);\n }\n onValueChange?.(actualValue);\n };\n\n // Helper to get value from item - convert empty strings to CLEAR_VALUE\n const getItemValue = (item: SelectOption, fallback: string): string => {\n const val =\n item.value !== undefined && item.value !== null\n ? item.value.toString()\n : fallback;\n // Convert empty string to CLEAR_VALUE for Select compatibility\n return val === \"\" ? CLEAR_VALUE : val;\n };\n\n // Helper to get label from item\n const getItemLabel = (item: SelectOption): string => {\n return item.label;\n };\n\n const getUniqueReactKey = (\n item: SelectOption,\n fallback: string,\n seen: Map<string, number>\n ): string => {\n const itemValue = getItemValue(item, fallback);\n const itemLabel = getItemLabel(item);\n const baseKey = `${itemValue}::${itemLabel}`;\n const nextCount = (seen.get(baseKey) ?? 0) + 1;\n seen.set(baseKey, nextCount);\n return nextCount === 1 ? baseKey : `${baseKey}::${nextCount}`;\n };\n\n // Render grouped options\n const renderGroupedContent = () => {\n if (filteredGroups.length === 0) return null;\n\n return filteredGroups.map((group, groupIdx) => {\n const seenKeys = new Map<string, number>();\n\n return (\n <SelectGroup key={`group-${groupIdx}`}>\n {group.label && <SelectLabel>{group.label}</SelectLabel>}\n {group.items.map((item, idx) => {\n const itemValue = getItemValue(item, `item-${groupIdx}-${idx}`);\n return (\n <SelectItem\n key={getUniqueReactKey(item, `item-${groupIdx}-${idx}`, seenKeys)}\n value={itemValue}\n className={cn(\"cursor-pointer\", itemClassName)}\n disabled={item.disabled}\n >\n {getItemLabel(item)}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n });\n };\n\n // Render flat options\n const renderFlatContent = () => {\n if (displayItems.length === 0) {\n return (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No options available\n </div>\n );\n }\n\n const seenKeys = new Map<string, number>();\n return displayItems.map((item, idx) => {\n const itemValue = getItemValue(item, `item-${idx}`);\n return (\n <SelectItem\n key={getUniqueReactKey(item, `item-${idx}`, seenKeys)}\n value={itemValue}\n className={cn(\"cursor-pointer\", itemClassName)}\n disabled={item.disabled}\n >\n {getItemLabel(item)}\n </SelectItem>\n );\n });\n };\n\n // Pass value to Select:\n // - If rawValue is \"\" (empty string), pass CLEAR_VALUE to match the \"All\" SelectItem\n // - If rawValue has a real value, pass it to match the corresponding SelectItem\n // - If rawValue is undefined/null, pass undefined to show placeholder\n const selectValue = rawValue === \"\"\n ? CLEAR_VALUE\n : rawValue\n ? rawValue\n : undefined;\n\n // Find the label for the current value to display in the trigger\n // This is needed because Base UI Select doesn't auto-match value to item label\n const findSelectedLabel = (): string | undefined => {\n if (!rawValue && rawValue !== \"\") return undefined;\n\n // Check in flat items\n for (const item of displayItems) {\n const itemVal = item.value?.toString() ?? \"\";\n if (itemVal === rawValue || (itemVal === \"\" && rawValue === \"\")) {\n return item.label;\n }\n }\n\n // Check in grouped items\n for (const group of filteredGroups) {\n for (const item of group.items) {\n const itemVal = item.value?.toString() ?? \"\";\n if (itemVal === rawValue) {\n return item.label;\n }\n }\n }\n\n return undefined;\n };\n\n const selectedLabel = findSelectedLabel();\n\n return (\n <Select\n onValueChange={handleChange}\n value={selectValue}\n disabled={isDisabled}\n defaultOpen={defaultOpen}\n >\n <SelectTrigger\n className={cn(\"w-full\", triggerClassName)}\n aria-invalid={fieldState?.invalid || undefined}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4 text-primary\" />}\n <SelectValue placeholder={placeholder}>\n {selectedLabel || null}\n </SelectValue>\n </SelectTrigger>\n <SelectContent\n className={cn(contentClassName)}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n >\n {filteredGroups.length > 0 ? renderGroupedContent() : renderFlatContent()}\n </SelectContent>\n </Select>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderSelect(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderSelect(field, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default SelectInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface CheckboxItem {\n id: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Checkbox items (for multi-checkbox)\n items?: CheckboxItem[];\n\n // Value handling (for direct usage)\n value?: string[];\n onChange?: (values: string[]) => void;\n onValueChange?: (values: string[]) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n checkboxClassName?: string;\n itemClassName?: string;\n itemLabelClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * CheckboxInput - Checkbox group with react-hook-form integration\n *\n * Features:\n * - Multiple checkbox items\n * - Array value support\n * - Can be used standalone\n *\n * @example\n * ```tsx\n * <CheckboxInput\n * control={form.control}\n * name=\"features\"\n * label=\"Features\"\n * items={[\n * { id: \"wifi\", label: \"WiFi\" },\n * { id: \"parking\", label: \"Parking\" },\n * { id: \"pool\", label: \"Pool\" },\n * ]}\n * />\n * ```\n */\nexport function CheckboxInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n items = [],\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n checkboxClassName,\n itemClassName,\n itemLabelClassName,\n}: CheckboxInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // For direct usage without React Hook Form\n const [localValues, setLocalValues] = useState<string[]>(propValue || []);\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValues(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValues: string[]) => {\n setLocalValues(newValues);\n propOnChange?.(newValues);\n onValueChange?.(newValues);\n };\n\n const renderCheckboxes = (\n field?: { value: string[]; onChange: (values: string[]) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get values from either form field or direct props\n const values: string[] = field?.value || localValues || [];\n\n const handleCheckedChange = (itemId: string, checked: boolean) => {\n const newValues = checked\n ? [...values, itemId]\n : values.filter((value) => value !== itemId);\n\n if (field) {\n field.onChange(newValues);\n } else {\n handleDirectValueChange(newValues);\n }\n\n onValueChange?.(newValues);\n };\n\n return (\n <div data-slot=\"checkbox-group\" className=\"space-y-2\">\n {items.map((item) => (\n <div\n key={item.id}\n className={cn(\"flex items-center gap-2\", itemClassName)}\n >\n <Checkbox\n id={`${name}-${item.id}`}\n className={checkboxClassName}\n checked={values.includes(item.id)}\n disabled={isDisabled || item.disabled}\n onCheckedChange={(checked: boolean) =>\n handleCheckedChange(item.id, checked)\n }\n aria-invalid={fieldState?.invalid || undefined}\n />\n <label\n htmlFor={`${name}-${item.id}`}\n className={cn(\n \"text-sm font-normal cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n itemLabelClassName\n )}\n >\n {item.label}\n </label>\n </div>\n ))}\n </div>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCheckboxes(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCheckboxes(\n field as { value: string[]; onChange: (values: string[]) => void },\n disabled,\n fieldState\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default CheckboxInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface RadioChoice {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Radio options\n choices?: RadioChoice[];\n items?: RadioChoice[]; // Alias for choices (for FormKit compatibility)\n\n // Layout\n orientation?: \"vertical\" | \"horizontal\";\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n radioGroupClassName?: string;\n radioItemClassName?: string;\n radioLabelClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * RadioInput - Radio group with react-hook-form integration\n *\n * @example\n * ```tsx\n * <RadioInput\n * control={form.control}\n * name=\"plan\"\n * label=\"Select Plan\"\n * choices={[\n * { value: \"free\", label: \"Free\" },\n * { value: \"pro\", label: \"Pro\" },\n * { value: \"enterprise\", label: \"Enterprise\" },\n * ]}\n * orientation=\"horizontal\"\n * />\n * ```\n */\nexport function RadioInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n choices = [],\n items,\n orientation = \"vertical\",\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n radioGroupClassName,\n radioItemClassName,\n radioLabelClassName,\n}: RadioInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // Support both 'choices' and 'items' prop names\n const radioOptions = items || choices;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<string>(propValue || \"\");\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValue: string) => {\n setLocalValue(newValue);\n propOnChange?.(newValue);\n onValueChange?.(newValue);\n };\n\n const renderRadioGroup = (\n field?: { value: string; onChange: (value: string) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get value from either form field or direct props\n const value = field ? field.value : localValue;\n\n const handleValueChange = (newValue: string) => {\n if (field) {\n field.onChange(newValue);\n } else {\n handleDirectValueChange(newValue);\n }\n\n onValueChange?.(newValue);\n };\n\n return (\n <RadioGroup\n value={value}\n onValueChange={handleValueChange}\n disabled={isDisabled}\n aria-invalid={fieldState?.invalid || undefined}\n className={cn(\n orientation === \"horizontal\"\n ? \"flex flex-row flex-wrap gap-4\"\n : \"flex flex-col gap-3\",\n radioGroupClassName\n )}\n >\n {radioOptions.map((choice) => (\n <div\n key={choice.value}\n className={cn(\n \"flex items-center gap-2\",\n radioItemClassName\n )}\n >\n <RadioGroupItem\n id={`${name}-${choice.value}`}\n value={choice.value}\n disabled={isDisabled || choice.disabled}\n />\n <label\n htmlFor={`${name}-${choice.value}`}\n className={cn(\n \"text-sm font-normal cursor-pointer leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n radioLabelClassName\n )}\n >\n {choice.label}\n </label>\n </div>\n ))}\n </RadioGroup>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderRadioGroup(undefined, disabled, undefined)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderRadioGroup(\n field as { value: string; onChange: (value: string) => void },\n disabled,\n fieldState\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default RadioInput;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SwitchInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Layout\n orientation?: \"horizontal\" | \"vertical\";\n\n // Value handling\n value?: boolean;\n onChange?: (value: boolean) => void;\n onValueChange?: (value: boolean) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n switchClassName?: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SwitchInput - Toggle switch with react-hook-form integration\n *\n * @example\n * ```tsx\n * <SwitchInput\n * control={form.control}\n * name=\"notifications\"\n * label=\"Enable notifications\"\n * description=\"Receive email updates\"\n * />\n * ```\n */\nexport function SwitchInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n required,\n disabled,\n orientation = \"horizontal\",\n value: propValue,\n onChange: propOnChange,\n onValueChange,\n className,\n labelClassName,\n switchClassName,\n}: SwitchInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // For direct usage without React Hook Form\n const [localValue, setLocalValue] = useState<boolean>(propValue || false);\n\n // Update local value when prop value changes\n useEffect(() => {\n if (propValue !== undefined) {\n setLocalValue(propValue);\n }\n }, [propValue]);\n\n // Handle direct value changes (without React Hook Form)\n const handleDirectValueChange = (newValue: boolean) => {\n setLocalValue(newValue);\n propOnChange?.(newValue);\n onValueChange?.(newValue);\n };\n\n const renderSwitch = (\n field?: { value: boolean; onChange: (value: boolean) => void },\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean }\n ) => {\n // Get value from either form field or direct props\n const value = field ? (field.value ?? false) : (localValue ?? false);\n\n const handleCheckedChange = (checked: boolean) => {\n if (field) {\n field.onChange(checked);\n } else {\n handleDirectValueChange(checked);\n }\n\n onValueChange?.(checked);\n };\n\n return (\n <Switch\n id={name}\n checked={value}\n onCheckedChange={handleCheckedChange}\n disabled={isDisabled}\n className={switchClassName}\n aria-invalid={fieldState?.invalid || undefined}\n />\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field\n className={className}\n data-disabled={disabled}\n orientation={orientation}\n >\n {renderSwitch(undefined, disabled, undefined)}\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n orientation={orientation}\n >\n {renderSwitch(\n field as { value: boolean; onChange: (value: boolean) => void },\n disabled,\n fieldState\n )}\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </FieldContent>\n </Field>\n )}\n />\n );\n}\n\n// Default export for flexibility\nexport default SwitchInput;\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Controller } from \"react-hook-form\";\r\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { CalendarIcon, X } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\ntype DateValue = Date | string | null | undefined;\r\n\r\nexport interface DateInputProps<TFieldValues extends FieldValues = FieldValues> {\r\n // React Hook Form\r\n control?: Control<TFieldValues>;\r\n name: FieldPath<TFieldValues> | string;\r\n\r\n // Field configuration\r\n label?: string;\r\n placeholder?: string;\r\n description?: string;\r\n helperText?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n\r\n // Date constraints\r\n minDate?: DateValue;\r\n maxDate?: DateValue;\r\n\r\n // Value handling\r\n value?: DateValue;\r\n onChange?: (date: Date | undefined) => void;\r\n onValueChange?: (date: Date | undefined) => void;\r\n\r\n // Styling\r\n className?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n\r\n // Options\r\n Icon?: React.ComponentType<{ className?: string }>;\r\n allowClear?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// HELPERS\r\n// ============================================================================\r\n\r\n/**\r\n * Convert various date formats to Date object\r\n */\r\nfunction toDate(val: DateValue): Date | undefined {\r\n if (!val) return undefined;\r\n if (val instanceof Date) return val;\r\n // Handle YYYY-MM-DD format\r\n if (typeof val === \"string\" && /^\\d{4}-\\d{2}-\\d{2}$/.test(val)) {\r\n const [y, m, d] = val.split(\"-\").map(Number);\r\n const dt = new Date(y!, (m || 1) - 1, d || 1);\r\n return isNaN(dt.getTime()) ? undefined : dt;\r\n }\r\n const dt = new Date(val);\r\n return isNaN(dt.getTime()) ? undefined : dt;\r\n}\r\n\r\n// ============================================================================\r\n// COMPONENT\r\n// ============================================================================\r\n\r\n/**\r\n * DateInput - Date picker with react-hook-form integration\r\n *\r\n * @example\r\n * ```tsx\r\n * <DateInput\r\n * control={form.control}\r\n * name=\"birthDate\"\r\n * label=\"Date of Birth\"\r\n * minDate=\"1900-01-01\"\r\n * maxDate={new Date()}\r\n * />\r\n * ```\r\n */\r\nexport function DateInput<TFieldValues extends FieldValues = FieldValues>({\r\n control,\r\n name,\r\n label,\r\n description,\r\n helperText,\r\n placeholder = \"Pick a date\",\r\n required,\r\n disabled,\r\n className,\r\n labelClassName,\r\n inputClassName,\r\n minDate,\r\n maxDate,\r\n onValueChange,\r\n value: propValue,\r\n onChange: propOnChange,\r\n Icon = CalendarIcon,\r\n allowClear = true,\r\n}: DateInputProps<TFieldValues>) {\r\n const descriptionText = description || helperText;\r\n\r\n // Check if date should be disabled\r\n const isDateDisabled = (date: Date): boolean => {\r\n if (!date) return false;\r\n const minDateObj = toDate(minDate);\r\n const maxDateObj = toDate(maxDate);\r\n if (minDateObj && date < minDateObj) return true;\r\n if (maxDateObj && date > maxDateObj) return true;\r\n return false;\r\n };\r\n\r\n // Render the date picker UI\r\n const renderDateInput = (\r\n field?: { value: DateValue; onChange: (date: Date | undefined) => void },\r\n isDisabled?: boolean\r\n ) => {\r\n const value = field ? field.value : propValue;\r\n const selected = toDate(value);\r\n const [open, setOpen] = useState(false);\r\n\r\n const handleSelect = (date: Date | undefined) => {\r\n if (field) field.onChange(date);\r\n else if (propOnChange) propOnChange(date);\r\n onValueChange?.(date);\r\n setOpen(false);\r\n };\r\n\r\n const handleClear = (e: React.MouseEvent) => {\r\n e?.stopPropagation?.();\r\n if (field) field.onChange(undefined);\r\n else if (propOnChange) propOnChange(undefined);\r\n onValueChange?.(undefined);\r\n };\r\n\r\n const displayText = selected\r\n ? selected.toLocaleDateString(\"en-US\", {\r\n month: \"short\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n })\r\n : placeholder;\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start text-left font-normal\",\r\n !selected && \"text-muted-foreground\",\r\n inputClassName\r\n )}\r\n disabled={isDisabled}\r\n >\r\n <Icon className=\"mr-2 h-4 w-4\" />\r\n {displayText}\r\n {allowClear && selected && !isDisabled && (\r\n <X\r\n className=\"ml-auto h-4 w-4 opacity-50 hover:opacity-100\"\r\n onClick={handleClear}\r\n />\r\n )}\r\n </Button>\r\n }\r\n />\r\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\r\n <Calendar\r\n mode=\"single\"\r\n defaultMonth={selected}\r\n selected={selected}\r\n onSelect={handleSelect}\r\n disabled={isDateDisabled}\r\n initialFocus\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n };\r\n\r\n // Direct usage without React Hook Form\r\n if (!control) {\r\n return (\r\n <Field className={className} data-disabled={disabled}>\r\n {label && (\r\n <FieldLabel htmlFor={name} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderDateInput(undefined, disabled)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n </Field>\r\n );\r\n }\r\n\r\n // Using with React Hook Form via Controller\r\n return (\r\n <Controller\r\n name={name as FieldPath<TFieldValues>}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field\r\n className={className}\r\n data-disabled={disabled}\r\n data-invalid={fieldState.invalid}\r\n >\r\n {label && (\r\n <FieldLabel htmlFor={name as string} className={labelClassName}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n )}\r\n {renderDateInput(field as { value: DateValue; onChange: (date: Date | undefined) => void }, disabled)}\r\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\r\n {fieldState.invalid && fieldState.error && (\r\n <FieldError errors={[fieldState.error]} />\r\n )}\r\n </Field>\r\n )}\r\n />\r\n );\r\n}\r\n\r\nexport default DateInput;\r\n","\"use client\";\n\nimport { useState, useRef, useCallback, useMemo, type ClipboardEvent, type KeyboardEvent, type ChangeEvent } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues } from \"react-hook-form\";\nimport { X, Plus, Tag } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldContent,\n} from \"@/components/ui/field\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n InputGroup,\n InputGroupInput,\n InputGroupAddon,\n} from \"@/components/ui/input-group\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TagInputProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Tag behavior\n maxTags?: number;\n allowDuplicates?: boolean;\n delimiter?: string;\n\n // Suggestions\n suggestions?: string[];\n suggestionLimit?: number;\n\n // Value handling\n value?: string[];\n onChange?: (tags: string[]) => void;\n onValueChange?: (tags: string[]) => void;\n\n // Tag validation/transformation\n validateTag?: (tag: string) => boolean;\n transformTag?: (tag: string) => string;\n formatTag?: (tag: string) => string;\n\n // Styling\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n\n // Additional props\n [key: string]: unknown;\n}\n\ninterface RenderTagInputProps {\n field: { value: string[]; onChange: (tags: string[]) => void } | null;\n disabled?: boolean;\n error?: string | null;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * TagInput - Tag/chip input with react-hook-form integration\n *\n * @example\n * ```tsx\n * <TagInput\n * control={form.control}\n * name=\"tags\"\n * label=\"Tags\"\n * placeholder=\"Add tags...\"\n * maxTags={10}\n * suggestions={[\"react\", \"typescript\", \"nextjs\"]}\n * />\n * ```\n */\nexport function TagInput({\n control,\n name,\n label,\n description,\n helperText,\n placeholder = \"Add tag...\",\n required,\n disabled,\n className,\n labelClassName,\n inputClassName,\n maxTags,\n allowDuplicates = false,\n suggestions = [],\n suggestionLimit = 8,\n value: propValue = [],\n onChange: propOnChange,\n onValueChange,\n delimiter = \",\",\n validateTag,\n transformTag,\n formatTag,\n ...props\n}: TagInputProps) {\n const descriptionText = description || helperText;\n const [inputValue, setInputValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Parse and validate multiple tags from a string\n const parseMultipleTags = useCallback(\n (input: string): string[] => {\n if (!input.trim()) return [];\n\n return input\n .split(delimiter)\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0)\n .map((tag) => (transformTag ? transformTag(tag) : tag))\n .filter((tag) => !validateTag || validateTag(tag));\n },\n [delimiter, validateTag, transformTag]\n );\n\n // Add multiple tags at once\n const handleAddMultipleTags = useCallback(\n (\n tags: string[],\n newTags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n if (!newTags || newTags.length === 0) return tags;\n\n const updatedTags = [...tags];\n let addedCount = 0;\n\n for (const newTag of newTags) {\n if (!newTag.trim()) continue;\n\n const trimmedTag = newTag.trim();\n\n if (!allowDuplicates && updatedTags.includes(trimmedTag)) {\n continue;\n }\n\n if (maxTags && updatedTags.length >= maxTags) {\n break;\n }\n\n updatedTags.push(trimmedTag);\n addedCount++;\n }\n\n if (addedCount > 0) {\n if (field) {\n field.onChange(updatedTags);\n } else if (propOnChange) {\n propOnChange(updatedTags);\n }\n onValueChange?.(updatedTags);\n }\n\n return updatedTags;\n },\n [allowDuplicates, maxTags, propOnChange, onValueChange]\n );\n\n // Handle single tag addition\n const handleAddTag = useCallback(\n (\n tags: string[],\n newTag: string,\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n const tagsToAdd = parseMultipleTags(newTag);\n const updatedTags = handleAddMultipleTags(tags, tagsToAdd, field);\n setInputValue(\"\");\n return updatedTags;\n },\n [parseMultipleTags, handleAddMultipleTags]\n );\n\n const handleRemoveTag = useCallback(\n (\n tags: string[],\n indexToRemove: number,\n field: { onChange: (tags: string[]) => void } | null\n ): string[] => {\n const updatedTags = tags.filter((_, index) => index !== indexToRemove);\n\n if (field) {\n field.onChange(updatedTags);\n } else if (propOnChange) {\n propOnChange(updatedTags);\n }\n\n onValueChange?.(updatedTags);\n return updatedTags;\n },\n [propOnChange, onValueChange]\n );\n\n // Handle input change\n const handleInputChange = useCallback(\n (\n e: ChangeEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n const value = e.target.value;\n\n if (value.includes(delimiter)) {\n const parts = value.split(delimiter);\n const completeTags = parts.slice(0, -1);\n const remainingInput = parts[parts.length - 1] || \"\";\n\n if (completeTags.length > 0) {\n handleAddMultipleTags(\n tags,\n completeTags.map((t) => t.trim()).filter((t) => t),\n field\n );\n }\n\n setInputValue(remainingInput);\n } else {\n setInputValue(value);\n }\n },\n [delimiter, handleAddMultipleTags]\n );\n\n // Handle paste events\n const handlePaste = useCallback(\n (\n e: ClipboardEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n e.preventDefault();\n const pastedText = e.clipboardData.getData(\"text\");\n const pastedTags = parseMultipleTags(pastedText);\n\n if (pastedTags.length > 0) {\n handleAddMultipleTags(tags, pastedTags, field);\n setInputValue(\"\");\n }\n },\n [parseMultipleTags, handleAddMultipleTags]\n );\n\n const handleKeyDown = useCallback(\n (\n e: KeyboardEvent<HTMLInputElement>,\n tags: string[],\n field: { onChange: (tags: string[]) => void } | null\n ) => {\n if (e.key === \"Enter\" || e.key === delimiter) {\n e.preventDefault();\n handleAddTag(tags, inputValue, field);\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\n e.preventDefault();\n handleRemoveTag(tags, tags.length - 1, field);\n }\n },\n [delimiter, inputValue, handleAddTag, handleRemoveTag]\n );\n\n const getPlaceholder = useCallback(\n (tagsCount: number): string => {\n if (tagsCount === 0) {\n return placeholder.includes(\"comma\")\n ? placeholder\n : `${placeholder} (separate with ${delimiter} for multiple)`;\n }\n return \"Add another...\";\n },\n [placeholder, delimiter]\n );\n\n const canAddMoreTags = useCallback(\n (tagsLength: number): boolean => {\n return !maxTags || tagsLength < maxTags;\n },\n [maxTags]\n );\n\n const renderTagInput = ({ field, disabled: isDisabled, error }: RenderTagInputProps) => {\n const tags: string[] = field ? field.value || [] : propValue || [];\n const showInput = !isDisabled && canAddMoreTags(tags.length);\n const normalizedInputRaw = (inputValue || \"\").trim();\n const normalizedInput = (transformTag ? transformTag(normalizedInputRaw) : normalizedInputRaw)\n .toLowerCase()\n .trim();\n\n const filteredSuggestions = useMemo(() => {\n if (!normalizedInput) return [];\n const existingSet = new Set(tags.map((t) => t.toLowerCase()));\n return suggestions\n .filter(Boolean)\n .map((s) => (transformTag ? transformTag(s) : s))\n .filter((s) => s.toLowerCase().includes(normalizedInput))\n .filter((s) => allowDuplicates || !existingSet.has(s.toLowerCase()))\n .slice(0, suggestionLimit);\n }, [normalizedInput, tags, suggestions, transformTag, allowDuplicates, suggestionLimit]);\n\n return (\n <>\n {/* Tags Display Area */}\n {tags.length > 0 && (\n <div\n className={cn(\n \"flex flex-wrap gap-1.5 mb-3\",\n \"p-2.5 rounded-md bg-muted/30 border border-border/50\"\n )}\n >\n {tags.map((tag, index) => {\n const displayTag = formatTag ? formatTag(tag) : tag;\n\n return (\n <Badge\n key={`${tag}-${index}`}\n variant=\"secondary\"\n className={cn(\n \"group flex items-center gap-1.5 px-2.5 py-1\",\n \"bg-background border border-border shadow-sm\",\n \"hover:border-primary/50 transition-all duration-200\",\n \"animate-in fade-in-0 zoom-in-95\",\n isDisabled && \"opacity-60\"\n )}\n >\n <Tag className=\"h-3 w-3 text-muted-foreground\" />\n <span\n className=\"max-w-[200px] truncate text-sm font-medium\"\n title={displayTag}\n >\n {displayTag}\n </span>\n {!isDisabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-4 w-4 p-0 ml-0.5\",\n \"text-muted-foreground/60 hover:text-destructive\",\n \"hover:bg-destructive/10 rounded-sm\",\n \"transition-colors\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveTag(tags, index, field);\n }}\n aria-label={`Remove ${displayTag}`}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </Badge>\n );\n })}\n </div>\n )}\n\n {/* Input Field */}\n {showInput && (\n <div className=\"space-y-3\">\n <InputGroup className={cn(error && \"border-destructive\")}>\n <InputGroupAddon align=\"inline-start\">\n <Tag className=\"h-4 w-4\" />\n </InputGroupAddon>\n <InputGroupInput\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleInputChange(e, tags, field)}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => handleKeyDown(e, tags, field)}\n onPaste={(e: ClipboardEvent<HTMLInputElement>) => handlePaste(e, tags, field)}\n placeholder={getPlaceholder(tags.length)}\n disabled={isDisabled}\n aria-label=\"Add new tag\"\n aria-invalid={!!error}\n className={inputClassName}\n {...props}\n />\n {inputValue.trim() && (\n <InputGroupAddon align=\"inline-end\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-primary hover:text-primary hover:bg-primary/10\"\n onClick={() => handleAddTag(tags, inputValue, field)}\n aria-label=\"Add tag\"\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n </InputGroupAddon>\n )}\n </InputGroup>\n\n {/* Suggestions list */}\n {filteredSuggestions.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 p-2 rounded-md bg-muted/30 border border-dashed\">\n <span className=\"text-xs text-muted-foreground font-medium w-full mb-1\">\n Suggestions:\n </span>\n {filteredSuggestions.map((sug) => (\n <Button\n key={sug}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(\n \"h-7 px-2.5 text-xs\",\n \"hover:border-primary/50 hover:bg-primary/5\",\n \"transition-all duration-200\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleAddMultipleTags(tags, [sug], field);\n setInputValue(\"\");\n }}\n aria-label={`Add ${formatTag ? formatTag(sug) : sug}`}\n >\n {formatTag ? formatTag(sug) : sug}\n <Plus className=\"h-3 w-3 ml-1.5 opacity-70\" />\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Status indicators */}\n {maxTags && (\n <div\n className={cn(\n \"text-xs font-medium mt-2 flex items-center gap-1.5\",\n tags.length >= maxTags\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n )}\n >\n <div\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n tags.length >= maxTags\n ? \"bg-destructive\"\n : \"bg-muted-foreground/50\"\n )}\n />\n {tags.length}/{maxTags} tags\n </div>\n )}\n </>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n <FieldContent>\n {renderTagInput({ field: null, disabled, error: null })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n <FieldContent>\n {renderTagInput({\n field: field as { value: string[]; onChange: (tags: string[]) => void },\n disabled,\n error: fieldState?.error?.message,\n })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </FieldContent>\n </Field>\n )}\n />\n );\n}\n\nexport default TagInput;\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { Check, ChevronDown, X, Tag as TagIcon } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldContent,\n} from \"@/components/ui/field\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/components/ui/popover\";\nimport { Input } from \"@/components/ui/input\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TagChoiceItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TagChoiceInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: TagChoiceItem[];\n\n // Value handling\n value?: string[];\n onValueChange?: (values: string[]) => void;\n\n // Styling\n className?: string;\n}\n\ninterface TagChoiceInputInternalProps {\n label?: string;\n description?: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n className?: string;\n items: TagChoiceItem[];\n value: string[];\n onValueChange?: (values: string[]) => void;\n error?: string;\n}\n\n// ============================================================================\n// INTERNAL COMPONENT\n// ============================================================================\n\nfunction TagChoiceInputInternal({\n label,\n description,\n placeholder = \"Select...\",\n required,\n disabled,\n className,\n items = [],\n value = [],\n onValueChange,\n error,\n}: TagChoiceInputInternalProps) {\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const selectedValues = value || [];\n\n const handleSelect = (itemValue: string) => {\n const isSelected = selectedValues.includes(itemValue);\n const newValue = isSelected\n ? selectedValues.filter((v) => v !== itemValue)\n : [...selectedValues, itemValue];\n onValueChange?.(newValue);\n };\n\n const handleRemove = (valueToRemove: string) => {\n const newValue = selectedValues.filter((v) => v !== valueToRemove);\n onValueChange?.(newValue);\n };\n\n const filteredItems = items.filter((item) =>\n item.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <Field className={className} data-disabled={disabled} data-invalid={!!error}>\n {label && (\n <FieldLabel>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n\n <FieldContent>\n {/* Selected Tags Display */}\n {selectedValues.length > 0 && (\n <div\n className={cn(\n \"flex flex-wrap gap-1.5 mb-3\",\n \"p-2.5 rounded-md bg-muted/30 border border-border/50\"\n )}\n >\n {selectedValues.map((val) => {\n const item = items.find((i) => i.value === val);\n return (\n <Badge\n key={val}\n variant=\"secondary\"\n className={cn(\n \"group flex items-center gap-1.5 px-2.5 py-1\",\n \"bg-background border border-border shadow-sm\",\n \"hover:border-primary/50 transition-all duration-200\",\n disabled && \"opacity-60\"\n )}\n >\n <TagIcon className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">\n {item?.label || val}\n </span>\n {!disabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"h-4 w-4 p-0 ml-0.5\",\n \"text-muted-foreground/60 hover:text-destructive\",\n \"hover:bg-destructive/10 rounded-sm\",\n \"transition-colors\"\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(val);\n }}\n aria-label={`Remove ${item?.label || val}`}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </Badge>\n );\n })}\n </div>\n )}\n\n {/* Selection Trigger */}\n <Popover open={open} onOpenChange={setOpen} modal={true}>\n <PopoverTrigger\n render={\n <Button\n type=\"button\"\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n disabled={disabled}\n className={cn(\n \"w-full justify-between h-auto min-h-[2.5rem] px-3 py-2\",\n \"hover:bg-accent/50 transition-colors\",\n error && \"border-destructive\",\n disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <div className=\"flex items-center gap-2\">\n <TagIcon className=\"h-4 w-4 text-muted-foreground\" />\n <span\n className={cn(\n \"text-sm\",\n selectedValues.length === 0 && \"text-muted-foreground\"\n )}\n >\n {selectedValues.length > 0\n ? `${selectedValues.length} selected`\n : placeholder}\n </span>\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 text-muted-foreground transition-transform duration-200\",\n open && \"rotate-180\"\n )}\n />\n </Button>\n }\n />\n <PopoverContent\n className=\"w-(--anchor-width) p-0\"\n align=\"start\"\n >\n <div className=\"p-2 border-b\">\n <Input\n placeholder=\"Search options...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"h-8\"\n />\n </div>\n <div className=\"max-h-[300px] overflow-y-auto p-1\">\n {filteredItems.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No options found\n </div>\n ) : (\n <div className=\"space-y-0.5\">\n {filteredItems.map((item) => {\n const isSelected = selectedValues.includes(item.value);\n return (\n <button\n key={item.value}\n type=\"button\"\n onClick={() => handleSelect(item.value)}\n disabled={item.disabled}\n className={cn(\n \"w-full flex items-center justify-between px-2 py-2\",\n \"text-sm rounded-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"transition-colors cursor-pointer\",\n isSelected && \"bg-primary/10 text-primary font-medium\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <span>{item.label}</span>\n {isSelected && <Check className=\"h-4 w-4 text-primary\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n <div className=\"border-t px-2 py-2 text-xs text-muted-foreground text-center\">\n {selectedValues.length > 0\n ? `${selectedValues.length} option${selectedValues.length > 1 ? \"s\" : \"\"} selected`\n : \"Select options from the list\"}\n </div>\n </PopoverContent>\n </Popover>\n\n {description && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError errors={[{ message: error }]} />}\n </FieldContent>\n </Field>\n );\n}\n\nTagChoiceInputInternal.displayName = \"TagChoiceInputInternal\";\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * TagChoiceInput - Multi-select with tags display\n *\n * @example\n * ```tsx\n * <TagChoiceInput\n * control={form.control}\n * name=\"categories\"\n * label=\"Categories\"\n * items={[\n * { value: \"tech\", label: \"Technology\" },\n * { value: \"design\", label: \"Design\" },\n * ]}\n * />\n * ```\n */\nexport function TagChoiceInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n description,\n helperText,\n placeholder = \"Select...\",\n required,\n disabled,\n className,\n items = [],\n value: propValue = [],\n onValueChange,\n}: TagChoiceInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n if (control) {\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <TagChoiceInputInternal\n label={label}\n description={descriptionText}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={className}\n items={items}\n value={field.value || []}\n onValueChange={(val) => {\n field.onChange(val);\n onValueChange?.(val);\n }}\n error={fieldState?.error?.message}\n />\n )}\n />\n );\n }\n\n return (\n <TagChoiceInputInternal\n label={label}\n description={descriptionText}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n className={className}\n items={items}\n value={propValue}\n onValueChange={onValueChange}\n />\n );\n}\n\nTagChoiceInput.displayName = \"TagChoiceInput\";\n\nexport default TagChoiceInput;\n","\"use client\";\n\nimport { useMemo, useCallback } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldPath } from \"react-hook-form\";\nimport { cn } from \"../../utils\";\nimport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"@/components/ui/field\";\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput as BaseComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/components/ui/combobox\";\nimport type { ReactNode } from \"react\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxInputProps<TFieldValues extends FieldValues = FieldValues> {\n // React Hook Form\n control?: Control<TFieldValues>;\n name: FieldPath<TFieldValues> | string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n emptyText?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Options\n items?: ComboboxOption[];\n\n // Value handling\n value?: string;\n onChange?: (value: string) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n\n // Custom rendering\n renderOption?: (option: ComboboxOption) => ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * ComboboxInput - Searchable select with react-hook-form integration using Base UI\n *\n * Features:\n * - Works with react-hook-form Controller\n * - Supports Base UI Combobox primitives\n * - Custom option rendering\n * - Can be used standalone without form\n *\n * @example\n * ```tsx\n * // With react-hook-form\n * <ComboboxInput\n * control={form.control}\n * name=\"country\"\n * label=\"Country\"\n * items={[\n * { value: \"us\", label: \"United States\" },\n * { value: \"uk\", label: \"United Kingdom\" },\n * ]}\n * placeholder=\"Select a country...\"\n * />\n *\n * // Standalone\n * <ComboboxInput\n * name=\"country\"\n * label=\"Country\"\n * items={items}\n * value={selectedCountry}\n * onValueChange={setSelectedCountry}\n * />\n * ```\n */\nexport function ComboboxInput<TFieldValues extends FieldValues = FieldValues>({\n control,\n name,\n label,\n placeholder = \"Select...\",\n emptyText = \"No items found.\",\n description,\n helperText,\n required,\n disabled,\n items = [],\n className,\n labelClassName,\n inputClassName,\n onValueChange,\n renderOption,\n value: propValue,\n onChange: propOnChange,\n}: ComboboxInputProps<TFieldValues>) {\n const descriptionText = description || helperText;\n\n // Memoize the item values array to prevent infinite re-renders\n const itemValues = useMemo(() => items.map((item) => item.value), [items]);\n\n const handleValueChange = useCallback(\n (\n newValue: string | null,\n field?: { onChange: (value: string) => void }\n ) => {\n const safeValue = newValue || \"\";\n if (field) {\n field.onChange(safeValue);\n } else if (propOnChange) {\n propOnChange(safeValue);\n }\n onValueChange?.(safeValue);\n },\n [propOnChange, onValueChange]\n );\n\n const renderCombobox = (\n currentValue: string | undefined,\n field?: { onChange: (value: string) => void },\n isDisabled?: boolean\n ) => {\n return (\n <Combobox\n items={itemValues}\n value={currentValue}\n onValueChange={(value: string | null) => handleValueChange(value, field)}\n disabled={isDisabled}\n >\n <BaseComboboxInput\n placeholder={placeholder}\n className={cn(inputClassName)}\n />\n <ComboboxContent>\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(itemValue: string) => {\n const option = items.find((item) => item.value === itemValue);\n if (!option) return null;\n\n return (\n <ComboboxItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </ComboboxItem>\n );\n }}\n </ComboboxList>\n </ComboboxContent>\n </Combobox>\n );\n };\n\n // Direct usage without React Hook Form\n if (!control) {\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCombobox(propValue, undefined, disabled)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n </Field>\n );\n }\n\n // Using with React Hook Form\n return (\n <Controller\n name={name as FieldPath<TFieldValues>}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-destructive ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderCombobox(field.value, field, disabled)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n}\n\nexport default ComboboxInput;\n","\"use client\";\n\nimport { forwardRef, type ChangeEvent } from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport type { Control, FieldValues, FieldError as RHFFieldError } from \"react-hook-form\";\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\nimport { Field, FieldLabel, FieldDescription, FieldError } from \"@/components/ui/field\";\nimport { Wand2 } from \"lucide-react\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface SlugFieldProps {\n // React Hook Form\n control?: Control<FieldValues>;\n name: string;\n\n // Field configuration\n label?: string;\n placeholder?: string;\n description?: string;\n helperText?: string;\n required?: boolean;\n disabled?: boolean;\n\n // Slug generation\n sourceValue?: string;\n onGenerate?: (sourceValue: string) => string;\n\n // Value handling\n value?: string;\n onChange?: (e: { target: { value: string } }) => void;\n onValueChange?: (value: string) => void;\n\n // Styling\n className?: string;\n labelClassName?: string;\n inputClassName?: string;\n\n // Error (for direct usage)\n error?: RHFFieldError;\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/**\n * Generates a URL-friendly slug from a string\n */\nexport function generateSlug(text: string | undefined): string {\n if (!text) return \"\";\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\") // Remove special characters\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\n .replace(/-+/g, \"-\") // Replace multiple hyphens with single hyphen\n .replace(/^-+|-+$/g, \"\"); // Remove leading/trailing hyphens\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\n/**\n * SlugField - URL slug input with auto-generation\n *\n * @example\n * ```tsx\n * <SlugField\n * control={form.control}\n * name=\"slug\"\n * label=\"URL Slug\"\n * sourceValue={form.watch(\"title\")}\n * description=\"This will be used in the page URL\"\n * required\n * />\n * ```\n */\nconst SlugField = forwardRef<HTMLInputElement, SlugFieldProps>(\n (\n {\n control,\n name,\n description,\n helperText,\n required,\n label,\n placeholder = \"my-page-slug\",\n disabled,\n sourceValue,\n onGenerate,\n className,\n inputClassName,\n labelClassName,\n onValueChange,\n value,\n onChange,\n error,\n },\n ref\n ) => {\n const descriptionText = description || helperText;\n\n const handleGenerate = (\n _currentValue: string | undefined,\n fieldOnChange?: (value: string) => void\n ) => {\n const newSlug = onGenerate\n ? onGenerate(sourceValue || \"\")\n : generateSlug(sourceValue);\n fieldOnChange?.(newSlug);\n onValueChange?.(newSlug);\n };\n\n const renderInput = (\n fieldValue: string | undefined,\n fieldOnChange?: (value: string) => void,\n isDisabled?: boolean,\n fieldState?: { invalid?: boolean; error?: RHFFieldError }\n ) => {\n return (\n <InputGroup>\n <InputGroupInput\n ref={ref}\n id={name}\n type=\"text\"\n disabled={isDisabled}\n placeholder={placeholder}\n value={fieldValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n fieldOnChange?.(newValue);\n onValueChange?.(newValue);\n }}\n aria-invalid={fieldState?.invalid}\n className={inputClassName}\n />\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n type=\"button\"\n size=\"sm\"\n onClick={() => handleGenerate(fieldValue, fieldOnChange)}\n disabled={isDisabled || !sourceValue}\n title=\"Generate slug from source\"\n >\n <Wand2 className=\"h-4 w-4\" />\n Generate\n </InputGroupButton>\n </InputGroupAddon>\n </InputGroup>\n );\n };\n\n // With react-hook-form\n if (control && name) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field, fieldState }) => (\n <Field\n className={className}\n data-disabled={disabled}\n data-invalid={fieldState.invalid}\n >\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderInput(field.value, field.onChange, disabled, fieldState)}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {fieldState.invalid && fieldState.error && (\n <FieldError errors={[fieldState.error]} />\n )}\n </Field>\n )}\n />\n );\n }\n\n // Direct usage (without react-hook-form)\n const handleDirectChange = (newValue: string) => {\n onChange?.({ target: { value: newValue } });\n onValueChange?.(newValue);\n };\n\n return (\n <Field className={className} data-disabled={disabled}>\n {label && (\n <FieldLabel htmlFor={name} className={labelClassName}>\n {label}\n {required && <span className=\"text-red-500 ml-1\">*</span>}\n </FieldLabel>\n )}\n {renderInput(value, handleDirectChange, disabled, { error })}\n {descriptionText && <FieldDescription>{descriptionText}</FieldDescription>}\n {error && <FieldError errors={[error]} />}\n </Field>\n );\n }\n);\n\nSlugField.displayName = \"SlugField\";\n\nexport default SlugField;\nexport { SlugField };\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\nexport interface FormErrorSummaryProps {\r\n /** Form errors object from react-hook-form */\r\n errors?: Record<string, unknown>;\r\n /** Additional CSS classes */\r\n className?: string;\r\n /** Custom title text */\r\n title?: string;\r\n}\r\n\r\n// Helper to flatten nested errors\r\nconst flattenErrors = (\r\n errors: Record<string, unknown>,\r\n prefix = \"\"\r\n): Array<{ field: string; message: string }> => {\r\n const flattened: Array<{ field: string; message: string }> = [];\r\n\r\n Object.entries(errors).forEach(([key, value]) => {\r\n const path = prefix ? `${prefix}.${key}` : key;\r\n\r\n if (value && typeof value === \"object\" && \"message\" in value) {\r\n // This is an error object\r\n flattened.push({ field: path, message: String(value.message) });\r\n } else if (value && typeof value === \"object\") {\r\n // This is a nested object, recurse\r\n flattened.push(...flattenErrors(value as Record<string, unknown>, path));\r\n }\r\n });\r\n\r\n return flattened;\r\n};\r\n\r\n/**\r\n * FormErrorSummary - Displays a summary of form validation errors\r\n *\r\n * Takes react-hook-form errors object and displays all errors in a list.\r\n * Automatically flattens nested errors for complex form structures.\r\n */\r\nexport function FormErrorSummary({\r\n errors,\r\n className,\r\n title = \"Please fix the following errors:\",\r\n}: FormErrorSummaryProps) {\r\n if (!errors || Object.keys(errors).length === 0) {\r\n return null;\r\n }\r\n\r\n const errorList = flattenErrors(errors);\r\n\r\n if (errorList.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"bg-destructive/15 p-3 rounded-md border border-destructive/20\",\r\n className\r\n )}\r\n >\r\n <h4 className=\"text-sm font-medium text-destructive mb-2\">{title}</h4>\r\n <ul className=\"text-sm text-destructive space-y-1\">\r\n {errorList.map(({ field, message }, index) => (\r\n <li key={`${field}-${index}`} className=\"flex items-start gap-2\">\r\n <span className=\"text-destructive\">•</span>\r\n <span>\r\n <strong>{field}:</strong> {message}\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../../utils\";\r\nimport { CalendarIcon, X } from \"lucide-react\";\r\n\r\nexport interface DateRange {\r\n from?: Date;\r\n to?: Date;\r\n}\r\n\r\nexport interface DateRangeFilterProps {\r\n /** Initial start date */\r\n initialStartDate?: Date;\r\n /** Initial end date */\r\n initialEndDate?: Date;\r\n /** Callback when filter is applied (receives startDate, endDate) */\r\n onFilter?: (startDate: Date | null, endDate: Date | null) => void;\r\n /** Callback when filter is cleared */\r\n onClear?: () => void;\r\n /** Additional classes for the container */\r\n className?: string;\r\n /** Additional classes for trigger button */\r\n buttonClassName?: string;\r\n /** Placeholder text when no date selected */\r\n placeholder?: string;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Align popover to the right */\r\n alignRight?: boolean;\r\n /** Number of months to display */\r\n numberOfMonths?: number;\r\n}\r\n\r\n/**\r\n * DateRangeFilter - A date range picker for filtering\r\n *\r\n * Features:\r\n * - Only applies filter when explicitly submitted\r\n * - Supports clearing filters\r\n * - Uses Popover to show calendar on click\r\n * - Configurable min/max dates\r\n */\r\nexport function DateRangeFilter({\r\n initialStartDate,\r\n initialEndDate,\r\n onFilter,\r\n onClear,\r\n className,\r\n buttonClassName,\r\n placeholder = \"Pick a date range\",\r\n minDate,\r\n maxDate,\r\n alignRight = true,\r\n numberOfMonths = 1,\r\n}: DateRangeFilterProps) {\r\n // Internal state for range selection (before applying)\r\n const [dateRange, setDateRange] = React.useState<DateRange | undefined>(\r\n initialStartDate || initialEndDate\r\n ? { from: initialStartDate, to: initialEndDate }\r\n : undefined\r\n );\r\n\r\n // Applied state (shown on button)\r\n const [appliedRange, setAppliedRange] = React.useState(dateRange);\r\n\r\n // Popover open state\r\n const [open, setOpen] = React.useState(false);\r\n\r\n // Update state when props change\r\n React.useEffect(() => {\r\n const newRange =\r\n initialStartDate || initialEndDate\r\n ? { from: initialStartDate, to: initialEndDate }\r\n : undefined;\r\n setDateRange(newRange);\r\n setAppliedRange(newRange);\r\n }, [initialStartDate, initialEndDate]);\r\n\r\n // Handle applying the filter\r\n const handleApplyFilter = () => {\r\n setAppliedRange(dateRange);\r\n onFilter?.(dateRange?.from || null, dateRange?.to || null);\r\n setOpen(false);\r\n };\r\n\r\n // Handle clearing the filter\r\n const handleClearFilter = (e?: React.MouseEvent) => {\r\n e?.stopPropagation?.();\r\n setDateRange(undefined);\r\n setAppliedRange(undefined);\r\n onClear?.();\r\n setOpen(false);\r\n };\r\n\r\n // Format the display text\r\n const getDisplayText = () => {\r\n if (!appliedRange?.from && !appliedRange?.to) return placeholder;\r\n\r\n const formatDate = (date: Date) => {\r\n return date.toLocaleDateString(\"en-US\", {\r\n month: \"short\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n });\r\n };\r\n\r\n if (appliedRange.from && appliedRange.to) {\r\n return `${formatDate(appliedRange.from)} - ${formatDate(appliedRange.to)}`;\r\n }\r\n if (appliedRange.from) return `From ${formatDate(appliedRange.from)}`;\r\n if (appliedRange.to) return `Until ${formatDate(appliedRange.to)}`;\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start font-normal\",\r\n !(appliedRange?.from || appliedRange?.to) &&\r\n \"text-muted-foreground\",\r\n buttonClassName\r\n )}\r\n >\r\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\r\n {getDisplayText()}\r\n {(appliedRange?.from || appliedRange?.to) && (\r\n <X\r\n className=\"ml-auto h-4 w-4 opacity-50 hover:opacity-100\"\r\n onClick={handleClearFilter}\r\n />\r\n )}\r\n </Button>\r\n }\r\n />\r\n <PopoverContent\r\n className=\"w-auto p-0\"\r\n align={alignRight ? \"end\" : \"start\"}\r\n side=\"bottom\"\r\n >\r\n <div className=\"p-3 space-y-4\">\r\n <Calendar\r\n mode=\"range\"\r\n defaultMonth={dateRange?.from}\r\n selected={dateRange}\r\n onSelect={setDateRange}\r\n disabled={(date: Date) => {\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n return false;\r\n }}\r\n numberOfMonths={numberOfMonths}\r\n initialFocus\r\n />\r\n\r\n {/* Action buttons */}\r\n <div className=\"flex justify-between gap-2 pt-2 border-t\">\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => handleClearFilter()}\r\n >\r\n Clear\r\n </Button>\r\n <Button\r\n type=\"button\"\r\n size=\"sm\"\r\n onClick={handleApplyFilter}\r\n disabled={!dateRange?.from && !dateRange?.to}\r\n >\r\n Apply Filter\r\n </Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, ReactNode } from \"react\";\r\nimport { format, isValid } from \"date-fns\";\r\nimport { Controller, Control, FieldValues, FieldPath } from \"react-hook-form\";\r\nimport { Calendar } from \"@/components/ui/calendar\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../../utils\";\r\nimport { CalendarIcon, X, LucideIcon } from \"lucide-react\";\r\nimport {\r\n Field,\r\n FieldLabel,\r\n FieldDescription,\r\n FieldError,\r\n} from \"@/components/ui/field\";\r\n\r\n// ============================================\r\n// Types\r\n// ============================================\r\n\r\nexport interface DateRangeValue {\r\n from?: Date | string;\r\n to?: Date | string;\r\n}\r\n\r\nexport interface DateRangeInputProps<TFieldValues extends FieldValues = FieldValues> {\r\n /** React Hook Form control */\r\n control?: Control<TFieldValues>;\r\n /** Field name for form registration */\r\n name: FieldPath<TFieldValues> | string;\r\n /** Field label */\r\n label?: string;\r\n /** Description text below the input */\r\n description?: string;\r\n /** Placeholder text */\r\n placeholder?: string;\r\n /** Whether the field is required */\r\n required?: boolean;\r\n /** Whether the field is disabled */\r\n disabled?: boolean;\r\n /** Additional className for the wrapper */\r\n className?: string;\r\n /** Additional className for the label */\r\n labelClassName?: string;\r\n /** Additional className for the button */\r\n buttonClassName?: string;\r\n /** Additional className for the calendar popover */\r\n calendarClassName?: string;\r\n /** Minimum selectable date */\r\n minDate?: Date;\r\n /** Maximum selectable date */\r\n maxDate?: Date;\r\n /** Array of disabled dates */\r\n disabledDates?: Date[];\r\n /** Array of disabled days (0-6, where 0 is Sunday) */\r\n disabledDays?: number[];\r\n /** Callback when value changes */\r\n onValueChange?: (range: DateRangeValue) => void;\r\n /** Custom validation function for date range */\r\n validateDateRange?: (range: DateRangeValue) => boolean;\r\n /** Function to clear form errors */\r\n clearErrors?: (name: string) => void;\r\n /** Custom description component */\r\n descriptionComponent?: ReactNode;\r\n /** Whether to show clear button */\r\n allowClear?: boolean;\r\n /** Whether to show badge with date range */\r\n showBadge?: boolean;\r\n /** Custom icon component */\r\n Icon?: LucideIcon;\r\n /** Transform functions for input/output */\r\n transform?: {\r\n input: (value: any) => DateRangeValue;\r\n output: (range: DateRangeValue) => any;\r\n };\r\n}\r\n\r\n// ============================================\r\n// Helper Components\r\n// ============================================\r\n\r\ninterface DateRangePopoverProps {\r\n dateRange: DateRangeValue;\r\n placeholder: string;\r\n disabled?: boolean;\r\n buttonClassName?: string;\r\n calendarClassName?: string;\r\n allowClear: boolean;\r\n showBadge: boolean;\r\n Icon: LucideIcon;\r\n formatDateRange: (range: DateRangeValue) => string;\r\n isDateDisabled: (date: Date) => boolean;\r\n handleDateRangeSelect: (range: DateRangeValue | undefined) => void;\r\n handleClear: (e: React.MouseEvent) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nfunction DateRangePopover({\r\n dateRange,\r\n placeholder,\r\n disabled,\r\n buttonClassName,\r\n calendarClassName,\r\n allowClear,\r\n showBadge,\r\n Icon,\r\n formatDateRange,\r\n isDateDisabled,\r\n handleDateRangeSelect,\r\n handleClear,\r\n minDate,\r\n maxDate,\r\n}: DateRangePopoverProps) {\r\n const hasValue = dateRange?.from || dateRange?.to;\r\n\r\n return (\r\n <div className=\"relative w-full\">\r\n <Popover>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n type=\"button\"\r\n disabled={disabled}\r\n variant=\"outline\"\r\n className={cn(\r\n \"w-full justify-start gap-2 font-normal\",\r\n !hasValue && \"text-muted-foreground\",\r\n hasValue && allowClear && \"pr-10\",\r\n buttonClassName\r\n )}\r\n >\r\n <Icon className=\"h-4 w-4 shrink-0\" />\r\n {hasValue ? (\r\n <span className=\"flex-1 truncate text-left\">\r\n {formatDateRange(dateRange)}\r\n {showBadge && dateRange?.from && dateRange?.to && (() => {\r\n const from = dateRange.from instanceof Date ? dateRange.from : new Date(dateRange.from);\r\n const to = dateRange.to instanceof Date ? dateRange.to : new Date(dateRange.to);\r\n const days = Math.ceil((to.getTime() - from.getTime()) / (1000 * 60 * 60 * 24)) + 1;\r\n return (\r\n <span className=\"ml-2 text-xs bg-secondary text-secondary-foreground py-0.5 px-2 rounded-full\">\r\n {days} {days === 1 ? 'day' : 'days'}\r\n </span>\r\n );\r\n })()}\r\n </span>\r\n ) : (\r\n <span className=\"text-left\">{placeholder}</span>\r\n )}\r\n </Button>\r\n }\r\n />\r\n <PopoverContent\r\n className={cn(\"w-auto p-0\", calendarClassName)}\r\n align=\"start\"\r\n >\r\n <Calendar\r\n mode=\"range\"\r\n selected={dateRange as any}\r\n onSelect={handleDateRangeSelect as any}\r\n disabled={isDateDisabled}\r\n initialFocus\r\n {...(minDate && { fromDate: minDate })}\r\n {...(maxDate && { toDate: maxDate })}\r\n />\r\n <div className=\"p-3 border-t border-border\">\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={handleClear}\r\n disabled={!hasValue}\r\n className=\"w-full\"\r\n type=\"button\"\r\n >\r\n Clear Date Range\r\n </Button>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n\r\n {hasValue && allowClear && !disabled && (\r\n <button\r\n type=\"button\"\r\n onClick={handleClear}\r\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1 rounded-sm hover:bg-muted transition-colors\"\r\n aria-label=\"Clear date range\"\r\n >\r\n <X className=\"h-4 w-4 text-muted-foreground hover:text-foreground\" />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\n// ============================================\r\n// Main Component\r\n// ============================================\r\n\r\nconst defaultTransform = {\r\n input: (value: any): DateRangeValue =>\r\n value\r\n ? {\r\n from: value.from ? new Date(value.from) : undefined,\r\n to: value.to ? new Date(value.to) : undefined,\r\n }\r\n : { from: undefined, to: undefined },\r\n output: (range: DateRangeValue) => ({\r\n from: range?.from\r\n ? range.from instanceof Date\r\n ? range.from.toISOString()\r\n : range.from\r\n : undefined,\r\n to: range?.to\r\n ? range.to instanceof Date\r\n ? range.to.toISOString()\r\n : range.to\r\n : undefined,\r\n }),\r\n};\r\n\r\n/**\r\n * DateRangeInput - Date range picker with react-hook-form integration\r\n *\r\n * @example\r\n * ```tsx\r\n * <DateRangeInput\r\n * control={control}\r\n * name=\"dateRange\"\r\n * label=\"Select Dates\"\r\n * placeholder=\"Pick a date range\"\r\n * />\r\n * ```\r\n */\r\nexport function DateRangeInput<TFieldValues extends FieldValues = FieldValues>({\r\n control,\r\n name,\r\n label,\r\n description,\r\n placeholder = \"Select date range\",\r\n required,\r\n disabled,\r\n className,\r\n labelClassName,\r\n buttonClassName,\r\n calendarClassName,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n disabledDays,\r\n onValueChange,\r\n validateDateRange,\r\n clearErrors,\r\n descriptionComponent,\r\n allowClear = true,\r\n showBadge = false,\r\n Icon = CalendarIcon,\r\n transform = defaultTransform,\r\n}: DateRangeInputProps<TFieldValues>) {\r\n const [localDateRange, setLocalDateRange] = useState<DateRangeValue>({\r\n from: undefined,\r\n to: undefined,\r\n });\r\n\r\n const formatDateRange = (range: DateRangeValue): string => {\r\n if (!range || (!range.from && !range.to)) return \"\";\r\n\r\n const fromDate = range.from instanceof Date ? range.from : range.from ? new Date(range.from) : null;\r\n const toDate = range.to instanceof Date ? range.to : range.to ? new Date(range.to) : null;\r\n\r\n const fromFormatted = fromDate && isValid(fromDate) ? format(fromDate, \"MMM d\") : \"\";\r\n const toFormatted = toDate && isValid(toDate) ? format(toDate, \"MMM d\") : \"\";\r\n\r\n if (fromFormatted && toFormatted) {\r\n return `${fromFormatted} - ${toFormatted}`;\r\n } else if (fromFormatted) {\r\n return `From ${fromFormatted}`;\r\n } else if (toFormatted) {\r\n return `Until ${toFormatted}`;\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const isDateDisabled = (date: Date): boolean => {\r\n if (!date || !isValid(date)) return true;\r\n if (disabled) return true;\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n if (disabledDates?.some((d) => d.getTime() === date.getTime())) return true;\r\n if (disabledDays?.includes(date.getDay())) return true;\r\n return false;\r\n };\r\n\r\n const handleDateRangeSelect = (\r\n range: DateRangeValue | undefined,\r\n field?: any\r\n ) => {\r\n if (disabled) return;\r\n\r\n const safeRange = range || { from: undefined, to: undefined };\r\n\r\n if (validateDateRange && !validateDateRange(safeRange)) {\r\n return;\r\n }\r\n\r\n if (field) {\r\n const transformedValue = transform.output(safeRange);\r\n field.onChange(transformedValue);\r\n } else {\r\n setLocalDateRange(safeRange);\r\n }\r\n\r\n onValueChange?.(safeRange);\r\n\r\n if (clearErrors && name) {\r\n clearErrors(name);\r\n }\r\n };\r\n\r\n const handleClear = (field: any | null, e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n const emptyRange = { from: undefined, to: undefined };\r\n\r\n if (field) {\r\n field.onChange(emptyRange);\r\n } else {\r\n setLocalDateRange(emptyRange);\r\n }\r\n\r\n onValueChange?.(emptyRange);\r\n\r\n if (clearErrors && name) {\r\n clearErrors(name);\r\n }\r\n };\r\n\r\n // With react-hook-form\r\n if (control) {\r\n return (\r\n <Controller\r\n control={control}\r\n name={name as FieldPath<TFieldValues>}\r\n render={({ field, fieldState }) => {\r\n const dateRange = transform.input(field.value);\r\n\r\n return (\r\n <Field\r\n className={cn(\"w-full\", className)}\r\n data-invalid={!!fieldState.error}\r\n >\r\n {label && (\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <FieldLabel className={cn(\"grow\", labelClassName)}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </FieldLabel>\r\n <span className=\"text-muted-foreground shrink-0\">\r\n <Icon className=\"h-4 w-4\" />\r\n </span>\r\n </div>\r\n )}\r\n\r\n <DateRangePopover\r\n dateRange={dateRange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n buttonClassName={buttonClassName}\r\n calendarClassName={calendarClassName}\r\n allowClear={allowClear}\r\n showBadge={showBadge}\r\n Icon={Icon}\r\n formatDateRange={formatDateRange}\r\n isDateDisabled={isDateDisabled}\r\n handleDateRangeSelect={(range) =>\r\n handleDateRangeSelect(range, field)\r\n }\r\n handleClear={(e) => handleClear(field, e)}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n\r\n {description && !descriptionComponent && (\r\n <FieldDescription>{description}</FieldDescription>\r\n )}\r\n\r\n {descriptionComponent && (\r\n <div className=\"text-sm text-muted-foreground\">\r\n {descriptionComponent}\r\n </div>\r\n )}\r\n\r\n <FieldError\r\n errors={fieldState.error ? [fieldState.error] : undefined}\r\n />\r\n </Field>\r\n );\r\n }}\r\n />\r\n );\r\n }\r\n\r\n // Standalone without form\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n {label && (\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <div className={cn(\"text-sm font-medium grow\", labelClassName)}>\r\n {label}\r\n {required && <span className=\"text-destructive ml-1\">*</span>}\r\n </div>\r\n <span className=\"text-muted-foreground shrink-0\">\r\n <Icon className=\"h-4 w-4\" />\r\n </span>\r\n </div>\r\n )}\r\n\r\n <DateRangePopover\r\n dateRange={localDateRange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n buttonClassName={buttonClassName}\r\n calendarClassName={calendarClassName}\r\n allowClear={allowClear}\r\n showBadge={showBadge}\r\n Icon={Icon}\r\n formatDateRange={formatDateRange}\r\n isDateDisabled={isDateDisabled}\r\n handleDateRangeSelect={(range) => handleDateRangeSelect(range)}\r\n handleClear={(e) => handleClear(null, e)}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n />\r\n\r\n {description && (\r\n <div className=\"text-sm text-muted-foreground mt-1\">{description}</div>\r\n )}\r\n\r\n {descriptionComponent && (\r\n <div className=\"text-sm text-muted-foreground\">{descriptionComponent}</div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","/**\r\n * Composable Search Component System\r\n *\r\n * @example\r\n * ```tsx\r\n * import { Search } from \"@classytic/fluid\";\r\n *\r\n * function MySearch() {\r\n * const searchHook = useMySearch();\r\n *\r\n * return (\r\n * <Search.Root hook={searchHook}>\r\n * <Search.Container>\r\n * <Search.Input placeholder=\"Search...\" />\r\n * <Search.Filters>\r\n * <SelectInput ... />\r\n * <TagChoiceInput ... />\r\n * </Search.Filters>\r\n * <Search.Actions />\r\n * </Search.Container>\r\n * </Search.Root>\r\n * );\r\n * }\r\n * ```\r\n */\r\n\r\nexport { SearchRoot as Root, type SearchRootProps } from \"./search-root\";\r\nexport { SearchInput as Input, type SearchInputProps } from \"./search-input\";\r\nexport {\r\n SearchTypeInput as TypeInput,\r\n type SearchTypeInputProps,\r\n type SearchTypeOption,\r\n} from \"./search-type-input\";\r\nexport { SearchFilters as Filters, type SearchFiltersProps } from \"./search-filters\";\r\nexport { SearchActions as Actions, type SearchActionsProps } from \"./search-actions\";\r\nexport { SearchContainer as Container, type SearchContainerProps } from \"./search-container\";\r\nexport {\r\n SearchFilterActions as FilterActions,\r\n type SearchFilterActionsProps,\r\n} from \"./search-filter-actions\";\r\nexport { useSearch, SearchProvider, type SearchProviderProps } from \"./search-context\";\r\n","\"use client\";\r\n\r\nimport { createContext, useContext, type ReactNode } from \"react\";\r\nimport type { UseBaseSearchReturn } from \"../../hooks/use-base-search\";\r\n\r\nconst SearchContext = createContext<UseBaseSearchReturn | undefined>(undefined);\r\n\r\nexport interface SearchProviderProps {\r\n children: ReactNode;\r\n value: UseBaseSearchReturn;\r\n}\r\n\r\nexport function SearchProvider({ children, value }: SearchProviderProps) {\r\n return (\r\n <SearchContext.Provider value={value}>{children}</SearchContext.Provider>\r\n );\r\n}\r\n\r\nexport function useSearch(): UseBaseSearchReturn {\r\n const context = useContext(SearchContext);\r\n if (!context) {\r\n throw new Error(\"useSearch must be used within SearchProvider\");\r\n }\r\n return context;\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\nimport { SearchProvider } from \"./search-context\";\r\nimport type { UseBaseSearchReturn } from \"../../hooks/use-base-search\";\r\n\r\nexport interface SearchRootProps {\r\n children: ReactNode;\r\n hook: UseBaseSearchReturn;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Root search component that provides context to all child components\r\n *\r\n * @example\r\n * <Search.Root hook={useMySearch()}>\r\n * <Search.Input />\r\n * <Search.Filters />\r\n * <Search.Actions />\r\n * </Search.Root>\r\n */\r\nexport function SearchRoot({ children, hook, className }: SearchRootProps) {\r\n return (\r\n <SearchProvider value={hook}>\r\n <div className={cn(\"w-full\", className)}>{children}</div>\r\n </SearchProvider>\r\n );\r\n}\r\n","\"use client\";\n\nimport type { KeyboardEvent, ChangeEvent } from \"react\";\nimport { Search, X } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupButton,\n} from \"@/components/ui/input-group\";\nimport { useSearch } from \"./search-context\";\n\nexport interface SearchInputProps {\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Search input component using modern shadcn InputGroup pattern\n *\n * @example\n * <Search.Input placeholder=\"Search...\" />\n */\nexport function SearchInput({\n placeholder = \"Search...\",\n className,\n disabled,\n showIcon = true,\n showClearButton = false,\n onKeyDown,\n ...props\n}: SearchInputProps) {\n const { searchValue, setSearchValue, handleSearch } = useSearch();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && event.key === \"Enter\" && !disabled) {\n handleSearch?.();\n }\n };\n\n return (\n <InputGroup\n className={cn(\"h-10 flex-1 shadow-sm\", className)}\n data-disabled={disabled || undefined}\n >\n {showIcon && (\n <InputGroupAddon align=\"inline-start\">\n <Search className=\"size-4\" />\n </InputGroupAddon>\n )}\n\n <InputGroupInput\n {...props}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setSearchValue?.(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"text-base\"\n />\n\n {showClearButton && searchValue && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => setSearchValue?.(\"\")}\n disabled={disabled}\n >\n <X className=\"size-4\" />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n}\n","\"use client\";\n\nimport type { KeyboardEvent, ChangeEvent } from \"react\";\nimport { Search, X } from \"lucide-react\";\nimport { cn } from \"../../utils\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n InputGroupButton,\n} from \"@/components/ui/input-group\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { useSearch } from \"./search-context\";\n\nexport interface SearchTypeOption {\n value: string;\n label: string;\n}\n\nexport interface SearchTypeInputProps {\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n showIcon?: boolean;\n showClearButton?: boolean;\n searchTypeOptions?: SearchTypeOption[];\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Search input component with type selector using InputGroup pattern\n *\n * @example\n * <Search.TypeInput\n * placeholder=\"Search...\"\n * searchTypeOptions={[\n * { value: \"_id\", label: \"ID\" },\n * { value: \"customerPhone\", label: \"Phone\" },\n * { value: \"customerEmail\", label: \"Email\" },\n * ]}\n * />\n */\nexport function SearchTypeInput({\n placeholder = \"Search...\",\n className,\n disabled,\n showIcon = true,\n showClearButton = false,\n searchTypeOptions = [],\n onKeyDown,\n ...props\n}: SearchTypeInputProps) {\n const { searchValue, setSearchValue, searchType, setSearchType, handleSearch } =\n useSearch();\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented && event.key === \"Enter\" && !disabled) {\n handleSearch?.();\n }\n };\n\n const selectedOption = searchTypeOptions.find((opt) => opt.value === searchType);\n\n return (\n <InputGroup\n className={cn(\"h-10 flex-1 shadow-sm\", className)}\n data-disabled={disabled || undefined}\n >\n {showIcon && (\n <InputGroupAddon align=\"inline-start\">\n <Search className=\"size-4\" />\n </InputGroupAddon>\n )}\n\n {/* Search Type Selector */}\n {searchTypeOptions.length > 0 && (\n <InputGroupAddon align=\"inline-start\" className=\"pr-0\">\n <Select\n value={searchType}\n onValueChange={setSearchType}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-7 w-auto border-0 bg-transparent px-2 text-sm font-medium shadow-none focus:ring-0\">\n <SelectValue>\n {selectedOption?.label || searchTypeOptions[0]?.label}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {searchTypeOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div className=\"h-6 w-px bg-border ml-1\" />\n </InputGroupAddon>\n )}\n\n <InputGroupInput\n {...props}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue || \"\"}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setSearchValue?.(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className=\"text-base\"\n />\n\n {showClearButton && searchValue && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => setSearchValue?.(\"\")}\n disabled={disabled}\n >\n <X className=\"size-4\" />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n}\n","\"use client\";\r\n\r\nimport { Search } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { useSearch } from \"./search-context\";\r\n\r\nexport interface SearchFilterActionsProps {\r\n onClose?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * Filter actions component (Reset/Apply buttons)\r\n * Used inside filter popovers/sheets\r\n */\r\nexport function SearchFilterActions({ onClose, disabled }: SearchFilterActionsProps) {\r\n const { handleSearch, clearSearch, hasActiveFilters } = useSearch();\r\n\r\n const handleApply = () => {\r\n handleSearch?.();\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className=\"flex gap-2 border-t bg-muted/30 p-4 pt-3 -mx-4 -mb-4\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={clearSearch}\r\n className=\"flex-1\"\r\n disabled={disabled || !hasActiveFilters}\r\n >\r\n Reset\r\n </Button>\r\n <Button size=\"sm\" onClick={handleApply} className=\"flex-1\" disabled={disabled}>\r\n <Search size={16} className=\"mr-2\" />\r\n Apply\r\n </Button>\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, type ReactNode } from \"react\";\r\nimport { Filter } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { SheetWrapper } from \"../sheet-wrapper\";\r\nimport { useIsMobile } from \"../../hooks/use-mobile\";\r\nimport { useSearch } from \"./search-context\";\r\nimport { SearchFilterActions } from \"./search-filter-actions\";\r\n\r\nexport interface SearchFiltersProps {\r\n children: ReactNode;\r\n title?: string;\r\n description?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Search filters component with mobile sheet support\r\n *\r\n * @example\r\n * <Search.Filters>\r\n * <TagChoiceInput label=\"Category\" ... />\r\n * <SelectInput label=\"Status\" ... />\r\n * </Search.Filters>\r\n */\r\nexport function SearchFilters({\r\n children,\r\n title = \"Filters\",\r\n description = \"Refine your search results\",\r\n disabled,\r\n className,\r\n}: SearchFiltersProps) {\r\n const { hasActiveFilters, filters = {} } = useSearch();\r\n const isMobile = useIsMobile();\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n // Count active filters (excluding default \"all\" values)\r\n const activeFilterCount = Object.values(filters).filter((value) => {\r\n if (Array.isArray(value)) {\r\n return value.filter(Boolean).length > 0;\r\n }\r\n if (typeof value === \"string\") {\r\n // Exclude \"all\" as it's the default/neutral state\r\n return value.trim().length > 0 && value !== \"all\";\r\n }\r\n if (typeof value === \"number\") {\r\n return value !== undefined && value !== null && !Number.isNaN(value);\r\n }\r\n if (typeof value === \"boolean\") {\r\n return value;\r\n }\r\n return Boolean(value);\r\n }).length;\r\n\r\n const FilterContent = () => (\r\n <div className=\"space-y-4\">\r\n <div className=\"space-y-4\">{children}</div>\r\n <SearchFilterActions onClose={() => setIsOpen(false)} />\r\n </div>\r\n );\r\n\r\n const triggerButton = (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n className={cn(\r\n \"relative h-10 w-10 shrink-0 px-0 sm:w-auto sm:px-4\",\r\n hasActiveFilters && \"bg-primary/10 border-primary hover:bg-primary/15\"\r\n )}\r\n disabled={disabled}\r\n aria-label=\"Open filters\"\r\n >\r\n <Filter className=\"size-4\" />\r\n <span className=\"hidden sm:inline ml-2\">Filters</span>\r\n {activeFilterCount > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-xs font-medium text-primary-foreground\"\r\n >\r\n {activeFilterCount}\r\n </Badge>\r\n )}\r\n </Button>\r\n );\r\n\r\n if (isMobile) {\r\n return (\r\n <>\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n className={cn(\r\n \"relative h-10 w-10 shrink-0 px-0\",\r\n hasActiveFilters && \"bg-primary/10 border-primary hover:bg-primary/15\"\r\n )}\r\n disabled={disabled}\r\n aria-label=\"Open filters\"\r\n onClick={() => setIsOpen(true)}\r\n >\r\n <Filter className=\"size-4\" />\r\n {activeFilterCount > 0 && (\r\n <Badge\r\n variant=\"secondary\"\r\n className=\"absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-primary px-1 text-xs font-medium text-primary-foreground\"\r\n >\r\n {activeFilterCount}\r\n </Badge>\r\n )}\r\n </Button>\r\n <SheetWrapper\r\n open={isOpen}\r\n onOpenChange={setIsOpen}\r\n title={title}\r\n description={description}\r\n side=\"bottom\"\r\n size=\"default\"\r\n >\r\n <FilterContent />\r\n </SheetWrapper>\r\n </>\r\n );\r\n }\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger render={triggerButton} />\r\n <PopoverContent className=\"w-80 p-4 sm:w-96\" align=\"end\" sideOffset={8}>\r\n <FilterContent />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport { Search, RotateCcw } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { useSearch } from \"./search-context\";\r\nimport { useIsMobile } from \"../../hooks/use-mobile\";\r\n\r\nexport interface SearchActionsProps {\r\n showSearchButton?: boolean;\r\n showClearButton?: boolean;\r\n searchButtonText?: string;\r\n clearButtonText?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Search action buttons\r\n */\r\nexport function SearchActions({\r\n showSearchButton = true,\r\n showClearButton = true,\r\n searchButtonText,\r\n clearButtonText = \"Clear\",\r\n disabled,\r\n className,\r\n}: SearchActionsProps) {\r\n const { handleSearch, clearSearch, searchValue, hasActiveFilters, hasActiveSearch } =\r\n useSearch();\r\n const isMobile = useIsMobile();\r\n\r\n const canSearch = Boolean(searchValue?.trim() || hasActiveFilters);\r\n const canClear = Boolean(searchValue?.trim() || hasActiveFilters || hasActiveSearch);\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n {showClearButton &&\r\n canClear &&\r\n (isMobile ? (\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={clearSearch}\r\n aria-label={clearButtonText}\r\n title={clearButtonText}\r\n className=\"shrink-0\"\r\n >\r\n <RotateCcw />\r\n </Button>\r\n ) : (\r\n <Button\r\n variant=\"outline\"\r\n size=\"default\"\r\n onClick={clearSearch}\r\n className=\"h-10 shrink-0\"\r\n >\r\n {clearButtonText}\r\n </Button>\r\n ))}\r\n {showSearchButton && (\r\n <Button\r\n size=\"default\"\r\n onClick={handleSearch}\r\n disabled={disabled || !canSearch}\r\n className=\"h-10 shrink-0 px-3 sm:px-4\"\r\n >\r\n <Search\r\n size={16}\r\n className={cn(searchButtonText ? \"mr-2\" : \"sm:mr-2\")}\r\n />\r\n <span className=\"hidden sm:inline\">{searchButtonText || \"Search\"}</span>\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\nexport interface SearchContainerProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\n/**\r\n * Container for search input and action buttons\r\n * Provides responsive layout\r\n *\r\n * @example\r\n * <Search.Container>\r\n * <Search.Input />\r\n * <Search.Filters />\r\n * <Search.Actions />\r\n * </Search.Container>\r\n */\r\nexport function SearchContainer({ children, className }: SearchContainerProps) {\r\n return (\r\n <div className={cn(\"flex items-center gap-2 flex-1\", className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { createContext, useContext, useId, useMemo, memo, ReactNode } from \"react\";\r\nimport { cn } from \"../../utils\";\r\n\r\ninterface FieldContextValue {\r\n id: string;\r\n disabled: boolean;\r\n invalid: boolean;\r\n}\r\n\r\nconst FieldContext = createContext<FieldContextValue | null>(null);\r\n\r\ninterface FieldRootProps {\r\n children: ReactNode;\r\n className?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n}\r\n\r\n/**\r\n * Simple field wrapper with consistent structure\r\n * Structure: Root > InputContainer > (Label, Icon, Control) + Error\r\n */\r\nexport const Root = memo(function FieldRoot({\r\n children,\r\n className,\r\n disabled = false,\r\n invalid = false\r\n}: FieldRootProps) {\r\n const id = useId();\r\n\r\n const value = useMemo(() => ({\r\n id,\r\n disabled,\r\n invalid,\r\n }), [id, disabled, invalid]);\r\n\r\n return (\r\n <FieldContext.Provider value={value}>\r\n <div className={cn(\"w-full\", className)}>\r\n {children}\r\n </div>\r\n </FieldContext.Provider>\r\n );\r\n});\r\n\r\ninterface FieldLabelProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Label = memo(function FieldLabel({ children, className }: FieldLabelProps) {\r\n const ctx = useContext(FieldContext);\r\n return (\r\n <label\r\n htmlFor={ctx?.id}\r\n className={cn(\r\n \"absolute left-3 top-0 -translate-y-1/2 bg-background px-2\",\r\n \"text-xs font-medium text-muted-foreground z-10\",\r\n \"group-focus-within:text-primary whitespace-nowrap\",\r\n ctx?.disabled && \"opacity-60\",\r\n ctx?.invalid && \"text-destructive\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </label>\r\n );\r\n});\r\n\r\ninterface FieldErrorProps {\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Error = memo(function FieldError({ children, className }: FieldErrorProps) {\r\n if (!children) return null;\r\n return (\r\n <p className={cn(\"text-xs text-destructive mt-1.5\", className)}>\r\n {children}\r\n </p>\r\n );\r\n});\r\n\r\ninterface FieldIconProps {\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const Icon = memo(function FieldIcon({ children, className }: FieldIconProps) {\r\n return (\r\n <div className={cn(\r\n \"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none z-10\",\r\n \"text-muted-foreground\",\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n});\r\n\r\nexport const Field = {\r\n Root,\r\n Label,\r\n Error,\r\n Icon,\r\n};\r\n\r\nexport default Field;\r\n","\"use client\";\r\n\r\nimport { forwardRef, ChangeEvent, InputHTMLAttributes, ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactInputProps<T extends FieldValues = FieldValues>\r\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n type?: string;\r\n\r\n // InputGroup addons\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactInput - Enhanced form input with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with icons, buttons, and text addons\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nconst CompactInput = forwardRef<HTMLInputElement, CompactInputProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n type = \"text\",\r\n\r\n // InputGroup addons\r\n AddonLeft,\r\n AddonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML input attributes\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ...props\r\n}, ref) => {\r\n // Determine if we need InputGroup\r\n const hasInputGroup = AddonLeft || AddonRight;\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n name,\r\n type,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n max,\r\n min,\r\n pattern,\r\n readOnly,\r\n step,\r\n inputMode,\r\n enterKeyHint,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <InputGroup>\r\n {AddonLeft && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {AddonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput {...inputProps} />\r\n {AddonRight && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {AddonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n );\r\n }\r\n\r\n // Simple input\r\n return <Input {...inputProps} />;\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLInputElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactInput.displayName = \"CompactInput\";\r\n\r\nexport { CompactInput };\r\nexport type { CompactInputProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ChangeEvent, TextareaHTMLAttributes, ReactNode } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Textarea } from \"@/components/ui/textarea\";\r\nimport { InputGroup, InputGroupTextarea, InputGroupAddon } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactTextareaProps<T extends FieldValues = FieldValues>\r\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\"> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n rows?: number;\r\n\r\n // InputGroup addons\r\n AddonLeft?: ReactNode;\r\n AddonRight?: ReactNode;\r\n\r\n // Styling\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTextarea - Enhanced textarea with InputGroup support\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - InputGroup support with addons\r\n * - Character counter with maxLength\r\n * - Controller integration for react-hook-form\r\n * - Direct usage without form\r\n */\r\nconst CompactTextarea = forwardRef<HTMLTextAreaElement, CompactTextareaProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n rows = 3,\r\n\r\n // InputGroup addons\r\n AddonLeft,\r\n AddonRight,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n // Valid HTML textarea attributes\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ...props\r\n}, ref) => {\r\n const hasInputGroup = AddonLeft || AddonRight;\r\n\r\n const renderTextarea = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: ((value: string) => void) | undefined,\r\n isDisabled: boolean | undefined,\r\n fieldError?: string\r\n ) => {\r\n const currentCharCount = fieldValue?.length || 0;\r\n\r\n const textareaProps = {\r\n ref,\r\n id: name,\r\n name,\r\n disabled: isDisabled,\r\n placeholder,\r\n rows,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLTextAreaElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange?.(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"resize-none pt-3\",\r\n fieldError && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n cols,\r\n wrap,\r\n autoComplete,\r\n autoFocus,\r\n maxLength,\r\n minLength,\r\n readOnly,\r\n spellCheck,\r\n ...props,\r\n };\r\n\r\n // With InputGroup\r\n if (hasInputGroup) {\r\n return (\r\n <>\r\n <InputGroup>\r\n {AddonLeft && (\r\n <InputGroupAddon align=\"block-start\">\r\n {AddonLeft}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupTextarea {...textareaProps} />\r\n {AddonRight && (\r\n <InputGroupAddon align=\"block-end\">\r\n {AddonRight}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Simple textarea\r\n return (\r\n <>\r\n <Textarea {...textareaProps} />\r\n {maxLength && currentCharCount > 0 && (\r\n <div className=\"text-xs text-muted-foreground mt-1.5 text-right\">\r\n {currentCharCount}/{maxLength}\r\n </div>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(field.value, field.onChange, disabled, fieldState?.error?.message)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } } as ChangeEvent<HTMLTextAreaElement>);\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderTextarea(value, handleDirectChange, disabled, error)}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactTextarea.displayName = \"CompactTextarea\";\r\n\r\nexport { CompactTextarea };\r\nexport type { CompactTextareaProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { cn } from \"../../utils\";\r\nimport { Field } from \"./field\";\r\nimport {\r\n Select,\r\n SelectContent,\r\n SelectItem,\r\n SelectTrigger,\r\n SelectValue\r\n} from \"@/components/ui/select\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactSelectProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n items?: SelectOption[];\r\n\r\n // Styling\r\n className?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSelect - Simple, clean select dropdown\r\n *\r\n * @example\r\n * <CompactSelect\r\n * label=\"Status\"\r\n * items={[\r\n * { value: \"active\", label: \"Active\" },\r\n * { value: \"inactive\", label: \"Inactive\" }\r\n * ]}\r\n * />\r\n */\r\nconst CompactSelect = forwardRef<HTMLButtonElement, CompactSelectProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"Select option\",\r\n disabled,\r\n items = [],\r\n\r\n // Styling\r\n className,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={field.value}\r\n onValueChange={(val: string) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n id={name}\r\n className={cn(\r\n \"h-11\",\r\n fieldState?.error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <Field.Root disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n <Select\r\n value={value}\r\n onValueChange={onValueChange}\r\n disabled={disabled}\r\n {...props}\r\n >\r\n <SelectTrigger\r\n ref={ref}\r\n className={cn(\r\n \"h-11\",\r\n error && \"border-destructive focus:ring-destructive/20\",\r\n className\r\n )}\r\n >\r\n <SelectValue placeholder={placeholder} />\r\n </SelectTrigger>\r\n <SelectContent>\r\n {items.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </SelectContent>\r\n </Select>\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactSelect.displayName = \"CompactSelect\";\r\n\r\nexport { CompactSelect };\r\nexport type { CompactSelectProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ReactNode, ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { Plus, Minus } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface CompactNumberInputProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Number configuration\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n\r\n // Display options\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: number | string) => void;\r\n\r\n // Direct usage\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactNumberInput - A space-efficient number input with optional increment/decrement buttons\r\n *\r\n * Features:\r\n * - Floating label design\r\n * - Optional increment/decrement buttons\r\n * - Support for min/max/step values\r\n * - Prefix/suffix support\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nconst CompactNumberInput = forwardRef<HTMLInputElement, CompactNumberInputProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder,\r\n disabled,\r\n\r\n // Number configuration\r\n min = 0,\r\n max,\r\n step = 1,\r\n\r\n // Display options\r\n prefix,\r\n suffix,\r\n showButtons = false,\r\n buttonVariant = \"ghost\",\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n defaultValue,\r\n onChange,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={fieldState?.error?.message}\r\n value={field.value ?? \"\"}\r\n onChange={(val) => {\r\n field.onChange(val);\r\n onValueChange?.(val);\r\n }}\r\n {...props}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage\r\n return (\r\n <CompactNumberInputInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n min={min}\r\n max={max}\r\n step={step}\r\n prefix={prefix}\r\n suffix={suffix}\r\n showButtons={showButtons}\r\n buttonVariant={buttonVariant}\r\n className={className}\r\n inputClassName={inputClassName}\r\n labelClassName={labelClassName}\r\n containerClassName={containerClassName}\r\n error={error}\r\n value={value ?? \"\"}\r\n defaultValue={defaultValue}\r\n onChange={onChange}\r\n onValueChange={onValueChange}\r\n {...props}\r\n />\r\n );\r\n});\r\n\r\ninterface CompactNumberInputInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n showButtons?: boolean;\r\n buttonVariant?: \"ghost\" | \"outline\" | \"default\";\r\n error?: string;\r\n className?: string;\r\n inputClassName?: string;\r\n labelClassName?: string;\r\n containerClassName?: string;\r\n disabled?: boolean;\r\n value?: number | string;\r\n defaultValue?: number | string;\r\n onChange?: (value: number | string) => void;\r\n onValueChange?: (value: number | string) => void;\r\n}\r\n\r\nconst CompactNumberInputInternal = forwardRef<HTMLInputElement, CompactNumberInputInternalProps>(({\r\n label,\r\n placeholder,\r\n min = 0,\r\n max,\r\n step = 1,\r\n prefix,\r\n suffix,\r\n showButtons,\r\n buttonVariant,\r\n error,\r\n className,\r\n inputClassName,\r\n labelClassName,\r\n containerClassName,\r\n disabled,\r\n value,\r\n defaultValue,\r\n onChange,\r\n onValueChange,\r\n ...props\r\n}, ref) => {\r\n const handleIncrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue + step;\r\n if (max === undefined || newValue <= max) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleDecrement = () => {\r\n const currentValue = Number(value) || 0;\r\n const newValue = currentValue - step;\r\n if (newValue >= min) {\r\n const finalValue = Number(newValue.toFixed(10));\r\n onChange?.(finalValue);\r\n onValueChange?.(finalValue);\r\n }\r\n };\r\n\r\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n const val = e.target.value;\r\n if (val === \"\") {\r\n onChange?.(\"\");\r\n onValueChange?.(\"\");\r\n return;\r\n }\r\n\r\n const numVal = Number(val);\r\n if (!isNaN(numVal)) {\r\n if ((min !== undefined && numVal < min) || (max !== undefined && numVal > max)) {\r\n return;\r\n }\r\n onChange?.(numVal);\r\n onValueChange?.(numVal);\r\n }\r\n };\r\n\r\n // With increment/decrement buttons\r\n if (showButtons) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup>\r\n <InputGroupAddon align=\"inline-start\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleDecrement}\r\n disabled={disabled || Number(value) <= min}\r\n >\r\n <Minus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\"text-center\", inputClassName, className)}\r\n {...props}\r\n />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n variant={buttonVariant}\r\n size=\"icon-sm\"\r\n onClick={handleIncrement}\r\n disabled={disabled || (max !== undefined && Number(value) >= max)}\r\n >\r\n <Plus className=\"h-4 w-4\" />\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // With prefix/suffix\r\n if (prefix || suffix) {\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <InputGroup>\r\n {prefix && (\r\n <InputGroupAddon align=\"inline-start\">\r\n {typeof prefix === \"string\" ? <span className=\"text-xs\">{prefix}</span> : prefix}\r\n </InputGroupAddon>\r\n )}\r\n <InputGroupInput\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(inputClassName, className)}\r\n {...props}\r\n />\r\n {suffix && (\r\n <InputGroupAddon align=\"inline-end\">\r\n {typeof suffix === \"string\" ? <span className=\"text-xs\">{suffix}</span> : suffix}\r\n </InputGroupAddon>\r\n )}\r\n </InputGroup>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n }\r\n\r\n // Simple input\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n <Input\r\n ref={ref}\r\n type=\"number\"\r\n value={value}\r\n defaultValue={defaultValue}\r\n onChange={handleInputChange}\r\n min={min}\r\n max={max}\r\n step={step}\r\n disabled={disabled}\r\n placeholder={placeholder}\r\n className={cn(\r\n \"h-11 transition-all duration-200\",\r\n error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName,\r\n className\r\n )}\r\n {...props}\r\n />\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactNumberInput.displayName = \"CompactNumberInput\";\r\nCompactNumberInputInternal.displayName = \"CompactNumberInputInternal\";\r\n\r\nexport { CompactNumberInput };\r\nexport type { CompactNumberInputProps };\r\n","\"use client\";\r\n\r\nimport { useState, useRef, forwardRef, RefObject } from \"react\";\r\nimport { Controller, Control, FieldValues, Path } from \"react-hook-form\";\r\nimport { X, Plus, Check } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { Badge } from \"@/components/ui/badge\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { Field } from \"./field\";\r\n\r\ninterface Choice {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface CompactTagChoiceProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n\r\n // Display\r\n label?: string;\r\n description?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n\r\n // Data\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n\r\n // Styling\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n\r\n // Direct usage\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n onValueChange?: (value: string[]) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactTagChoice - A compact tag selection input\r\n *\r\n * Features:\r\n * - Multi-select tag interface\r\n * - Maximum selection limit\r\n * - Popover for selecting options\r\n * - Form integration via control prop\r\n * - Direct usage without form\r\n */\r\nconst CompactTagChoice = forwardRef<HTMLDivElement, CompactTagChoiceProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n\r\n // Display\r\n label,\r\n description,\r\n placeholder = \"Select options...\",\r\n required,\r\n disabled,\r\n\r\n // Data\r\n choices = [],\r\n maxSelections,\r\n\r\n // Styling\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n\r\n // Direct usage\r\n value: propValue = [],\r\n onChange: propOnChange,\r\n onValueChange,\r\n error,\r\n}, ref) => {\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n error={fieldState?.error?.message}\r\n value={field.value || []}\r\n onChange={(vals) => {\r\n field.onChange(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={cn(className, containerClassName)}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <CompactTagChoiceInternal\r\n ref={ref}\r\n label={label}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n value={propValue}\r\n onChange={(vals) => {\r\n propOnChange?.(vals);\r\n onValueChange?.(vals);\r\n }}\r\n choices={choices}\r\n maxSelections={maxSelections}\r\n containerClassName={containerClassName}\r\n labelClassName={labelClassName}\r\n inputClassName={inputClassName}\r\n className={className}\r\n error={error}\r\n />\r\n );\r\n});\r\n\r\ninterface CompactTagChoiceInternalProps {\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n value?: string[];\r\n onChange?: (value: string[]) => void;\r\n choices?: Choice[];\r\n maxSelections?: number;\r\n error?: string;\r\n className?: string;\r\n containerClassName?: string;\r\n labelClassName?: string;\r\n inputClassName?: string;\r\n}\r\n\r\nconst CompactTagChoiceInternal = forwardRef<HTMLDivElement, CompactTagChoiceInternalProps>(({\r\n label,\r\n placeholder,\r\n disabled,\r\n value = [],\r\n onChange,\r\n choices = [],\r\n maxSelections,\r\n error,\r\n className,\r\n containerClassName,\r\n labelClassName,\r\n inputClassName,\r\n}, ref) => {\r\n const [open, setOpen] = useState(false);\r\n const triggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n const availableChoices = choices.filter((c) => !value.includes(c.value));\r\n\r\n const addChoice = (choiceValue: string) => {\r\n if (value.includes(choiceValue)) return;\r\n if (maxSelections && value.length >= maxSelections) return;\r\n const updated = [...value, choiceValue];\r\n onChange?.(updated);\r\n };\r\n\r\n const removeChoice = (choiceValue: string) => {\r\n const updated = value.filter((v) => v !== choiceValue);\r\n onChange?.(updated);\r\n };\r\n\r\n return (\r\n <Field.Root className={containerClassName} disabled={disabled} invalid={!!error}>\r\n {label && <Field.Label className={labelClassName}>{label}</Field.Label>}\r\n\r\n <div\r\n className={cn(\r\n \"min-h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\",\r\n \"ring-offset-background focus-within:ring-1 focus-within:ring-primary/20\",\r\n \"hover:border-primary/50 transition-all duration-200\",\r\n error && \"border-destructive focus-within:ring-destructive/20\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n inputClassName\r\n )}\r\n ref={ref}\r\n >\r\n <div className=\"flex flex-wrap gap-1 mb-2\">\r\n {value.map((val) => {\r\n const choice = choices.find((c) => c.value === val);\r\n return (\r\n <Badge key={val} variant=\"secondary\" className=\"flex items-center gap-1 px-2 py-1\">\r\n <span>{choice?.label ?? val}</span>\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className=\"h-auto p-0 text-muted-foreground hover:text-foreground\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n removeChoice(val);\r\n }}\r\n >\r\n <X className=\"h-3 w-3\" />\r\n </Button>\r\n )}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n\r\n {!disabled && availableChoices.length > 0 && (!maxSelections || value.length < maxSelections) && (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger\r\n render={\r\n <Button\r\n ref={triggerRef}\r\n type=\"button\"\r\n variant=\"ghost\"\r\n className={cn(\r\n \"inline-flex items-center justify-center h-auto p-1 rounded-md text-sm font-medium transition-colors\",\r\n \"text-muted-foreground hover:text-foreground hover:bg-accent\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\r\n )}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setOpen(true);\r\n }}\r\n >\r\n <Plus className=\"h-3 w-3 mr-1\" />\r\n {value.length === 0 ? placeholder : \"Add more...\"}\r\n </Button>\r\n }\r\n />\r\n <PopoverContent className=\"w-[220px] p-0\" align=\"start\">\r\n <div className=\"p-1\">\r\n {availableChoices.length === 0 ? (\r\n <div className=\"px-2 py-3 text-sm text-muted-foreground text-center\">No options available</div>\r\n ) : (\r\n <div className=\"space-y-1\">\r\n {availableChoices.map((choice) => (\r\n <div\r\n key={choice.value}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n addChoice(choice.value);\r\n }}\r\n className=\"flex items-center justify-between px-2 py-2 text-sm rounded-sm hover:bg-accent hover:text-accent-foreground cursor-pointer\"\r\n >\r\n <span>{choice.label}</span>\r\n {value.includes(choice.value) && <Check className=\"h-4 w-4\" />}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n <div className=\"border-t px-2 py-2 text-xs text-muted-foreground\">Click to select • Click outside to close</div>\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n )}\r\n\r\n {maxSelections && (\r\n <div className=\"text-xs text-muted-foreground mt-1\">{value.length}/{maxSelections} selected</div>\r\n )}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactTagChoice.displayName = \"CompactTagChoice\";\r\nCompactTagChoiceInternal.displayName = \"CompactTagChoiceInternal\";\r\n\r\nexport { CompactTagChoice };\r\nexport type { CompactTagChoiceProps };\r\n","\"use client\";\r\n\r\nimport { forwardRef, ReactNode, ChangeEvent } from \"react\";\r\nimport { Controller, Control, FieldValues, Path, FieldError } from \"react-hook-form\";\r\nimport { Wand2 } from \"lucide-react\";\r\nimport { cn } from \"../../utils\";\r\nimport { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from \"@/components/ui/input-group\";\r\nimport { Field } from \"./field\";\r\n\r\n/**\r\n * Generates a URL-friendly slug from a string\r\n */\r\nfunction generateSlug(text: string): string {\r\n if (!text) return \"\";\r\n return text\r\n .toLowerCase()\r\n .trim()\r\n .replace(/[^\\w\\s-]/g, \"\") // Remove special characters\r\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\r\n .replace(/-+/g, \"-\") // Replace multiple hyphens with single hyphen\r\n .replace(/^-+|-+$/g, \"\"); // Remove leading/trailing hyphens\r\n}\r\n\r\ninterface CompactSlugFieldProps<T extends FieldValues = FieldValues> {\r\n // Form integration\r\n control?: Control<T>;\r\n name?: Path<T>;\r\n description?: string;\r\n required?: boolean;\r\n\r\n // Basic props\r\n label?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n\r\n // Icon support\r\n icon?: ReactNode;\r\n\r\n // Slug generation\r\n sourceValue?: string;\r\n onGenerate?: (source: string) => string;\r\n\r\n // Styling\r\n className?: string;\r\n inputClassName?: string;\r\n\r\n // Events\r\n onValueChange?: (value: string) => void;\r\n\r\n // Direct usage\r\n value?: string;\r\n onChange?: (e: ChangeEvent<HTMLInputElement> | { target: { value: string } }) => void;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * CompactSlugField - Compact slug input with auto-generation\r\n *\r\n * Features:\r\n * - Compact design with floating label\r\n * - Auto-generate slug from source field\r\n * - Manual editing support\r\n * - InputGroup with generate button\r\n * - Form integration via control prop\r\n */\r\nconst CompactSlugField = forwardRef<HTMLInputElement, CompactSlugFieldProps>(({\r\n // Form integration\r\n control,\r\n name,\r\n description,\r\n required,\r\n\r\n // Basic props\r\n label,\r\n placeholder = \"my-page-slug\",\r\n disabled,\r\n\r\n // Icon support\r\n icon,\r\n\r\n // Slug generation\r\n sourceValue,\r\n onGenerate,\r\n\r\n // Styling\r\n className,\r\n inputClassName,\r\n\r\n // Events\r\n onValueChange,\r\n\r\n // Direct usage\r\n value,\r\n onChange,\r\n error,\r\n\r\n ...props\r\n}, ref) => {\r\n\r\n const handleGenerate = (currentValue: string | undefined, fieldOnChange: (value: string) => void) => {\r\n const newSlug = onGenerate ? onGenerate(sourceValue || \"\") : generateSlug(sourceValue || \"\");\r\n fieldOnChange(newSlug);\r\n onValueChange?.(newSlug);\r\n };\r\n\r\n const renderInput = (\r\n fieldValue: string | undefined,\r\n fieldOnChange: (value: string) => void,\r\n isDisabled: boolean | undefined,\r\n fieldState?: { error?: FieldError | { message?: string } }\r\n ) => {\r\n const inputProps = {\r\n ref,\r\n id: name,\r\n type: \"text\" as const,\r\n disabled: isDisabled,\r\n placeholder,\r\n value: fieldValue || \"\",\r\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n fieldOnChange(newValue);\r\n onValueChange?.(newValue);\r\n },\r\n className: cn(\r\n \"h-11\",\r\n fieldState?.error && \"border-destructive focus-visible:ring-destructive/20\",\r\n inputClassName\r\n ),\r\n ...props,\r\n };\r\n\r\n return (\r\n <>\r\n {/* Icon support (outside InputGroup) */}\r\n {icon && (\r\n <Field.Icon>\r\n {icon}\r\n </Field.Icon>\r\n )}\r\n\r\n <InputGroup>\r\n <InputGroupInput {...inputProps} className={cn(inputProps.className, icon && \"pl-9\")} />\r\n <InputGroupAddon align=\"inline-end\">\r\n <InputGroupButton\r\n type=\"button\"\r\n size=\"sm\"\r\n onClick={() => handleGenerate(fieldValue, fieldOnChange)}\r\n disabled={isDisabled || !sourceValue}\r\n title=\"Generate slug from name\"\r\n >\r\n <Wand2 className=\"h-4 w-4\" />\r\n Generate\r\n </InputGroupButton>\r\n </InputGroupAddon>\r\n </InputGroup>\r\n </>\r\n );\r\n };\r\n\r\n // With react-hook-form\r\n if (control && name) {\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => (\r\n <Field.Root className={className} disabled={disabled} invalid={!!fieldState?.error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(field.value, field.onChange, disabled, fieldState)}\r\n </div>\r\n {fieldState?.error && <Field.Error>{fieldState.error.message}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n )}\r\n />\r\n );\r\n }\r\n\r\n // Direct usage (without react-hook-form)\r\n const handleDirectChange = (newValue: string) => {\r\n onChange?.({ target: { value: newValue } });\r\n onValueChange?.(newValue);\r\n };\r\n\r\n return (\r\n <Field.Root className={className} disabled={disabled} invalid={!!error}>\r\n <div className=\"relative group\">\r\n {label && <Field.Label>{label}</Field.Label>}\r\n {renderInput(value, handleDirectChange, disabled, { error: error ? { message: error } : undefined })}\r\n </div>\r\n {error && <Field.Error>{error}</Field.Error>}\r\n {description && <p className=\"text-xs text-muted-foreground mt-1.5\">{description}</p>}\r\n </Field.Root>\r\n );\r\n});\r\n\r\nCompactSlugField.displayName = \"CompactSlugField\";\r\n\r\nexport { CompactSlugField, generateSlug };\r\nexport type { CompactSlugFieldProps };\r\n","\"use client\";\r\n\r\nimport { useState, useMemo, useCallback, ReactNode } from \"react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameMonth,\r\n isSameDay,\r\n addMonths,\r\n subMonths,\r\n getDay,\r\n} from \"date-fns\";\r\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"../utils\";\r\n\r\nconst WEEKDAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n\r\nexport interface CalendarEvent {\r\n id: string;\r\n date: Date | string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface EventCalendarProps<T extends CalendarEvent> {\r\n /** Events to display on the calendar */\r\n events?: T[];\r\n /** Currently selected date */\r\n selectedDate?: Date | null;\r\n /** Callback when a date is selected */\r\n onDateSelect?: (date: Date, events: T[]) => void;\r\n /** Callback when month changes */\r\n onMonthChange?: (date: Date) => void;\r\n /** Initial month to display */\r\n initialMonth?: Date;\r\n /** Custom render for day cell content */\r\n renderDayContent?: (date: Date, events: T[], isSelected: boolean) => ReactNode;\r\n /** Custom render for event indicators */\r\n renderEventIndicators?: (events: T[]) => ReactNode;\r\n /** Get events for a specific date (custom filtering) */\r\n getEventsForDate?: (date: Date, events: T[]) => T[];\r\n /** Additional class names */\r\n className?: string;\r\n /** Header content (left side) */\r\n headerLeft?: ReactNode;\r\n /** Header content (right side, before navigation) */\r\n headerRight?: ReactNode;\r\n /** Minimum cell height */\r\n minCellHeight?: string;\r\n /** Show week numbers */\r\n showWeekNumbers?: boolean;\r\n /** Loading state */\r\n isLoading?: boolean;\r\n}\r\n\r\n/**\r\n * EventCalendar - A reusable calendar component for displaying events\r\n *\r\n * Can be used for attendance tracking, scheduling, etc.\r\n */\r\nexport function EventCalendar<T extends CalendarEvent>({\r\n events = [],\r\n selectedDate: controlledSelectedDate,\r\n onDateSelect,\r\n onMonthChange,\r\n initialMonth = new Date(),\r\n renderDayContent,\r\n renderEventIndicators,\r\n getEventsForDate,\r\n className,\r\n headerLeft,\r\n headerRight,\r\n minCellHeight = \"5rem\",\r\n showWeekNumbers = false,\r\n isLoading = false,\r\n}: EventCalendarProps<T>) {\r\n const [currentMonth, setCurrentMonth] = useState(initialMonth);\r\n const [internalSelectedDate, setInternalSelectedDate] = useState<Date | null>(null);\r\n\r\n const selectedDate = controlledSelectedDate ?? internalSelectedDate;\r\n\r\n // Generate days for the current month\r\n // Always render 6 rows (42 cells) for consistent layout\r\n const { days, paddingDaysBefore, paddingDaysAfter } = useMemo(() => {\r\n const monthStart = startOfMonth(currentMonth);\r\n const monthEnd = endOfMonth(currentMonth);\r\n const daysInMonth = eachDayOfInterval({ start: monthStart, end: monthEnd });\r\n const startDayOfWeek = getDay(monthStart);\r\n\r\n // Calculate total cells needed (always 6 rows = 42 cells)\r\n const totalCells = 42;\r\n const usedCells = startDayOfWeek + daysInMonth.length;\r\n const trailingPadding = totalCells - usedCells;\r\n\r\n return {\r\n days: daysInMonth,\r\n paddingDaysBefore: startDayOfWeek,\r\n paddingDaysAfter: trailingPadding,\r\n };\r\n }, [currentMonth]);\r\n\r\n // Default event filtering by date\r\n const defaultGetEventsForDate = useCallback(\r\n (date: Date, allEvents: T[]): T[] => {\r\n return allEvents.filter((event) => {\r\n const eventDate = typeof event.date === \"string\" ? new Date(event.date) : event.date;\r\n return isSameDay(eventDate, date);\r\n });\r\n },\r\n []\r\n );\r\n\r\n const getEvents = getEventsForDate || defaultGetEventsForDate;\r\n\r\n // Navigation handlers\r\n const handlePrevMonth = useCallback(() => {\r\n const newMonth = subMonths(currentMonth, 1);\r\n setCurrentMonth(newMonth);\r\n onMonthChange?.(newMonth);\r\n }, [currentMonth, onMonthChange]);\r\n\r\n const handleNextMonth = useCallback(() => {\r\n const newMonth = addMonths(currentMonth, 1);\r\n setCurrentMonth(newMonth);\r\n onMonthChange?.(newMonth);\r\n }, [currentMonth, onMonthChange]);\r\n\r\n // Date selection handler\r\n const handleDateClick = useCallback(\r\n (date: Date) => {\r\n const dayEvents = getEvents(date, events);\r\n setInternalSelectedDate(date);\r\n onDateSelect?.(date, dayEvents);\r\n },\r\n [events, getEvents, onDateSelect]\r\n );\r\n\r\n // Default event indicators\r\n const defaultRenderEventIndicators = useCallback((dayEvents: T[]) => {\r\n if (dayEvents.length === 0) return null;\r\n\r\n return (\r\n <div className=\"flex gap-0.5 mt-1\">\r\n {dayEvents.slice(0, 3).map((_, idx) => (\r\n <div\r\n key={idx}\r\n className=\"h-1.5 w-1.5 rounded-full bg-primary\"\r\n />\r\n ))}\r\n {dayEvents.length > 3 && (\r\n <span className=\"text-[10px] text-muted-foreground ml-0.5\">\r\n +{dayEvents.length - 3}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }, []);\r\n\r\n const renderIndicators = renderEventIndicators || defaultRenderEventIndicators;\r\n\r\n return (\r\n <div className={cn(\"space-y-4\", className)}>\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-4\">\r\n {headerLeft}\r\n <h2 className=\"text-lg font-semibold\">\r\n {format(currentMonth, \"MMMM yyyy\")}\r\n </h2>\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n {headerRight}\r\n <div className=\"flex gap-1\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={handlePrevMonth}\r\n disabled={isLoading}\r\n >\r\n <ChevronLeft className=\"h-4 w-4\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={handleNextMonth}\r\n disabled={isLoading}\r\n >\r\n <ChevronRight className=\"h-4 w-4\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Calendar Grid */}\r\n <div className=\"rounded-lg border overflow-hidden\">\r\n {/* Weekday headers */}\r\n <div\r\n className={cn(\r\n \"grid bg-muted/50\",\r\n showWeekNumbers ? \"grid-cols-8\" : \"grid-cols-7\"\r\n )}\r\n >\r\n {showWeekNumbers && (\r\n <div className=\"px-2 py-3 text-center text-xs font-medium text-muted-foreground border-r\">\r\n Wk\r\n </div>\r\n )}\r\n {WEEKDAYS.map((day) => (\r\n <div\r\n key={day}\r\n className=\"px-2 py-3 text-center text-xs font-medium text-muted-foreground\"\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Days grid - always 6 rows for consistent layout */}\r\n <div\r\n className={cn(\r\n \"grid gap-px bg-border\",\r\n showWeekNumbers ? \"grid-cols-8\" : \"grid-cols-7\"\r\n )}\r\n >\r\n {/* Padding cells for start of month */}\r\n {Array.from({ length: paddingDaysBefore }).map((_, index) => (\r\n <div\r\n key={`padding-start-${index}`}\r\n className=\"bg-card\"\r\n style={{ minHeight: minCellHeight }}\r\n />\r\n ))}\r\n\r\n {/* Day cells */}\r\n {days.map((day) => {\r\n const dayEvents = getEvents(day, events);\r\n const isToday = isSameDay(day, new Date());\r\n const isSelected = selectedDate ? isSameDay(day, selectedDate) : false;\r\n const isCurrentMonth = isSameMonth(day, currentMonth);\r\n\r\n return (\r\n <div\r\n key={day.toISOString()}\r\n className={cn(\r\n \"bg-card p-2 cursor-pointer transition-colors hover:bg-muted/50\",\r\n isSelected && \"ring-2 ring-primary ring-inset bg-primary/5\",\r\n !isCurrentMonth && \"opacity-50\",\r\n isLoading && \"pointer-events-none opacity-50\"\r\n )}\r\n style={{ minHeight: minCellHeight }}\r\n onClick={() => handleDateClick(day)}\r\n >\r\n {renderDayContent ? (\r\n renderDayContent(day, dayEvents, isSelected)\r\n ) : (\r\n <>\r\n <div\r\n className={cn(\r\n \"flex h-7 w-7 items-center justify-center rounded-full text-sm\",\r\n isToday && \"bg-primary text-primary-foreground font-semibold\"\r\n )}\r\n >\r\n {format(day, \"d\")}\r\n </div>\r\n {renderIndicators(dayEvents)}\r\n </>\r\n )}\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Padding cells for end of month (to fill 6 rows) */}\r\n {Array.from({ length: paddingDaysAfter }).map((_, index) => (\r\n <div\r\n key={`padding-end-${index}`}\r\n className=\"bg-card\"\r\n style={{ minHeight: minCellHeight }}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * CalendarDayDetail - Side panel component for showing selected day details\r\n */\r\nexport interface CalendarDayDetailProps {\r\n date: Date | null;\r\n title?: string;\r\n emptyMessage?: string;\r\n children?: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CalendarDayDetail({\r\n date,\r\n title,\r\n emptyMessage = \"Click on a day to see details\",\r\n children,\r\n className,\r\n}: CalendarDayDetailProps) {\r\n return (\r\n <div className={cn(\"rounded-lg border bg-card\", className)}>\r\n <div className=\"p-4 border-b\">\r\n <h3 className=\"font-semibold\">\r\n {date ? format(date, \"EEEE, MMMM d\") : title || \"Select a day\"}\r\n </h3>\r\n </div>\r\n <div className=\"p-4\">\r\n {!date ? (\r\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n/**\r\n * CalendarWithDetail - Calendar with integrated detail panel\r\n */\r\nexport interface CalendarWithDetailProps<T extends CalendarEvent>\r\n extends Omit<EventCalendarProps<T>, \"onDateSelect\"> {\r\n /** Render detail panel content */\r\n renderDetail?: (date: Date, events: T[]) => ReactNode;\r\n /** Detail panel title when no date selected */\r\n detailTitle?: string;\r\n /** Detail panel empty message */\r\n detailEmptyMessage?: string;\r\n /** Layout direction */\r\n layout?: \"horizontal\" | \"vertical\";\r\n /** Detail panel position */\r\n detailPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\r\n /** Callback when date is selected */\r\n onDateSelect?: (date: Date, events: T[]) => void;\r\n}\r\n\r\nexport function CalendarWithDetail<T extends CalendarEvent>({\r\n renderDetail,\r\n detailTitle,\r\n detailEmptyMessage,\r\n layout = \"horizontal\",\r\n detailPosition = \"right\",\r\n onDateSelect,\r\n ...calendarProps\r\n}: CalendarWithDetailProps<T>) {\r\n const [selectedDate, setSelectedDate] = useState<Date | null>(null);\r\n const [selectedEvents, setSelectedEvents] = useState<T[]>([]);\r\n\r\n const handleDateSelect = useCallback(\r\n (date: Date, events: T[]) => {\r\n setSelectedDate(date);\r\n setSelectedEvents(events);\r\n onDateSelect?.(date, events);\r\n },\r\n [onDateSelect]\r\n );\r\n\r\n const isHorizontal = layout === \"horizontal\";\r\n const detailFirst = detailPosition === \"left\" || detailPosition === \"top\";\r\n\r\n const calendarElement = (\r\n <EventCalendar\r\n {...calendarProps}\r\n selectedDate={selectedDate}\r\n onDateSelect={handleDateSelect}\r\n />\r\n );\r\n\r\n const detailElement = (\r\n <CalendarDayDetail\r\n date={selectedDate}\r\n title={detailTitle}\r\n emptyMessage={detailEmptyMessage}\r\n className={isHorizontal ? \"min-w-[300px]\" : \"\"}\r\n >\r\n {selectedDate && renderDetail?.(selectedDate, selectedEvents)}\r\n </CalendarDayDetail>\r\n );\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"gap-4\",\r\n isHorizontal ? \"flex\" : \"flex flex-col\",\r\n isHorizontal && \"items-start\"\r\n )}\r\n >\r\n {detailFirst ? (\r\n <>\r\n {detailElement}\r\n <div className=\"flex-1\">{calendarElement}</div>\r\n </>\r\n ) : (\r\n <>\r\n <div className={isHorizontal ? \"flex-1\" : \"\"}>{calendarElement}</div>\r\n {detailElement}\r\n </>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { cn } from \"../utils\";\r\nimport type { ReactNode } from \"react\";\r\n\r\ntype Background = \"default\" | \"muted\" | \"primary\" | \"transparent\";\r\ntype Padding = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport interface SectionProps {\r\n id?: string;\r\n children: ReactNode;\r\n className?: string;\r\n background?: Background;\r\n padding?: Padding;\r\n}\r\n\r\nconst backgrounds: Record<Background, string> = {\r\n default: \"bg-background\",\r\n muted: \"bg-muted\",\r\n primary: \"bg-primary text-primary-foreground\",\r\n transparent: \"bg-transparent\",\r\n};\r\n\r\nconst paddings: Record<Padding, string> = {\r\n none: \"\",\r\n sm: \"py-8 md:py-12\",\r\n md: \"py-12 md:py-16\",\r\n lg: \"py-16 md:py-24\",\r\n xl: \"py-24 md:py-32\",\r\n};\r\n\r\nexport function Section({\r\n id,\r\n children,\r\n className,\r\n background = \"default\",\r\n padding = \"sm\",\r\n}: SectionProps) {\r\n return (\r\n <section\r\n id={id}\r\n className={cn(backgrounds[background], paddings[padding], className)}\r\n >\r\n {children}\r\n </section>\r\n );\r\n}\r\n","import { cn } from \"../utils\";\r\nimport type { ReactNode } from \"react\";\r\n\r\ntype MaxWidth = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"4xl\" | \"5xl\" | \"6xl\" | \"7xl\" | \"full\";\r\n\r\nexport interface ContainerProps {\r\n children: ReactNode;\r\n className?: string;\r\n maxWidth?: MaxWidth;\r\n}\r\n\r\nconst maxWidthClasses: Record<MaxWidth, string> = {\r\n sm: \"max-w-screen-sm\",\r\n md: \"max-w-screen-md\",\r\n lg: \"max-w-screen-lg\",\r\n xl: \"max-w-screen-xl\",\r\n \"2xl\": \"max-w-screen-2xl\",\r\n \"4xl\": \"max-w-4xl\",\r\n \"5xl\": \"max-w-5xl\",\r\n \"6xl\": \"max-w-6xl\",\r\n \"7xl\": \"max-w-7xl\",\r\n full: \"max-w-full\",\r\n};\r\n\r\nexport function Container({\r\n children,\r\n className,\r\n maxWidth = \"7xl\",\r\n}: ContainerProps) {\r\n const isFullWidth = maxWidth === \"full\";\r\n const baseClass = isFullWidth\r\n ? \"w-full px-4 sm:px-6 lg:px-10\"\r\n : \"mx-auto px-4 sm:px-6 lg:px-8\";\r\n\r\n return (\r\n <div className={cn(baseClass, !isFullWidth && maxWidthClasses[maxWidth], className)}>\r\n {children}\r\n </div>\r\n );\r\n}\r\n"]}