next-data-kit 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/next-data-kit.ts","../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts","../src/client/utils/cn.ts","../src/client/utils/index.ts","../src/client/hooks/useDataKit.ts","../src/client/hooks/useSelection.ts","../src/client/hooks/usePagination.ts","../src/client/context/index.tsx","../src/client/components/ui/table.tsx","../src/client/components/ui/checkbox.tsx","../src/client/components/ui/popover.tsx","../src/client/components/ui/dropdown-menu.tsx","../src/client/components/ui/switch.tsx","../src/client/components/ui/button.tsx","../src/client/components/ui/select.tsx","../src/client/components/data-kit-table.tsx","../src/client/components/data-kit.tsx"],"names":["isProvided","useState","useCallback","useMemo","jsx","React","Button","jsxs","CheckIcon","debounce","useRef","useEffect","MoreHorizontal","action","ChevronLeft","ChevronRight","Filter","Loader2"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * next-data-kit - React Data Kit Types\n *\n * Core types for the next-data-kit server action and components.\n */\n\nimport type { TMongoFilterQuery, TSortOrder } from './database/mongo';\n\n// ** ============================================================================\n// ** Sort Types\n// ** ============================================================================\n\n/**\n * Sort options type that references keys from the item type\n */\nexport type TSortOptions<T> = {\n [K in keyof T]?: TSortOrder;\n};\n\n/**\n * Sort entry for array-based sorting\n */\nexport type TSortEntry = {\n path: string;\n value: 1 | -1;\n};\n\n// ** ============================================================================\n// ** Filter Types\n// ** ============================================================================\n\n/**\n * Filter configuration for automatic filtering\n */\nexport type TFilterConfig = {\n [key: string]: {\n // ** Type of filter matching\n type: 'REGEX' | 'EXACT';\n // ** Optional: different database field name\n field?: string;\n };\n};\n\n/**\n * Custom filter configuration\n * Allows defining custom filter functions for specific filter keys\n */\nexport type TFilterCustomConfig<T = unknown> = {\n [id: string]: (data: unknown) => TMongoFilterQuery<T>;\n};\n\n/**\n * Variant of TFilterCustomConfig that allows customizing the returned filter shape.\n * Useful for Mongo (operator-based) vs. other ORMs (where clauses) in the future.\n */\nexport type TFilterCustomConfigWithFilter<TDoc = unknown, TFilter = TMongoFilterQuery<TDoc>> = {\n [id: string]: (data: unknown) => TFilter;\n};\n\n// ** ============================================================================\n// ** Input/Output Types\n// ** ============================================================================\n\n/**\n * React Data Kit server action input\n */\nexport type TDataKitInput<T = unknown> = {\n // ** Action type - currently only FETCH is supported\n action?: 'FETCH';\n // ** Current page number (1-indexed)\n page?: number;\n // ** Number of items per page\n limit?: number;\n // ** Legacy sort option\n sort?: TSortOptions<T>;\n // ** Multi-sort as an array\n sorts?: TSortEntry[];\n // ** Query parameters for exact match filtering\n query?: Record<string, string | number | boolean>;\n // ** Filter parameters\n filter?: Record<string, unknown>;\n // ** Filter configuration for automatic filtering\n filterConfig?: TFilterConfig;\n // ** Custom filter configuration\n filterCustom?: TFilterCustomConfig<T>;\n};\n\n/**\n * React Data Kit server action result\n */\nexport type TDataKitResult<R> = {\n type: 'ITEMS';\n items: R[];\n documentTotal: number;\n};\n\n// ** ============================================================================\n// ** Pagination Types\n// ** ============================================================================\n\n/**\n * Pagination info for client-side use\n */\nexport type TPaginationInfo = {\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n};\n\n/**\n * Calculate pagination info from next-data-kit result\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n currentPage: page,\n totalPages: Math.ceil(total / limit),\n totalItems: total,\n itemsPerPage: limit,\n hasNextPage: page * limit < total,\n hasPrevPage: page > 1,\n});\n\n// ** ============================================================================\n// ** Adapter Types\n// ** ============================================================================\n\n/**\n * React Data Kit Adapter Interface\n * Defines the contract for a database adapter.\n */\nexport type TDataKitAdapter<T> = (params: Readonly<{\n filter: Record<string, unknown>;\n sorts: TSortEntry[];\n limit: number;\n page: number;\n skip: number;\n input: TDataKitInput<T>;\n}>) => Promise<{ items: T[]; total: number }>;\n","/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery } from '../types';\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n * \n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(\n fields: (keyof T | string)[]\n): (value: unknown) => TMongoFilterQuery<T> => {\n return (value: unknown): TMongoFilterQuery<T> => {\n if (!value || typeof value !== 'string') {\n return {} as TMongoFilterQuery<T>;\n }\n\n const escapedValue = escapeRegex(value);\n return {\n $or: fields.map((field) => ({\n [field]: { $regex: escapedValue, $options: 'i' },\n })),\n } as TMongoFilterQuery<T>;\n };\n};\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type {\n TMongoModel,\n TMongoFilterQuery,\n TSortOrder,\n TSortOptions,\n TFilterCustomConfigWithFilter,\n TDataKitAdapter,\n TExtractDocType,\n} from '../../types';\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nimport { escapeRegex } from '../utils';\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nconst isProvided = (value: unknown): boolean =>\n value !== undefined && value !== null && value !== '';\n\nconst isSafeKey = (key: string): boolean => {\n const unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n return !unsafeKeys.includes(key);\n};\n\n// ** ============================================================================\n// ** Adapter\n// ** ============================================================================\n\nexport const mongooseAdapter = <\n M extends TMongoModel<unknown, object>,\n DocType = TExtractDocType<M>\n>(\n model: M,\n options: Readonly<{\n filter?: (filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>;\n filterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n defaultSort?: TSortOptions<DocType>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }> = {}\n): TDataKitAdapter<DocType> => {\n // ** Deconstruct options\n const { filter: customFilterFn, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n return async ({ filter, sorts, limit, skip, input }) => {\n // ** Normalize sort\n let sortOption: Record<string, TSortOrder>;\n\n if (input.sort && Object.keys(input.sort).length > 0) {\n sortOption = input.sort as Record<string, TSortOrder>;\n } else if (sorts && sorts.length > 0) {\n sortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n if (s?.path && (s.value === 1 || s.value === -1)) {\n acc[s.path] = s.value;\n }\n return acc;\n }, {});\n } else {\n sortOption = defaultSort as Record<string, TSortOrder>;\n }\n\n // ** Construct filter query\n let filterQuery: TMongoFilterQuery<DocType> = {};\n\n // ** Query params (exact match)\n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key)) {\n (filterQuery as Record<string, unknown>)[key] = value;\n }\n });\n }\n\n // ** Custom filter function\n if (customFilterFn) {\n const customQuery = customFilterFn(filter);\n filterQuery = { ...filterQuery, ...customQuery };\n }\n\n // ** User defined filters\n if (filter && !customFilterFn) {\n if (input.filterConfig) {\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n const config = input.filterConfig[key];\n const fieldName = config?.field ?? key;\n\n if (config?.type === 'REGEX') {\n (filterQuery as Record<string, unknown>)[fieldName] = {\n $regex: escapeRegex(String(value)),\n $options: 'i',\n };\n } else if (config?.type === 'EXACT') {\n (filterQuery as Record<string, unknown>)[fieldName] = value;\n }\n }\n });\n } else {\n // ** Default automatic filtering\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key)) {\n if (typeof value === 'string') {\n (filterQuery as Record<string, unknown>)[key] = {\n $regex: escapeRegex(value),\n $options: 'i',\n };\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n (filterQuery as Record<string, unknown>)[key] = value;\n }\n }\n });\n }\n }\n\n // ** Custom filter logic (filterCustom)\n if (filterCustom && filter) {\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n const customFilter = filterCustom[key]!(value);\n filterQuery = { ...filterQuery, ...customFilter };\n }\n });\n }\n\n // ** Execute queries\n const total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n const items = await model\n .find(filterQuery as TMongoFilterQuery<unknown>)\n .sort(sortOption)\n .limit(limit)\n .skip(skip) as unknown as DocType[];\n\n return { items, total };\n };\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TMongoFilterQuery, TFilterCustomConfigWithFilter, TSortOptions } from '../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TDataKitServerActionOptions<T, R> = {\n\t// ** The input from the client\n\tinput: TDataKitInput<T>;\n\t// ** The database adapter or Mongoose model\n\tadapter: TDataKitAdapter<T> | TMongoModel<T>;\n\t// ** Function to transform each item before returning\n\titem: (item: T) => Promise<R> | R;\n\t// ** Custom filter function\n\tfilter?: (filterInput?: Record<string, unknown>) => TMongoFilterQuery<T>;\n\t// ** Custom filter configuration\n\tfilterCustom?: TFilterCustomConfigWithFilter<T, TMongoFilterQuery<T>>;\n\t// ** Default sort options\n\tdefaultSort?: TSortOptions<T>;\n\t// ** Maximum limit per page (default: 100)\n\tmaxLimit?: number;\n\t// ** Whitelist of allowed filter fields\n\tfilterAllowed?: string[];\n\t// ** Whitelist of allowed query fields\n\tqueryAllowed?: string[];\n};\n\n// ** ============================================================================\n// ** Server Action\n// ** ============================================================================\n\nexport const dataKitServerAction = async <T, R>(props: Readonly<TDataKitServerActionOptions<T, R>>): Promise<TDataKitResult<R>> => {\n\t// ** Deconstruct Props\n\tconst { input, adapter, item, maxLimit = 100, filterAllowed, queryAllowed } = props;\n\n\t// ** Whitelist filtering for security (if configured)\n\t// ** We do this here instead of in the adapter to keep the adapter simple and \"dumb\"\n\n\t// ** Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\t// ** Enforce primitive values only (Anti-NoSQL Injection)\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// ** Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, unknown> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\t// ** Enforce primitive values only (Anti-NoSQL Injection)\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tsafeFilter[key] = val;\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// ** Determine adapter\n\tconst finalAdapter: TDataKitAdapter<T> = typeof adapter === 'function' ? adapter : mongooseAdapter(adapter as TMongoModel<T>, props);\n\n\t// ** Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\t// ** Fetch data using adapter\n\t\t\tconst { items, total } = await finalAdapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\t// ** Process each item through the item mapper function\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n};\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TSortEntry, TDataKitAdapter } from '../../types';\n\nconst isProvided = (value: unknown): boolean =>\n value !== undefined && value !== null && value !== '';\n\nconst getValueByPath = (obj: unknown, path: string): unknown => {\n if (!path) return undefined;\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nconst matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n if (Array.isArray(needle)) return needle.includes(rowValue as never);\n return rowValue === needle;\n};\n\nconst matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n if (!isProvided(needle)) return true;\n if (rowValue === undefined || rowValue === null) return false;\n const hay = String(rowValue);\n\n if (needle instanceof RegExp) return needle.test(hay);\n const n = String(needle);\n return hay.toLowerCase().includes(n.toLowerCase());\n};\n\nconst compareValues = (a: unknown, b: unknown): number => {\n if (a === b) return 0;\n if (a === undefined || a === null) return -1;\n if (b === undefined || b === null) return 1;\n\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n const as = String(a);\n const bs = String(b);\n return as.localeCompare(bs);\n};\n\nconst normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] =>\n Array.isArray(sorts) ? sorts.filter((s) => !!s?.path && (s.value === 1 || s.value === -1)) : [];\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n dataset: ReadonlyArray<T>,\n options: Readonly<{\n /** default behavior for filter keys not present in filterConfig */\n defaultFilterType?: 'regex' | 'exact';\n }> = {}\n): TDataKitAdapter<T> => {\n const { defaultFilterType = 'exact' } = options;\n\n return async ({ filter, sorts, limit, skip, input }) => {\n const filterConfig: TFilterConfig | undefined = input.filterConfig;\n const query = input.query ?? {};\n\n // 1) Apply query (exact match)\n let rows = dataset.filter((row) => {\n for (const [key, value] of Object.entries(query)) {\n if (!isProvided(value)) continue;\n const rowValue = getValueByPath(row, key);\n if (!matchesExact(rowValue, value)) return false;\n }\n return true;\n });\n\n // 2) Apply filter (via filterConfig when present)\n const effectiveFilter = filter ?? {};\n rows = rows.filter((row) => {\n for (const [key, value] of Object.entries(effectiveFilter)) {\n if (!isProvided(value)) continue;\n\n const config = filterConfig?.[key];\n const field = config?.field ?? key;\n const rowValue = getValueByPath(row, field);\n\n const type = config?.type ?? defaultFilterType;\n if (type === 'regex') {\n if (!matchesRegexLike(rowValue, value)) return false;\n } else {\n if (!matchesExact(rowValue, value)) return false;\n }\n }\n return true;\n });\n\n // 3) Sort\n const normalizedSorts = normalizeSorts(sorts);\n if (normalizedSorts.length > 0) {\n rows = [...rows].sort((ra, rb) => {\n for (const s of normalizedSorts) {\n const av = getValueByPath(ra, s.path);\n const bv = getValueByPath(rb, s.path);\n const cmp = compareValues(av, bv);\n if (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n }\n return 0;\n });\n }\n\n const total = rows.length;\n const items = rows.slice(skip, skip + limit);\n return { items, total };\n };\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().optional(),\n query: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n filter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n filterConfig: z.record(z.string(), z.object({\n type: z.enum([\"REGEX\", \"EXACT\"]),\n field: z.string().optional()\n })).optional(),\n sorts: z.array(z.object({\n path: z.string().max(100), // Limit path length to prevent abuse\n value: z.literal(-1).or(z.literal(1))\n })).max(5).optional(), // Limit to 5 sort fields\n sort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n","'use client';\n\ntype ClassPrimitive = string | number | boolean | null | undefined;\ntype ClassDictionary = Record<string, boolean | undefined | null>;\ntype ClassArray = ClassValue[];\nexport type ClassValue = ClassPrimitive | ClassDictionary | ClassArray;\n\nconst toClassString = (input: ClassValue): string => {\n if (!input) return '';\n\n if (typeof input === 'string' || typeof input === 'number') return String(input);\n\n if (Array.isArray(input)) {\n return input.map(toClassString).filter(Boolean).join(' ');\n }\n\n if (typeof input === 'object') {\n return Object.entries(input)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key)\n .join(' ');\n }\n\n return '';\n};\n\n/**\n * Minimal `cn` helper (shadcn-style) without external deps.\n */\nexport const cn = (...inputs: ClassValue[]): string => inputs.map(toClassString).filter(Boolean).join(' ');\n","/**\n * next-data-kit - Utility Functions\n *\n * Helper utilities for client-side operations.\n */\n\nimport type { TDataKitColumn, TSortEntry } from '../../types';\n\nexport { cn, type ClassValue } from './cn';\n\n// ** ============================================================================\n// ** Column Utilities\n// ** ============================================================================\n\n/**\n * Get the value from an item using a column accessor\n */\nexport const getColumnValue = <T>(item: T, column: TDataKitColumn<T>): unknown => {\n const { accessor } = column;\n return typeof accessor === 'function' ? accessor(item) : item[accessor as keyof T];\n};\n\n/**\n * Get the sort value for a column\n */\nexport const getSortValue = (sorts: TSortEntry[], path: string): 1 | -1 | null => {\n const sort = sorts.find((s) => s.path === path);\n return sort?.value ?? null;\n};\n\n/**\n * Get the next sort value in the cycle: null -> 1 -> -1 -> null\n */\nexport const getNextSortValue = (current: 1 | -1 | null): 1 | -1 | null => {\n if (current === null) return 1;\n if (current === 1) return -1;\n return null;\n};\n\n// ** ============================================================================\n// ** Formatting Utilities\n// ** ============================================================================\n\n/**\n * Format a number with commas\n */\nexport const formatNumber = (num: number): string => num.toLocaleString();\n\n// ** ============================================================================\n// ** Function Utilities\n// ** ============================================================================\n\n/**\n * Debounce a function\n */\nexport const debounce = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n};\n\n/**\n * Throttle a function\n */\nexport const throttle = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle = false;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n fn(...args);\n inThrottle = true;\n setTimeout(() => { inThrottle = false; }, limit);\n }\n };\n};\n\n// ** ============================================================================\n// ** Sort Entry Utilities\n// ** ============================================================================\n\n/**\n * Create a stable object key from sort entries\n */\nexport const sortEntriesToKey = (sorts: TSortEntry[]): string =>\n sorts.map((s) => `${s.path}:${s.value}`).join(',');\n\n/**\n * Parse a sort key back to sort entries\n */\nexport const keyToSortEntries = (key: string): TSortEntry[] => {\n if (!key) return [];\n return key.split(',').map((part) => {\n const [path, value] = part.split(':');\n return { path: path ?? '', value: parseInt(value ?? '1', 10) as 1 | -1 };\n });\n};\n\n// ** ============================================================================\n// ** URL State Utilities\n// ** ============================================================================\n\n/**\n * Parse URL search params into tabler state\n */\nexport const parseUrlParams = (search: string): {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n} => {\n const params = new URLSearchParams(search);\n const state: ReturnType<typeof parseUrlParams> = {};\n\n // ** Page\n const page = params.get('page');\n if (page) state.page = parseInt(page, 10);\n\n // ** Limit\n const limit = params.get('limit');\n if (limit) state.limit = parseInt(limit, 10);\n\n // ** Sorts\n const sort = params.get('sort');\n if (sort) state.sorts = keyToSortEntries(sort);\n\n // ** Filter (f_key) and Query (q_key)\n const filter: Record<string, unknown> = {};\n const query: Record<string, unknown> = {};\n\n params.forEach((value, key) => {\n if (key.startsWith('f_')) filter[key.slice(2)] = value;\n else if (key.startsWith('q_')) query[key.slice(2)] = value;\n });\n\n if (Object.keys(filter).length > 0) state.filter = filter;\n if (Object.keys(query).length > 0) state.query = query;\n\n return state;\n};\n\n/**\n * Convert tabler state to URL search params\n */\nexport const stateToUrlParams = (state: {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n}): URLSearchParams => {\n const params = new URLSearchParams();\n\n if (state.page && state.page > 1) params.set('page', state.page.toString());\n if (state.limit) params.set('limit', state.limit.toString());\n if (state.sorts && state.sorts.length > 0) params.set('sort', sortEntriesToKey(state.sorts));\n\n if (state.filter) {\n Object.entries(state.filter).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`f_${key}`, String(value));\n }\n });\n }\n\n if (state.query) {\n Object.entries(state.query).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`q_${key}`, String(value));\n }\n });\n }\n\n return params;\n};\n","/**\n * next-data-kit - useDataKit Hook\n *\n * React hook for managing next-data-kit state and actions.\n */\n\n'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport type {\n TDataKitInput,\n TDataKitResult,\n TDataKitControllerOptions,\n TSortEntry,\n TUseDataKitReturn,\n} from '../../types';\nimport { parseUrlParams, stateToUrlParams } from '../utils';\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const useDataKit = <T = unknown, R = unknown>(\n props: Readonly<TDataKitControllerOptions<T, R>>\n): TUseDataKitReturn<T, R> => {\n // ** Deconstruct Props\n const {\n initial = {},\n state: stateMode = 'memory',\n filterConfig,\n action,\n onSuccess,\n onError,\n autoFetch = true,\n debounce: debounceDelay = 300,\n } = props;\n\n const {\n page: initialPage = 1,\n limit: initialLimit = 10,\n sorts: initialSorts = [],\n filter: initialFilter = {},\n query: initialQuery = {},\n } = initial;\n\n // ** State\n const [page, setPageState] = useState(initialPage);\n const [limit, setLimitState] = useState(initialLimit);\n const [sorts, setSortsState] = useState<TSortEntry[]>(initialSorts);\n const [filter, setFilterState] = useState<Record<string, unknown>>(initialFilter);\n const [debouncedFilter, setDebouncedFilter] = useState<Record<string, unknown>>(initialFilter);\n const [query, setQueryState] = useState<Record<string, unknown>>(initialQuery);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [items, setItems] = useState<R[]>([]);\n const [total, setTotal] = useState(0);\n\n // ** Refs\n const mounted = useRef(true);\n const fetchIdRef = useRef(0);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // ** Refs for props to prevent infinite loops and stale closures\n const actionRef = useRef(action);\n const onSuccessRef = useRef(onSuccess);\n const onErrorRef = useRef(onError);\n const filterConfigRef = useRef(filterConfig);\n\n // ** Update refs on every render\n actionRef.current = action;\n onSuccessRef.current = onSuccess;\n onErrorRef.current = onError;\n filterConfigRef.current = filterConfig;\n\n // ** Get current input\n const getInput = useCallback((): TDataKitInput<T> => {\n const input: TDataKitInput<T> = {\n action: 'FETCH',\n page,\n limit,\n sorts,\n filter: debouncedFilter,\n query: query as Record<string, string | number | boolean>,\n };\n\n if (filterConfigRef.current) {\n input.filterConfig = filterConfigRef.current;\n }\n\n return input;\n }, [page, limit, sorts, debouncedFilter, query]);\n\n // ** Fetch data\n const fetchData = useCallback(async () => {\n const fetchId = ++fetchIdRef.current;\n setIsLoading(true);\n setError(null);\n\n try {\n const input = getInput();\n const result = await actionRef.current(input) as TDataKitResult<R>;\n\n // ** Check if this is still the latest fetch\n if (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n setItems(result.items);\n setTotal(result.documentTotal);\n onSuccessRef.current?.(result);\n } catch (err) {\n if (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n const fetchError = err instanceof Error ? err : new Error(String(err));\n setError(fetchError);\n onErrorRef.current?.(fetchError);\n } finally {\n if (fetchId === fetchIdRef.current && mounted.current) {\n setIsLoading(false);\n }\n }\n }, [getInput]);\n\n // ** Debounce filter changes\n useEffect(() => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n debounceTimerRef.current = setTimeout(() => {\n setDebouncedFilter(filter);\n }, debounceDelay);\n\n return () => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n };\n }, [filter, debounceDelay]);\n\n // ** Actions\n const setPage = useCallback((newPage: number) => setPageState(newPage), []);\n\n const setLimit = useCallback((newLimit: number) => {\n setLimitState(newLimit);\n setPageState(1);\n }, []);\n\n const setSort = useCallback((path: string, value: 1 | -1 | null, append = false) => {\n setSortsState((prev) => {\n if (value === null) return prev.filter((s) => s.path !== path);\n if (!append) return [{ path, value }];\n\n const existing = prev.find((s) => s.path === path);\n if (existing) return prev.map((s) => (s.path === path ? { ...s, value } : s));\n return [...prev, { path, value }];\n });\n }, []);\n\n const setSorts = useCallback((newSorts: TSortEntry[]) => setSortsState(newSorts), []);\n\n const setFilter = useCallback((key: string, value: unknown) => {\n setFilterState((prev) => ({ ...prev, [key]: value }));\n setPageState(1);\n }, []);\n\n const setFilters = useCallback((filters: Record<string, unknown>) => {\n setFilterState((prev) => ({ ...prev, ...filters }));\n setPageState(1);\n }, []);\n\n const clearFilters = useCallback(() => {\n setFilterState({});\n setPageState(1);\n }, []);\n\n const setQuery = useCallback((key: string, value: unknown) => {\n setQueryState((prev) => ({ ...prev, [key]: value }));\n setPageState(1);\n }, []);\n\n const refresh = useCallback(async () => {\n await fetchData();\n }, [fetchData]);\n\n // ** Item mutations (optional helpers)\n const setItemsAction = useCallback((nextItems: R[]) => {\n setItems(nextItems);\n }, []);\n\n const setItemAt = useCallback((index: number, item: R) => {\n setItems((prev) => {\n if (index < 0 || index >= prev.length) return prev;\n const next = [...prev];\n next[index] = item;\n return next;\n });\n }, []);\n\n const deleteItemAt = useCallback((index: number) => {\n setItems((prev) => prev.filter((_, i) => i !== index));\n }, []);\n\n const itemPush = useCallback((item: R, position: 0 | 1 = 1) => {\n setItems((prev) => (position === 0 ? [item, ...prev] : [...prev, item]));\n }, []);\n\n const deleteBulk = useCallback((itemsToDelete: R[]) => {\n if (itemsToDelete.length === 0) return;\n const toDelete = new Set(itemsToDelete);\n setItems((prev) => prev.filter((it) => !toDelete.has(it)));\n }, []);\n\n const reset = useCallback(() => {\n setPageState(initialPage);\n setLimitState(initialLimit);\n setSortsState(initialSorts);\n setFilterState(initialFilter);\n setDebouncedFilter(initialFilter);\n setQueryState(initialQuery);\n }, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n // ** Sync with URL if stateMode is 'search-params'\n useEffect(() => {\n if (stateMode !== 'search-params' || typeof window === 'undefined') return;\n\n // ** Initial load from URL\n const urlState = parseUrlParams(window.location.search);\n\n if (Object.keys(urlState).length > 0) {\n if (urlState.page) setPageState(urlState.page);\n if (urlState.limit) setLimitState(urlState.limit);\n if (urlState.sorts) setSortsState(urlState.sorts);\n if (urlState.filter) {\n setFilterState((prev) => ({ ...prev, ...urlState.filter }));\n setDebouncedFilter((prev) => ({ ...prev, ...urlState.filter }));\n }\n if (urlState.query) setQueryState((prev) => ({ ...prev, ...urlState.query }));\n }\n\n // ** Listen for popstate (back/forward)\n const handlePopState = () => {\n const newUrlState = parseUrlParams(window.location.search);\n\n setPageState(newUrlState.page ?? initialPage);\n setLimitState(newUrlState.limit ?? initialLimit);\n setSortsState(newUrlState.sorts ?? initialSorts);\n setFilterState({ ...initialFilter, ...newUrlState.filter });\n setDebouncedFilter({ ...initialFilter, ...newUrlState.filter });\n setQueryState({ ...initialQuery, ...newUrlState.query });\n };\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [stateMode, initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n // ** Update URL when state changes\n useEffect(() => {\n if (stateMode !== 'search-params' || typeof window === 'undefined') return;\n\n const params = stateToUrlParams({ page, limit, sorts, filter, query });\n const newSearch = params.toString();\n const currentSearch = window.location.search.slice(1);\n\n if (newSearch !== currentSearch) {\n const newUrl = newSearch ? `?${newSearch}` : window.location.pathname;\n window.history.pushState(null, '', newUrl);\n }\n }, [page, limit, sorts, filter, query, stateMode]);\n\n // ** Auto-fetch on mount and when dependencies change\n useEffect(() => {\n if (autoFetch) fetchData();\n }, [page, limit, sorts, debouncedFilter, query, autoFetch, fetchData]);\n\n // ** Cleanup\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; };\n }, []);\n\n return {\n page,\n limit,\n sorts,\n filter,\n filterConfig,\n query,\n items,\n total,\n state: { isLoading, error },\n actions: {\n setPage,\n setLimit,\n setSort,\n setSorts,\n setFilter,\n setFilters,\n clearFilters,\n setQuery,\n refresh,\n reset,\n getInput,\n setItems: setItemsAction,\n setItemAt,\n deleteItemAt,\n itemPush,\n deleteBulk,\n },\n };\n};\n\nexport type { TDataKitControllerOptions };\n","/**\n * next-data-kit - useSelection Hook\n *\n * React hook for managing table row selection.\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { TUseSelectionReturn } from '../../types';\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const useSelection = <T = string>(initialSelected: T[] = []): TUseSelectionReturn<T> => {\n // ** State\n const [selectedIds, setSelectedIds] = useState<Set<T>>(new Set(initialSelected));\n\n // ** Select a single item\n const select = useCallback((id: T) => {\n setSelectedIds((prev) => new Set(prev).add(id));\n }, []);\n\n // ** Deselect a single item\n const deselect = useCallback((id: T) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n // ** Toggle selection of a single item\n const toggle = useCallback((id: T) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n // ** Select all items\n const selectAll = useCallback((ids: T[]) => {\n setSelectedIds(new Set(ids));\n }, []);\n\n // ** Deselect all items\n const deselectAll = useCallback(() => {\n setSelectedIds(new Set());\n }, []);\n\n // ** Toggle all items selection\n const toggleAll = useCallback((ids: T[]) => {\n setSelectedIds((prev) => {\n // ** If all are selected, deselect all\n if (ids.every((id) => prev.has(id))) return new Set();\n // ** Otherwise, select all\n return new Set(ids);\n });\n }, []);\n\n // ** Check if an item is selected\n const isSelected = useCallback((id: T) => selectedIds.has(id), [selectedIds]);\n\n // ** Get array of selected IDs\n const getSelectedArray = useCallback(() => Array.from(selectedIds), [selectedIds]);\n\n // ** Calculate derived state\n const isAllSelected = useMemo(() => selectedIds.size > 0, [selectedIds.size]);\n const isIndeterminate = useMemo(() => false, []);\n\n return {\n selectedIds,\n isAllSelected,\n isIndeterminate,\n select,\n deselect,\n toggle,\n selectAll,\n deselectAll,\n toggleAll,\n isSelected,\n getSelectedArray,\n };\n};\n\n// ** ============================================================================\n// ** Hook with Total\n// ** ============================================================================\n\nexport const useSelectionWithTotal = <T = string>(\n totalItems: T[],\n initialSelected: T[] = []\n): Omit<TUseSelectionReturn<T>, 'toggleAll'> & {\n isAllSelected: boolean;\n isIndeterminate: boolean;\n toggleAll: () => void;\n} => {\n // ** Base selection hook\n const selection = useSelection<T>(initialSelected);\n\n // ** Calculate derived state\n const isAllSelected = useMemo(\n () => totalItems.length > 0 && totalItems.every((id) => selection.selectedIds.has(id)),\n [totalItems, selection.selectedIds]\n );\n\n const isIndeterminate = useMemo(\n () => selection.selectedIds.size > 0 && selection.selectedIds.size < totalItems.length,\n [totalItems.length, selection.selectedIds.size]\n );\n\n // ** Override toggleAll to use totalItems\n const toggleAll = useCallback(() => {\n if (isAllSelected) selection.deselectAll();\n else selection.selectAll(totalItems);\n }, [isAllSelected, selection, totalItems]);\n\n return {\n ...selection,\n isAllSelected,\n isIndeterminate,\n toggleAll,\n };\n};\n","/**\n * next-data-kit - usePagination Hook\n *\n * React hook for calculating pagination state.\n */\n\n'use client';\n\nimport { useMemo } from 'react';\nimport type { TPaginationInfo } from '../../types';\nimport { calculatePagination } from '../../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TUsePaginationReturn = TPaginationInfo & {\n // ** Array of page numbers/ellipsis to display\n pages: (number | 'ellipsis')[];\n // ** First page number\n firstPage: number;\n // ** Last page number\n lastPage: number;\n};\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: end - start + 1 }, (_, idx) => idx + start);\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const usePagination = (props: Readonly<{\n page: number;\n limit: number;\n total: number;\n // ** Number of page buttons to show on each side of current page\n siblingCount?: number;\n}>): TUsePaginationReturn => {\n // ** Deconstruct Props\n const { page, limit, total, siblingCount = 1 } = props;\n\n // ** Calculate pagination info\n const paginationInfo = useMemo(() => calculatePagination(page, limit, total), [page, limit, total]);\n\n // ** Calculate page numbers to display\n const pages = useMemo(() => {\n const { totalPages } = paginationInfo;\n\n // ** Total number of page buttons = siblings on both sides + first + last + current + 2 ellipsis\n const totalPageNumbers = siblingCount * 2 + 5;\n\n // ** If total pages is less than page numbers we want to show\n if (totalPageNumbers >= totalPages) return range(1, totalPages);\n\n const leftSiblingIndex = Math.max(page - siblingCount, 1);\n const rightSiblingIndex = Math.min(page + siblingCount, totalPages);\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2;\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;\n\n // ** No left ellipsis, but right ellipsis\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftRange = range(1, 3 + 2 * siblingCount);\n return [...leftRange, 'ellipsis' as const, totalPages];\n }\n\n // ** Left ellipsis, no right ellipsis\n if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n const rightRange = range(totalPages - (3 + 2 * siblingCount) + 1, totalPages);\n return [1, 'ellipsis' as const, ...rightRange];\n }\n\n // ** Both ellipsis\n if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [1, 'ellipsis' as const, ...middleRange, 'ellipsis' as const, totalPages];\n }\n\n return range(1, totalPages);\n }, [paginationInfo, page, siblingCount]);\n\n return {\n ...paginationInfo,\n pages,\n firstPage: 1,\n lastPage: paginationInfo.totalPages,\n };\n};\n","/**\n * next-data-kit - DataKitContext\n *\n * React context for sharing next-data-kit state across components.\n */\n\n'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport type { TUseDataKitReturn } from '../../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TDataKitContextValue<T = unknown, R = unknown> = TUseDataKitReturn<T, R>;\n\n// ** ============================================================================\n// ** Context Factory\n// ** ============================================================================\n\nexport const createDataKitContext = <T = unknown, R = unknown>() => {\n const Context = createContext<TDataKitContextValue<T, R> | null>(null);\n\n // ** Provider component for next-data-kit context\n const DataKitProvider = (props: Readonly<{\n value: TDataKitContextValue<T, R>;\n children: ReactNode;\n }>) => {\n const { value, children } = props;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n // ** Hook to access next-data-kit context\n const useDataKitContext = (): TDataKitContextValue<T, R> => {\n const context = useContext(Context);\n if (!context) {\n throw new Error('useDataKitContext must be used within a DataKitProvider');\n }\n return context;\n };\n\n return { DataKitProvider, useDataKitContext, Context };\n};\n\n// ** ============================================================================\n// ** Default Context\n// ** ============================================================================\n\nconst {\n DataKitProvider: DefaultDataKitProvider,\n useDataKitContext: useDefaultDataKitContext,\n Context: DefaultDataKitContext,\n} = createDataKitContext();\n\nexport {\n DefaultDataKitProvider as DataKitProvider,\n useDefaultDataKitContext as useDataKitContext,\n DefaultDataKitContext as DataKitContext,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table\n data-slot=\"table\"\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn('[&_tr]:border-b', className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n 'bg-gray-50/70 dark:bg-gray-900/40 border-t border-gray-200 dark:border-gray-800 font-medium [&>tr]:last:border-b-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'hover:bg-gray-50 dark:hover:bg-gray-900/50 data-[state=selected]:bg-gray-50 dark:data-[state=selected]:bg-gray-900/50 border-b border-gray-100 dark:border-gray-900 transition-colors',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'text-gray-900 dark:text-gray-100 h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('text-gray-500 dark:text-gray-400 mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\n\nimport { cn } from '../../utils';\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-gray-200 bg-white text-gray-900 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-100 data-[state=checked]:bg-gray-900 data-[state=checked]:text-white dark:data-[state=checked]:bg-gray-100 dark:data-[state=checked]:text-gray-900 data-[state=checked]:border-gray-900 dark:data-[state=checked]:border-gray-100 focus-visible:border-gray-900 dark:focus-visible:border-gray-200 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500 size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\n\nimport { cn } from '../../utils';\n\nfunction Popover(\n props: React.ComponentProps<typeof PopoverPrimitive.Root>\n) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger(\n props: React.ComponentProps<typeof PopoverPrimitive.Trigger>\n) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n container,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border border-gray-200 dark:border-gray-800 p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor(\n props: React.ComponentProps<typeof PopoverPrimitive.Anchor>\n) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { cn } from '../../utils';\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n container,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <DropdownMenuPrimitive.Portal container={container ?? undefined}>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-gray-200 dark:border-gray-800 p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 data-[variant=destructive]:text-red-600 dark:data-[variant=destructive]:text-red-500 data-[variant=destructive]:focus:bg-red-500/10 dark:data-[variant=destructive]:focus:bg-red-500/15 data-[variant=destructive]:focus:text-red-700 dark:data-[variant=destructive]:focus:text-red-400 data-[variant=destructive]:*:[svg]:!text-red-600 dark:data-[variant=destructive]:*:[svg]:!text-red-500 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-gray-100 dark:bg-gray-900 -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-gray-500 dark:text-gray-400 ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 data-[state=open]:bg-gray-50 dark:data-[state=open]:bg-gray-900 data-[state=open]:text-gray-900 dark:data-[state=open]:text-gray-100 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-gray-200 dark:border-gray-800 p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '../../utils';\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer data-[state=checked]:bg-gray-900 data-[state=unchecked]:bg-gray-200 dark:data-[state=checked]:bg-gray-100 dark:data-[state=unchecked]:bg-gray-800 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 bg-white dark:data-[state=unchecked]:bg-gray-100 dark:data-[state=checked]:bg-gray-900'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from '../../utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:ring-black/20 dark:focus-visible:ring-white/20 focus-visible:ring-[3px] aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white hover:bg-gray-800 dark:bg-gray-100 dark:text-gray-900 dark:hover:bg-gray-200\",\n destructive:\n \"bg-red-600 text-white hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-500\",\n outline:\n \"border border-gray-200 bg-white text-gray-900 shadow-xs hover:bg-gray-50 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-100 dark:hover:bg-gray-900\",\n secondary:\n \"bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-900 dark:text-gray-100 dark:hover:bg-gray-800\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-900 dark:hover:text-gray-100\",\n link: \"text-gray-900 underline-offset-4 hover:underline dark:text-gray-100\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(function Button(\n {\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n },\n ref\n) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from '../../utils';\n\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-gray-200 dark:border-gray-800 data-[placeholder]:text-gray-500 dark:data-[placeholder]:text-gray-400 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 focus-visible:border-gray-900 dark:focus-visible:border-gray-200 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500 bg-white dark:bg-gray-950 hover:bg-gray-50 dark:hover:bg-gray-900 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n container,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <SelectPrimitive.Portal container={container ?? undefined}>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-gray-200 dark:border-gray-800 shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-gray-500 dark:text-gray-400 px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-gray-100 dark:bg-gray-900 pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { ArrowDown, ArrowUp, ChevronLeft, ChevronRight, Filter, Loader2, MoreHorizontal } from 'lucide-react';\nimport { useDataKit } from '../hooks/useDataKit';\nimport { useSelectionWithTotal } from '../hooks/useSelection';\nimport { usePagination } from '../hooks/usePagination';\nimport {\n Button,\n Checkbox,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from './ui';\nimport type {\n TDataKitInput,\n TDataKitResult,\n TDataKitComponentColumn,\n TDataKitFilterItem,\n TDataKitBulkAction,\n TDataKitComponentController,\n TDataKitSelectableItem,\n TDataKitStateMode,\n TExtractDataKitItemType,\n TFilterConfig,\n} from '../../types';\n\n// ** ============================================================================\n// ** Component\n// ** ============================================================================\n\nconst DataKitRoot = <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>,\n TRowState = unknown\n>(props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n table: TDataKitComponentColumn<TExtractDataKitItemType<TAction>, TRowState>[];\n filters?: TDataKitFilterItem[];\n selectable?: {\n enabled: boolean;\n actions?: Record<string, TDataKitBulkAction<TExtractDataKitItemType<TAction>>>;\n };\n initialState?: TRowState;\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n bordered?: boolean | 'rounded';\n refetchInterval?: number;\n state?: TDataKitStateMode;\n controller?: React.MutableRefObject<TDataKitComponentController<TExtractDataKitItemType<TAction>> | null>;\n}>) => {\n // ** Deconstruct Props\n const {\n action,\n query,\n filterConfig,\n table: columns,\n filters = [],\n selectable,\n initialState,\n limit: limitConfig,\n className,\n autoFetch = true,\n debounce = 300,\n bordered,\n refetchInterval,\n state: stateMode = 'memory',\n controller,\n } = props;\n\n // ** Type\n type TItem = TExtractDataKitItemType<TAction>;\n\n // ** Ref\n const tableRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // ** State\n const [isVisible, setIsVisible] = useState(false);\n const [isFilterOpen, setIsFilterOpen] = useState(false);\n const [actionLoading, setActionLoading] = useState<string | null>(null);\n const [actionsMenuOpen, setActionsMenuOpen] = useState(false);\n\n // ** Variable\n const overlayContainer = tableRef.current;\n\n // ** Hooks\n const dataKit = useDataKit<unknown, TItem>({\n action: action as unknown as (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TItem>>,\n filterConfig,\n autoFetch,\n debounce,\n state: stateMode,\n initial: {\n limit: limitConfig?.default ?? 10,\n query: query ?? {},\n sorts: columns.reduce<{ path: string; value: 1 | -1 }[]>((acc, col) => {\n if (col.sortable && col.sortable.default !== 0) {\n acc.push({ path: col.sortable.path, value: col.sortable.default as 1 | -1 });\n }\n return acc;\n }, []),\n filter: filters.reduce<Record<string, unknown>>((acc, f) => {\n if (f.defaultValue !== undefined) acc[f.id] = f.defaultValue;\n return acc;\n }, {}),\n },\n });\n const pagination = usePagination({ page: dataKit.page, limit: dataKit.limit, total: dataKit.total, siblingCount: 1 });\n const selection = useSelectionWithTotal<string | number>(dataKit.items.map((item) => item.id));\n\n // ** Variable\n const selectedCount = selection.selectedIds.size;\n const colSpan = columns.length + (selectable?.enabled ? 1 : 0);\n\n // ** Handlers\n const handleSort = useCallback((path: string) => {\n const currentSort = dataKit.sorts.find((s) => s.path === path);\n const nextValue = currentSort?.value === 1 ? -1 : currentSort?.value === -1 ? null : 1;\n dataKit.actions.setSort(path, nextValue);\n }, [dataKit.sorts, dataKit.actions]);\n\n const handleSelectionAction = useCallback(async (actionKey: string) => {\n if (!selectable?.actions?.[actionKey] || actionLoading) return;\n setActionLoading(actionKey);\n setActionsMenuOpen(false);\n try {\n const selectedItems = dataKit.items.filter((item) => selection.isSelected(item.id));\n const result = await selectable.actions[actionKey].function(selectedItems);\n if (result[0]) {\n const data = result[1] as { deselectAll?: boolean };\n if (data.deselectAll) selection.deselectAll();\n await dataKit.actions.refresh();\n }\n } catch (error) {\n console.error('Selection action failed:', error);\n } finally {\n setActionLoading(null);\n }\n }, [selectable?.actions, actionLoading, dataKit.items, selection, dataKit.actions]);\n\n const handleResetFilters = useCallback(() => {\n filters.forEach((f) => {\n dataKit.actions.setFilter(f.id, f.defaultValue ?? (f.type === 'BOOLEAN' ? false : ''));\n });\n }, [filters, dataKit.actions]);\n\n const getSortFor = useCallback((path: string) => dataKit.sorts.find((s) => s.path === path)?.value ?? null, [dataKit.sorts]);\n\n // ** Effects\n useEffect(() => {\n if (controller) {\n controller.current = {\n itemPush: dataKit.actions.itemPush,\n refetchData: dataKit.actions.refresh,\n deleteBulk: dataKit.actions.deleteBulk,\n getSelectedItems: () => dataKit.items.filter((item) => selection.isSelected(item.id)),\n clearSelection: () => selection.deselectAll(),\n };\n }\n }, [controller, dataKit.actions, dataKit.items, selection]);\n\n useEffect(() => {\n if (!tableRef.current || !refetchInterval) return;\n const observer = new IntersectionObserver(\n (entries) => entries[0] && setIsVisible(entries[0].isIntersecting),\n { threshold: 0.1 }\n );\n const currentRef = tableRef.current;\n observer.observe(currentRef);\n return () => { if (currentRef) observer.unobserve(currentRef); };\n }, [refetchInterval]);\n\n useEffect(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n if (refetchInterval && isVisible) {\n intervalRef.current = setInterval(dataKit.actions.refresh, refetchInterval);\n }\n return () => { if (intervalRef.current) clearInterval(intervalRef.current); };\n }, [refetchInterval, isVisible, dataKit.actions]);\n\n useEffect(() => { selection.deselectAll(); }, [dataKit.items.length]);\n\n // ** Render\n return (\n <div ref={tableRef} className={`space-y-3 ${className ?? ''}`}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {filters.length > 0 && (\n <Popover open={isFilterOpen} onOpenChange={setIsFilterOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-1.5 size-4\" />\n Filters\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-80\" container={overlayContainer}>\n <div className=\"grid gap-3\">\n {filters.map((f) => (\n <div key={f.id} className=\"grid gap-1.5\">\n <label className=\"text-sm font-medium\">{f.label}</label>\n {f.type === 'TEXT' && (\n <input\n type=\"text\"\n className=\"h-9 w-full rounded-md border bg-transparent px-3 text-sm outline-none focus:ring-2 focus:ring-ring\"\n placeholder={f.placeholder}\n value={(dataKit.filter[f.id] as string) ?? ''}\n onChange={(e) => dataKit.actions.setFilter(f.id, e.target.value)}\n />\n )}\n {f.type === 'SELECT' && (\n <Select\n value={String(dataKit.filter[f.id] || '__all__')}\n onValueChange={(v) => dataKit.actions.setFilter(f.id, v === '__all__' ? '' : v)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n <SelectItem value=\"__all__\">All</SelectItem>\n {f.dataset?.map((d) => (\n <SelectItem key={d.id} value={d.id}>{d.label}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {f.type === 'BOOLEAN' && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{f.placeholder ?? 'Enable'}</span>\n <Switch\n checked={Boolean(dataKit.filter[f.id])}\n onCheckedChange={(c) => dataKit.actions.setFilter(f.id, c)}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex justify-between border-t pt-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleResetFilters}>Reset</Button>\n <Button size=\"sm\" onClick={() => setIsFilterOpen(false)}>Done</Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"mr-2 text-sm text-muted-foreground\">\n {dataKit.items.length} of {dataKit.total}\n </span>\n <Select value={String(dataKit.limit)} onValueChange={(v) => dataKit.actions.setLimit(Number(v))} disabled={dataKit.state.isLoading}>\n <SelectTrigger className=\"w-16\"><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n {[10, 25, 50, 100].map((v) => (\n <SelectItem key={v} value={String(v)}>{v}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Table */}\n <div className={`overflow-hidden border border-gray-200 dark:border-gray-800 ${bordered === 'rounded' ? 'rounded-lg' : bordered ? '' : 'rounded-lg'}`}>\n <Table>\n <TableHeader>\n <TableRow>\n {selectable?.enabled && (\n <TableHead className=\"w-12\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n checked={selection.isIndeterminate ? 'indeterminate' : selection.isAllSelected}\n onCheckedChange={() => selection.toggleAll()}\n />\n {selectable.actions && Object.keys(selectable.actions).length > 0 && (\n <DropdownMenu open={actionsMenuOpen} onOpenChange={setActionsMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-6\"\n disabled={selectedCount === 0 || !!actionLoading}\n >\n {actionLoading ? <Loader2 className=\"size-4 animate-spin\" /> : <MoreHorizontal className=\"size-4\" />}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" container={overlayContainer}>\n {Object.entries(selectable.actions).map(([key, action]) => (\n <DropdownMenuItem key={key} disabled={!!actionLoading} onSelect={() => handleSelectionAction(key)}>\n {actionLoading === key ? 'Working…' : action.name}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </TableHead>\n )}\n {columns.map((col, idx) => (\n <React.Fragment key={idx}>\n {col.sortable ? (\n <TableHead {...(React.isValidElement(col.head) ? (col.head.props as object) : {})}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3\"\n onClick={() => handleSort(col.sortable!.path)}\n >\n {React.isValidElement(col.head) ? (col.head as React.ReactElement<{ children?: React.ReactNode }>).props.children : col.head}\n {getSortFor(col.sortable!.path) === 1 && <ArrowUp className=\"ml-1 size-4\" />}\n {getSortFor(col.sortable!.path) === -1 && <ArrowDown className=\"ml-1 size-4\" />}\n </Button>\n </TableHead>\n ) : (\n col.head\n )}\n </React.Fragment>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {dataKit.state.isLoading ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center\">\n <Loader2 className=\"mx-auto size-5 animate-spin\" />\n </TableCell>\n </TableRow>\n ) : dataKit.state.error ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center text-red-500\">\n Error: {dataKit.state.error.message}\n </TableCell>\n </TableRow>\n ) : dataKit.items.length === 0 ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center text-muted-foreground\">\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n dataKit.items.map((item, idx) => (\n <TableRow key={item.id ?? idx}>\n {selectable?.enabled && (\n <TableCell>\n <Checkbox\n checked={selection.isSelected(item.id)}\n onCheckedChange={() => selection.toggle(item.id)}\n />\n </TableCell>\n )}\n {columns.map((col, colIdx) => (\n <React.Fragment key={colIdx}>\n {col.body({\n item,\n index: idx,\n state: initialState as TRowState,\n setState: () => { },\n setItem: (updatedItem) => dataKit.actions.setItemAt(idx, updatedItem),\n deleteItem: () => dataKit.actions.deleteItemAt(idx),\n })}\n </React.Fragment>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Page {dataKit.page} of {pagination.totalPages}\n {selectable?.enabled && selectedCount > 0 && (\n <span className=\"ml-2 text-foreground\">({selectedCount} selected)</span>\n )}\n </p>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasPrevPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page - 1)}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasNextPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page + 1)}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DataKitTable = Object.assign(DataKitRoot, {\n Cell: TableCell,\n Head: TableHead,\n});\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { ChevronLeft, ChevronRight, Filter, Loader2 } from 'lucide-react';\nimport { useDataKit } from '../hooks/useDataKit';\nimport { usePagination } from '../hooks/usePagination';\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from './ui';\nimport type {\n TDataKitInput,\n TDataKitResult,\n TDataKitFilterItem,\n TDataKitSelectableItem,\n TDataKitStateMode,\n TExtractDataKitItemType,\n TFilterConfig,\n TUseDataKitReturn,\n TDataKitRef,\n} from '../../types';\n\n// ** ============================================================================\n// ** Component\n// ** ============================================================================\n\nconst DataKitInner = <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>\n>(props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n filters?: TDataKitFilterItem[];\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n refetchInterval?: number;\n state?: TDataKitStateMode;\n manual?: boolean;\n children: (dataKit: TUseDataKitReturn<unknown, TExtractDataKitItemType<TAction>>) => React.ReactNode;\n}>, ref: React.ForwardedRef<TDataKitRef<unknown, TExtractDataKitItemType<TAction>>>) => {\n // ** Deconstruct Props\n const {\n action,\n query,\n filterConfig,\n filters = [],\n limit: limitConfig,\n className,\n autoFetch = true,\n debounce = 300,\n refetchInterval,\n state: stateMode = 'memory',\n manual = false,\n children,\n } = props;\n\n // ** Type\n type TItem = TExtractDataKitItemType<TAction>;\n\n // ** Ref\n const containerRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // ** State\n const [isVisible, setIsVisible] = useState(false);\n const [isFilterOpen, setIsFilterOpen] = useState(false);\n\n // ** Variable\n const overlayContainer = containerRef.current;\n\n // ** Hooks\n const dataKit = useDataKit<unknown, TItem>({\n action: action as unknown as (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TItem>>,\n filterConfig,\n autoFetch,\n debounce,\n state: stateMode,\n initial: {\n limit: limitConfig?.default ?? 10,\n query: query ?? {},\n sorts: [],\n filter: filters.reduce<Record<string, unknown>>((acc, f) => {\n if (f.defaultValue !== undefined) acc[f.id] = f.defaultValue;\n return acc;\n }, {}),\n },\n });\n const pagination = usePagination({ page: dataKit.page, limit: dataKit.limit, total: dataKit.total, siblingCount: 1 });\n\n // ** Imperative Handle\n React.useImperativeHandle(ref, () => dataKit as unknown as TDataKitRef<unknown, TItem>, [dataKit]);\n\n // ** Handlers\n const handleResetFilters = useCallback(() => {\n filters.forEach((f) => {\n dataKit.actions.setFilter(f.id, f.defaultValue ?? (f.type === 'BOOLEAN' ? false : ''));\n });\n }, [filters, dataKit.actions]);\n\n // ** Effects\n useEffect(() => {\n if (!containerRef.current || !refetchInterval) return;\n const observer = new IntersectionObserver(\n (entries) => entries[0] && setIsVisible(entries[0].isIntersecting),\n { threshold: 0.1 }\n );\n const currentRef = containerRef.current;\n observer.observe(currentRef);\n return () => { if (currentRef) observer.unobserve(currentRef); };\n }, [refetchInterval]);\n\n useEffect(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n if (refetchInterval && isVisible) {\n intervalRef.current = setInterval(dataKit.actions.refresh, refetchInterval);\n }\n return () => { if (intervalRef.current) clearInterval(intervalRef.current); };\n }, [refetchInterval, isVisible, dataKit.actions]);\n\n // ** Render\n return (\n <div ref={containerRef} className={`space-y-3 ${className ?? ''}`}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {filters.length > 0 && (\n <Popover open={isFilterOpen} onOpenChange={setIsFilterOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-1.5 size-4\" />\n Filters\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-80\" container={overlayContainer}>\n <div className=\"grid gap-3\">\n {filters.map((f) => (\n <div key={f.id} className=\"grid gap-1.5\">\n <label className=\"text-sm font-medium\">{f.label}</label>\n {f.type === 'TEXT' && (\n <input\n type=\"text\"\n className=\"h-9 w-full rounded-md border bg-transparent px-3 text-sm outline-none focus:ring-2 focus:ring-ring\"\n placeholder={f.placeholder}\n value={(dataKit.filter[f.id] as string) ?? ''}\n onChange={(e) => dataKit.actions.setFilter(f.id, e.target.value)}\n />\n )}\n {f.type === 'SELECT' && (\n <Select\n value={String(dataKit.filter[f.id] || '__all__')}\n onValueChange={(v) => dataKit.actions.setFilter(f.id, v === '__all__' ? '' : v)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n <SelectItem value=\"__all__\">All</SelectItem>\n {f.dataset?.map((d) => (\n <SelectItem key={d.id} value={d.id}>{d.label}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {f.type === 'BOOLEAN' && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{f.placeholder ?? 'Enable'}</span>\n <Switch\n checked={Boolean(dataKit.filter[f.id])}\n onCheckedChange={(c) => dataKit.actions.setFilter(f.id, c)}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex justify-between border-t pt-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleResetFilters}>Reset</Button>\n <Button size=\"sm\" onClick={() => setIsFilterOpen(false)}>Done</Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"mr-2 text-sm text-muted-foreground\">\n {dataKit.items.length} of {dataKit.total}\n </span>\n <Select value={String(dataKit.limit)} onValueChange={(v) => dataKit.actions.setLimit(Number(v))} disabled={dataKit.state.isLoading}>\n <SelectTrigger className=\"w-16\"><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n {[10, 25, 50, 100].map((v) => (\n <SelectItem key={v} value={String(v)}>{v}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Content (user-provided) */}\n {manual ? (\n children(dataKit)\n ) : (\n <div className=\"min-h-[200px]\">\n {dataKit.state.isLoading ? (\n <div className=\"flex h-48 items-center justify-center\">\n <Loader2 className=\"size-6 animate-spin text-muted-foreground\" />\n </div>\n ) : dataKit.items.length === 0 ? (\n <div className=\"flex h-48 items-center justify-center text-muted-foreground\">\n No results found.\n </div>\n ) : (\n children(dataKit)\n )}\n </div>\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Page {dataKit.page} of {pagination.totalPages}\n </p>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasPrevPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page - 1)}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasNextPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page + 1)}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DataKit = React.forwardRef(DataKitInner) as unknown as <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>\n>(\n props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n filters?: TDataKitFilterItem[];\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n refetchInterval?: number;\n state?: TDataKitStateMode;\n manual?: boolean;\n children: (dataKit: TUseDataKitReturn<unknown, TExtractDataKitItemType<TAction>>) => React.ReactNode;\n ref?: React.Ref<TDataKitRef<unknown, TExtractDataKitItemType<TAction>>>;\n }>\n) => React.ReactElement;\n"]}
1
+ {"version":3,"sources":["../src/types/next-data-kit.ts","../src/server/utils.ts","../src/server/adapters/mongoose.ts","../src/server/action.ts","../src/server/adapters/memory.ts","../src/server/schema.ts","../src/client/utils/cn.ts","../src/client/utils/index.ts","../src/client/hooks/useDataKit.ts","../src/client/hooks/useSelection.ts","../src/client/hooks/usePagination.ts","../src/client/context/index.tsx","../src/client/components/ui/table.tsx","../src/client/components/ui/checkbox.tsx","../src/client/components/ui/popover.tsx","../src/client/components/ui/dropdown-menu.tsx","../src/client/components/ui/switch.tsx","../src/client/components/ui/button.tsx","../src/client/components/ui/select.tsx","../src/client/components/data-kit-table.tsx","../src/client/components/data-kit.tsx"],"names":["isProvided","useState","useCallback","useMemo","jsx","React","Button","jsxs","CheckIcon","debounce","useRef","useEffect","MoreHorizontal","action","ChevronLeft","ChevronRight","Filter","Loader2"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * next-data-kit - React Data Kit Types\n *\n * Core types for the next-data-kit server action and components.\n */\n\nimport type { TMongoFilterQuery, TSortOrder } from './database/mongo';\n\n// ** ============================================================================\n// ** Sort Types\n// ** ============================================================================\n\n/**\n * Sort options type that references keys from the item type\n */\nexport type TSortOptions<T> = {\n [K in keyof T]?: TSortOrder;\n};\n\n/**\n * Sort entry for array-based sorting\n */\nexport type TSortEntry = {\n path: string;\n value: 1 | -1;\n};\n\n// ** ============================================================================\n// ** Filter Types\n// ** ============================================================================\n\n/**\n * Filter configuration for automatic filtering\n */\nexport type TFilterConfig = {\n [key: string]: {\n // ** Type of filter matching\n type: 'REGEX' | 'EXACT';\n // ** Optional: different database field name\n field?: string;\n };\n};\n\n/**\n * Custom filter configuration\n * Allows defining custom filter functions for specific filter keys\n */\nexport type TFilterCustomConfig<T = unknown> = {\n [id: string]: (data: unknown) => TMongoFilterQuery<T>;\n};\n\n/**\n * Variant of TFilterCustomConfig that allows customizing the returned filter shape.\n * Useful for Mongo (operator-based) vs. other ORMs (where clauses) in the future.\n */\nexport type TFilterCustomConfigWithFilter<TDoc = unknown, TFilter = TMongoFilterQuery<TDoc>> = {\n [id: string]: (data: unknown) => TFilter;\n};\n\n// ** ============================================================================\n// ** Input/Output Types\n// ** ============================================================================\n\n/**\n * React Data Kit server action input\n */\nexport type TDataKitInput<T = unknown> = {\n // ** Action type - currently only FETCH is supported\n action?: 'FETCH';\n // ** Current page number (1-indexed)\n page?: number;\n // ** Number of items per page\n limit?: number;\n // ** Legacy sort option\n sort?: TSortOptions<T>;\n // ** Multi-sort as an array\n sorts?: TSortEntry[];\n // ** Query parameters for exact match filtering\n query?: Record<string, string | number | boolean>;\n // ** Filter parameters\n filter?: Record<string, unknown>;\n // ** Filter configuration for automatic filtering\n filterConfig?: TFilterConfig;\n // ** Custom filter configuration\n filterCustom?: TFilterCustomConfig<T>;\n};\n\n/**\n * React Data Kit server action result\n */\nexport type TDataKitResult<R> = {\n type: 'ITEMS';\n items: R[];\n documentTotal: number;\n};\n\n// ** ============================================================================\n// ** Pagination Types\n// ** ============================================================================\n\n/**\n * Pagination info for client-side use\n */\nexport type TPaginationInfo = {\n currentPage: number;\n totalPages: number;\n totalItems: number;\n itemsPerPage: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n};\n\n/**\n * Calculate pagination info from next-data-kit result\n */\nexport const calculatePagination = (page: number, limit: number, total: number): TPaginationInfo => ({\n currentPage: page,\n totalPages: Math.ceil(total / limit),\n totalItems: total,\n itemsPerPage: limit,\n hasNextPage: page * limit < total,\n hasPrevPage: page > 1,\n});\n\n// ** ============================================================================\n// ** Adapter Types\n// ** ============================================================================\n\n/**\n * React Data Kit Adapter Interface\n * Defines the contract for a database adapter.\n */\nexport type TDataKitAdapter<T> = (params: Readonly<{\n filter: Record<string, unknown>;\n sorts: TSortEntry[];\n limit: number;\n page: number;\n skip: number;\n input: TDataKitInput<T>;\n}>) => Promise<{ items: T[]; total: number }>;\n","/**\n * next-data-kit - Server Utilities\n */\n\nimport type { TMongoFilterQuery } from '../types';\n\n/**\n * Helper to escape regex special characters in a string\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\n\n/**\n * Create a search filter for multiple fields\n * \n * @example\n * ```typescript\n * filterCustom: {\n * search: createSearchFilter(['name', 'email', 'phone'])\n * }\n * ```\n */\nexport const createSearchFilter = <T>(\n fields: (keyof T | string)[]\n): (value: unknown) => TMongoFilterQuery<T> => {\n return (value: unknown): TMongoFilterQuery<T> => {\n if (!value || typeof value !== 'string') {\n return {} as TMongoFilterQuery<T>;\n }\n\n const escapedValue = escapeRegex(value);\n return {\n $or: fields.map((field) => ({\n [field]: { $regex: escapedValue, $options: 'i' },\n })),\n } as TMongoFilterQuery<T>;\n };\n};\n","/**\n * next-data-kit - Mongoose Adapter\n *\n * Database adapter for Mongoose/MongoDB.\n */\n\nimport type {\n TMongoModel,\n TMongoFilterQuery,\n TSortOrder,\n TSortOptions,\n TFilterCustomConfigWithFilter,\n TDataKitAdapter,\n TExtractDocType,\n} from '../../types';\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nimport { escapeRegex } from '../utils';\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nconst isProvided = (value: unknown): boolean =>\n value !== undefined && value !== null && value !== '';\n\nconst isSafeKey = (key: string): boolean => {\n const unsafeKeys = ['__proto__', 'constructor', 'prototype'];\n return !unsafeKeys.includes(key);\n};\n\n// ** ============================================================================\n// ** Adapter\n// ** ============================================================================\n\nexport const mongooseAdapter = <\n M extends TMongoModel<unknown, object>,\n DocType = TExtractDocType<M>\n>(\n model: M,\n options: Readonly<{\n filter?: (filterInput?: Record<string, unknown>) => TMongoFilterQuery<DocType>;\n filterCustom?: TFilterCustomConfigWithFilter<DocType, TMongoFilterQuery<DocType>>;\n defaultSort?: TSortOptions<DocType>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n }> = {}\n): TDataKitAdapter<DocType> => {\n // ** Deconstruct options\n const { filter: customFilterFn, filterCustom, defaultSort = { _id: -1 } as TSortOptions<DocType> } = options;\n\n return async ({ filter, sorts, limit, skip, input }) => {\n // ** Normalize sort\n let sortOption: Record<string, TSortOrder>;\n\n if (input.sort && Object.keys(input.sort).length > 0) {\n sortOption = input.sort as Record<string, TSortOrder>;\n } else if (sorts && sorts.length > 0) {\n sortOption = sorts.reduce<Record<string, TSortOrder>>((acc, s) => {\n if (s?.path && (s.value === 1 || s.value === -1)) {\n acc[s.path] = s.value;\n }\n return acc;\n }, {});\n } else {\n sortOption = defaultSort as Record<string, TSortOrder>;\n }\n\n // ** Construct filter query\n let filterQuery: TMongoFilterQuery<DocType> = {};\n\n // ** Query params (exact match)\n if (input.query) {\n Object.entries(input.query).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key)) {\n (filterQuery as Record<string, unknown>)[key] = value;\n }\n });\n }\n\n // ** Custom filter function\n if (customFilterFn) {\n const customQuery = customFilterFn(filter);\n filterQuery = { ...filterQuery, ...customQuery };\n }\n\n // ** User defined filters\n if (filter && !customFilterFn) {\n if (input.filterConfig) {\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key) && input.filterConfig?.[key]) {\n const config = input.filterConfig[key];\n const fieldName = config?.field ?? key;\n\n if (config?.type === 'REGEX') {\n (filterQuery as Record<string, unknown>)[fieldName] = {\n $regex: escapeRegex(String(value)),\n $options: 'i',\n };\n } else if (config?.type === 'EXACT') {\n (filterQuery as Record<string, unknown>)[fieldName] = value;\n }\n }\n });\n } else {\n // ** Default automatic filtering\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key)) {\n if (typeof value === 'string') {\n (filterQuery as Record<string, unknown>)[key] = {\n $regex: escapeRegex(value),\n $options: 'i',\n };\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n (filterQuery as Record<string, unknown>)[key] = value;\n }\n }\n });\n }\n }\n\n // ** Custom filter logic (filterCustom)\n if (filterCustom && filter) {\n Object.entries(filter).forEach(([key, value]) => {\n if (isProvided(value) && isSafeKey(key) && filterCustom[key]) {\n const customFilter = filterCustom[key]!(value);\n filterQuery = { ...filterQuery, ...customFilter };\n }\n });\n }\n\n // ** Execute queries\n const total = await model.countDocuments(filterQuery as TMongoFilterQuery<unknown>);\n const items = await model\n .find(filterQuery as TMongoFilterQuery<unknown>)\n .sort(sortOption)\n .limit(limit)\n .skip(skip) as unknown as DocType[];\n\n return { items, total };\n };\n};\n","/**\n * next-data-kit - Server Action\n *\n * The main server-side function for handling table data fetching\n * with pagination, filtering, and sorting.\n */\n\nimport { mongooseAdapter } from './adapters/mongoose';\nimport type { TDataKitInput, TDataKitResult, TDataKitAdapter, TMongoModel, TMongoFilterQuery, TFilterCustomConfigWithFilter, TSortOptions } from '../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TDataKitServerActionOptions<T, R> = {\n\t// ** The input from the client\n\tinput: TDataKitInput<T>;\n\t// ** The database adapter or Mongoose model\n\tadapter: TDataKitAdapter<T> | TMongoModel<T>;\n\t// ** Function to transform each item before returning\n\titem: (item: T) => Promise<R> | R;\n\t// ** Custom filter function\n\tfilter?: (filterInput?: Record<string, unknown>) => TMongoFilterQuery<T>;\n\t// ** Custom filter configuration (defines allowed filter keys)\n\tfilterCustom?: TFilterCustomConfigWithFilter<T, TMongoFilterQuery<T>>;\n\t// ** Default sort options\n\tdefaultSort?: TSortOptions<T>;\n\t// ** Maximum limit per page (default: 100)\n\tmaxLimit?: number;\n\t// ** Whitelist of allowed query fields\n\tqueryAllowed?: string[];\n};\n\n// ** ============================================================================\n// ** Server Action\n// ** ============================================================================\n\nexport const dataKitServerAction = async <T, R>(props: Readonly<TDataKitServerActionOptions<T, R>>): Promise<TDataKitResult<R>> => {\n\t// ** Deconstruct Props\n\tconst { input, adapter, item, maxLimit = 100, filterCustom, queryAllowed } = props;\n\n\t// ** Auto-generate filterAllowed from filterCustom keys (server defines what's allowed)\n\tconst filterAllowed = filterCustom ? Object.keys(filterCustom) : undefined;\n\n\t// ** Whitelist filtering for security (if configured)\n\t// ** We do this here instead of in the adapter to keep the adapter simple and \"dumb\"\n\n\t// ** Check Query\n\tif (input.query) {\n\t\tconst safeQuery: Record<string, string | number | boolean> = {};\n\t\tObject.keys(input.query).forEach(key => {\n\t\t\tif (queryAllowed && !queryAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Query field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\t// ** Enforce primitive values only (Anti-NoSQL Injection)\n\t\t\tconst val = input.query![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Query value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tif (val !== undefined) {\n\t\t\t\tsafeQuery[key] = val;\n\t\t\t}\n\t\t});\n\t\tinput.query = safeQuery;\n\t}\n\n\t// ** Check Filter\n\tif (input.filter) {\n\t\tconst safeFilter: Record<string, unknown> = {};\n\t\tObject.keys(input.filter).forEach(key => {\n\t\t\tif (filterAllowed && !filterAllowed.includes(key)) {\n\t\t\t\tthrow new Error(`[Security] Filter field '${key}' is not allowed.`);\n\t\t\t}\n\t\t\t// ** Enforce primitive values only (Anti-NoSQL Injection)\n\t\t\tconst val = input.filter![key];\n\t\t\tif (val !== null && typeof val === 'object') {\n\t\t\t\tthrow new Error(`[Security] Filter value for '${key}' must be a primitive.`);\n\t\t\t}\n\t\t\tsafeFilter[key] = val;\n\t\t});\n\t\tinput.filter = safeFilter;\n\t}\n\n\t// ** Determine adapter\n\tconst finalAdapter: TDataKitAdapter<T> = typeof adapter === 'function' ? adapter : mongooseAdapter(adapter as TMongoModel<T>, props);\n\n\t// ** Handle action\n\tswitch (input.action ?? 'FETCH') {\n\t\tcase 'FETCH': {\n\t\t\tif (!input.limit || !input.page) {\n\t\t\t\tthrow new Error('Invalid input: missing limit or page');\n\t\t\t}\n\n\t\t\tconst limit = Math.min(input.limit, maxLimit);\n\t\t\tconst skip = limit * (input.page - 1);\n\n\t\t\t// ** Fetch data using adapter\n\t\t\tconst { items, total } = await finalAdapter({\n\t\t\t\tfilter: input.filter ?? {},\n\t\t\t\tsorts: input.sorts ?? [],\n\t\t\t\tlimit,\n\t\t\t\tpage: input.page,\n\t\t\t\tskip,\n\t\t\t\tinput,\n\t\t\t});\n\n\t\t\t// ** Process each item through the item mapper function\n\t\t\tconst processedItems = await Promise.all(items.map(dataItem => item(dataItem)));\n\n\t\t\treturn {\n\t\t\t\ttype: 'ITEMS',\n\t\t\t\titems: processedItems,\n\t\t\t\tdocumentTotal: total,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported action: ${(input as { action?: string }).action}`);\n\t}\n};\n","/**\n * next-data-kit - Memory Adapter\n *\n * In-memory adapter for demos, tests, and local playgrounds.\n * Implements the React Data Kit adapter contract over an array dataset.\n */\n\nimport type { TFilterConfig, TSortEntry, TDataKitAdapter } from '../../types';\n\nconst isProvided = (value: unknown): boolean =>\n value !== undefined && value !== null && value !== '';\n\nconst getValueByPath = (obj: unknown, path: string): unknown => {\n if (!path) return undefined;\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current && typeof current === 'object' && part in (current as Record<string, unknown>)) {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nconst matchesExact = (rowValue: unknown, needle: unknown): boolean => {\n if (Array.isArray(needle)) return needle.includes(rowValue as never);\n return rowValue === needle;\n};\n\nconst matchesRegexLike = (rowValue: unknown, needle: unknown): boolean => {\n if (!isProvided(needle)) return true;\n if (rowValue === undefined || rowValue === null) return false;\n const hay = String(rowValue);\n\n if (needle instanceof RegExp) return needle.test(hay);\n const n = String(needle);\n return hay.toLowerCase().includes(n.toLowerCase());\n};\n\nconst compareValues = (a: unknown, b: unknown): number => {\n if (a === b) return 0;\n if (a === undefined || a === null) return -1;\n if (b === undefined || b === null) return 1;\n\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n\n const as = String(a);\n const bs = String(b);\n return as.localeCompare(bs);\n};\n\nconst normalizeSorts = (sorts: TSortEntry[] | undefined): TSortEntry[] =>\n Array.isArray(sorts) ? sorts.filter((s) => !!s?.path && (s.value === 1 || s.value === -1)) : [];\n\n/**\n * Creates an adapter that pages/filters/sorts an in-memory dataset.\n */\nexport const adapterMemory = <T extends Record<string, unknown>>(\n dataset: ReadonlyArray<T>,\n options: Readonly<{\n /** default behavior for filter keys not present in filterConfig */\n defaultFilterType?: 'regex' | 'exact';\n }> = {}\n): TDataKitAdapter<T> => {\n const { defaultFilterType = 'exact' } = options;\n\n return async ({ filter, sorts, limit, skip, input }) => {\n const filterConfig: TFilterConfig | undefined = input.filterConfig;\n const query = input.query ?? {};\n\n // 1) Apply query (exact match)\n let rows = dataset.filter((row) => {\n for (const [key, value] of Object.entries(query)) {\n if (!isProvided(value)) continue;\n const rowValue = getValueByPath(row, key);\n if (!matchesExact(rowValue, value)) return false;\n }\n return true;\n });\n\n // 2) Apply filter (via filterConfig when present)\n const effectiveFilter = filter ?? {};\n rows = rows.filter((row) => {\n for (const [key, value] of Object.entries(effectiveFilter)) {\n if (!isProvided(value)) continue;\n\n const config = filterConfig?.[key];\n const field = config?.field ?? key;\n const rowValue = getValueByPath(row, field);\n\n const type = config?.type ?? defaultFilterType;\n if (type === 'regex') {\n if (!matchesRegexLike(rowValue, value)) return false;\n } else {\n if (!matchesExact(rowValue, value)) return false;\n }\n }\n return true;\n });\n\n // 3) Sort\n const normalizedSorts = normalizeSorts(sorts);\n if (normalizedSorts.length > 0) {\n rows = [...rows].sort((ra, rb) => {\n for (const s of normalizedSorts) {\n const av = getValueByPath(ra, s.path);\n const bv = getValueByPath(rb, s.path);\n const cmp = compareValues(av, bv);\n if (cmp !== 0) return s.value === 1 ? cmp : -cmp;\n }\n return 0;\n });\n }\n\n const total = rows.length;\n const items = rows.slice(skip, skip + limit);\n return { items, total };\n };\n};\n","import { z } from 'zod';\n\nexport const dataKitSchemaZod = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().optional(),\n query: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n filter: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional(),\n filterConfig: z.record(z.string(), z.object({\n type: z.enum([\"REGEX\", \"EXACT\"]),\n field: z.string().optional()\n })).optional(),\n sorts: z.array(z.object({\n path: z.string().max(100), // Limit path length to prevent abuse\n value: z.literal(-1).or(z.literal(1))\n })).max(5).optional(), // Limit to 5 sort fields\n sort: z.record(z.string(), z.literal(1).or(z.literal(-1))).optional(),\n});\n\nexport type TDataKitSchemaZod = z.infer<typeof dataKitSchemaZod>;\n","'use client';\n\ntype ClassPrimitive = string | number | boolean | null | undefined;\ntype ClassDictionary = Record<string, boolean | undefined | null>;\ntype ClassArray = ClassValue[];\nexport type ClassValue = ClassPrimitive | ClassDictionary | ClassArray;\n\nconst toClassString = (input: ClassValue): string => {\n if (!input) return '';\n\n if (typeof input === 'string' || typeof input === 'number') return String(input);\n\n if (Array.isArray(input)) {\n return input.map(toClassString).filter(Boolean).join(' ');\n }\n\n if (typeof input === 'object') {\n return Object.entries(input)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key)\n .join(' ');\n }\n\n return '';\n};\n\n/**\n * Minimal `cn` helper (shadcn-style) without external deps.\n */\nexport const cn = (...inputs: ClassValue[]): string => inputs.map(toClassString).filter(Boolean).join(' ');\n","/**\n * next-data-kit - Utility Functions\n *\n * Helper utilities for client-side operations.\n */\n\nimport type { TDataKitColumn, TSortEntry } from '../../types';\n\nexport { cn, type ClassValue } from './cn';\n\n// ** ============================================================================\n// ** Column Utilities\n// ** ============================================================================\n\n/**\n * Get the value from an item using a column accessor\n */\nexport const getColumnValue = <T>(item: T, column: TDataKitColumn<T>): unknown => {\n const { accessor } = column;\n return typeof accessor === 'function' ? accessor(item) : item[accessor as keyof T];\n};\n\n/**\n * Get the sort value for a column\n */\nexport const getSortValue = (sorts: TSortEntry[], path: string): 1 | -1 | null => {\n const sort = sorts.find((s) => s.path === path);\n return sort?.value ?? null;\n};\n\n/**\n * Get the next sort value in the cycle: null -> 1 -> -1 -> null\n */\nexport const getNextSortValue = (current: 1 | -1 | null): 1 | -1 | null => {\n if (current === null) return 1;\n if (current === 1) return -1;\n return null;\n};\n\n// ** ============================================================================\n// ** Formatting Utilities\n// ** ============================================================================\n\n/**\n * Format a number with commas\n */\nexport const formatNumber = (num: number): string => num.toLocaleString();\n\n// ** ============================================================================\n// ** Function Utilities\n// ** ============================================================================\n\n/**\n * Debounce a function\n */\nexport const debounce = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n};\n\n/**\n * Throttle a function\n */\nexport const throttle = <T extends (...args: unknown[]) => unknown>(\n fn: T,\n limit: number\n): ((...args: Parameters<T>) => void) => {\n let inThrottle = false;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n fn(...args);\n inThrottle = true;\n setTimeout(() => { inThrottle = false; }, limit);\n }\n };\n};\n\n// ** ============================================================================\n// ** Sort Entry Utilities\n// ** ============================================================================\n\n/**\n * Create a stable object key from sort entries\n */\nexport const sortEntriesToKey = (sorts: TSortEntry[]): string =>\n sorts.map((s) => `${s.path}:${s.value}`).join(',');\n\n/**\n * Parse a sort key back to sort entries\n */\nexport const keyToSortEntries = (key: string): TSortEntry[] => {\n if (!key) return [];\n return key.split(',').map((part) => {\n const [path, value] = part.split(':');\n return { path: path ?? '', value: parseInt(value ?? '1', 10) as 1 | -1 };\n });\n};\n\n// ** ============================================================================\n// ** URL State Utilities\n// ** ============================================================================\n\n/**\n * Parse URL search params into tabler state\n */\nexport const parseUrlParams = (search: string): {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n} => {\n const params = new URLSearchParams(search);\n const state: ReturnType<typeof parseUrlParams> = {};\n\n // ** Page\n const page = params.get('page');\n if (page) state.page = parseInt(page, 10);\n\n // ** Limit\n const limit = params.get('limit');\n if (limit) state.limit = parseInt(limit, 10);\n\n // ** Sorts\n const sort = params.get('sort');\n if (sort) state.sorts = keyToSortEntries(sort);\n\n // ** Filter (f_key) and Query (q_key)\n const filter: Record<string, unknown> = {};\n const query: Record<string, unknown> = {};\n\n params.forEach((value, key) => {\n if (key.startsWith('f_')) filter[key.slice(2)] = value;\n else if (key.startsWith('q_')) query[key.slice(2)] = value;\n });\n\n if (Object.keys(filter).length > 0) state.filter = filter;\n if (Object.keys(query).length > 0) state.query = query;\n\n return state;\n};\n\n/**\n * Convert tabler state to URL search params\n */\nexport const stateToUrlParams = (state: {\n page?: number;\n limit?: number;\n sorts?: TSortEntry[];\n filter?: Record<string, unknown>;\n query?: Record<string, unknown>;\n}): URLSearchParams => {\n const params = new URLSearchParams();\n\n if (state.page && state.page > 1) params.set('page', state.page.toString());\n if (state.limit) params.set('limit', state.limit.toString());\n if (state.sorts && state.sorts.length > 0) params.set('sort', sortEntriesToKey(state.sorts));\n\n if (state.filter) {\n Object.entries(state.filter).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`f_${key}`, String(value));\n }\n });\n }\n\n if (state.query) {\n Object.entries(state.query).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '') {\n params.set(`q_${key}`, String(value));\n }\n });\n }\n\n return params;\n};\n","/**\n * next-data-kit - useDataKit Hook\n *\n * React hook for managing next-data-kit state and actions.\n */\n\n'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport type { TDataKitInput, TDataKitResult, TDataKitControllerOptions, TSortEntry, TUseDataKitReturn } from '../../types';\nimport { parseUrlParams, stateToUrlParams } from '../utils';\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const useDataKit = <T = unknown, R = unknown>(props: Readonly<TDataKitControllerOptions<T, R>>): TUseDataKitReturn<T, R> => {\n\t// ** Deconstruct Props\n\tconst { initial = {}, state: stateMode = 'memory', filterConfig, action, onSuccess, onError, autoFetch = true, debounce: debounceDelay = 300 } = props;\n\n\tconst { page: initialPage = 1, limit: initialLimit = 10, sorts: initialSorts = [], filter: initialFilter = {}, query: initialQuery = {} } = initial;\n\n\t// ** State\n\tconst [page, setPageState] = useState(initialPage);\n\tconst [limit, setLimitState] = useState(initialLimit);\n\tconst [sorts, setSortsState] = useState<TSortEntry[]>(initialSorts);\n\tconst [filter, setFilterState] = useState<Record<string, unknown>>(initialFilter);\n\tconst [debouncedFilter, setDebouncedFilter] = useState<Record<string, unknown>>(initialFilter);\n\tconst [query, setQueryState] = useState<Record<string, unknown>>(initialQuery);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [items, setItems] = useState<R[]>([]);\n\tconst [total, setTotal] = useState(0);\n\n\t// ** Refs\n\tconst mounted = useRef(true);\n\tconst fetchIdRef = useRef(0);\n\tconst debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\t// ** Refs for props to prevent infinite loops and stale closures\n\tconst actionRef = useRef(action);\n\tconst onSuccessRef = useRef(onSuccess);\n\tconst onErrorRef = useRef(onError);\n\tconst filterConfigRef = useRef(filterConfig);\n\n\t// ** Update refs on every render\n\tactionRef.current = action;\n\tonSuccessRef.current = onSuccess;\n\tonErrorRef.current = onError;\n\tfilterConfigRef.current = filterConfig;\n\n\t// ** Get current input\n\tconst getInput = useCallback((): TDataKitInput<T> => {\n\t\tconst input: TDataKitInput<T> = {\n\t\t\taction: 'FETCH',\n\t\t\tpage,\n\t\t\tlimit,\n\t\t\tsorts,\n\t\t\tfilter: debouncedFilter,\n\t\t\tquery: query as Record<string, string | number | boolean>,\n\t\t};\n\n\t\tif (filterConfigRef.current) {\n\t\t\tinput.filterConfig = filterConfigRef.current;\n\t\t}\n\n\t\treturn input;\n\t}, [page, limit, sorts, debouncedFilter, query]);\n\n\t// ** Fetch data\n\tconst fetchData = useCallback(async () => {\n\t\tconst fetchId = ++fetchIdRef.current;\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\n\t\ttry {\n\t\t\tconst input = getInput();\n\t\t\tconst result = (await actionRef.current(input)) as TDataKitResult<R>;\n\n\t\t\t// ** Check if this is still the latest fetch\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tsetItems(result.items);\n\t\t\tsetTotal(result.documentTotal);\n\t\t\tonSuccessRef.current?.(result);\n\t\t} catch (err) {\n\t\t\tif (fetchId !== fetchIdRef.current || !mounted.current) return;\n\n\t\t\tconst fetchError = err instanceof Error ? err : new Error(String(err));\n\t\t\tsetError(fetchError);\n\t\t\tonErrorRef.current?.(fetchError);\n\t\t} finally {\n\t\t\tif (fetchId === fetchIdRef.current && mounted.current) {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\t}, [getInput]);\n\n\t// ** Debounce filter changes\n\tuseEffect(() => {\n\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n\t\tdebounceTimerRef.current = setTimeout(() => {\n\t\t\tsetDebouncedFilter(filter);\n\t\t}, debounceDelay);\n\n\t\treturn () => {\n\t\t\tif (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\t\t};\n\t}, [filter, debounceDelay]);\n\n\t// ** Actions\n\tconst setPage = useCallback((newPage: number) => setPageState(newPage), []);\n\n\tconst setLimit = useCallback((newLimit: number) => {\n\t\tsetLimitState(newLimit);\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setSort = useCallback((path: string, value: 1 | -1 | null, append = false) => {\n\t\tsetSortsState(prev => {\n\t\t\tif (value === null) return prev.filter(s => s.path !== path);\n\t\t\tif (!append) return [{ path, value }];\n\n\t\t\tconst existing = prev.find(s => s.path === path);\n\t\t\tif (existing) return prev.map(s => (s.path === path ? { ...s, value } : s));\n\t\t\treturn [...prev, { path, value }];\n\t\t});\n\t}, []);\n\n\tconst setSorts = useCallback((newSorts: TSortEntry[]) => setSortsState(newSorts), []);\n\n\tconst setFilter = useCallback((key: string, value: unknown) => {\n\t\tsetFilterState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setFilters = useCallback((filters: Record<string, unknown>) => {\n\t\tsetFilterState(prev => ({ ...prev, ...filters }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst clearFilters = useCallback(() => {\n\t\tsetFilterState({});\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst setQuery = useCallback((key: string, value: unknown) => {\n\t\tsetQueryState(prev => ({ ...prev, [key]: value }));\n\t\tsetPageState(1);\n\t}, []);\n\n\tconst refresh = useCallback(async () => {\n\t\tawait fetchData();\n\t}, [fetchData]);\n\n\t// ** Item mutations (optional helpers)\n\tconst setItemsAction = useCallback((nextItems: R[]) => {\n\t\tsetItems(nextItems);\n\t}, []);\n\n\tconst setItemAt = useCallback((index: number, item: R) => {\n\t\tsetItems(prev => {\n\t\t\tif (index < 0 || index >= prev.length) return prev;\n\t\t\tconst next = [...prev];\n\t\t\tnext[index] = item;\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\n\tconst deleteItemAt = useCallback((index: number) => {\n\t\tsetItems(prev => prev.filter((_, i) => i !== index));\n\t}, []);\n\n\tconst itemPush = useCallback((item: R, position: 0 | 1 = 1) => {\n\t\tsetItems(prev => (position === 0 ? [item, ...prev] : [...prev, item]));\n\t}, []);\n\n\tconst deleteBulk = useCallback((itemsToDelete: R[]) => {\n\t\tif (itemsToDelete.length === 0) return;\n\t\tconst toDelete = new Set(itemsToDelete);\n\t\tsetItems(prev => prev.filter(it => !toDelete.has(it)));\n\t}, []);\n\n\tconst reset = useCallback(() => {\n\t\tsetPageState(initialPage);\n\t\tsetLimitState(initialLimit);\n\t\tsetSortsState(initialSorts);\n\t\tsetFilterState(initialFilter);\n\t\tsetDebouncedFilter(initialFilter);\n\t\tsetQueryState(initialQuery);\n\t}, [initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n\t// ** Sync with URL if stateMode is 'search-params'\n\tuseEffect(() => {\n\t\tif (stateMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\t// ** Initial load from URL\n\t\tconst urlState = parseUrlParams(window.location.search);\n\n\t\tif (Object.keys(urlState).length > 0) {\n\t\t\tif (urlState.page) setPageState(urlState.page);\n\t\t\tif (urlState.limit) setLimitState(urlState.limit);\n\t\t\tif (urlState.sorts) setSortsState(urlState.sorts);\n\t\t\tif (urlState.filter) {\n\t\t\t\tsetFilterState(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t\tsetDebouncedFilter(prev => ({ ...prev, ...urlState.filter }));\n\t\t\t}\n\t\t\tif (urlState.query) setQueryState(prev => ({ ...prev, ...urlState.query }));\n\t\t}\n\n\t\t// ** Listen for popstate (back/forward)\n\t\tconst handlePopState = () => {\n\t\t\tconst newUrlState = parseUrlParams(window.location.search);\n\n\t\t\tsetPageState(newUrlState.page ?? initialPage);\n\t\t\tsetLimitState(newUrlState.limit ?? initialLimit);\n\t\t\tsetSortsState(newUrlState.sorts ?? initialSorts);\n\t\t\tsetFilterState({ ...initialFilter, ...newUrlState.filter });\n\t\t\tsetDebouncedFilter({ ...initialFilter, ...newUrlState.filter });\n\t\t\tsetQueryState({ ...initialQuery, ...newUrlState.query });\n\t\t};\n\n\t\twindow.addEventListener('popstate', handlePopState);\n\t\treturn () => window.removeEventListener('popstate', handlePopState);\n\t}, [stateMode, initialPage, initialLimit, initialSorts, initialFilter, initialQuery]);\n\n\t// ** Update URL when state changes\n\tuseEffect(() => {\n\t\tif (stateMode !== 'search-params' || typeof window === 'undefined') return;\n\n\t\tconst params = stateToUrlParams({ page, limit, sorts, filter, query });\n\t\tconst newSearch = params.toString();\n\t\tconst currentSearch = window.location.search.slice(1);\n\n\t\tif (newSearch !== currentSearch) {\n\t\t\tconst newUrl = newSearch ? `?${newSearch}` : window.location.pathname;\n\t\t\twindow.history.pushState(null, '', newUrl);\n\t\t}\n\t}, [page, limit, sorts, filter, query, stateMode]);\n\n\t// ** Auto-fetch on mount and when dependencies change\n\tuseEffect(() => {\n\t\tif (autoFetch) fetchData();\n\t}, [page, limit, sorts, debouncedFilter, query, autoFetch, fetchData]);\n\n\t// ** Cleanup\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\n\treturn {\n\t\tpage,\n\t\tlimit,\n\t\tsorts,\n\t\tfilter,\n\t\tfilterConfig,\n\t\tquery,\n\t\titems,\n\t\ttotal,\n\t\tstate: { isLoading, error },\n\t\tactions: {\n\t\t\tsetPage,\n\t\t\tsetLimit,\n\t\t\tsetSort,\n\t\t\tsetSorts,\n\t\t\tsetFilter,\n\t\t\tsetFilters,\n\t\t\tclearFilters,\n\t\t\tsetQuery,\n\t\t\trefresh,\n\t\t\treset,\n\t\t\tgetInput,\n\t\t\tsetItems: setItemsAction,\n\t\t\tsetItemAt,\n\t\t\tdeleteItemAt,\n\t\t\titemPush,\n\t\t\tdeleteBulk,\n\t\t},\n\t};\n};\n\nexport type { TDataKitControllerOptions };\n","/**\n * next-data-kit - useSelection Hook\n *\n * React hook for managing table row selection.\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { TUseSelectionReturn } from '../../types';\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const useSelection = <T = string>(initialSelected: T[] = []): TUseSelectionReturn<T> => {\n // ** State\n const [selectedIds, setSelectedIds] = useState<Set<T>>(new Set(initialSelected));\n\n // ** Select a single item\n const select = useCallback((id: T) => {\n setSelectedIds((prev) => new Set(prev).add(id));\n }, []);\n\n // ** Deselect a single item\n const deselect = useCallback((id: T) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n // ** Toggle selection of a single item\n const toggle = useCallback((id: T) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n // ** Select all items\n const selectAll = useCallback((ids: T[]) => {\n setSelectedIds(new Set(ids));\n }, []);\n\n // ** Deselect all items\n const deselectAll = useCallback(() => {\n setSelectedIds(new Set());\n }, []);\n\n // ** Toggle all items selection\n const toggleAll = useCallback((ids: T[]) => {\n setSelectedIds((prev) => {\n // ** If all are selected, deselect all\n if (ids.every((id) => prev.has(id))) return new Set();\n // ** Otherwise, select all\n return new Set(ids);\n });\n }, []);\n\n // ** Check if an item is selected\n const isSelected = useCallback((id: T) => selectedIds.has(id), [selectedIds]);\n\n // ** Get array of selected IDs\n const getSelectedArray = useCallback(() => Array.from(selectedIds), [selectedIds]);\n\n // ** Calculate derived state\n const isAllSelected = useMemo(() => selectedIds.size > 0, [selectedIds.size]);\n const isIndeterminate = useMemo(() => false, []);\n\n return {\n selectedIds,\n isAllSelected,\n isIndeterminate,\n select,\n deselect,\n toggle,\n selectAll,\n deselectAll,\n toggleAll,\n isSelected,\n getSelectedArray,\n };\n};\n\n// ** ============================================================================\n// ** Hook with Total\n// ** ============================================================================\n\nexport const useSelectionWithTotal = <T = string>(\n totalItems: T[],\n initialSelected: T[] = []\n): Omit<TUseSelectionReturn<T>, 'toggleAll'> & {\n isAllSelected: boolean;\n isIndeterminate: boolean;\n toggleAll: () => void;\n} => {\n // ** Base selection hook\n const selection = useSelection<T>(initialSelected);\n\n // ** Calculate derived state\n const isAllSelected = useMemo(\n () => totalItems.length > 0 && totalItems.every((id) => selection.selectedIds.has(id)),\n [totalItems, selection.selectedIds]\n );\n\n const isIndeterminate = useMemo(\n () => selection.selectedIds.size > 0 && selection.selectedIds.size < totalItems.length,\n [totalItems.length, selection.selectedIds.size]\n );\n\n // ** Override toggleAll to use totalItems\n const toggleAll = useCallback(() => {\n if (isAllSelected) selection.deselectAll();\n else selection.selectAll(totalItems);\n }, [isAllSelected, selection, totalItems]);\n\n return {\n ...selection,\n isAllSelected,\n isIndeterminate,\n toggleAll,\n };\n};\n","/**\n * next-data-kit - usePagination Hook\n *\n * React hook for calculating pagination state.\n */\n\n'use client';\n\nimport { useMemo } from 'react';\nimport type { TPaginationInfo } from '../../types';\nimport { calculatePagination } from '../../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TUsePaginationReturn = TPaginationInfo & {\n // ** Array of page numbers/ellipsis to display\n pages: (number | 'ellipsis')[];\n // ** First page number\n firstPage: number;\n // ** Last page number\n lastPage: number;\n};\n\n// ** ============================================================================\n// ** Helpers\n// ** ============================================================================\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: end - start + 1 }, (_, idx) => idx + start);\n\n// ** ============================================================================\n// ** Hook\n// ** ============================================================================\n\nexport const usePagination = (props: Readonly<{\n page: number;\n limit: number;\n total: number;\n // ** Number of page buttons to show on each side of current page\n siblingCount?: number;\n}>): TUsePaginationReturn => {\n // ** Deconstruct Props\n const { page, limit, total, siblingCount = 1 } = props;\n\n // ** Calculate pagination info\n const paginationInfo = useMemo(() => calculatePagination(page, limit, total), [page, limit, total]);\n\n // ** Calculate page numbers to display\n const pages = useMemo(() => {\n const { totalPages } = paginationInfo;\n\n // ** Total number of page buttons = siblings on both sides + first + last + current + 2 ellipsis\n const totalPageNumbers = siblingCount * 2 + 5;\n\n // ** If total pages is less than page numbers we want to show\n if (totalPageNumbers >= totalPages) return range(1, totalPages);\n\n const leftSiblingIndex = Math.max(page - siblingCount, 1);\n const rightSiblingIndex = Math.min(page + siblingCount, totalPages);\n\n const shouldShowLeftEllipsis = leftSiblingIndex > 2;\n const shouldShowRightEllipsis = rightSiblingIndex < totalPages - 1;\n\n // ** No left ellipsis, but right ellipsis\n if (!shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const leftRange = range(1, 3 + 2 * siblingCount);\n return [...leftRange, 'ellipsis' as const, totalPages];\n }\n\n // ** Left ellipsis, no right ellipsis\n if (shouldShowLeftEllipsis && !shouldShowRightEllipsis) {\n const rightRange = range(totalPages - (3 + 2 * siblingCount) + 1, totalPages);\n return [1, 'ellipsis' as const, ...rightRange];\n }\n\n // ** Both ellipsis\n if (shouldShowLeftEllipsis && shouldShowRightEllipsis) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n return [1, 'ellipsis' as const, ...middleRange, 'ellipsis' as const, totalPages];\n }\n\n return range(1, totalPages);\n }, [paginationInfo, page, siblingCount]);\n\n return {\n ...paginationInfo,\n pages,\n firstPage: 1,\n lastPage: paginationInfo.totalPages,\n };\n};\n","/**\n * next-data-kit - DataKitContext\n *\n * React context for sharing next-data-kit state across components.\n */\n\n'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport type { TUseDataKitReturn } from '../../types';\n\n// ** ============================================================================\n// ** Types\n// ** ============================================================================\n\nexport type TDataKitContextValue<T = unknown, R = unknown> = TUseDataKitReturn<T, R>;\n\n// ** ============================================================================\n// ** Context Factory\n// ** ============================================================================\n\nexport const createDataKitContext = <T = unknown, R = unknown>() => {\n const Context = createContext<TDataKitContextValue<T, R> | null>(null);\n\n // ** Provider component for next-data-kit context\n const DataKitProvider = (props: Readonly<{\n value: TDataKitContextValue<T, R>;\n children: ReactNode;\n }>) => {\n const { value, children } = props;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n // ** Hook to access next-data-kit context\n const useDataKitContext = (): TDataKitContextValue<T, R> => {\n const context = useContext(Context);\n if (!context) {\n throw new Error('useDataKitContext must be used within a DataKitProvider');\n }\n return context;\n };\n\n return { DataKitProvider, useDataKitContext, Context };\n};\n\n// ** ============================================================================\n// ** Default Context\n// ** ============================================================================\n\nconst {\n DataKitProvider: DefaultDataKitProvider,\n useDataKitContext: useDefaultDataKitContext,\n Context: DefaultDataKitContext,\n} = createDataKitContext();\n\nexport {\n DefaultDataKitProvider as DataKitProvider,\n useDefaultDataKitContext as useDataKitContext,\n DefaultDataKitContext as DataKitContext,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils';\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table\n data-slot=\"table\"\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn('[&_tr]:border-b', className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n 'bg-gray-50/70 dark:bg-gray-900/40 border-t border-gray-200 dark:border-gray-800 font-medium [&>tr]:last:border-b-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'hover:bg-gray-50 dark:hover:bg-gray-900/50 data-[state=selected]:bg-gray-50 dark:data-[state=selected]:bg-gray-900/50 border-b border-gray-100 dark:border-gray-900 transition-colors',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'text-gray-900 dark:text-gray-100 h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('text-gray-500 dark:text-gray-400 mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\n\nimport { cn } from '../../utils';\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-gray-200 bg-white text-gray-900 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-100 data-[state=checked]:bg-gray-900 data-[state=checked]:text-white dark:data-[state=checked]:bg-gray-100 dark:data-[state=checked]:text-gray-900 data-[state=checked]:border-gray-900 dark:data-[state=checked]:border-gray-100 focus-visible:border-gray-900 dark:focus-visible:border-gray-200 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500 size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\n\nimport { cn } from '../../utils';\n\nfunction Popover(\n props: React.ComponentProps<typeof PopoverPrimitive.Root>\n) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger(\n props: React.ComponentProps<typeof PopoverPrimitive.Trigger>\n) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n container,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border border-gray-200 dark:border-gray-800 p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor(\n props: React.ComponentProps<typeof PopoverPrimitive.Anchor>\n) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { cn } from '../../utils';\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n container,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <DropdownMenuPrimitive.Portal container={container ?? undefined}>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-gray-200 dark:border-gray-800 p-1 shadow-md\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 data-[variant=destructive]:text-red-600 dark:data-[variant=destructive]:text-red-500 data-[variant=destructive]:focus:bg-red-500/10 dark:data-[variant=destructive]:focus:bg-red-500/15 data-[variant=destructive]:focus:text-red-700 dark:data-[variant=destructive]:focus:text-red-400 data-[variant=destructive]:*:[svg]:!text-red-600 dark:data-[variant=destructive]:*:[svg]:!text-red-500 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-gray-100 dark:bg-gray-900 -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-gray-500 dark:text-gray-400 ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 data-[state=open]:bg-gray-50 dark:data-[state=open]:bg-gray-900 data-[state=open]:text-gray-900 dark:data-[state=open]:text-gray-100 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-gray-200 dark:border-gray-800 p-1 shadow-lg\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '../../utils';\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer data-[state=checked]:bg-gray-900 data-[state=unchecked]:bg-gray-200 dark:data-[state=checked]:bg-gray-100 dark:data-[state=unchecked]:bg-gray-800 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 bg-white dark:data-[state=unchecked]:bg-gray-100 dark:data-[state=checked]:bg-gray-900'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from '../../utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:ring-black/20 dark:focus-visible:ring-white/20 focus-visible:ring-[3px] aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500\",\n {\n variants: {\n variant: {\n default: \"bg-gray-900 text-white hover:bg-gray-800 dark:bg-gray-100 dark:text-gray-900 dark:hover:bg-gray-200\",\n destructive:\n \"bg-red-600 text-white hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-500\",\n outline:\n \"border border-gray-200 bg-white text-gray-900 shadow-xs hover:bg-gray-50 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-100 dark:hover:bg-gray-900\",\n secondary:\n \"bg-gray-100 text-gray-900 hover:bg-gray-200 dark:bg-gray-900 dark:text-gray-100 dark:hover:bg-gray-800\",\n ghost:\n \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-900 dark:hover:text-gray-100\",\n link: \"text-gray-900 underline-offset-4 hover:underline dark:text-gray-100\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(function Button(\n {\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n },\n ref\n) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from '../../utils';\n\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-gray-200 dark:border-gray-800 data-[placeholder]:text-gray-500 dark:data-[placeholder]:text-gray-400 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 focus-visible:border-gray-900 dark:focus-visible:border-gray-200 focus-visible:ring-black/20 dark:focus-visible:ring-white/20 aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/30 aria-invalid:border-red-500 bg-white dark:bg-gray-950 hover:bg-gray-50 dark:hover:bg-gray-900 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n container,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content> & {\n container?: HTMLElement | null;\n}) {\n return (\n <SelectPrimitive.Portal container={container ?? undefined}>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-gray-200 dark:border-gray-800 shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-gray-500 dark:text-gray-400 px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-gray-50 dark:focus:bg-gray-900 focus:text-gray-900 dark:focus:text-gray-100 [&_svg:not([class*='text-'])]:text-gray-500 dark:[&_svg:not([class*='text-'])]:text-gray-400 relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-gray-100 dark:bg-gray-900 pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { ArrowDown, ArrowUp, ChevronLeft, ChevronRight, Filter, Loader2, MoreHorizontal } from 'lucide-react';\nimport { useDataKit } from '../hooks/useDataKit';\nimport { useSelectionWithTotal } from '../hooks/useSelection';\nimport { usePagination } from '../hooks/usePagination';\nimport {\n Button,\n Checkbox,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from './ui';\nimport type {\n TDataKitInput,\n TDataKitResult,\n TDataKitComponentColumn,\n TDataKitFilterItem,\n TDataKitBulkAction,\n TDataKitComponentController,\n TDataKitSelectableItem,\n TDataKitStateMode,\n TExtractDataKitItemType,\n TFilterConfig,\n} from '../../types';\n\n// ** ============================================================================\n// ** Component\n// ** ============================================================================\n\nconst DataKitRoot = <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>,\n TRowState = unknown\n>(props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n table: TDataKitComponentColumn<TExtractDataKitItemType<TAction>, TRowState>[];\n filters?: TDataKitFilterItem[];\n selectable?: {\n enabled: boolean;\n actions?: Record<string, TDataKitBulkAction<TExtractDataKitItemType<TAction>>>;\n };\n initialState?: TRowState;\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n bordered?: boolean | 'rounded';\n refetchInterval?: number;\n state?: TDataKitStateMode;\n controller?: React.MutableRefObject<TDataKitComponentController<TExtractDataKitItemType<TAction>> | null>;\n}>) => {\n // ** Deconstruct Props\n const {\n action,\n query,\n filterConfig,\n table: columns,\n filters = [],\n selectable,\n initialState,\n limit: limitConfig,\n className,\n autoFetch = true,\n debounce = 300,\n bordered,\n refetchInterval,\n state: stateMode = 'memory',\n controller,\n } = props;\n\n // ** Type\n type TItem = TExtractDataKitItemType<TAction>;\n\n // ** Ref\n const tableRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // ** State\n const [isVisible, setIsVisible] = useState(false);\n const [isFilterOpen, setIsFilterOpen] = useState(false);\n const [actionLoading, setActionLoading] = useState<string | null>(null);\n const [actionsMenuOpen, setActionsMenuOpen] = useState(false);\n\n // ** Variable\n const overlayContainer = tableRef.current;\n\n // ** Hooks\n const dataKit = useDataKit<unknown, TItem>({\n action: action as unknown as (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TItem>>,\n filterConfig,\n autoFetch,\n debounce,\n state: stateMode,\n initial: {\n limit: limitConfig?.default ?? 10,\n query: query ?? {},\n sorts: columns.reduce<{ path: string; value: 1 | -1 }[]>((acc, col) => {\n if (col.sortable && col.sortable.default !== 0) {\n acc.push({ path: col.sortable.path, value: col.sortable.default as 1 | -1 });\n }\n return acc;\n }, []),\n filter: filters.reduce<Record<string, unknown>>((acc, f) => {\n if (f.defaultValue !== undefined) acc[f.id] = f.defaultValue;\n return acc;\n }, {}),\n },\n });\n const pagination = usePagination({ page: dataKit.page, limit: dataKit.limit, total: dataKit.total, siblingCount: 1 });\n const selection = useSelectionWithTotal<string | number>(dataKit.items.map((item) => item.id));\n\n // ** Variable\n const selectedCount = selection.selectedIds.size;\n const colSpan = columns.length + (selectable?.enabled ? 1 : 0);\n\n // ** Handlers\n const handleSort = useCallback((path: string) => {\n const currentSort = dataKit.sorts.find((s) => s.path === path);\n const nextValue = currentSort?.value === 1 ? -1 : currentSort?.value === -1 ? null : 1;\n dataKit.actions.setSort(path, nextValue);\n }, [dataKit.sorts, dataKit.actions]);\n\n const handleSelectionAction = useCallback(async (actionKey: string) => {\n if (!selectable?.actions?.[actionKey] || actionLoading) return;\n setActionLoading(actionKey);\n setActionsMenuOpen(false);\n try {\n const selectedItems = dataKit.items.filter((item) => selection.isSelected(item.id));\n const result = await selectable.actions[actionKey].function(selectedItems);\n if (result[0]) {\n const data = result[1] as { deselectAll?: boolean };\n if (data.deselectAll) selection.deselectAll();\n await dataKit.actions.refresh();\n }\n } catch (error) {\n console.error('Selection action failed:', error);\n } finally {\n setActionLoading(null);\n }\n }, [selectable?.actions, actionLoading, dataKit.items, selection, dataKit.actions]);\n\n const handleResetFilters = useCallback(() => {\n filters.forEach((f) => {\n dataKit.actions.setFilter(f.id, f.defaultValue ?? (f.type === 'BOOLEAN' ? false : ''));\n });\n }, [filters, dataKit.actions]);\n\n const getSortFor = useCallback((path: string) => dataKit.sorts.find((s) => s.path === path)?.value ?? null, [dataKit.sorts]);\n\n // ** Effects\n useEffect(() => {\n if (controller) {\n controller.current = {\n itemPush: dataKit.actions.itemPush,\n refetchData: dataKit.actions.refresh,\n deleteBulk: dataKit.actions.deleteBulk,\n getSelectedItems: () => dataKit.items.filter((item) => selection.isSelected(item.id)),\n clearSelection: () => selection.deselectAll(),\n };\n }\n }, [controller, dataKit.actions, dataKit.items, selection]);\n\n useEffect(() => {\n if (!tableRef.current || !refetchInterval) return;\n const observer = new IntersectionObserver(\n (entries) => entries[0] && setIsVisible(entries[0].isIntersecting),\n { threshold: 0.1 }\n );\n const currentRef = tableRef.current;\n observer.observe(currentRef);\n return () => { if (currentRef) observer.unobserve(currentRef); };\n }, [refetchInterval]);\n\n useEffect(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n if (refetchInterval && isVisible) {\n intervalRef.current = setInterval(dataKit.actions.refresh, refetchInterval);\n }\n return () => { if (intervalRef.current) clearInterval(intervalRef.current); };\n }, [refetchInterval, isVisible, dataKit.actions]);\n\n useEffect(() => { selection.deselectAll(); }, [dataKit.items.length]);\n\n // ** Render\n return (\n <div ref={tableRef} className={`space-y-3 ${className ?? ''}`}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {filters.length > 0 && (\n <Popover open={isFilterOpen} onOpenChange={setIsFilterOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-1.5 size-4\" />\n Filters\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-80\" container={overlayContainer}>\n <div className=\"grid gap-3\">\n {filters.map((f) => (\n <div key={f.id} className=\"grid gap-1.5\">\n <label className=\"text-sm font-medium\">{f.label}</label>\n {f.type === 'TEXT' && (\n <input\n type=\"text\"\n className=\"h-9 w-full rounded-md border bg-transparent px-3 text-sm outline-none focus:ring-2 focus:ring-ring\"\n placeholder={f.placeholder}\n value={(dataKit.filter[f.id] as string) ?? ''}\n onChange={(e) => dataKit.actions.setFilter(f.id, e.target.value)}\n />\n )}\n {f.type === 'SELECT' && (\n <Select\n value={String(dataKit.filter[f.id] || '__all__')}\n onValueChange={(v) => dataKit.actions.setFilter(f.id, v === '__all__' ? '' : v)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n <SelectItem value=\"__all__\">All</SelectItem>\n {f.dataset?.map((d) => (\n <SelectItem key={d.id} value={d.id}>{d.label}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {f.type === 'BOOLEAN' && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{f.placeholder ?? 'Enable'}</span>\n <Switch\n checked={Boolean(dataKit.filter[f.id])}\n onCheckedChange={(c) => dataKit.actions.setFilter(f.id, c)}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex justify-between border-t pt-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleResetFilters}>Reset</Button>\n <Button size=\"sm\" onClick={() => setIsFilterOpen(false)}>Done</Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"mr-2 text-sm text-muted-foreground\">\n {dataKit.items.length} of {dataKit.total}\n </span>\n <Select value={String(dataKit.limit)} onValueChange={(v) => dataKit.actions.setLimit(Number(v))} disabled={dataKit.state.isLoading}>\n <SelectTrigger className=\"w-16\"><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n {[10, 25, 50, 100].map((v) => (\n <SelectItem key={v} value={String(v)}>{v}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Table */}\n <div className={`overflow-hidden border border-gray-200 dark:border-gray-800 ${bordered === 'rounded' ? 'rounded-lg' : bordered ? '' : 'rounded-lg'}`}>\n <Table>\n <TableHeader>\n <TableRow>\n {selectable?.enabled && (\n <TableHead className=\"w-12\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n checked={selection.isIndeterminate ? 'indeterminate' : selection.isAllSelected}\n onCheckedChange={() => selection.toggleAll()}\n />\n {selectable.actions && Object.keys(selectable.actions).length > 0 && (\n <DropdownMenu open={actionsMenuOpen} onOpenChange={setActionsMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-6\"\n disabled={selectedCount === 0 || !!actionLoading}\n >\n {actionLoading ? <Loader2 className=\"size-4 animate-spin\" /> : <MoreHorizontal className=\"size-4\" />}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" container={overlayContainer}>\n {Object.entries(selectable.actions).map(([key, action]) => (\n <DropdownMenuItem key={key} disabled={!!actionLoading} onSelect={() => handleSelectionAction(key)}>\n {actionLoading === key ? 'Working…' : action.name}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </TableHead>\n )}\n {columns.map((col, idx) => (\n <React.Fragment key={idx}>\n {col.sortable ? (\n <TableHead {...(React.isValidElement(col.head) ? (col.head.props as object) : {})}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3\"\n onClick={() => handleSort(col.sortable!.path)}\n >\n {React.isValidElement(col.head) ? (col.head as React.ReactElement<{ children?: React.ReactNode }>).props.children : col.head}\n {getSortFor(col.sortable!.path) === 1 && <ArrowUp className=\"ml-1 size-4\" />}\n {getSortFor(col.sortable!.path) === -1 && <ArrowDown className=\"ml-1 size-4\" />}\n </Button>\n </TableHead>\n ) : (\n col.head\n )}\n </React.Fragment>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {dataKit.state.isLoading ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center\">\n <Loader2 className=\"mx-auto size-5 animate-spin\" />\n </TableCell>\n </TableRow>\n ) : dataKit.state.error ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center text-red-500\">\n Error: {dataKit.state.error.message}\n </TableCell>\n </TableRow>\n ) : dataKit.items.length === 0 ? (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center text-muted-foreground\">\n No results found.\n </TableCell>\n </TableRow>\n ) : (\n dataKit.items.map((item, idx) => (\n <TableRow key={item.id ?? idx}>\n {selectable?.enabled && (\n <TableCell>\n <Checkbox\n checked={selection.isSelected(item.id)}\n onCheckedChange={() => selection.toggle(item.id)}\n />\n </TableCell>\n )}\n {columns.map((col, colIdx) => (\n <React.Fragment key={colIdx}>\n {col.body({\n item,\n index: idx,\n state: initialState as TRowState,\n setState: () => { },\n setItem: (updatedItem) => dataKit.actions.setItemAt(idx, updatedItem),\n deleteItem: () => dataKit.actions.deleteItemAt(idx),\n })}\n </React.Fragment>\n ))}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Page {dataKit.page} of {pagination.totalPages}\n {selectable?.enabled && selectedCount > 0 && (\n <span className=\"ml-2 text-foreground\">({selectedCount} selected)</span>\n )}\n </p>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasPrevPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page - 1)}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasNextPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page + 1)}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DataKitTable = Object.assign(DataKitRoot, {\n Cell: TableCell,\n Head: TableHead,\n});\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { ChevronLeft, ChevronRight, Filter, Loader2 } from 'lucide-react';\nimport { useDataKit } from '../hooks/useDataKit';\nimport { usePagination } from '../hooks/usePagination';\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from './ui';\nimport type {\n TDataKitInput,\n TDataKitResult,\n TDataKitFilterItem,\n TDataKitSelectableItem,\n TDataKitStateMode,\n TExtractDataKitItemType,\n TFilterConfig,\n TUseDataKitReturn,\n TDataKitRef,\n} from '../../types';\n\n// ** ============================================================================\n// ** Component\n// ** ============================================================================\n\nconst DataKitInner = <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>\n>(props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n filters?: TDataKitFilterItem[];\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n refetchInterval?: number;\n state?: TDataKitStateMode;\n manual?: boolean;\n children: (dataKit: TUseDataKitReturn<unknown, TExtractDataKitItemType<TAction>>) => React.ReactNode;\n}>, ref: React.ForwardedRef<TDataKitRef<unknown, TExtractDataKitItemType<TAction>>>) => {\n // ** Deconstruct Props\n const {\n action,\n query,\n filterConfig,\n filters = [],\n limit: limitConfig,\n className,\n autoFetch = true,\n debounce = 300,\n refetchInterval,\n state: stateMode = 'memory',\n manual = false,\n children,\n } = props;\n\n // ** Type\n type TItem = TExtractDataKitItemType<TAction>;\n\n // ** Ref\n const containerRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // ** State\n const [isVisible, setIsVisible] = useState(false);\n const [isFilterOpen, setIsFilterOpen] = useState(false);\n\n // ** Variable\n const overlayContainer = containerRef.current;\n\n // ** Hooks\n const dataKit = useDataKit<unknown, TItem>({\n action: action as unknown as (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TItem>>,\n filterConfig,\n autoFetch,\n debounce,\n state: stateMode,\n initial: {\n limit: limitConfig?.default ?? 10,\n query: query ?? {},\n sorts: [],\n filter: filters.reduce<Record<string, unknown>>((acc, f) => {\n if (f.defaultValue !== undefined) acc[f.id] = f.defaultValue;\n return acc;\n }, {}),\n },\n });\n const pagination = usePagination({ page: dataKit.page, limit: dataKit.limit, total: dataKit.total, siblingCount: 1 });\n\n // ** Imperative Handle\n React.useImperativeHandle(ref, () => dataKit as unknown as TDataKitRef<unknown, TItem>, [dataKit]);\n\n // ** Handlers\n const handleResetFilters = useCallback(() => {\n filters.forEach((f) => {\n dataKit.actions.setFilter(f.id, f.defaultValue ?? (f.type === 'BOOLEAN' ? false : ''));\n });\n }, [filters, dataKit.actions]);\n\n // ** Effects\n useEffect(() => {\n if (!containerRef.current || !refetchInterval) return;\n const observer = new IntersectionObserver(\n (entries) => entries[0] && setIsVisible(entries[0].isIntersecting),\n { threshold: 0.1 }\n );\n const currentRef = containerRef.current;\n observer.observe(currentRef);\n return () => { if (currentRef) observer.unobserve(currentRef); };\n }, [refetchInterval]);\n\n useEffect(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n if (refetchInterval && isVisible) {\n intervalRef.current = setInterval(dataKit.actions.refresh, refetchInterval);\n }\n return () => { if (intervalRef.current) clearInterval(intervalRef.current); };\n }, [refetchInterval, isVisible, dataKit.actions]);\n\n // ** Render\n return (\n <div ref={containerRef} className={`space-y-3 ${className ?? ''}`}>\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {filters.length > 0 && (\n <Popover open={isFilterOpen} onOpenChange={setIsFilterOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-1.5 size-4\" />\n Filters\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-80\" container={overlayContainer}>\n <div className=\"grid gap-3\">\n {filters.map((f) => (\n <div key={f.id} className=\"grid gap-1.5\">\n <label className=\"text-sm font-medium\">{f.label}</label>\n {f.type === 'TEXT' && (\n <input\n type=\"text\"\n className=\"h-9 w-full rounded-md border bg-transparent px-3 text-sm outline-none focus:ring-2 focus:ring-ring\"\n placeholder={f.placeholder}\n value={(dataKit.filter[f.id] as string) ?? ''}\n onChange={(e) => dataKit.actions.setFilter(f.id, e.target.value)}\n />\n )}\n {f.type === 'SELECT' && (\n <Select\n value={String(dataKit.filter[f.id] || '__all__')}\n onValueChange={(v) => dataKit.actions.setFilter(f.id, v === '__all__' ? '' : v)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n <SelectItem value=\"__all__\">All</SelectItem>\n {f.dataset?.map((d) => (\n <SelectItem key={d.id} value={d.id}>{d.label}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n {f.type === 'BOOLEAN' && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{f.placeholder ?? 'Enable'}</span>\n <Switch\n checked={Boolean(dataKit.filter[f.id])}\n onCheckedChange={(c) => dataKit.actions.setFilter(f.id, c)}\n />\n </div>\n )}\n </div>\n ))}\n </div>\n <div className=\"mt-4 flex justify-between border-t pt-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleResetFilters}>Reset</Button>\n <Button size=\"sm\" onClick={() => setIsFilterOpen(false)}>Done</Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span className=\"mr-2 text-sm text-muted-foreground\">\n {dataKit.items.length} of {dataKit.total}\n </span>\n <Select value={String(dataKit.limit)} onValueChange={(v) => dataKit.actions.setLimit(Number(v))} disabled={dataKit.state.isLoading}>\n <SelectTrigger className=\"w-16\"><SelectValue /></SelectTrigger>\n <SelectContent container={overlayContainer}>\n {[10, 25, 50, 100].map((v) => (\n <SelectItem key={v} value={String(v)}>{v}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Content (user-provided) */}\n {manual ? (\n children(dataKit)\n ) : (\n <div className=\"min-h-[200px]\">\n {dataKit.state.isLoading ? (\n <div className=\"flex h-48 items-center justify-center\">\n <Loader2 className=\"size-6 animate-spin text-muted-foreground\" />\n </div>\n ) : dataKit.items.length === 0 ? (\n <div className=\"flex h-48 items-center justify-center text-muted-foreground\">\n No results found.\n </div>\n ) : (\n children(dataKit)\n )}\n </div>\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n Page {dataKit.page} of {pagination.totalPages}\n </p>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasPrevPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page - 1)}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={!pagination.hasNextPage || dataKit.state.isLoading}\n onClick={() => dataKit.actions.setPage(dataKit.page + 1)}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport const DataKit = React.forwardRef(DataKitInner) as unknown as <\n TAction extends (input: TDataKitInput<unknown>) => Promise<TDataKitResult<TDataKitSelectableItem>>\n>(\n props: Readonly<{\n action: TAction;\n query?: Record<string, unknown>;\n filterConfig?: TFilterConfig;\n filters?: TDataKitFilterItem[];\n limit?: { default: number };\n className?: string;\n autoFetch?: boolean;\n debounce?: number;\n refetchInterval?: number;\n state?: TDataKitStateMode;\n manual?: boolean;\n children: (dataKit: TUseDataKitReturn<unknown, TExtractDataKitItemType<TAction>>) => React.ReactNode;\n ref?: React.Ref<TDataKitRef<unknown, TExtractDataKitItemType<TAction>>>;\n }>\n) => React.ReactElement;\n"]}