@teja-app/ui 0.0.11 → 0.0.12
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/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useSidebar.d.ts +32 -1
- package/dist/hooks/useSidebar.d.ts.map +1 -1
- package/dist/index.cjs +0 -4879
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4863
- package/dist/index.js.map +1 -1
- package/dist/theme/components/Breadcrumbs.d.ts +53 -0
- package/dist/theme/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/theme/components/Checkbox.d.ts +6 -1
- package/dist/theme/components/Checkbox.d.ts.map +1 -1
- package/dist/theme/components/OTPInput.d.ts +58 -0
- package/dist/theme/components/OTPInput.d.ts.map +1 -0
- package/dist/theme/components/PasswordInput.d.ts +48 -0
- package/dist/theme/components/PasswordInput.d.ts.map +1 -0
- package/dist/{components/PillSelector/PillSelector.types.d.ts → theme/components/PillSelector.d.ts} +21 -2
- package/dist/theme/components/PillSelector.d.ts.map +1 -0
- package/dist/theme/components/Radio.d.ts +89 -0
- package/dist/theme/components/Radio.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/SidebarNav.d.ts +20 -0
- package/dist/theme/components/SidebarNav/SidebarNav.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/SidebarNavDivider.d.ts +8 -0
- package/dist/theme/components/SidebarNav/SidebarNavDivider.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/SidebarNavGroupRow.d.ts +8 -0
- package/dist/theme/components/SidebarNav/SidebarNavGroupRow.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/SidebarNavItemRow.d.ts +8 -0
- package/dist/theme/components/SidebarNav/SidebarNavItemRow.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/index.d.ts +12 -0
- package/dist/theme/components/SidebarNav/index.d.ts.map +1 -0
- package/dist/theme/components/SidebarNav/types.d.ts +157 -0
- package/dist/theme/components/SidebarNav/types.d.ts.map +1 -0
- package/dist/theme/components/Table.d.ts +70 -0
- package/dist/theme/components/Table.d.ts.map +1 -0
- package/dist/theme/components/index.d.ts +8 -0
- package/dist/theme/components/index.d.ts.map +1 -1
- package/dist/theme/index.cjs +13092 -1017
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.js +13045 -986
- package/dist/theme/index.js.map +1 -1
- package/dist/ui.css +159 -159
- package/dist/useSidebar-BWe09WbE.js.map +1 -1
- package/dist/useSidebar-d1VZFhxd.cjs.map +1 -1
- package/package.json +1 -1
- package/dist/components/Alert/Alert.d.ts +0 -13
- package/dist/components/Alert/Alert.d.ts.map +0 -1
- package/dist/components/Alert/Alert.types.d.ts +0 -17
- package/dist/components/Alert/Alert.types.d.ts.map +0 -1
- package/dist/components/Alert/index.d.ts +0 -3
- package/dist/components/Alert/index.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.d.ts +0 -13
- package/dist/components/Avatar/Avatar.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.types.d.ts +0 -18
- package/dist/components/Avatar/Avatar.types.d.ts.map +0 -1
- package/dist/components/Avatar/index.d.ts +0 -3
- package/dist/components/Avatar/index.d.ts.map +0 -1
- package/dist/components/Badge/Badge.d.ts +0 -13
- package/dist/components/Badge/Badge.d.ts.map +0 -1
- package/dist/components/Badge/Badge.types.d.ts +0 -14
- package/dist/components/Badge/Badge.types.d.ts.map +0 -1
- package/dist/components/Badge/index.d.ts +0 -3
- package/dist/components/Badge/index.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +0 -18
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +0 -22
- package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts.map +0 -1
- package/dist/components/Breadcrumbs/index.d.ts +0 -3
- package/dist/components/Breadcrumbs/index.d.ts.map +0 -1
- package/dist/components/Button/Button.d.ts +0 -13
- package/dist/components/Button/Button.d.ts.map +0 -1
- package/dist/components/Button/Button.types.d.ts +0 -18
- package/dist/components/Button/Button.types.d.ts.map +0 -1
- package/dist/components/Button/index.d.ts +0 -3
- package/dist/components/Button/index.d.ts.map +0 -1
- package/dist/components/Card/Card.d.ts +0 -18
- package/dist/components/Card/Card.d.ts.map +0 -1
- package/dist/components/Card/Card.types.d.ts +0 -16
- package/dist/components/Card/Card.types.d.ts.map +0 -1
- package/dist/components/Card/index.d.ts +0 -3
- package/dist/components/Card/index.d.ts.map +0 -1
- package/dist/components/Checkbox/Checkbox.d.ts +0 -13
- package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
- package/dist/components/Checkbox/Checkbox.types.d.ts +0 -21
- package/dist/components/Checkbox/Checkbox.types.d.ts.map +0 -1
- package/dist/components/Checkbox/index.d.ts +0 -3
- package/dist/components/Checkbox/index.d.ts.map +0 -1
- package/dist/components/Combobox/Combobox.d.ts +0 -24
- package/dist/components/Combobox/Combobox.d.ts.map +0 -1
- package/dist/components/Combobox/Combobox.types.d.ts +0 -43
- package/dist/components/Combobox/Combobox.types.d.ts.map +0 -1
- package/dist/components/Combobox/index.d.ts +0 -3
- package/dist/components/Combobox/index.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +0 -23
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/ConfirmDialog.types.d.ts +0 -24
- package/dist/components/ConfirmDialog/ConfirmDialog.types.d.ts.map +0 -1
- package/dist/components/ConfirmDialog/index.d.ts +0 -3
- package/dist/components/ConfirmDialog/index.d.ts.map +0 -1
- package/dist/components/DateInput/DateInput.d.ts +0 -14
- package/dist/components/DateInput/DateInput.d.ts.map +0 -1
- package/dist/components/DateInput/DateInput.types.d.ts +0 -39
- package/dist/components/DateInput/DateInput.types.d.ts.map +0 -1
- package/dist/components/DateInput/index.d.ts +0 -3
- package/dist/components/DateInput/index.d.ts.map +0 -1
- package/dist/components/Drawer/Drawer.d.ts +0 -27
- package/dist/components/Drawer/Drawer.d.ts.map +0 -1
- package/dist/components/Drawer/Drawer.types.d.ts +0 -25
- package/dist/components/Drawer/Drawer.types.d.ts.map +0 -1
- package/dist/components/Drawer/index.d.ts +0 -3
- package/dist/components/Drawer/index.d.ts.map +0 -1
- package/dist/components/EmptyState/EmptyState.d.ts +0 -34
- package/dist/components/EmptyState/EmptyState.d.ts.map +0 -1
- package/dist/components/EmptyState/EmptyState.types.d.ts +0 -19
- package/dist/components/EmptyState/EmptyState.types.d.ts.map +0 -1
- package/dist/components/EmptyState/index.d.ts +0 -3
- package/dist/components/EmptyState/index.d.ts.map +0 -1
- package/dist/components/Input/Input.d.ts +0 -13
- package/dist/components/Input/Input.d.ts.map +0 -1
- package/dist/components/Input/Input.types.d.ts +0 -20
- package/dist/components/Input/Input.types.d.ts.map +0 -1
- package/dist/components/Input/index.d.ts +0 -3
- package/dist/components/Input/index.d.ts.map +0 -1
- package/dist/components/Modal/Modal.d.ts +0 -28
- package/dist/components/Modal/Modal.d.ts.map +0 -1
- package/dist/components/Modal/Modal.types.d.ts +0 -29
- package/dist/components/Modal/Modal.types.d.ts.map +0 -1
- package/dist/components/Modal/index.d.ts +0 -3
- package/dist/components/Modal/index.d.ts.map +0 -1
- package/dist/components/MultiSelect/MultiSelect.d.ts +0 -26
- package/dist/components/MultiSelect/MultiSelect.d.ts.map +0 -1
- package/dist/components/MultiSelect/MultiSelect.types.d.ts +0 -51
- package/dist/components/MultiSelect/MultiSelect.types.d.ts.map +0 -1
- package/dist/components/MultiSelect/index.d.ts +0 -3
- package/dist/components/MultiSelect/index.d.ts.map +0 -1
- package/dist/components/OTPInput/OTPInput.d.ts +0 -22
- package/dist/components/OTPInput/OTPInput.d.ts.map +0 -1
- package/dist/components/OTPInput/OTPInput.types.d.ts +0 -19
- package/dist/components/OTPInput/OTPInput.types.d.ts.map +0 -1
- package/dist/components/OTPInput/index.d.ts +0 -3
- package/dist/components/OTPInput/index.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.d.ts +0 -35
- package/dist/components/Pagination/Pagination.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.types.d.ts +0 -31
- package/dist/components/Pagination/Pagination.types.d.ts.map +0 -1
- package/dist/components/Pagination/index.d.ts +0 -3
- package/dist/components/Pagination/index.d.ts.map +0 -1
- package/dist/components/PasswordInput/PasswordInput.d.ts +0 -12
- package/dist/components/PasswordInput/PasswordInput.d.ts.map +0 -1
- package/dist/components/PasswordInput/PasswordInput.types.d.ts +0 -16
- package/dist/components/PasswordInput/PasswordInput.types.d.ts.map +0 -1
- package/dist/components/PasswordInput/index.d.ts +0 -3
- package/dist/components/PasswordInput/index.d.ts.map +0 -1
- package/dist/components/PillSelector/PillSelector.d.ts +0 -16
- package/dist/components/PillSelector/PillSelector.d.ts.map +0 -1
- package/dist/components/PillSelector/PillSelector.types.d.ts.map +0 -1
- package/dist/components/PillSelector/index.d.ts +0 -3
- package/dist/components/PillSelector/index.d.ts.map +0 -1
- package/dist/components/Radio/Radio.d.ts +0 -12
- package/dist/components/Radio/Radio.d.ts.map +0 -1
- package/dist/components/Radio/Radio.types.d.ts +0 -49
- package/dist/components/Radio/Radio.types.d.ts.map +0 -1
- package/dist/components/Radio/RadioGroup.d.ts +0 -23
- package/dist/components/Radio/RadioGroup.d.ts.map +0 -1
- package/dist/components/Radio/index.d.ts +0 -4
- package/dist/components/Radio/index.d.ts.map +0 -1
- package/dist/components/Select/Select.d.ts +0 -22
- package/dist/components/Select/Select.d.ts.map +0 -1
- package/dist/components/Select/Select.types.d.ts +0 -42
- package/dist/components/Select/Select.types.d.ts.map +0 -1
- package/dist/components/Select/index.d.ts +0 -3
- package/dist/components/Select/index.d.ts.map +0 -1
- package/dist/components/Sidebar/Sidebar.d.ts +0 -36
- package/dist/components/Sidebar/Sidebar.d.ts.map +0 -1
- package/dist/components/Sidebar/Sidebar.types.d.ts +0 -200
- package/dist/components/Sidebar/Sidebar.types.d.ts.map +0 -1
- package/dist/components/Sidebar/SidebarDivider.d.ts +0 -12
- package/dist/components/Sidebar/SidebarDivider.d.ts.map +0 -1
- package/dist/components/Sidebar/SidebarGroup.d.ts +0 -26
- package/dist/components/Sidebar/SidebarGroup.d.ts.map +0 -1
- package/dist/components/Sidebar/SidebarItem.d.ts +0 -23
- package/dist/components/Sidebar/SidebarItem.d.ts.map +0 -1
- package/dist/components/Sidebar/index.d.ts +0 -9
- package/dist/components/Sidebar/index.d.ts.map +0 -1
- package/dist/components/Skeleton/Skeleton.d.ts +0 -22
- package/dist/components/Skeleton/Skeleton.d.ts.map +0 -1
- package/dist/components/Skeleton/Skeleton.types.d.ts +0 -19
- package/dist/components/Skeleton/Skeleton.types.d.ts.map +0 -1
- package/dist/components/Skeleton/index.d.ts +0 -3
- package/dist/components/Skeleton/index.d.ts.map +0 -1
- package/dist/components/Spinner/Spinner.d.ts +0 -13
- package/dist/components/Spinner/Spinner.d.ts.map +0 -1
- package/dist/components/Spinner/Spinner.types.d.ts +0 -14
- package/dist/components/Spinner/Spinner.types.d.ts.map +0 -1
- package/dist/components/Spinner/index.d.ts +0 -3
- package/dist/components/Spinner/index.d.ts.map +0 -1
- package/dist/components/Table/Table.d.ts +0 -44
- package/dist/components/Table/Table.d.ts.map +0 -1
- package/dist/components/Table/Table.types.d.ts +0 -33
- package/dist/components/Table/Table.types.d.ts.map +0 -1
- package/dist/components/Table/index.d.ts +0 -3
- package/dist/components/Table/index.d.ts.map +0 -1
- package/dist/components/Tabs/Tabs.d.ts +0 -43
- package/dist/components/Tabs/Tabs.d.ts.map +0 -1
- package/dist/components/Tabs/Tabs.types.d.ts +0 -42
- package/dist/components/Tabs/Tabs.types.d.ts.map +0 -1
- package/dist/components/Tabs/index.d.ts +0 -3
- package/dist/components/Tabs/index.d.ts.map +0 -1
- package/dist/components/Textarea/Textarea.d.ts +0 -13
- package/dist/components/Textarea/Textarea.d.ts.map +0 -1
- package/dist/components/Textarea/Textarea.types.d.ts +0 -22
- package/dist/components/Textarea/Textarea.types.d.ts.map +0 -1
- package/dist/components/Textarea/index.d.ts +0 -3
- package/dist/components/Textarea/index.d.ts.map +0 -1
- package/dist/components/Toggle/Toggle.d.ts +0 -20
- package/dist/components/Toggle/Toggle.d.ts.map +0 -1
- package/dist/components/Toggle/Toggle.types.d.ts +0 -22
- package/dist/components/Toggle/Toggle.types.d.ts.map +0 -1
- package/dist/components/Toggle/index.d.ts +0 -3
- package/dist/components/Toggle/index.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -32
- package/dist/components/index.d.ts.map +0 -1
- package/dist/style-D6av97Pw.cjs +0 -10406
- package/dist/style-D6av97Pw.cjs.map +0 -1
- package/dist/style-DyXPy-7b.js +0 -10392
- package/dist/style-DyXPy-7b.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSidebar-d1VZFhxd.cjs","sources":["../src/hooks/useDebounce.ts","../src/hooks/useTable.ts","../src/hooks/useSelection.ts","../src/hooks/useSidebar.ts"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\n\n/**\n * Debounces a value, returning the debounced value after the specified delay.\n *\n * @param value - The value to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns The debounced value\n *\n * @example\n * ```tsx\n * const [searchTerm, setSearchTerm] = useState('');\n * const debouncedSearch = useDebounce(searchTerm, 300);\n *\n * useEffect(() => {\n * // This will only run after the user stops typing for 300ms\n * fetchResults(debouncedSearch);\n * }, [debouncedSearch]);\n * ```\n */\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\n/**\n * Returns a debounced version of the provided callback function.\n *\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns A debounced version of the callback\n *\n * @example\n * ```tsx\n * const handleSearch = useDebouncedCallback((query: string) => {\n * fetchSearchResults(query);\n * }, 300);\n *\n * // In your component:\n * <input onChange={(e) => handleSearch(e.target.value)} />\n * ```\n */\nexport function useDebouncedCallback<T extends (...args: Parameters<T>) => ReturnType<T>>(\n callback: T,\n delay: number = 300\n): (...args: Parameters<T>) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref on each render to always use latest callback\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const debouncedCallback = useCallback(\n (...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n }, delay);\n },\n [delay]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return debouncedCallback;\n}\n\n/**\n * Returns a debounced callback with cancel functionality.\n *\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns An object with the debounced callback and cancel/flush methods\n *\n * @example\n * ```tsx\n * const { debouncedFn, cancel, flush } = useDebouncedCallbackWithControl(\n * (query: string) => fetchResults(query),\n * 300\n * );\n *\n * // Cancel pending execution\n * cancel();\n *\n * // Execute immediately\n * flush();\n * ```\n */\nexport function useDebouncedCallbackWithControl<T extends (...args: Parameters<T>) => ReturnType<T>>(\n callback: T,\n delay: number = 300\n): {\n debouncedFn: (...args: Parameters<T>) => void;\n cancel: () => void;\n flush: () => void;\n isPending: () => boolean;\n} {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n const argsRef = useRef<Parameters<T> | null>(null);\n\n // Update callback ref on each render\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const cancel = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n argsRef.current = null;\n }\n }, []);\n\n const flush = useCallback(() => {\n if (timeoutRef.current && argsRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n const args = argsRef.current;\n argsRef.current = null;\n callbackRef.current(...(args as Parameters<T>));\n }\n }, []);\n\n const isPending = useCallback(() => {\n return timeoutRef.current !== null;\n }, []);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n argsRef.current = args;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = null;\n argsRef.current = null;\n callbackRef.current(...args);\n }, delay);\n },\n [delay]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cancel();\n };\n }, [cancel]);\n\n return { debouncedFn, cancel, flush, isPending };\n}\n","import { useState, useMemo, useCallback } from 'react';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\nexport interface UseTableOptions<T> {\n /** The data array to manage */\n data: T[];\n\n /** Initial sort column */\n initialSortColumn?: string;\n\n /** Initial sort direction */\n initialSortDirection?: SortDirection;\n\n /** Initial page (1-based) */\n initialPage?: number;\n\n /** Initial page size */\n initialPageSize?: number;\n\n /** Enable server-side mode (disables client-side sorting/pagination) */\n serverSide?: boolean;\n\n /** Callback when sort changes (server-side mode) */\n onSort?: (column: string, direction: SortDirection) => void;\n\n /** Callback when page changes (server-side mode) */\n onPageChange?: (page: number) => void;\n\n /** Callback when page size changes (server-side mode) */\n onPageSizeChange?: (pageSize: number) => void;\n\n /** Custom sort function for client-side sorting */\n sortFn?: (data: T[], column: string, direction: SortDirection) => T[];\n\n /** Key extractor for getting sortable value from item */\n getValueByColumn?: (item: T, column: string) => unknown;\n\n /** Total items count (for server-side pagination) */\n totalItems?: number;\n}\n\nexport interface UseTableReturn<T> {\n /** Current page data (paginated if not server-side) */\n pageData: T[];\n\n /** All sorted data (before pagination) */\n sortedData: T[];\n\n /** Current sort column */\n sortColumn: string | null;\n\n /** Current sort direction */\n sortDirection: SortDirection;\n\n /** Handle sort - toggles direction if same column, resets to asc if different */\n handleSort: (column: string) => void;\n\n /** Set sort directly */\n setSort: (column: string | null, direction: SortDirection) => void;\n\n /** Current page (1-based) */\n currentPage: number;\n\n /** Current page size */\n pageSize: number;\n\n /** Total number of pages */\n totalPages: number;\n\n /** Total items count */\n totalItems: number;\n\n /** Go to specific page */\n goToPage: (page: number) => void;\n\n /** Go to next page */\n nextPage: () => void;\n\n /** Go to previous page */\n previousPage: () => void;\n\n /** Set page size */\n setPageSize: (size: number) => void;\n\n /** Reset to initial state */\n reset: () => void;\n\n /** Whether currently on first page */\n isFirstPage: boolean;\n\n /** Whether currently on last page */\n isLastPage: boolean;\n}\n\n/**\n * Hook for managing table state including sorting and pagination.\n * Supports both client-side and server-side modes.\n *\n * @example\n * ```tsx\n * // Client-side (default)\n * const { pageData, sortColumn, sortDirection, handleSort, currentPage, goToPage } = useTable({\n * data: users,\n * initialPageSize: 10,\n * });\n *\n * // Server-side\n * const { handleSort, goToPage } = useTable({\n * data: users,\n * serverSide: true,\n * totalItems: 1000,\n * onSort: (col, dir) => fetchUsers({ sort: col, order: dir }),\n * onPageChange: (page) => fetchUsers({ page }),\n * });\n * ```\n */\nexport function useTable<T>({\n data,\n initialSortColumn,\n initialSortDirection = 'asc',\n initialPage = 1,\n initialPageSize = 10,\n serverSide = false,\n onSort,\n onPageChange,\n onPageSizeChange,\n sortFn,\n getValueByColumn,\n totalItems: totalItemsProp,\n}: UseTableOptions<T>): UseTableReturn<T> {\n // Sort state\n const [sortState, setSortState] = useState<SortState>({\n column: initialSortColumn ?? null,\n direction: initialSortDirection,\n });\n\n // Pagination state\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [pageSize, setPageSizeState] = useState(initialPageSize);\n\n // Default value extractor\n const defaultGetValue = useCallback((item: T, column: string): unknown => {\n return (item as Record<string, unknown>)[column];\n }, []);\n\n const getValue = getValueByColumn ?? defaultGetValue;\n\n // Default sort function\n const defaultSortFn = useCallback(\n (items: T[], column: string, direction: SortDirection): T[] => {\n return [...items].sort((a, b) => {\n const aVal = getValue(a, column);\n const bVal = getValue(b, column);\n\n // Handle null/undefined\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return direction === 'asc' ? 1 : -1;\n if (bVal == null) return direction === 'asc' ? -1 : 1;\n\n // String comparison\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n const comparison = aVal.localeCompare(bVal);\n return direction === 'asc' ? comparison : -comparison;\n }\n\n // Number comparison\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return direction === 'asc' ? aVal - bVal : bVal - aVal;\n }\n\n // Date comparison\n if (aVal instanceof Date && bVal instanceof Date) {\n return direction === 'asc'\n ? aVal.getTime() - bVal.getTime()\n : bVal.getTime() - aVal.getTime();\n }\n\n // Boolean comparison\n if (typeof aVal === 'boolean' && typeof bVal === 'boolean') {\n const comparison = aVal === bVal ? 0 : aVal ? -1 : 1;\n return direction === 'asc' ? comparison : -comparison;\n }\n\n // Fallback to string comparison\n const aStr = String(aVal);\n const bStr = String(bVal);\n const comparison = aStr.localeCompare(bStr);\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n [getValue]\n );\n\n const sort = sortFn ?? defaultSortFn;\n\n // Sorted data (client-side only)\n const sortedData = useMemo(() => {\n if (serverSide || !sortState.column) {\n return data;\n }\n return sort(data, sortState.column, sortState.direction);\n }, [data, serverSide, sortState.column, sortState.direction, sort]);\n\n // Total items\n const totalItems = serverSide ? (totalItemsProp ?? data.length) : data.length;\n\n // Total pages\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Paginated data (client-side only)\n const pageData = useMemo(() => {\n if (serverSide) {\n return data;\n }\n const startIndex = (currentPage - 1) * pageSize;\n return sortedData.slice(startIndex, startIndex + pageSize);\n }, [serverSide, sortedData, currentPage, pageSize, data]);\n\n // Handle sort\n const handleSort = useCallback(\n (column: string) => {\n const newDirection: SortDirection =\n sortState.column === column && sortState.direction === 'asc' ? 'desc' : 'asc';\n\n setSortState({ column, direction: newDirection });\n\n if (serverSide && onSort) {\n onSort(column, newDirection);\n }\n\n // Reset to first page on sort change\n if (!serverSide) {\n setCurrentPage(1);\n }\n },\n [sortState.column, sortState.direction, serverSide, onSort]\n );\n\n // Set sort directly\n const setSort = useCallback(\n (column: string | null, direction: SortDirection) => {\n setSortState({ column, direction });\n if (serverSide && onSort && column) {\n onSort(column, direction);\n }\n },\n [serverSide, onSort]\n );\n\n // Go to specific page\n const goToPage = useCallback(\n (page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages));\n setCurrentPage(validPage);\n if (serverSide && onPageChange) {\n onPageChange(validPage);\n }\n },\n [totalPages, serverSide, onPageChange]\n );\n\n // Next page\n const nextPage = useCallback(() => {\n if (currentPage < totalPages) {\n goToPage(currentPage + 1);\n }\n }, [currentPage, totalPages, goToPage]);\n\n // Previous page\n const previousPage = useCallback(() => {\n if (currentPage > 1) {\n goToPage(currentPage - 1);\n }\n }, [currentPage, goToPage]);\n\n // Set page size\n const setPageSize = useCallback(\n (size: number) => {\n setPageSizeState(size);\n setCurrentPage(1); // Reset to first page\n if (serverSide && onPageSizeChange) {\n onPageSizeChange(size);\n }\n },\n [serverSide, onPageSizeChange]\n );\n\n // Reset to initial state\n const reset = useCallback(() => {\n setSortState({\n column: initialSortColumn ?? null,\n direction: initialSortDirection,\n });\n setCurrentPage(initialPage);\n setPageSizeState(initialPageSize);\n }, [initialSortColumn, initialSortDirection, initialPage, initialPageSize]);\n\n return {\n pageData,\n sortedData,\n sortColumn: sortState.column,\n sortDirection: sortState.direction,\n handleSort,\n setSort,\n currentPage,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n previousPage,\n setPageSize,\n reset,\n isFirstPage: currentPage === 1,\n isLastPage: currentPage >= totalPages,\n };\n}\n","import { useState, useMemo, useCallback } from 'react';\n\nexport interface UseSelectionOptions<T, K extends string | number = string> {\n /** Array of items to select from */\n items: T[];\n\n /** Function to get the unique identifier from an item */\n getItemId: (item: T) => K;\n\n /** Initial selected IDs */\n initialSelected?: K[];\n\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: K[]) => void;\n\n /** Optional filter for selectable items (e.g., exclude disabled items) */\n isSelectable?: (item: T) => boolean;\n}\n\nexport interface UseSelectionReturn<K extends string | number = string> {\n /** Currently selected IDs */\n selectedIds: K[];\n\n /** Set of selected IDs for O(1) lookup */\n selectedSet: Set<K>;\n\n /** Number of selected items */\n selectedCount: number;\n\n /** Whether all selectable items are selected */\n allSelected: boolean;\n\n /** Whether some (but not all) items are selected */\n someSelected: boolean;\n\n /** Whether no items are selected */\n noneSelected: boolean;\n\n /** Check if a specific item is selected */\n isSelected: (id: K) => boolean;\n\n /** Toggle selection for a single item */\n toggle: (id: K) => void;\n\n /** Select a single item */\n select: (id: K) => void;\n\n /** Deselect a single item */\n deselect: (id: K) => void;\n\n /** Select all selectable items */\n selectAll: () => void;\n\n /** Clear all selections */\n clearSelection: () => void;\n\n /** Toggle between select all and clear all */\n toggleAll: () => void;\n\n /** Select multiple items */\n selectMany: (ids: K[]) => void;\n\n /** Deselect multiple items */\n deselectMany: (ids: K[]) => void;\n\n /** Replace selection with new IDs */\n setSelection: (ids: K[]) => void;\n\n /** Get selected items from the original array */\n getSelectedItems: () => unknown[];\n}\n\n/**\n * Hook for managing batch selection in tables and lists.\n *\n * @example\n * ```tsx\n * const {\n * selectedIds,\n * allSelected,\n * someSelected,\n * isSelected,\n * toggle,\n * selectAll,\n * clearSelection,\n * toggleAll,\n * } = useSelection({\n * items: users,\n * getItemId: (user) => user.id,\n * isSelectable: (user) => !user.disabled,\n * });\n *\n * // In table header:\n * <Checkbox\n * checked={allSelected}\n * indeterminate={someSelected && !allSelected}\n * onChange={toggleAll}\n * />\n *\n * // In table row:\n * <Checkbox\n * checked={isSelected(user.id)}\n * onChange={() => toggle(user.id)}\n * />\n * ```\n */\nexport function useSelection<T, K extends string | number = string>({\n items,\n getItemId,\n initialSelected = [],\n onSelectionChange,\n isSelectable = () => true,\n}: UseSelectionOptions<T, K>): UseSelectionReturn<K> {\n const [selectedIds, setSelectedIds] = useState<K[]>(initialSelected);\n\n // Selected set for O(1) lookup\n const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n // Get selectable items\n const selectableItems = useMemo(\n () => items.filter(isSelectable),\n [items, isSelectable]\n );\n\n // Get selectable IDs\n const selectableIds = useMemo(\n () => selectableItems.map(getItemId),\n [selectableItems, getItemId]\n );\n\n // Computed states\n const selectedCount = selectedIds.length;\n const allSelected = selectableIds.length > 0 && selectableIds.every((id) => selectedSet.has(id));\n const someSelected = selectedIds.length > 0;\n const noneSelected = selectedIds.length === 0;\n\n // Update selection and call callback\n const updateSelection = useCallback(\n (newIds: K[]) => {\n setSelectedIds(newIds);\n onSelectionChange?.(newIds);\n },\n [onSelectionChange]\n );\n\n // Check if item is selected\n const isSelected = useCallback((id: K) => selectedSet.has(id), [selectedSet]);\n\n // Toggle single item\n const toggle = useCallback(\n (id: K) => {\n if (selectedSet.has(id)) {\n updateSelection(selectedIds.filter((selectedId) => selectedId !== id));\n } else {\n updateSelection([...selectedIds, id]);\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Select single item\n const select = useCallback(\n (id: K) => {\n if (!selectedSet.has(id)) {\n updateSelection([...selectedIds, id]);\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Deselect single item\n const deselect = useCallback(\n (id: K) => {\n if (selectedSet.has(id)) {\n updateSelection(selectedIds.filter((selectedId) => selectedId !== id));\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Select all selectable items\n const selectAll = useCallback(() => {\n const newSelectedSet = new Set(selectedIds);\n selectableIds.forEach((id) => newSelectedSet.add(id));\n updateSelection(Array.from(newSelectedSet));\n }, [selectedIds, selectableIds, updateSelection]);\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n updateSelection([]);\n }, [updateSelection]);\n\n // Toggle all\n const toggleAll = useCallback(() => {\n if (allSelected) {\n // Deselect all selectable items (keep non-selectable items selected if any)\n const selectableIdSet = new Set(selectableIds);\n updateSelection(selectedIds.filter((id) => !selectableIdSet.has(id)));\n } else {\n selectAll();\n }\n }, [allSelected, selectAll, selectedIds, selectableIds, updateSelection]);\n\n // Select multiple items\n const selectMany = useCallback(\n (ids: K[]) => {\n const newSelectedSet = new Set(selectedIds);\n ids.forEach((id) => newSelectedSet.add(id));\n updateSelection(Array.from(newSelectedSet));\n },\n [selectedIds, updateSelection]\n );\n\n // Deselect multiple items\n const deselectMany = useCallback(\n (ids: K[]) => {\n const idsToRemove = new Set(ids);\n updateSelection(selectedIds.filter((id) => !idsToRemove.has(id)));\n },\n [selectedIds, updateSelection]\n );\n\n // Replace selection\n const setSelection = useCallback(\n (ids: K[]) => {\n updateSelection(ids);\n },\n [updateSelection]\n );\n\n // Get selected items\n const getSelectedItems = useCallback(() => {\n return items.filter((item) => selectedSet.has(getItemId(item)));\n }, [items, selectedSet, getItemId]);\n\n return {\n selectedIds,\n selectedSet,\n selectedCount,\n allSelected,\n someSelected,\n noneSelected,\n isSelected,\n toggle,\n select,\n deselect,\n selectAll,\n clearSelection,\n toggleAll,\n selectMany,\n deselectMany,\n setSelection,\n getSelectedItems,\n };\n}\n","import { useState, useCallback, useEffect, useMemo } from 'react';\nimport type { UseSidebarOptions, UseSidebarReturn } from '../components/Sidebar/Sidebar.types';\n\n/**\n * Check if we're running in a browser environment\n */\nconst isBrowser = typeof window !== 'undefined';\n\n/**\n * Get initial collapsed state from localStorage\n */\nfunction getInitialCollapsed(storageKey: string, defaultValue: boolean): boolean {\n if (!isBrowser) return defaultValue;\n\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored !== null) {\n return JSON.parse(stored);\n }\n } catch {\n // Ignore localStorage errors\n }\n\n return defaultValue;\n}\n\n/**\n * useSidebar hook manages sidebar state including open/collapsed states,\n * localStorage persistence, and responsive behavior.\n *\n * @example\n * ```tsx\n * function Layout() {\n * const {\n * isOpen,\n * toggle,\n * close,\n * collapsed,\n * toggleCollapsed,\n * isMobile,\n * handleNavigate,\n * } = useSidebar({\n * storageKey: 'sidebar-collapsed',\n * autoCloseOnMobile: true,\n * });\n *\n * return (\n * <>\n * <button onClick={toggle}>Toggle Menu</button>\n * <Sidebar\n * isOpen={isOpen}\n * onClose={close}\n * collapsed={collapsed}\n * onCollapsedChange={setCollapsed}\n * onNavigate={handleNavigate}\n * // ...\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function useSidebar(options: UseSidebarOptions = {}): UseSidebarReturn {\n const {\n defaultOpen = false,\n defaultCollapsed = false,\n storageKey = 'teja-sidebar-collapsed',\n mobileBreakpoint = 1024,\n autoCloseOnMobile = true,\n } = options;\n\n // Open state (for mobile drawer)\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n // Collapsed state (for desktop)\n const [collapsed, setCollapsedState] = useState(() =>\n getInitialCollapsed(storageKey, defaultCollapsed)\n );\n\n // Mobile detection\n const [isMobile, setIsMobile] = useState(() => {\n if (!isBrowser) return false;\n return window.innerWidth < mobileBreakpoint;\n });\n\n // Persist collapsed state to localStorage\n useEffect(() => {\n if (!isBrowser) return;\n\n try {\n localStorage.setItem(storageKey, JSON.stringify(collapsed));\n } catch {\n // Ignore localStorage errors\n }\n }, [collapsed, storageKey]);\n\n // Listen for window resize to detect mobile/desktop\n useEffect(() => {\n if (!isBrowser) return;\n\n const handleResize = () => {\n const mobile = window.innerWidth < mobileBreakpoint;\n setIsMobile(mobile);\n\n // Close mobile sidebar when switching to desktop\n if (!mobile && isOpen) {\n setIsOpen(false);\n }\n };\n\n // Use matchMedia for better performance\n const mediaQuery = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setIsMobile(event.matches);\n if (!event.matches && isOpen) {\n setIsOpen(false);\n }\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Fallback for older browsers\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [mobileBreakpoint, isOpen]);\n\n // Actions\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsedState((prev) => !prev);\n }, []);\n\n const setCollapsed = useCallback((value: boolean) => {\n setCollapsedState(value);\n }, []);\n\n // Navigation handler that auto-closes on mobile\n const handleNavigate = useCallback(\n (_href: string) => {\n if (autoCloseOnMobile && isMobile) {\n setIsOpen(false);\n }\n },\n [autoCloseOnMobile, isMobile]\n );\n\n return useMemo(\n () => ({\n isOpen,\n toggle,\n open,\n close,\n collapsed,\n toggleCollapsed,\n setCollapsed,\n isMobile,\n handleNavigate,\n }),\n [\n isOpen,\n toggle,\n open,\n close,\n collapsed,\n toggleCollapsed,\n setCollapsed,\n isMobile,\n handleNavigate,\n ]\n );\n}\n"],"names":["useState","useEffect","useRef","useCallback","comparison","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSidebar-d1VZFhxd.cjs","sources":["../src/hooks/useDebounce.ts","../src/hooks/useTable.ts","../src/hooks/useSelection.ts","../src/hooks/useSidebar.ts"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\n\n/**\n * Debounces a value, returning the debounced value after the specified delay.\n *\n * @param value - The value to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns The debounced value\n *\n * @example\n * ```tsx\n * const [searchTerm, setSearchTerm] = useState('');\n * const debouncedSearch = useDebounce(searchTerm, 300);\n *\n * useEffect(() => {\n * // This will only run after the user stops typing for 300ms\n * fetchResults(debouncedSearch);\n * }, [debouncedSearch]);\n * ```\n */\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\n/**\n * Returns a debounced version of the provided callback function.\n *\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns A debounced version of the callback\n *\n * @example\n * ```tsx\n * const handleSearch = useDebouncedCallback((query: string) => {\n * fetchSearchResults(query);\n * }, 300);\n *\n * // In your component:\n * <input onChange={(e) => handleSearch(e.target.value)} />\n * ```\n */\nexport function useDebouncedCallback<T extends (...args: Parameters<T>) => ReturnType<T>>(\n callback: T,\n delay: number = 300\n): (...args: Parameters<T>) => void {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n\n // Update callback ref on each render to always use latest callback\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const debouncedCallback = useCallback(\n (...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n callbackRef.current(...args);\n }, delay);\n },\n [delay]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return debouncedCallback;\n}\n\n/**\n * Returns a debounced callback with cancel functionality.\n *\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (default: 300ms)\n * @returns An object with the debounced callback and cancel/flush methods\n *\n * @example\n * ```tsx\n * const { debouncedFn, cancel, flush } = useDebouncedCallbackWithControl(\n * (query: string) => fetchResults(query),\n * 300\n * );\n *\n * // Cancel pending execution\n * cancel();\n *\n * // Execute immediately\n * flush();\n * ```\n */\nexport function useDebouncedCallbackWithControl<T extends (...args: Parameters<T>) => ReturnType<T>>(\n callback: T,\n delay: number = 300\n): {\n debouncedFn: (...args: Parameters<T>) => void;\n cancel: () => void;\n flush: () => void;\n isPending: () => boolean;\n} {\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef(callback);\n const argsRef = useRef<Parameters<T> | null>(null);\n\n // Update callback ref on each render\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const cancel = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n argsRef.current = null;\n }\n }, []);\n\n const flush = useCallback(() => {\n if (timeoutRef.current && argsRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n const args = argsRef.current;\n argsRef.current = null;\n callbackRef.current(...(args as Parameters<T>));\n }\n }, []);\n\n const isPending = useCallback(() => {\n return timeoutRef.current !== null;\n }, []);\n\n const debouncedFn = useCallback(\n (...args: Parameters<T>) => {\n argsRef.current = args;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = null;\n argsRef.current = null;\n callbackRef.current(...args);\n }, delay);\n },\n [delay]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cancel();\n };\n }, [cancel]);\n\n return { debouncedFn, cancel, flush, isPending };\n}\n","import { useState, useMemo, useCallback } from 'react';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\nexport interface UseTableOptions<T> {\n /** The data array to manage */\n data: T[];\n\n /** Initial sort column */\n initialSortColumn?: string;\n\n /** Initial sort direction */\n initialSortDirection?: SortDirection;\n\n /** Initial page (1-based) */\n initialPage?: number;\n\n /** Initial page size */\n initialPageSize?: number;\n\n /** Enable server-side mode (disables client-side sorting/pagination) */\n serverSide?: boolean;\n\n /** Callback when sort changes (server-side mode) */\n onSort?: (column: string, direction: SortDirection) => void;\n\n /** Callback when page changes (server-side mode) */\n onPageChange?: (page: number) => void;\n\n /** Callback when page size changes (server-side mode) */\n onPageSizeChange?: (pageSize: number) => void;\n\n /** Custom sort function for client-side sorting */\n sortFn?: (data: T[], column: string, direction: SortDirection) => T[];\n\n /** Key extractor for getting sortable value from item */\n getValueByColumn?: (item: T, column: string) => unknown;\n\n /** Total items count (for server-side pagination) */\n totalItems?: number;\n}\n\nexport interface UseTableReturn<T> {\n /** Current page data (paginated if not server-side) */\n pageData: T[];\n\n /** All sorted data (before pagination) */\n sortedData: T[];\n\n /** Current sort column */\n sortColumn: string | null;\n\n /** Current sort direction */\n sortDirection: SortDirection;\n\n /** Handle sort - toggles direction if same column, resets to asc if different */\n handleSort: (column: string) => void;\n\n /** Set sort directly */\n setSort: (column: string | null, direction: SortDirection) => void;\n\n /** Current page (1-based) */\n currentPage: number;\n\n /** Current page size */\n pageSize: number;\n\n /** Total number of pages */\n totalPages: number;\n\n /** Total items count */\n totalItems: number;\n\n /** Go to specific page */\n goToPage: (page: number) => void;\n\n /** Go to next page */\n nextPage: () => void;\n\n /** Go to previous page */\n previousPage: () => void;\n\n /** Set page size */\n setPageSize: (size: number) => void;\n\n /** Reset to initial state */\n reset: () => void;\n\n /** Whether currently on first page */\n isFirstPage: boolean;\n\n /** Whether currently on last page */\n isLastPage: boolean;\n}\n\n/**\n * Hook for managing table state including sorting and pagination.\n * Supports both client-side and server-side modes.\n *\n * @example\n * ```tsx\n * // Client-side (default)\n * const { pageData, sortColumn, sortDirection, handleSort, currentPage, goToPage } = useTable({\n * data: users,\n * initialPageSize: 10,\n * });\n *\n * // Server-side\n * const { handleSort, goToPage } = useTable({\n * data: users,\n * serverSide: true,\n * totalItems: 1000,\n * onSort: (col, dir) => fetchUsers({ sort: col, order: dir }),\n * onPageChange: (page) => fetchUsers({ page }),\n * });\n * ```\n */\nexport function useTable<T>({\n data,\n initialSortColumn,\n initialSortDirection = 'asc',\n initialPage = 1,\n initialPageSize = 10,\n serverSide = false,\n onSort,\n onPageChange,\n onPageSizeChange,\n sortFn,\n getValueByColumn,\n totalItems: totalItemsProp,\n}: UseTableOptions<T>): UseTableReturn<T> {\n // Sort state\n const [sortState, setSortState] = useState<SortState>({\n column: initialSortColumn ?? null,\n direction: initialSortDirection,\n });\n\n // Pagination state\n const [currentPage, setCurrentPage] = useState(initialPage);\n const [pageSize, setPageSizeState] = useState(initialPageSize);\n\n // Default value extractor\n const defaultGetValue = useCallback((item: T, column: string): unknown => {\n return (item as Record<string, unknown>)[column];\n }, []);\n\n const getValue = getValueByColumn ?? defaultGetValue;\n\n // Default sort function\n const defaultSortFn = useCallback(\n (items: T[], column: string, direction: SortDirection): T[] => {\n return [...items].sort((a, b) => {\n const aVal = getValue(a, column);\n const bVal = getValue(b, column);\n\n // Handle null/undefined\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return direction === 'asc' ? 1 : -1;\n if (bVal == null) return direction === 'asc' ? -1 : 1;\n\n // String comparison\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n const comparison = aVal.localeCompare(bVal);\n return direction === 'asc' ? comparison : -comparison;\n }\n\n // Number comparison\n if (typeof aVal === 'number' && typeof bVal === 'number') {\n return direction === 'asc' ? aVal - bVal : bVal - aVal;\n }\n\n // Date comparison\n if (aVal instanceof Date && bVal instanceof Date) {\n return direction === 'asc'\n ? aVal.getTime() - bVal.getTime()\n : bVal.getTime() - aVal.getTime();\n }\n\n // Boolean comparison\n if (typeof aVal === 'boolean' && typeof bVal === 'boolean') {\n const comparison = aVal === bVal ? 0 : aVal ? -1 : 1;\n return direction === 'asc' ? comparison : -comparison;\n }\n\n // Fallback to string comparison\n const aStr = String(aVal);\n const bStr = String(bVal);\n const comparison = aStr.localeCompare(bStr);\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n [getValue]\n );\n\n const sort = sortFn ?? defaultSortFn;\n\n // Sorted data (client-side only)\n const sortedData = useMemo(() => {\n if (serverSide || !sortState.column) {\n return data;\n }\n return sort(data, sortState.column, sortState.direction);\n }, [data, serverSide, sortState.column, sortState.direction, sort]);\n\n // Total items\n const totalItems = serverSide ? (totalItemsProp ?? data.length) : data.length;\n\n // Total pages\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Paginated data (client-side only)\n const pageData = useMemo(() => {\n if (serverSide) {\n return data;\n }\n const startIndex = (currentPage - 1) * pageSize;\n return sortedData.slice(startIndex, startIndex + pageSize);\n }, [serverSide, sortedData, currentPage, pageSize, data]);\n\n // Handle sort\n const handleSort = useCallback(\n (column: string) => {\n const newDirection: SortDirection =\n sortState.column === column && sortState.direction === 'asc' ? 'desc' : 'asc';\n\n setSortState({ column, direction: newDirection });\n\n if (serverSide && onSort) {\n onSort(column, newDirection);\n }\n\n // Reset to first page on sort change\n if (!serverSide) {\n setCurrentPage(1);\n }\n },\n [sortState.column, sortState.direction, serverSide, onSort]\n );\n\n // Set sort directly\n const setSort = useCallback(\n (column: string | null, direction: SortDirection) => {\n setSortState({ column, direction });\n if (serverSide && onSort && column) {\n onSort(column, direction);\n }\n },\n [serverSide, onSort]\n );\n\n // Go to specific page\n const goToPage = useCallback(\n (page: number) => {\n const validPage = Math.max(1, Math.min(page, totalPages));\n setCurrentPage(validPage);\n if (serverSide && onPageChange) {\n onPageChange(validPage);\n }\n },\n [totalPages, serverSide, onPageChange]\n );\n\n // Next page\n const nextPage = useCallback(() => {\n if (currentPage < totalPages) {\n goToPage(currentPage + 1);\n }\n }, [currentPage, totalPages, goToPage]);\n\n // Previous page\n const previousPage = useCallback(() => {\n if (currentPage > 1) {\n goToPage(currentPage - 1);\n }\n }, [currentPage, goToPage]);\n\n // Set page size\n const setPageSize = useCallback(\n (size: number) => {\n setPageSizeState(size);\n setCurrentPage(1); // Reset to first page\n if (serverSide && onPageSizeChange) {\n onPageSizeChange(size);\n }\n },\n [serverSide, onPageSizeChange]\n );\n\n // Reset to initial state\n const reset = useCallback(() => {\n setSortState({\n column: initialSortColumn ?? null,\n direction: initialSortDirection,\n });\n setCurrentPage(initialPage);\n setPageSizeState(initialPageSize);\n }, [initialSortColumn, initialSortDirection, initialPage, initialPageSize]);\n\n return {\n pageData,\n sortedData,\n sortColumn: sortState.column,\n sortDirection: sortState.direction,\n handleSort,\n setSort,\n currentPage,\n pageSize,\n totalPages,\n totalItems,\n goToPage,\n nextPage,\n previousPage,\n setPageSize,\n reset,\n isFirstPage: currentPage === 1,\n isLastPage: currentPage >= totalPages,\n };\n}\n","import { useState, useMemo, useCallback } from 'react';\n\nexport interface UseSelectionOptions<T, K extends string | number = string> {\n /** Array of items to select from */\n items: T[];\n\n /** Function to get the unique identifier from an item */\n getItemId: (item: T) => K;\n\n /** Initial selected IDs */\n initialSelected?: K[];\n\n /** Callback when selection changes */\n onSelectionChange?: (selectedIds: K[]) => void;\n\n /** Optional filter for selectable items (e.g., exclude disabled items) */\n isSelectable?: (item: T) => boolean;\n}\n\nexport interface UseSelectionReturn<K extends string | number = string> {\n /** Currently selected IDs */\n selectedIds: K[];\n\n /** Set of selected IDs for O(1) lookup */\n selectedSet: Set<K>;\n\n /** Number of selected items */\n selectedCount: number;\n\n /** Whether all selectable items are selected */\n allSelected: boolean;\n\n /** Whether some (but not all) items are selected */\n someSelected: boolean;\n\n /** Whether no items are selected */\n noneSelected: boolean;\n\n /** Check if a specific item is selected */\n isSelected: (id: K) => boolean;\n\n /** Toggle selection for a single item */\n toggle: (id: K) => void;\n\n /** Select a single item */\n select: (id: K) => void;\n\n /** Deselect a single item */\n deselect: (id: K) => void;\n\n /** Select all selectable items */\n selectAll: () => void;\n\n /** Clear all selections */\n clearSelection: () => void;\n\n /** Toggle between select all and clear all */\n toggleAll: () => void;\n\n /** Select multiple items */\n selectMany: (ids: K[]) => void;\n\n /** Deselect multiple items */\n deselectMany: (ids: K[]) => void;\n\n /** Replace selection with new IDs */\n setSelection: (ids: K[]) => void;\n\n /** Get selected items from the original array */\n getSelectedItems: () => unknown[];\n}\n\n/**\n * Hook for managing batch selection in tables and lists.\n *\n * @example\n * ```tsx\n * const {\n * selectedIds,\n * allSelected,\n * someSelected,\n * isSelected,\n * toggle,\n * selectAll,\n * clearSelection,\n * toggleAll,\n * } = useSelection({\n * items: users,\n * getItemId: (user) => user.id,\n * isSelectable: (user) => !user.disabled,\n * });\n *\n * // In table header:\n * <Checkbox\n * checked={allSelected}\n * indeterminate={someSelected && !allSelected}\n * onChange={toggleAll}\n * />\n *\n * // In table row:\n * <Checkbox\n * checked={isSelected(user.id)}\n * onChange={() => toggle(user.id)}\n * />\n * ```\n */\nexport function useSelection<T, K extends string | number = string>({\n items,\n getItemId,\n initialSelected = [],\n onSelectionChange,\n isSelectable = () => true,\n}: UseSelectionOptions<T, K>): UseSelectionReturn<K> {\n const [selectedIds, setSelectedIds] = useState<K[]>(initialSelected);\n\n // Selected set for O(1) lookup\n const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);\n\n // Get selectable items\n const selectableItems = useMemo(\n () => items.filter(isSelectable),\n [items, isSelectable]\n );\n\n // Get selectable IDs\n const selectableIds = useMemo(\n () => selectableItems.map(getItemId),\n [selectableItems, getItemId]\n );\n\n // Computed states\n const selectedCount = selectedIds.length;\n const allSelected = selectableIds.length > 0 && selectableIds.every((id) => selectedSet.has(id));\n const someSelected = selectedIds.length > 0;\n const noneSelected = selectedIds.length === 0;\n\n // Update selection and call callback\n const updateSelection = useCallback(\n (newIds: K[]) => {\n setSelectedIds(newIds);\n onSelectionChange?.(newIds);\n },\n [onSelectionChange]\n );\n\n // Check if item is selected\n const isSelected = useCallback((id: K) => selectedSet.has(id), [selectedSet]);\n\n // Toggle single item\n const toggle = useCallback(\n (id: K) => {\n if (selectedSet.has(id)) {\n updateSelection(selectedIds.filter((selectedId) => selectedId !== id));\n } else {\n updateSelection([...selectedIds, id]);\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Select single item\n const select = useCallback(\n (id: K) => {\n if (!selectedSet.has(id)) {\n updateSelection([...selectedIds, id]);\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Deselect single item\n const deselect = useCallback(\n (id: K) => {\n if (selectedSet.has(id)) {\n updateSelection(selectedIds.filter((selectedId) => selectedId !== id));\n }\n },\n [selectedIds, selectedSet, updateSelection]\n );\n\n // Select all selectable items\n const selectAll = useCallback(() => {\n const newSelectedSet = new Set(selectedIds);\n selectableIds.forEach((id) => newSelectedSet.add(id));\n updateSelection(Array.from(newSelectedSet));\n }, [selectedIds, selectableIds, updateSelection]);\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n updateSelection([]);\n }, [updateSelection]);\n\n // Toggle all\n const toggleAll = useCallback(() => {\n if (allSelected) {\n // Deselect all selectable items (keep non-selectable items selected if any)\n const selectableIdSet = new Set(selectableIds);\n updateSelection(selectedIds.filter((id) => !selectableIdSet.has(id)));\n } else {\n selectAll();\n }\n }, [allSelected, selectAll, selectedIds, selectableIds, updateSelection]);\n\n // Select multiple items\n const selectMany = useCallback(\n (ids: K[]) => {\n const newSelectedSet = new Set(selectedIds);\n ids.forEach((id) => newSelectedSet.add(id));\n updateSelection(Array.from(newSelectedSet));\n },\n [selectedIds, updateSelection]\n );\n\n // Deselect multiple items\n const deselectMany = useCallback(\n (ids: K[]) => {\n const idsToRemove = new Set(ids);\n updateSelection(selectedIds.filter((id) => !idsToRemove.has(id)));\n },\n [selectedIds, updateSelection]\n );\n\n // Replace selection\n const setSelection = useCallback(\n (ids: K[]) => {\n updateSelection(ids);\n },\n [updateSelection]\n );\n\n // Get selected items\n const getSelectedItems = useCallback(() => {\n return items.filter((item) => selectedSet.has(getItemId(item)));\n }, [items, selectedSet, getItemId]);\n\n return {\n selectedIds,\n selectedSet,\n selectedCount,\n allSelected,\n someSelected,\n noneSelected,\n isSelected,\n toggle,\n select,\n deselect,\n selectAll,\n clearSelection,\n toggleAll,\n selectMany,\n deselectMany,\n setSelection,\n getSelectedItems,\n };\n}\n","import { useState, useCallback, useEffect, useMemo } from 'react';\n\nexport interface UseSidebarOptions {\n /** Initial open state (mobile) */\n defaultOpen?: boolean;\n /** Initial collapsed state (desktop) */\n defaultCollapsed?: boolean;\n /** localStorage key for persisting collapsed state */\n storageKey?: string;\n /** Breakpoint for mobile/desktop switch in pixels (default: 1024) */\n mobileBreakpoint?: number;\n /** Auto-close on mobile navigation */\n autoCloseOnMobile?: boolean;\n}\n\nexport interface UseSidebarReturn {\n /** Whether sidebar is open (mobile) */\n isOpen: boolean;\n /** Toggle open state */\n toggle: () => void;\n /** Open sidebar */\n open: () => void;\n /** Close sidebar */\n close: () => void;\n /** Whether sidebar is collapsed (desktop) */\n collapsed: boolean;\n /** Toggle collapsed state */\n toggleCollapsed: () => void;\n /** Set collapsed state */\n setCollapsed: (collapsed: boolean) => void;\n /** Whether currently in mobile view */\n isMobile: boolean;\n /** Handler for navigation (auto-closes on mobile) */\n handleNavigate: (href: string) => void;\n}\n\n/**\n * Check if we're running in a browser environment\n */\nconst isBrowser = typeof window !== 'undefined';\n\n/**\n * Get initial collapsed state from localStorage\n */\nfunction getInitialCollapsed(storageKey: string, defaultValue: boolean): boolean {\n if (!isBrowser) return defaultValue;\n\n try {\n const stored = localStorage.getItem(storageKey);\n if (stored !== null) {\n return JSON.parse(stored);\n }\n } catch {\n // Ignore localStorage errors\n }\n\n return defaultValue;\n}\n\n/**\n * useSidebar hook manages sidebar state including open/collapsed states,\n * localStorage persistence, and responsive behavior.\n *\n * @example\n * ```tsx\n * function Layout() {\n * const {\n * isOpen,\n * toggle,\n * close,\n * collapsed,\n * toggleCollapsed,\n * isMobile,\n * handleNavigate,\n * } = useSidebar({\n * storageKey: 'sidebar-collapsed',\n * autoCloseOnMobile: true,\n * });\n *\n * return (\n * <>\n * <button onClick={toggle}>Toggle Menu</button>\n * <Sidebar\n * isOpen={isOpen}\n * onClose={close}\n * collapsed={collapsed}\n * onCollapsedChange={setCollapsed}\n * onNavigate={handleNavigate}\n * // ...\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function useSidebar(options: UseSidebarOptions = {}): UseSidebarReturn {\n const {\n defaultOpen = false,\n defaultCollapsed = false,\n storageKey = 'teja-sidebar-collapsed',\n mobileBreakpoint = 1024,\n autoCloseOnMobile = true,\n } = options;\n\n // Open state (for mobile drawer)\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n // Collapsed state (for desktop)\n const [collapsed, setCollapsedState] = useState(() =>\n getInitialCollapsed(storageKey, defaultCollapsed)\n );\n\n // Mobile detection\n const [isMobile, setIsMobile] = useState(() => {\n if (!isBrowser) return false;\n return window.innerWidth < mobileBreakpoint;\n });\n\n // Persist collapsed state to localStorage\n useEffect(() => {\n if (!isBrowser) return;\n\n try {\n localStorage.setItem(storageKey, JSON.stringify(collapsed));\n } catch {\n // Ignore localStorage errors\n }\n }, [collapsed, storageKey]);\n\n // Listen for window resize to detect mobile/desktop\n useEffect(() => {\n if (!isBrowser) return;\n\n const handleResize = () => {\n const mobile = window.innerWidth < mobileBreakpoint;\n setIsMobile(mobile);\n\n // Close mobile sidebar when switching to desktop\n if (!mobile && isOpen) {\n setIsOpen(false);\n }\n };\n\n // Use matchMedia for better performance\n const mediaQuery = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setIsMobile(event.matches);\n if (!event.matches && isOpen) {\n setIsOpen(false);\n }\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Fallback for older browsers\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [mobileBreakpoint, isOpen]);\n\n // Actions\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsedState((prev) => !prev);\n }, []);\n\n const setCollapsed = useCallback((value: boolean) => {\n setCollapsedState(value);\n }, []);\n\n // Navigation handler that auto-closes on mobile\n const handleNavigate = useCallback(\n (_href: string) => {\n if (autoCloseOnMobile && isMobile) {\n setIsOpen(false);\n }\n },\n [autoCloseOnMobile, isMobile]\n );\n\n return useMemo(\n () => ({\n isOpen,\n toggle,\n open,\n close,\n collapsed,\n toggleCollapsed,\n setCollapsed,\n isMobile,\n handleNavigate,\n }),\n [\n isOpen,\n toggle,\n open,\n close,\n collapsed,\n toggleCollapsed,\n setCollapsed,\n isMobile,\n handleNavigate,\n ]\n );\n}\n"],"names":["useState","useEffect","useRef","useCallback","comparison","useMemo"],"mappings":";;AAoBO,SAAS,YAAe,OAAU,QAAgB,KAAQ;AAC/D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAY,KAAK;AAE7DC,QAAAA,UAAU,MAAM;AACd,UAAM,QAAQ,WAAW,MAAM;AAC7B,wBAAkB,KAAK;AAAA,IACzB,GAAG,KAAK;AAER,WAAO,MAAM;AACX,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,OAAO,KAAK,CAAC;AAEjB,SAAO;AACT;AAmBO,SAAS,qBACd,UACA,QAAgB,KACkB;AAClC,QAAM,aAAaC,MAAAA,OAA6C,IAAI;AACpE,QAAM,cAAcA,MAAAA,OAAO,QAAQ;AAGnCD,QAAAA,UAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,oBAAoBE,MAAAA;AAAAA,IACxB,IAAI,SAAwB;AAC1B,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAEA,iBAAW,UAAU,WAAW,MAAM;AACpC,oBAAY,QAAQ,GAAG,IAAI;AAAA,MAC7B,GAAG,KAAK;AAAA,IACV;AAAA,IACA,CAAC,KAAK;AAAA,EAAA;AAIRF,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,SAAO;AACT;AAuBO,SAAS,gCACd,UACA,QAAgB,KAMhB;AACA,QAAM,aAAaC,MAAAA,OAA6C,IAAI;AACpE,QAAM,cAAcA,MAAAA,OAAO,QAAQ;AACnC,QAAM,UAAUA,MAAAA,OAA6B,IAAI;AAGjDD,QAAAA,UAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,SAASE,MAAAA,YAAY,MAAM;AAC/B,QAAI,WAAW,SAAS;AACtB,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AACrB,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,QAAI,WAAW,WAAW,QAAQ,SAAS;AACzC,mBAAa,WAAW,OAAO;AAC/B,iBAAW,UAAU;AACrB,YAAM,OAAO,QAAQ;AACrB,cAAQ,UAAU;AAClB,kBAAY,QAAQ,GAAI,IAAsB;AAAA,IAChD;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,YAAYA,MAAAA,YAAY,MAAM;AAClC,WAAO,WAAW,YAAY;AAAA,EAChC,GAAG,CAAA,CAAE;AAEL,QAAM,cAAcA,MAAAA;AAAAA,IAClB,IAAI,SAAwB;AAC1B,cAAQ,UAAU;AAElB,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAEA,iBAAW,UAAU,WAAW,MAAM;AACpC,mBAAW,UAAU;AACrB,gBAAQ,UAAU;AAClB,oBAAY,QAAQ,GAAG,IAAI;AAAA,MAC7B,GAAG,KAAK;AAAA,IACV;AAAA,IACA,CAAC,KAAK;AAAA,EAAA;AAIRF,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;AACX,aAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO,EAAE,aAAa,QAAQ,OAAO,UAAA;AACvC;ACtDO,SAAS,SAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,uBAAuB;AAAA,EACvB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAA0C;AAExC,QAAM,CAAC,WAAW,YAAY,IAAID,eAAoB;AAAA,IACpD,QAAQ,qBAAqB;AAAA,IAC7B,WAAW;AAAA,EAAA,CACZ;AAGD,QAAM,CAAC,aAAa,cAAc,IAAIA,MAAAA,SAAS,WAAW;AAC1D,QAAM,CAAC,UAAU,gBAAgB,IAAIA,MAAAA,SAAS,eAAe;AAG7D,QAAM,kBAAkBG,MAAAA,YAAY,CAAC,MAAS,WAA4B;AACxE,WAAQ,KAAiC,MAAM;AAAA,EACjD,GAAG,CAAA,CAAE;AAEL,QAAM,WAAW,oBAAoB;AAGrC,QAAM,gBAAgBA,MAAAA;AAAAA,IACpB,CAAC,OAAY,QAAgB,cAAkC;AAC7D,aAAO,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,cAAM,OAAO,SAAS,GAAG,MAAM;AAC/B,cAAM,OAAO,SAAS,GAAG,MAAM;AAG/B,YAAI,QAAQ,QAAQ,QAAQ,KAAM,QAAO;AACzC,YAAI,QAAQ,KAAM,QAAO,cAAc,QAAQ,IAAI;AACnD,YAAI,QAAQ,KAAM,QAAO,cAAc,QAAQ,KAAK;AAGpD,YAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AACxD,gBAAMC,cAAa,KAAK,cAAc,IAAI;AAC1C,iBAAO,cAAc,QAAQA,cAAa,CAACA;AAAAA,QAC7C;AAGA,YAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AACxD,iBAAO,cAAc,QAAQ,OAAO,OAAO,OAAO;AAAA,QACpD;AAGA,YAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,iBAAO,cAAc,QACjB,KAAK,QAAA,IAAY,KAAK,QAAA,IACtB,KAAK,YAAY,KAAK,QAAA;AAAA,QAC5B;AAGA,YAAI,OAAO,SAAS,aAAa,OAAO,SAAS,WAAW;AAC1D,gBAAMA,cAAa,SAAS,OAAO,IAAI,OAAO,KAAK;AACnD,iBAAO,cAAc,QAAQA,cAAa,CAACA;AAAAA,QAC7C;AAGA,cAAM,OAAO,OAAO,IAAI;AACxB,cAAM,OAAO,OAAO,IAAI;AACxB,cAAM,aAAa,KAAK,cAAc,IAAI;AAC1C,eAAO,cAAc,QAAQ,aAAa,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,IACA,CAAC,QAAQ;AAAA,EAAA;AAGX,QAAM,OAAO,UAAU;AAGvB,QAAM,aAAaC,MAAAA,QAAQ,MAAM;AAC/B,QAAI,cAAc,CAAC,UAAU,QAAQ;AACnC,aAAO;AAAA,IACT;AACA,WAAO,KAAK,MAAM,UAAU,QAAQ,UAAU,SAAS;AAAA,EACzD,GAAG,CAAC,MAAM,YAAY,UAAU,QAAQ,UAAU,WAAW,IAAI,CAAC;AAGlE,QAAM,aAAa,aAAc,kBAAkB,KAAK,SAAU,KAAK;AAGvE,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,aAAa,QAAQ,CAAC;AAG/D,QAAM,WAAWA,MAAAA,QAAQ,MAAM;AAC7B,QAAI,YAAY;AACd,aAAO;AAAA,IACT;AACA,UAAM,cAAc,cAAc,KAAK;AACvC,WAAO,WAAW,MAAM,YAAY,aAAa,QAAQ;AAAA,EAC3D,GAAG,CAAC,YAAY,YAAY,aAAa,UAAU,IAAI,CAAC;AAGxD,QAAM,aAAaF,MAAAA;AAAAA,IACjB,CAAC,WAAmB;AAClB,YAAM,eACJ,UAAU,WAAW,UAAU,UAAU,cAAc,QAAQ,SAAS;AAE1E,mBAAa,EAAE,QAAQ,WAAW,aAAA,CAAc;AAEhD,UAAI,cAAc,QAAQ;AACxB,eAAO,QAAQ,YAAY;AAAA,MAC7B;AAGA,UAAI,CAAC,YAAY;AACf,uBAAe,CAAC;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,QAAQ,UAAU,WAAW,YAAY,MAAM;AAAA,EAAA;AAI5D,QAAM,UAAUA,MAAAA;AAAAA,IACd,CAAC,QAAuB,cAA6B;AACnD,mBAAa,EAAE,QAAQ,WAAW;AAClC,UAAI,cAAc,UAAU,QAAQ;AAClC,eAAO,QAAQ,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,IACA,CAAC,YAAY,MAAM;AAAA,EAAA;AAIrB,QAAM,WAAWA,MAAAA;AAAAA,IACf,CAAC,SAAiB;AAChB,YAAM,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,UAAU,CAAC;AACxD,qBAAe,SAAS;AACxB,UAAI,cAAc,cAAc;AAC9B,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,YAAY,YAAY,YAAY;AAAA,EAAA;AAIvC,QAAM,WAAWA,MAAAA,YAAY,MAAM;AACjC,QAAI,cAAc,YAAY;AAC5B,eAAS,cAAc,CAAC;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,aAAa,YAAY,QAAQ,CAAC;AAGtC,QAAM,eAAeA,MAAAA,YAAY,MAAM;AACrC,QAAI,cAAc,GAAG;AACnB,eAAS,cAAc,CAAC;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,aAAa,QAAQ,CAAC;AAG1B,QAAM,cAAcA,MAAAA;AAAAA,IAClB,CAAC,SAAiB;AAChB,uBAAiB,IAAI;AACrB,qBAAe,CAAC;AAChB,UAAI,cAAc,kBAAkB;AAClC,yBAAiB,IAAI;AAAA,MACvB;AAAA,IACF;AAAA,IACA,CAAC,YAAY,gBAAgB;AAAA,EAAA;AAI/B,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,iBAAa;AAAA,MACX,QAAQ,qBAAqB;AAAA,MAC7B,WAAW;AAAA,IAAA,CACZ;AACD,mBAAe,WAAW;AAC1B,qBAAiB,eAAe;AAAA,EAClC,GAAG,CAAC,mBAAmB,sBAAsB,aAAa,eAAe,CAAC;AAE1E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,UAAU;AAAA,IACtB,eAAe,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,gBAAgB;AAAA,IAC7B,YAAY,eAAe;AAAA,EAAA;AAE/B;ACxNO,SAAS,aAAoD;AAAA,EAClE;AAAA,EACA;AAAA,EACA,kBAAkB,CAAA;AAAA,EAClB;AAAA,EACA,eAAe,MAAM;AACvB,GAAqD;AACnD,QAAM,CAAC,aAAa,cAAc,IAAIH,MAAAA,SAAc,eAAe;AAGnE,QAAM,cAAcK,MAAAA,QAAQ,MAAM,IAAI,IAAI,WAAW,GAAG,CAAC,WAAW,CAAC;AAGrE,QAAM,kBAAkBA,MAAAA;AAAAA,IACtB,MAAM,MAAM,OAAO,YAAY;AAAA,IAC/B,CAAC,OAAO,YAAY;AAAA,EAAA;AAItB,QAAM,gBAAgBA,MAAAA;AAAAA,IACpB,MAAM,gBAAgB,IAAI,SAAS;AAAA,IACnC,CAAC,iBAAiB,SAAS;AAAA,EAAA;AAI7B,QAAM,gBAAgB,YAAY;AAClC,QAAM,cAAc,cAAc,SAAS,KAAK,cAAc,MAAM,CAAC,OAAO,YAAY,IAAI,EAAE,CAAC;AAC/F,QAAM,eAAe,YAAY,SAAS;AAC1C,QAAM,eAAe,YAAY,WAAW;AAG5C,QAAM,kBAAkBF,MAAAA;AAAAA,IACtB,CAAC,WAAgB;AACf,qBAAe,MAAM;AACrB,0BAAoB,MAAM;AAAA,IAC5B;AAAA,IACA,CAAC,iBAAiB;AAAA,EAAA;AAIpB,QAAM,aAAaA,kBAAY,CAAC,OAAU,YAAY,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC;AAG5E,QAAM,SAASA,MAAAA;AAAAA,IACb,CAAC,OAAU;AACT,UAAI,YAAY,IAAI,EAAE,GAAG;AACvB,wBAAgB,YAAY,OAAO,CAAC,eAAe,eAAe,EAAE,CAAC;AAAA,MACvE,OAAO;AACL,wBAAgB,CAAC,GAAG,aAAa,EAAE,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,eAAe;AAAA,EAAA;AAI5C,QAAM,SAASA,MAAAA;AAAAA,IACb,CAAC,OAAU;AACT,UAAI,CAAC,YAAY,IAAI,EAAE,GAAG;AACxB,wBAAgB,CAAC,GAAG,aAAa,EAAE,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,eAAe;AAAA,EAAA;AAI5C,QAAM,WAAWA,MAAAA;AAAAA,IACf,CAAC,OAAU;AACT,UAAI,YAAY,IAAI,EAAE,GAAG;AACvB,wBAAgB,YAAY,OAAO,CAAC,eAAe,eAAe,EAAE,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,eAAe;AAAA,EAAA;AAI5C,QAAM,YAAYA,MAAAA,YAAY,MAAM;AAClC,UAAM,iBAAiB,IAAI,IAAI,WAAW;AAC1C,kBAAc,QAAQ,CAAC,OAAO,eAAe,IAAI,EAAE,CAAC;AACpD,oBAAgB,MAAM,KAAK,cAAc,CAAC;AAAA,EAC5C,GAAG,CAAC,aAAa,eAAe,eAAe,CAAC;AAGhD,QAAM,iBAAiBA,MAAAA,YAAY,MAAM;AACvC,oBAAgB,CAAA,CAAE;AAAA,EACpB,GAAG,CAAC,eAAe,CAAC;AAGpB,QAAM,YAAYA,MAAAA,YAAY,MAAM;AAClC,QAAI,aAAa;AAEf,YAAM,kBAAkB,IAAI,IAAI,aAAa;AAC7C,sBAAgB,YAAY,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;AAAA,IACtE,OAAO;AACL,gBAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAa,WAAW,aAAa,eAAe,eAAe,CAAC;AAGxE,QAAM,aAAaA,MAAAA;AAAAA,IACjB,CAAC,QAAa;AACZ,YAAM,iBAAiB,IAAI,IAAI,WAAW;AAC1C,UAAI,QAAQ,CAAC,OAAO,eAAe,IAAI,EAAE,CAAC;AAC1C,sBAAgB,MAAM,KAAK,cAAc,CAAC;AAAA,IAC5C;AAAA,IACA,CAAC,aAAa,eAAe;AAAA,EAAA;AAI/B,QAAM,eAAeA,MAAAA;AAAAA,IACnB,CAAC,QAAa;AACZ,YAAM,cAAc,IAAI,IAAI,GAAG;AAC/B,sBAAgB,YAAY,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AAAA,IAClE;AAAA,IACA,CAAC,aAAa,eAAe;AAAA,EAAA;AAI/B,QAAM,eAAeA,MAAAA;AAAAA,IACnB,CAAC,QAAa;AACZ,sBAAgB,GAAG;AAAA,IACrB;AAAA,IACA,CAAC,eAAe;AAAA,EAAA;AAIlB,QAAM,mBAAmBA,MAAAA,YAAY,MAAM;AACzC,WAAO,MAAM,OAAO,CAAC,SAAS,YAAY,IAAI,UAAU,IAAI,CAAC,CAAC;AAAA,EAChE,GAAG,CAAC,OAAO,aAAa,SAAS,CAAC;AAElC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;ACvNA,MAAM,YAAY,OAAO,WAAW;AAKpC,SAAS,oBAAoB,YAAoB,cAAgC;AAC/E,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI;AACF,UAAM,SAAS,aAAa,QAAQ,UAAU;AAC9C,QAAI,WAAW,MAAM;AACnB,aAAO,KAAK,MAAM,MAAM;AAAA,IAC1B;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAsCO,SAAS,WAAW,UAA6B,IAAsB;AAC5E,QAAM;AAAA,IACJ,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EAAA,IAClB;AAGJ,QAAM,CAAC,QAAQ,SAAS,IAAIH,MAAAA,SAAS,WAAW;AAGhD,QAAM,CAAC,WAAW,iBAAiB,IAAIA,MAAAA;AAAAA,IAAS,MAC9C,oBAAoB,YAAY,gBAAgB;AAAA,EAAA;AAIlD,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAS,MAAM;AAC7C,QAAI,CAAC,UAAW,QAAO;AACvB,WAAO,OAAO,aAAa;AAAA,EAC7B,CAAC;AAGDC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAEhB,QAAI;AACF,mBAAa,QAAQ,YAAY,KAAK,UAAU,SAAS,CAAC;AAAA,IAC5D,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,CAAC,WAAW,UAAU,CAAC;AAG1BA,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAEhB,UAAM,eAAe,MAAM;AACzB,YAAM,SAAS,OAAO,aAAa;AACnC,kBAAY,MAAM;AAGlB,UAAI,CAAC,UAAU,QAAQ;AACrB,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAGA,UAAM,aAAa,OAAO,WAAW,eAAe,mBAAmB,CAAC,KAAK;AAE7E,UAAM,eAAe,CAAC,UAA+B;AACnD,kBAAY,MAAM,OAAO;AACzB,UAAI,CAAC,MAAM,WAAW,QAAQ;AAC5B,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAGA,QAAI,WAAW,kBAAkB;AAC/B,iBAAW,iBAAiB,UAAU,YAAY;AAClD,aAAO,MAAM,WAAW,oBAAoB,UAAU,YAAY;AAAA,IACpE;AAGA,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,MAAM,OAAO,oBAAoB,UAAU,YAAY;AAAA,EAChE,GAAG,CAAC,kBAAkB,MAAM,CAAC;AAG7B,QAAM,SAASE,MAAAA,YAAY,MAAM;AAC/B,cAAU,CAAC,SAAS,CAAC,IAAI;AAAA,EAC3B,GAAG,CAAA,CAAE;AAEL,QAAM,OAAOA,MAAAA,YAAY,MAAM;AAC7B,cAAU,IAAI;AAAA,EAChB,GAAG,CAAA,CAAE;AAEL,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,cAAU,KAAK;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,QAAM,kBAAkBA,MAAAA,YAAY,MAAM;AACxC,sBAAkB,CAAC,SAAS,CAAC,IAAI;AAAA,EACnC,GAAG,CAAA,CAAE;AAEL,QAAM,eAAeA,kBAAY,CAAC,UAAmB;AACnD,sBAAkB,KAAK;AAAA,EACzB,GAAG,CAAA,CAAE;AAGL,QAAM,iBAAiBA,MAAAA;AAAAA,IACrB,CAAC,UAAkB;AACjB,UAAI,qBAAqB,UAAU;AACjC,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAAA,IACA,CAAC,mBAAmB,QAAQ;AAAA,EAAA;AAG9B,SAAOE,MAAAA;AAAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { AlertProps } from './Alert.types';
|
|
2
|
-
/**
|
|
3
|
-
* Alert component for displaying status messages.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Alert variant="success" message="Changes saved successfully!" />
|
|
8
|
-
* <Alert variant="error" title="Error" message="Failed to save changes." onClose={() => {}} />
|
|
9
|
-
* <Alert variant="warning" message="Please review before continuing." />
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const Alert: import("react").ForwardRefExoticComponent<AlertProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
-
//# sourceMappingURL=Alert.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,eAAe,CAAC;AA2E9D;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,uGA2DjB,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export type AlertVariant = 'success' | 'error' | 'warning' | 'info';
|
|
3
|
-
export interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
4
|
-
/** The visual style variant */
|
|
5
|
-
variant?: AlertVariant;
|
|
6
|
-
/** Optional title for the alert */
|
|
7
|
-
title?: string;
|
|
8
|
-
/** The message content to display */
|
|
9
|
-
message: ReactNode;
|
|
10
|
-
/** Custom icon to override the default (pass null to hide icon) */
|
|
11
|
-
icon?: ReactNode | null;
|
|
12
|
-
/** Callback when the close button is clicked */
|
|
13
|
-
onClose?: () => void;
|
|
14
|
-
/** Optional test ID for e2e testing. Applied to root element with child elements suffixed. */
|
|
15
|
-
testId?: string;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=Alert.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.types.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/Alert.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC/E,+BAA+B;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,OAAO,EAAE,SAAS,CAAC;IACnB,mEAAmE;IACnE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { AvatarProps } from './Avatar.types';
|
|
2
|
-
/**
|
|
3
|
-
* Avatar component for displaying user profile images or initials.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Avatar name="John Doe" />
|
|
8
|
-
* <Avatar name="Jane Smith" src="/avatars/jane.jpg" size="lg" />
|
|
9
|
-
* <Avatar name="Alex" status="online" />
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const Avatar: import("react").ForwardRefExoticComponent<AvatarProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
-
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,gBAAgB,CAAC;AAiB5E;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,wGA4DlB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes } from 'react';
|
|
2
|
-
export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3
|
-
export type AvatarStatus = 'online' | 'offline' | 'away' | 'busy';
|
|
4
|
-
export interface AvatarProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
/** The name to generate initials from */
|
|
6
|
-
name: string;
|
|
7
|
-
/** Image URL for the avatar */
|
|
8
|
-
src?: string;
|
|
9
|
-
/** Size of the avatar */
|
|
10
|
-
size?: AvatarSize;
|
|
11
|
-
/** Alt text for the image */
|
|
12
|
-
alt?: string;
|
|
13
|
-
/** Status indicator */
|
|
14
|
-
status?: AvatarStatus;
|
|
15
|
-
/** Optional test ID for e2e testing. Applied to root element with child elements suffixed. */
|
|
16
|
-
testId?: string;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=Avatar.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.types.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { BadgeProps } from './Badge.types';
|
|
2
|
-
/**
|
|
3
|
-
* Badge component for status indicators, labels, and tags.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Badge variant="success">Active</Badge>
|
|
8
|
-
* <Badge variant="error" size="sm">Overdue</Badge>
|
|
9
|
-
* <Badge variant="gold">Premium</Badge>
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const Badge: import("react").ForwardRefExoticComponent<BadgeProps & import("react").RefAttributes<HTMLSpanElement>>;
|
|
13
|
-
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,eAAe,CAAC;AAmCzE;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,wGAkBjB,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info' | 'gold';
|
|
3
|
-
export type BadgeSize = 'sm' | 'md' | 'lg';
|
|
4
|
-
export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
5
|
-
/** Badge variant/color scheme */
|
|
6
|
-
variant?: BadgeVariant;
|
|
7
|
-
/** Badge size */
|
|
8
|
-
size?: BadgeSize;
|
|
9
|
-
/** Badge content */
|
|
10
|
-
children: ReactNode;
|
|
11
|
-
/** Optional test ID for e2e testing. Applied to root element. */
|
|
12
|
-
testId?: string;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=Badge.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.types.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/Badge.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,iCAAiC;IACjC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,iBAAiB;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,oBAAoB;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { BreadcrumbsProps } from './Breadcrumbs.types';
|
|
2
|
-
/**
|
|
3
|
-
* Breadcrumbs component for navigation hierarchy.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Breadcrumbs
|
|
8
|
-
* items={[
|
|
9
|
-
* { label: 'Home', href: '/' },
|
|
10
|
-
* { label: 'Clients', href: '/clients' },
|
|
11
|
-
* { label: 'John Smith', href: '/clients/123' },
|
|
12
|
-
* { label: 'Notes' },
|
|
13
|
-
* ]}
|
|
14
|
-
* />
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare const Breadcrumbs: import("react").ForwardRefExoticComponent<BreadcrumbsProps & import("react").RefAttributes<HTMLElement>>;
|
|
18
|
-
//# sourceMappingURL=Breadcrumbs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumbs/Breadcrumbs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AAkD5E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,0GAiHvB,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export interface BreadcrumbItem {
|
|
3
|
-
/** Display label */
|
|
4
|
-
label: string;
|
|
5
|
-
/** URL/path for navigation (omit for current page) */
|
|
6
|
-
href?: string;
|
|
7
|
-
/** Optional icon before label */
|
|
8
|
-
icon?: ReactNode;
|
|
9
|
-
}
|
|
10
|
-
export interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {
|
|
11
|
-
/** Breadcrumb items */
|
|
12
|
-
items: BreadcrumbItem[];
|
|
13
|
-
/** Separator between items (default: /) */
|
|
14
|
-
separator?: ReactNode;
|
|
15
|
-
/** Maximum items to show before collapsing (0 = no collapse) */
|
|
16
|
-
maxItems?: number;
|
|
17
|
-
/** Render function for links (for custom routing) */
|
|
18
|
-
renderLink?: (item: BreadcrumbItem, children: ReactNode) => ReactNode;
|
|
19
|
-
/** Optional test ID for e2e testing. Applied to root element with child elements suffixed. */
|
|
20
|
-
testId?: string;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=Breadcrumbs.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.types.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumbs/Breadcrumbs.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACnE,uBAAuB;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC;IACtE,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Breadcrumbs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { ButtonProps } from './Button.types';
|
|
2
|
-
/**
|
|
3
|
-
* Button component with multiple variants, sizes, and loading state.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Button variant="primary" size="md">Click me</Button>
|
|
8
|
-
* <Button variant="danger" loading>Deleting...</Button>
|
|
9
|
-
* <Button icon={<SaveIcon />} iconPosition="left">Save</Button>
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
13
|
-
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,gBAAgB,CAAC;AAiD7E;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,2GAyElB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { ButtonHTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
3
|
-
export type ButtonSize = 'sm' | 'md' | 'lg';
|
|
4
|
-
export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
|
-
/** The visual style variant */
|
|
6
|
-
variant?: ButtonVariant;
|
|
7
|
-
/** The size of the button */
|
|
8
|
-
size?: ButtonSize;
|
|
9
|
-
/** Shows a loading spinner when true */
|
|
10
|
-
loading?: boolean;
|
|
11
|
-
/** Icon element to display */
|
|
12
|
-
icon?: ReactNode;
|
|
13
|
-
/** Position of the icon */
|
|
14
|
-
iconPosition?: 'left' | 'right';
|
|
15
|
-
/** Makes the button full width */
|
|
16
|
-
fullWidth?: boolean;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=Button.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.types.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { CardProps } from './Card.types';
|
|
2
|
-
/**
|
|
3
|
-
* Card component for containing related content.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Card>
|
|
8
|
-
* <h3>Card Title</h3>
|
|
9
|
-
* <p>Card content goes here.</p>
|
|
10
|
-
* </Card>
|
|
11
|
-
*
|
|
12
|
-
* <Card variant="gold-accent" hoverable>
|
|
13
|
-
* <p>Clickable card with gold accent</p>
|
|
14
|
-
* </Card>
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare const Card: import("react").ForwardRefExoticComponent<CardProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
18
|
-
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/components/Card/Card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAA4B,MAAM,cAAc,CAAC;AA8BxE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,sGA0ChB,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
-
export type CardPadding = 'none' | 'sm' | 'md' | 'lg';
|
|
3
|
-
export type CardVariant = 'default' | 'bordered' | 'elevated' | 'gold-accent';
|
|
4
|
-
export interface CardProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
/** Card padding: none, sm (16px), md (24px), lg (32px) */
|
|
6
|
-
padding?: CardPadding;
|
|
7
|
-
/** Card styling variant */
|
|
8
|
-
variant?: CardVariant;
|
|
9
|
-
/** Enable hover effect with shadow and gold border */
|
|
10
|
-
hoverable?: boolean;
|
|
11
|
-
/** Card content */
|
|
12
|
-
children: ReactNode;
|
|
13
|
-
/** Optional test ID for e2e testing. Applied to root element. */
|
|
14
|
-
testId?: string;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=Card.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Card.types.d.ts","sourceRoot":"","sources":["../../../src/components/Card/Card.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AAE9E,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D,0DAA0D;IAC1D,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Card/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { CheckboxProps } from './Checkbox.types';
|
|
2
|
-
/**
|
|
3
|
-
* Checkbox component with label, error states, and indeterminate support.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```tsx
|
|
7
|
-
* <Checkbox label="Accept terms" checked={accepted} onChange={setAccepted} />
|
|
8
|
-
* <Checkbox label="Select all" indeterminate={someSelected} />
|
|
9
|
-
* <Checkbox label="Option" size="sm" />
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const Checkbox: import("react").ForwardRefExoticComponent<CheckboxProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
13
|
-
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AAepE;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,4GAyHpB,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { InputHTMLAttributes } from 'react';
|
|
2
|
-
export type CheckboxSize = 'sm' | 'md' | 'lg';
|
|
3
|
-
export interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'size'> {
|
|
4
|
-
/** Checkbox label */
|
|
5
|
-
label?: string;
|
|
6
|
-
/** Controlled checked state */
|
|
7
|
-
checked?: boolean;
|
|
8
|
-
/** Callback when checked state changes */
|
|
9
|
-
onChange?: (checked: boolean) => void;
|
|
10
|
-
/** Checkbox size */
|
|
11
|
-
size?: CheckboxSize;
|
|
12
|
-
/** Error message to display */
|
|
13
|
-
error?: string;
|
|
14
|
-
/** Helper text to display */
|
|
15
|
-
helperText?: string;
|
|
16
|
-
/** Indeterminate state (partial selection) */
|
|
17
|
-
indeterminate?: boolean;
|
|
18
|
-
/** Optional test ID for e2e testing. Applied to root element with child elements suffixed. */
|
|
19
|
-
testId?: string;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=Checkbox.types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.types.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACjF,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,oBAAoB;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ComboboxProps } from './Combobox.types';
|
|
2
|
-
/**
|
|
3
|
-
* Combobox component for searchable selection.
|
|
4
|
-
* Built on Headless UI Combobox for accessibility.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```tsx
|
|
8
|
-
* <Combobox
|
|
9
|
-
* label="Select Client"
|
|
10
|
-
* options={[
|
|
11
|
-
* { value: '1', label: 'John Doe' },
|
|
12
|
-
* { value: '2', label: 'Jane Smith' },
|
|
13
|
-
* ]}
|
|
14
|
-
* value={selectedClient}
|
|
15
|
-
* onChange={setSelectedClient}
|
|
16
|
-
* placeholder="Search clients..."
|
|
17
|
-
* />
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export declare function Combobox({ options, value, onChange, placeholder, label, error, helperText, disabled, required, fullWidth, className, isLoading, loadingText, emptyText, onSearch, testId, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
export declare namespace Combobox {
|
|
22
|
-
var displayName: string;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=Combobox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Combobox.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/Combobox.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkCtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAyB,EACzB,KAAK,EACL,KAAK,EACL,UAAU,EACV,QAAgB,EAChB,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,SAAiB,EACjB,WAA0B,EAC1B,SAA8B,EAC9B,QAAQ,EACR,MAAM,GACP,EAAE,aAAa,2CA8Jf;yBA/Ke,QAAQ"}
|