{"version":3,"sources":["../src/components/ui/accordion.tsx","../src/lib/utils.ts","../src/components/ui/alert.tsx","../src/components/ui/aspect-ratio.tsx","../src/components/ui/avatar.tsx","../src/components/ui/badge.tsx","../src/components/ui/breadcrumb.tsx","../src/components/ui/button.tsx","../src/components/ui/card.tsx","../src/lib/micro-interactions.ts","../src/components/ui/calendar.tsx","../src/components/ui/card-input.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/collapsible.tsx","../node_modules/@radix-ui/react-collapsible/src/collapsible.tsx","../node_modules/@radix-ui/primitive/src/primitive.tsx","../node_modules/@radix-ui/react-context/src/create-context.tsx","../node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state-reducer.tsx","../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../node_modules/@radix-ui/react-primitive/src/primitive.tsx","../node_modules/@radix-ui/react-presence/src/presence.tsx","../node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../node_modules/@radix-ui/react-id/src/id.tsx","../src/components/ui/color-picker.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/popover.tsx","../src/components/ui/tabs.tsx","../src/components/ui/slider.tsx","../src/components/ui/command.tsx","../../../node_modules/cmdk/dist/chunk-NZJY6EH4.mjs","../../../node_modules/cmdk/dist/index.mjs","../../../node_modules/@radix-ui/react-primitive/src/primitive.tsx","../../../node_modules/@radix-ui/react-id/src/id.tsx","../../../node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../../../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../src/components/ui/dialog.tsx","../src/components/ui/data-table-basic.tsx","../../../node_modules/@tanstack/table-core/src/utils.ts","../../../node_modules/@tanstack/table-core/src/core/cell.ts","../../../node_modules/@tanstack/table-core/src/core/column.ts","../../../node_modules/@tanstack/table-core/src/core/headers.ts","../../../node_modules/@tanstack/table-core/src/core/row.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnFaceting.ts","../../../node_modules/@tanstack/table-core/src/filterFns.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnFiltering.ts","../../../node_modules/@tanstack/table-core/src/aggregationFns.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnGrouping.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnOrdering.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnPinning.ts","../../../node_modules/@tanstack/table-core/src/utils/document.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnSizing.ts","../../../node_modules/@tanstack/table-core/src/features/ColumnVisibility.ts","../../../node_modules/@tanstack/table-core/src/features/GlobalFaceting.ts","../../../node_modules/@tanstack/table-core/src/features/GlobalFiltering.ts","../../../node_modules/@tanstack/table-core/src/features/RowExpanding.ts","../../../node_modules/@tanstack/table-core/src/features/RowPagination.ts","../../../node_modules/@tanstack/table-core/src/features/RowPinning.ts","../../../node_modules/@tanstack/table-core/src/features/RowSelection.ts","../../../node_modules/@tanstack/table-core/src/sortingFns.ts","../../../node_modules/@tanstack/table-core/src/features/RowSorting.ts","../../../node_modules/@tanstack/table-core/src/core/table.ts","../../../node_modules/@tanstack/table-core/src/utils/getCoreRowModel.ts","../../../node_modules/@tanstack/table-core/src/utils/getExpandedRowModel.ts","../../../node_modules/@tanstack/table-core/src/utils/filterRowsUtils.ts","../../../node_modules/@tanstack/table-core/src/utils/getFilteredRowModel.ts","../../../node_modules/@tanstack/table-core/src/utils/getPaginationRowModel.ts","../../../node_modules/@tanstack/table-core/src/utils/getSortedRowModel.ts","../../../node_modules/@tanstack/react-table/src/index.tsx","../src/components/ui/table.tsx","../src/components/ui/date-picker.tsx","../src/components/ui/draggable-list.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/file-upload.tsx","../src/components/ui/progress.tsx","../src/components/ui/gesture-drawer.tsx","../src/components/ui/github-stars.tsx","../src/components/ui/locked-component.tsx","../src/components/ui/moon-logo.tsx","../src/components/ui/pagination.tsx","../src/components/ui/phone-input.tsx","../src/components/ui/select.tsx","../src/components/ui/radio-group.tsx","../src/components/ui/rich-text-editor/index.tsx","../src/components/ui/scroll-area.tsx","../../../node_modules/@radix-ui/react-scroll-area/src/scroll-area.tsx","../../../node_modules/@radix-ui/react-presence/src/presence.tsx","../../../node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../../../node_modules/@radix-ui/react-context/src/create-context.tsx","../../../node_modules/@radix-ui/react-use-callback-ref/src/use-callback-ref.tsx","../../../node_modules/@radix-ui/react-direction/src/direction.tsx","../../../node_modules/@radix-ui/number/src/number.ts","../../../node_modules/@radix-ui/primitive/src/primitive.tsx","../../../node_modules/@radix-ui/react-scroll-area/src/use-state-machine.ts","../src/components/ui/scroll-reveal.tsx","../src/components/ui/separator.tsx","../src/components/ui/simple-editor.tsx","../src/components/ui/toggle.tsx","../../../node_modules/@radix-ui/react-toggle/src/toggle.tsx","../../../node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state.tsx","../../../node_modules/@radix-ui/react-use-controllable-state/src/use-controllable-state-reducer.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/swipeable-card.tsx","../src/components/ui/switch.tsx","../src/components/ui/tags-input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/toast.tsx"],"names":["React","jsx","jsxs","Icon","cva","ChevronRight","days","format","Check","createContext","Provider","useContext","createScope","nextScopes","useLayoutEffect","value","node","useId","Root","Trigger","Content","ChevronDown","Collapsible","CollapsibleTrigger","CollapsibleContent","Loader2","Fragment","min","max","motion","Palette","Pipette","p","q","t","X","P","T","L","N","ReactDOM","createSlot","NODES","Primitive","useReactId","count","useLayoutEffect2","setRef","composeRefs","useComposedRefs","Y","K","u","m","$","k","J","W","U","B","functionalUpdate","updater","input","makeStateUpdater","key","instance","setState","old","isFunction","d","Function","isNumberArray","Array","isArray","every","val","flattenBy","arr","getChildren","flat","recurse","subArr","forEach","item","push","children","length","memo","getDeps","fn","opts","deps","result","depArgs","depTime","debug","Date","now","newDeps","depsChanged","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","getMemoOptions","tableOptions","debugLevel","_tableOptions$debugAl","debugAll","process","env","NODE_ENV","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","getValue","options","renderFallbackValue","id","renderValue","getContext","_features","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","defaultColumn","_getDefaultColumnDef","resolvedColumnDef","accessorKey","prototype","replaceAll","replace","undefined","header","accessorFn","includes","originalRow","split","_result","warn","Error","columns","getFlatColumns","_column$columns","flatMap","getLeafColumns","_getOrderColumnsFn","orderColumns","_column$columns2","leafColumns","createHeader","_options$id","isPlaceholder","placeholderId","subHeaders","colSpan","rowSpan","headerGroup","getLeafHeaders","leafHeaders","recurseHeader","h","map","Headers","createTable","getHeaderGroups","getAllColumns","getVisibleLeafColumns","getState","columnPinning","left","right","allColumns","_left$map$filter","_right$map$filter","leftColumns","find","filter","Boolean","rightColumns","centerColumns","headerGroups","buildHeaderGroups","getCenterHeaderGroups","getLeftHeaderGroups","_left$map$filter2","orderedLeafColumns","getRightHeaderGroups","_right$map$filter2","getFooterGroups","reverse","getLeftFooterGroups","getCenterFooterGroups","getRightFooterGroups","getFlatHeaders","headers","getLeftFlatHeaders","getCenterFlatHeaders","getRightFlatHeaders","getCenterLeafHeaders","flatHeaders","_header$subHeaders","getLeftLeafHeaders","_header$subHeaders2","getRightLeafHeaders","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","getIsVisible","createHeaderGroup","headersToGroup","join","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","bottomHeaders","recurseHeadersForSpans","filteredHeaders","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_valuesCache","_uniqueValuesCache","hasOwnProperty","getColumn","getUniqueValues","_row$getValue","getLeafRows","getParentRow","getRow","getParentRows","parentRows","currentRow","parentRow","getAllCells","getAllLeafColumns","_getAllCellsByColumnId","allCells","reduce","acc","i","ColumnFaceting","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","Map","_getFacetedMinMaxValues","getFacetedMinMaxValues","includesString","filterValue","_filterValue$toString","search","toString","toLowerCase","autoRemove","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","Number","isNaN","Infinity","temp","filterFns","ColumnFiltering","getDefaultColumnDef","filterFn","getInitialState","state","columnFilters","getDefaultOptions","onColumnFiltersChange","filterFromLeafRows","maxLeafRowFilterDepth","getAutoFilterFn","firstRow","getCoreRowModel","flatRows","getFilterFn","_table$options$filter","_table$options$filter2","getCanFilter","_column$columnDef$ena","_table$options$enable","_table$options$enable2","enableColumnFilter","enableColumnFilters","enableFilters","getIsFiltered","getFilterIndex","getFilterValue","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","findIndex","setFilterValue","setColumnFilters","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","columnFiltersMeta","updateFn","_functionalUpdate","resetColumnFilters","defaultState","_table$initialState$c","_table$initialState","initialState","getFilteredRowModel","_getFilteredRowModel","manualFiltering","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","median","values","mid","floor","nums","sort","a","b","unique","from","Set","uniqueCount","size","_columnId","aggregationFns","ColumnGrouping","aggregatedCell","props","_toString","_props$getValue","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","enableGrouping","getGroupingValue","getIsGrouped","_table$getState$group","getGroupedIndex","_table$getState$group2","indexOf","getToggleGroupingHandler","canGroup","getAutoAggregationFn","Object","call","getAggregationFn","_table$options$aggreg","_table$options$aggreg2","resetGrouping","_table$initialState$g","getPreGroupedRowModel","getGroupedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","_groupingValuesCache","getIsPlaceholder","getIsAggregated","_row$subRows","nonGroupingColumns","col","groupingColumns","g","ColumnOrdering","columnOrder","onColumnOrderChange","getIndex","position","_getVisibleLeafColumns","getIsFirstColumn","_columns$","getIsLastColumn","_columns","setColumnOrder","resetColumnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","splice","getDefaultColumnPinningState","ColumnPinning","onColumnPinningChange","pin","columnIds","setColumnPinning","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","getCanPin","_d$columnDef$enablePi","enablePinning","enableColumnPinning","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","leftAndRight","getLeftVisibleCells","cells","getRightVisibleCells","resetColumnPinning","getIsSomeColumnsPinned","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","getLeftLeafColumns","getRightLeafColumns","getCenterLeafColumns","safelyAccessDocument","_document","document","defaultColumnSizing","minSize","maxSize","MAX_SAFE_INTEGER","getDefaultColumnSizingInfoState","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","ColumnSizing","columnSizing","columnSizingInfo","columnResizeMode","columnResizeDirection","onColumnSizingChange","onColumnSizingInfoChange","getSize","_column$columnDef$min","_column$columnDef$max","columnSize","getStart","slice","getAfter","resetSize","setColumnSizing","_ref2","_","rest","getCanResize","enableResizing","enableColumnResizing","getIsResizing","_header$column$getSiz","prevSiblingHeader","getResizeHandler","_contextDocument","canResize","e","persist","isTouchStartEvent","touches","clientX","newColumnSizing","updateOffset","eventType","clientXPos","setColumnSizingInfo","_old$startOffset","_old$startSize","deltaDirection","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","moveHandler","upHandler","removeEventListener","touchEvents","cancelable","preventDefault","stopPropagation","_e$touches$","passiveIfSupported","passiveEventSupported","passive","addEventListener","resetColumnSizing","resetHeaderSizeInfo","_table$initialState$c2","getTotalSize","_table$getHeaderGroup","_table$getHeaderGroup2","getLeftTotalSize","_table$getLeftHeaderG","_table$getLeftHeaderG2","getCenterTotalSize","_table$getCenterHeade","_table$getCenterHeade2","getRightTotalSize","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","window","err","type","ColumnVisibility","columnVisibility","onColumnVisibilityChange","toggleVisibility","getCanHide","setColumnVisibility","childColumns","c","enableHiding","getToggleVisibilityHandler","target","checked","getVisibleCells","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getAllFlatColumns","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","_value","getIsAllColumnsVisible","obj","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","_target","GlobalFaceting","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","GlobalFiltering","globalFilter","onGlobalFilterChange","globalFilterFn","getColumnCanGlobalFilter","_table$getCoreRowMode","getCanGlobalFilter","_table$options$getCol","enableGlobalFilter","getGlobalAutoFilterFn","getGlobalFilterFn","setGlobalFilter","resetGlobalFilter","RowExpanding","expanded","onExpandedChange","paginateExpandedRows","registered","queued","_autoResetExpanded","_table$options$autoRe","_queue","autoResetAll","autoResetExpanded","manualExpanding","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","_table$initialState$e","getCanSomeRowsExpand","getPrePaginationRowModel","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","keys","getRowModel","getIsExpanded","getExpandedDepth","rowIds","rowsById","splitId","getPreExpandedRowModel","getSortedRowModel","getExpandedRowModel","_getExpandedRowModel","toggleExpanded","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","getIsRowExpanded","_table$options$getRow","getRowCanExpand","enableExpanding","getIsAllParentsExpanded","isFullyExpanded","getToggleExpandedHandler","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","pageIndex","pageSize","RowPagination","pagination","onPaginationChange","_autoResetPageIndex","autoResetPageIndex","manualPagination","resetPageIndex","setPagination","safeUpdater","newState","resetPagination","_table$initialState$p","setPageIndex","maxPageIndex","pageCount","_table$initialState$p2","resetPageSize","_table$initialState$p3","_table$initialState2","setPageSize","topRowIndex","setPageCount","_table$options$pageCo","newPageCount","getPageOptions","getPageCount","pageOptions","fill","getCanPreviousPage","getCanNextPage","previousPage","nextPage","firstPage","lastPage","getPaginationRowModel","_getPaginationRowModel","_table$options$pageCo2","ceil","getRowCount","_table$options$rowCou","rowCount","rows","getDefaultRowPinningState","top","bottom","RowPinning","rowPinning","onRowPinningChange","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","setRowPinning","_old$top3","_old$bottom3","_old$top","_old$bottom","has","_old$top2","_old$bottom2","enableRowPinning","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","getTopRows","getBottomRows","_ref5","resetRowPinning","_table$initialState$r","getIsSomeRowsPinned","_pinningState$top","_pinningState$bottom","_getPinnedRows","visibleRows","pinnedRowIds","_table$options$keepPi","keepPinnedRows","allRows","topPinnedRowIds","bottomPinnedRowIds","getCenterRows","topAndBottom","RowSelection","rowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","getCanSelect","toggleAllPageRowsSelected","resolvedValue","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","_table$getState$rowSe","totalSelected","getIsSomePageRowsSelected","getIsSelected","getIsSomeSelected","getToggleAllRowsSelectedHandler","getToggleAllPageRowsSelectedHandler","toggleSelected","isSelected","_opts$selectChildren","selectedRowIds","selectChildren","isRowSelected","isSubRowSelected","getIsAllSubRowsSelected","getCanSelectSubRows","getCanMultiSelect","_table$options$enable3","getToggleSelectedHandler","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","parseInt","bn","combo","sortingFns","RowSorting","sorting","sortingFn","sortUndefined","onSortingChange","isMultiSortEvent","shiftKey","getAutoSortingFn","firstRows","isString","getAutoSortDir","getSortingFn","_table$options$sortin","_table$options$sortin2","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","existingSorting","existingIndex","newSorting","sortAction","nextDesc","getCanMultiSort","_table$options$maxMul","maxMultiSortColCount","getFirstSortDir","_column$columnDef$sor","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","_column$columnDef$ena2","enableMultiSort","_table$getState$sorti","columnSort","getSortIndex","_table$getState$sorti2","_table$getState$sorti3","clearSorting","getToggleSortingHandler","canSort","resetSorting","_table$initialState$s","getPreSortedRowModel","_getSortedRowModel","manualSorting","builtInFeatures","_options$_features","_options$initialState","debugTable","defaultOptions","assign","mergeOptions","coreInitialState","_feature$getInitialSt","queuedTimeout","coreInstance","cb","Promise","resolve","then","catch","error","setTimeout","reset","setOptions","newOptions","onStateChange","_getRowId","getRowId","_getCoreRowModel","searchAll","_defaultColumn","_props$renderValue$to","_props$renderValue","_getColumnDefs","columnDefs","recurseColumns","groupingColumnDef","_getAllFlatColumnsById","flatColumns","data","accessRows","originalRows","getSubRows","_row$originalSubRows","originalSubRows","expandRows","expandedRows","handleRow","filterRows","filterRowImpl","filterRowModelFromLeafs","filterRowModelFromRoot","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","_table$options$maxLea2","pass","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","filterableIds","globallyFilterableColumns","_globalFilterFn$resol","currentColumnFilter","currentGlobalFilter","j","filterMeta","__global__","filterRowsImpl","pageStart","pageEnd","paginatedRowModel","sortingState","sortedFlatRows","availableSorting","_table$getColumn","columnInfoById","sortEntry","invertSorting","sortData","sortedData","_sortEntry$desc","columnInfo","isDesc","sortInt","aValue","bValue","aUndefined","bUndefined","flexRender","Comp","isReactComponent","createElement","component","isClassComponent","isExoticComponent","proto","getPrototypeOf","$$typeof","description","useReactTable","resolvedOptions","tableRef","useState","current","prev","ChevronLeft","Search","AnimatePresence","pageTransitions","useCallback","AlertCircle","useEffect","isDevelopment","MoreHorizontal","Circle","RadioGroup","useStateMachine","Presence","usePresence","getElementRef","getAnimationName","createContextScope","composeContextScopes","canUseDOM","composeEventHandlers","height","width","Viewport","ScrollArea","animate","Separator","useInsertionEffect","useControllableState","useUncontrolledState","SYNC_STATE","Toggle","List","ImageIcon","Eye","ColorPicker","toast"],"mappings":"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","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={cn(\"moonui-theme\", \"border-b border-gray-200 dark:border-gray-800\", className)}\n    {...props}\n  />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"flex\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex flex-1 items-center justify-between py-4 font-medium transition-all dark:text-gray-100\",\n        \"hover:underline hover:text-primary dark:hover:text-primary-400\",\n        \"[&[data-state=open]>svg]:rotate-180\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200 opacity-70 group-hover:opacity-100\" />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className={cn(\n      \"overflow-hidden text-sm text-gray-700 dark:text-gray-300 transition-all\", \n      \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\",\n      className\n    )}\n    {...props}\n  >\n    <div className=\"pb-4 pt-0\">{children}</div>\n  </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { AlertCircle, AlertTriangle, Info, Check, X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Alert Component\n *\n * Yüksek kaliteli, özelleştirilebilir ve erişilebilir alert bileşeni.\n * Bildirim, uyarı ve dikkat çekmek gereken içerikler için kullanılır.\n */\n\nconst alertVariants = cva(\n    \"relative w-full flex items-center gap-3 p-4 border text-foreground [&>svg]:shrink-0\",\n    {\n        variants: {\n            variant: {\n                default: \"bg-background text-foreground border-border\",\n                primary: \"bg-primary/10 text-primary border-primary/30\",\n                success: \"bg-success/10 text-success border-success/30\",\n                warning: \"bg-warning/10 text-warning border-warning/30\",\n                error: \"bg-destructive/10 text-destructive border-destructive/30\",\n                info: \"bg-blue-500/10 text-blue-500 border-blue-500/30\",\n            },\n            size: {\n                sm: \"py-2 text-xs\",\n                default: \"py-3 text-sm\",\n                lg: \"py-4 text-base\",\n            },\n            radius: {\n                none: \"rounded-none\",\n                sm: \"rounded-sm\",\n                default: \"rounded-md\",\n                lg: \"rounded-lg\",\n                full: \"rounded-full\",\n            },\n            withClose: {\n                true: \"pr-10\",\n            },\n        },\n        defaultVariants: {\n            variant: \"default\",\n            size: \"default\",\n            radius: \"default\",\n            withClose: false,\n        },\n    }\n);\n\nexport interface AlertProps\n    extends React.HTMLAttributes<HTMLDivElement>,\n        VariantProps<typeof alertVariants> {\n    /** Alert ikonunu gizler */\n    hideIcon?: boolean;\n    /** Kapatma butonu ekler */\n    closable?: boolean;\n    /** Kapatma butonu tıklandığında çalışacak fonksiyon */\n    onClose?: () => void;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n    (\n        {\n            className,\n            variant = \"default\",\n            size,\n            radius,\n            hideIcon = false,\n            closable = false,\n            onClose,\n            children,\n            ...props\n        },\n        ref\n    ) => {\n        // Alert türüne göre ikon belirleme\n        const Icon = React.useMemo(() => {\n            switch (variant) {\n                case \"success\":\n                    return Check;\n                case \"warning\":\n                    return AlertTriangle;\n                case \"error\":\n                    return AlertCircle;\n                case \"info\":\n                    return Info;\n                default:\n                    return Info;\n            }\n        }, [variant]);\n\n        return (\n            <div\n                ref={ref}\n                role=\"alert\"\n                className={cn(\n                    \"moonui-theme\",\n                    alertVariants({\n                        variant,\n                        size,\n                        radius,\n                        withClose: closable,\n                    }),\n                    className\n                )}\n                {...props}\n            >\n                {!hideIcon && <Icon className=\"h-5 w-5\" />}\n                <div className=\"flex-1\">{children}</div>\n                {closable && onClose && (\n                    <button\n                        onClick={onClose}\n                        className=\"absolute right-3 top-3 inline-flex h-6 w-6 items-center justify-center rounded-full opacity-70 transition-opacity hover:opacity-100\"\n                        aria-label=\"Kapat\"\n                    >\n                        <X className=\"h-4 w-4\" />\n                    </button>\n                )}\n            </div>\n        );\n    }\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n    HTMLParagraphElement,\n    React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n    <h5\n        ref={ref}\n        className={cn(\n            \"moonui-theme\",\n            \"font-semibold leading-tight tracking-tight mb-1\",\n            className\n        )}\n        {...props}\n    />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n    HTMLParagraphElement,\n    React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n    <div\n        ref={ref}\n        className={cn(\n            \"moonui-theme\",\n            \"text-sm leading-5 text-muted-foreground\",\n            className\n        )}\n        {...props}\n    />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Aspect Ratio Component\n * \n * A component that maintains a specific aspect ratio for content.\n * Particularly useful for images, videos, and media content in responsive designs.\n * Fully integrated with the theme system, accessible and customizable.\n */\n\nconst aspectRatioVariants = cva(\n  \"relative overflow-hidden\",\n  {\n    variants: {\n      variant: {\n        default: \"rounded-md bg-muted/10\",\n        ghost: \"bg-transparent\",\n        outline: \"rounded-md border border-border\",\n        card: \"rounded-md bg-card shadow-sm\",\n      },\n      radius: {\n        none: \"rounded-none\",\n        sm: \"rounded-sm\",\n        md: \"rounded-md\",\n        lg: \"rounded-lg\",\n        full: \"rounded-full\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\ninterface AspectRatioProps \n  extends React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof aspectRatioVariants> {\n  /**\n   * Aspect ratio (width/height). For example 16/9, 4/3, 1/1 etc.\n   * @default 16/9\n   */\n  ratio?: number\n}\n\nconst AspectRatio = React.forwardRef<\n  HTMLDivElement,\n  AspectRatioProps\n>(({ className, variant, radius, ratio = 16 / 9, style, children, ...props }, ref) => (\n  <div\n    ref={ref} \n    className={cn(\"moonui-theme\", aspectRatioVariants({ variant, radius }), className)}\n    style={{\n      position: \"relative\",\n      paddingBottom: `${(1 / ratio) * 100}%`,\n      ...style\n    }}\n    {...props}\n  >\n    <div className=\"absolute inset-0\">\n      {children}\n    </div>\n  </div>\n))\nAspectRatio.displayName = \"AspectRatio\"\n\nexport { AspectRatio, aspectRatioVariants }\nexport type { AspectRatioProps }\n","\"use client\"\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst avatarVariants = cva(\n  \"relative flex shrink-0 overflow-hidden\",\n  {\n    variants: {\n      size: {\n        default: \"h-10 w-10\",\n        xs: \"h-6 w-6\",\n        sm: \"h-8 w-8\",\n        md: \"h-10 w-10\",\n        lg: \"h-12 w-12\",\n        xl: \"h-16 w-16\",\n        \"2xl\": \"h-20 w-20\",\n      },\n      radius: {\n        default: \"rounded-full\",\n        sm: \"rounded-md\",\n        lg: \"rounded-xl\",\n        full: \"rounded-full\",\n        none: \"rounded-none\",\n      },\n      variant: {\n        default: \"\",\n        ring: \"ring-2 ring-border\",\n        ringOffset: \"ring-2 ring-border ring-offset-2 ring-offset-background\",\n        border: \"border-2 border-border\"\n      }\n    },\n    defaultVariants: {\n      size: \"default\",\n      radius: \"default\",\n      variant: \"default\"\n    },\n  }\n);\n\nexport interface AvatarProps \n  extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n    VariantProps<typeof avatarVariants> {}\n\nconst Avatar = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Root>,\n  AvatarProps\n>(({ className, size, radius, variant, ...props }, ref) => (\n  <AvatarPrimitive.Root\n    ref={ref}\n    className={cn(\"moonui-theme\", avatarVariants({ size, radius, variant }), className)}\n    {...props}\n  />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Image>,\n  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n  <AvatarPrimitive.Image\n    ref={ref}\n    className={cn(\"moonui-theme\", \"aspect-square h-full w-full\", className)}\n    {...props}\n  />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Fallback>,\n  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n  <AvatarPrimitive.Fallback\n    ref={ref}\n    className={cn(\n      \"flex h-full w-full items-center justify-center bg-muted\",\n      className\n    )}\n    {...props}\n  />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\n// Avatar Group Component for displaying multiple avatars\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  limit?: number;\n  avatars: React.ReactNode[];\n  overlapOffset?: number;\n}\n\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n  ({ className, limit, avatars, overlapOffset = -8, ...props }, ref) => {\n    const visibleAvatars = limit ? avatars.slice(0, limit) : avatars;\n    const remainingCount = limit ? Math.max(0, avatars.length - limit) : 0;\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"moonui-theme\", \"flex items-center\", className)}\n        {...props}\n      >\n        <div className=\"flex\">\n          {visibleAvatars.map((avatar, index) => (\n            <div \n              key={index} \n              className=\"relative\"\n              style={{ \n                marginLeft: index === 0 ? 0 : `${overlapOffset}px`,\n                zIndex: visibleAvatars.length - index \n              }}\n            >\n              {avatar}\n            </div>\n          ))}\n          {remainingCount > 0 && (\n            <div \n              className=\"relative z-0\"\n              style={{ marginLeft: `${overlapOffset}px` }}\n            >\n              <Avatar variant=\"border\">\n                <AvatarFallback>\n                  +{remainingCount}\n                </AvatarFallback>\n              </Avatar>\n            </div>\n          )}\n        </div>\n      </div>\n    );\n  }\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarGroup };\n","\"use client\"\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Premium Badge Component\n * \n * Durum, kategori ve etiketleme için yüksek kaliteli badge bileşeni.\n * Dark ve light modda uyumlu, erişilebilir ve çeşitli varyantlar sunar.\n */\n\nconst badgeVariants = cva(\n  [\"inline-flex items-center justify-center gap-1.5\", \n  \"font-medium transition-colors duration-200\", \n  \"border focus:outline-none\",\n  \"focus-visible:ring-2 focus-visible:ring-offset-1\",\n  // Auto spacing between badges\n  \"mr-2 mb-2 last:mr-0\"],\n  {\n    variants: {\n      variant: {\n        primary: [\n          \"border-transparent bg-gray-900 text-white\",\n          \"hover:bg-gray-800 dark:hover:bg-gray-700\",\n          \"focus-visible:ring-gray-500/30 dark:focus-visible:ring-gray-400/40\",\n          \"dark:bg-gray-700 dark:text-gray-50 dark:shadow-inner dark:shadow-gray-950/10\",\n        ],\n        secondary: [\n          \"border-transparent bg-secondary text-secondary-foreground\",\n          \"hover:bg-gray-200 dark:hover:bg-gray-600\",\n          \"focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40\",\n          \"dark:bg-gray-700/50 dark:text-gray-50 dark:shadow-inner dark:shadow-gray-950/10\",\n        ],\n        outline: [\n          \"border-gray-200 dark:border-gray-600\",\n          \"bg-transparent text-foreground\",\n          \"hover:border-gray-300 dark:hover:border-gray-500\",\n          \"focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40\",\n          \"dark:text-gray-100 dark:bg-transparent dark:backdrop-blur-sm\",\n        ],\n        destructive: [\n          \"border-transparent bg-error text-white\",\n          \"hover:bg-error/90 dark:hover:bg-error/80\",\n          \"focus-visible:ring-error/30 dark:focus-visible:ring-error/25\",\n          \"dark:bg-error/90 dark:text-white dark:shadow-inner dark:shadow-error/10\",\n        ],\n        success: [\n          \"border-transparent bg-success text-white\",\n          \"hover:bg-success/90 dark:hover:bg-success/80\",\n          \"focus-visible:ring-success/30 dark:focus-visible:ring-success/25\",\n          \"dark:bg-success/90 dark:text-white dark:shadow-inner dark:shadow-success/10\",\n        ],\n        warning: [\n          \"border-transparent bg-warning text-white\",\n          \"hover:bg-warning/90 dark:hover:bg-warning/80\",\n          \"focus-visible:ring-warning/30 dark:focus-visible:ring-warning/25\",\n          \"dark:bg-warning/90 dark:text-gray-900 dark:shadow-inner dark:shadow-warning/10\",\n        ],\n        ghost: [\n          \"border border-gray-200 bg-gray-50/50 text-gray-700\",\n          \"hover:bg-gray-100 dark:hover:bg-gray-800/60\",\n          \"focus-visible:ring-gray-400/30 dark:focus-visible:ring-gray-500/40\",\n          \"dark:border-gray-700 dark:bg-gray-800/30 dark:text-gray-300\",\n          \"transition-all duration-200\",\n        ],\n        pro: [\n          \"border-transparent bg-gradient-to-r from-purple-600 to-pink-600 text-white\",\n          \"hover:from-purple-700 hover:to-pink-700\",\n          \"focus-visible:ring-purple-400/30 dark:focus-visible:ring-purple-500/40\",\n          \"shadow-md dark:shadow-lg dark:shadow-purple-500/10\",\n        ],\n        admin: [\n          \"border-transparent bg-gradient-to-r from-purple-600 to-pink-600 text-white\",\n          \"hover:from-purple-700 hover:to-pink-700\", \n          \"focus-visible:ring-purple-400/30 dark:focus-visible:ring-purple-500/40\",\n          \"shadow-md dark:shadow-lg dark:shadow-purple-500/10\",\n        ],\n      },\n      size: {\n        sm: \"h-5 px-2 text-xs\",\n        md: \"h-6 px-3 text-sm\",\n        lg: \"h-8 px-4 text-base\",\n      },\n      radius: {\n        default: \"rounded-full\",\n        sm: \"rounded-md\",\n        lg: \"rounded-xl\",\n        none: \"rounded-none\",\n      }\n    },\n    defaultVariants: {\n      variant: \"primary\",\n      size: \"md\",\n      radius: \"default\",\n    },\n  }\n);\n\nexport interface BadgeProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    Omit<VariantProps<typeof badgeVariants>, 'variant'> {\n  withDot?: boolean;\n  dotColor?: string;\n  removable?: boolean;\n  onRemove?: () => void;\n  leftIcon?: React.ReactNode;\n  rightIcon?: React.ReactNode;\n  variant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning' | 'ghost' | 'pro' | 'admin';\n  /** Disable automatic spacing between badges */\n  noAutoSpacing?: boolean;\n}\n\n/**\n * Premium Badge Component\n * \n * @param props - Badge bileşeni özellikleri\n * @param props.variant - Badgenin görsel varyantı\n * @param props.size - Badge boyutu\n * @param props.radius - Köşe yuvarlama stili\n * @param props.withDot - Başında nokta gösterimi\n * @param props.dotColor - Noktanın rengi (özel)\n * @param props.removable - Kaldırılabilir badge (X simgesi ile)\n * @param props.onRemove - Kaldırma işlevi\n * @param props.leftIcon - Badge'in solunda görüntülenecek ikon\n * @param props.rightIcon - Badge'in sağında görüntülenecek ikon\n * @param props.noAutoSpacing - Otomatik spacing'i devre dışı bırak\n */\nfunction Badge({\n  className,\n  variant,\n  size,\n  radius,\n  withDot,\n  dotColor,\n  removable,\n  onRemove,\n  leftIcon,\n  rightIcon,\n  noAutoSpacing,\n  children,\n  ...props\n}: BadgeProps) {\n  // Auto-assign icons and content for special variants\n  let autoLeftIcon = leftIcon;\n  let autoChildren = children;\n  \n  if (variant === 'pro') {\n    // Auto Sparkles icon for pro\n    autoLeftIcon = leftIcon || (\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"w-3 h-3\">\n        <path d=\"M12 0L13.09 8.26L22 9L13.09 9.74L12 18L10.91 9.74L2 9L10.91 8.26L12 0Z\" fill=\"currentColor\"/>\n        <path d=\"M19 5L19.5 7L21 7.5L19.5 8L19 10L18.5 8L17 7.5L18.5 7L19 5Z\" fill=\"currentColor\"/>\n        <path d=\"M19 15L19.5 17L21 17.5L19.5 18L19 20L18.5 18L17 17.5L18.5 17L19 15Z\" fill=\"currentColor\"/>\n      </svg>\n    );\n    autoChildren = children || 'Pro';\n  }\n  \n  if (variant === 'admin') {\n    // Auto CheckCircle icon for admin\n    autoLeftIcon = leftIcon || (\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"w-3 h-3\">\n        <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" fill=\"currentColor\"/>\n      </svg>\n    );\n    autoChildren = children || 'Admin Pro';\n  }\n\n  return (\n    <div \n      className={cn(\n        \"moonui-theme\", \n        badgeVariants({ variant, size, radius }), \n        // Remove auto-spacing if noAutoSpacing is true\n        noAutoSpacing && \"mr-0 mb-0\",\n        className\n      )} \n      data-removable={removable ? \"\" : undefined}\n      {...props}\n    >\n      {withDot && (\n        <span \n          className={cn(\n            \"h-2 w-2 rounded-full\", \n            dotColor || \n              (variant === \"destructive\" ? \"bg-white\" :\n               variant === \"success\" ? \"bg-white\" :\n               variant === \"warning\" ? \"bg-white\" :\n               variant === \"secondary\" ? \"bg-secondary-foreground\" :\n               variant === \"outline\" ? \"bg-foreground\" :\n               variant === \"ghost\" ? \"bg-foreground\" :\n               variant === \"pro\" ? \"bg-white\" :\n               variant === \"admin\" ? \"bg-white\" :\n               \"bg-primary-foreground\")\n          )} \n          aria-hidden=\"true\"\n        />\n      )}\n      {autoLeftIcon && (\n        <span className=\"inline-flex shrink-0 items-center\">\n          {autoLeftIcon}\n        </span>\n      )}\n      <span className=\"inline-flex items-center\">{autoChildren}</span>\n      {rightIcon && (\n        <span className=\"inline-flex shrink-0 items-center\">\n          {rightIcon}\n        </span>\n      )}\n      {removable && onRemove && (\n        <button \n          type=\"button\"\n          className=\"ml-1 -mr-1 h-3.5 w-3.5 rounded-full inline-flex items-center justify-center hover:bg-black/10 dark:hover:bg-white/10\"\n          onClick={(e) => {\n            e.stopPropagation();\n            onRemove();\n          }}\n          aria-label=\"Remove badge\"\n        >\n          <svg \n            width=\"8\" \n            height=\"8\" \n            viewBox=\"0 0 8 8\" \n            fill=\"none\" \n            xmlns=\"http://www.w3.org/2000/svg\"\n            className=\"opacity-70\"\n            aria-hidden=\"true\"\n          >\n            <path d=\"M0.799988 7.19999L7.19999 0.799988M0.799988 0.799988L7.19999 7.19999\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n          </svg>\n        </button>\n      )}\n    </div>\n  );\n}\n\nexport { Badge, badgeVariants };\n","\"use client\"\n\nimport * as React from \"react\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst breadcrumbVariants = cva(\n  \"flex items-center gap-1.5 text-sm\",\n  {\n    variants: {\n      variant: {\n        default: \"text-foreground transition-colors\",\n        muted: \"text-muted-foreground transition-colors\",\n        ghost: \"text-foreground/60 transition-colors\",\n      },\n      size: {\n        default: \"text-sm\",\n        sm: \"text-xs\",\n        lg: \"text-base\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n);\n\ninterface BreadcrumbProps\n  extends React.HTMLAttributes<HTMLElement>,\n    VariantProps<typeof breadcrumbVariants> {\n  separator?: React.ReactNode;\n  showHomeIcon?: boolean;\n}\n\ninterface BreadcrumbListProps extends React.HTMLAttributes<HTMLOListElement> {\n  collapsed?: boolean;\n  collapsedWidth?: number;\n}\n\ninterface BreadcrumbItemProps extends React.HTMLAttributes<HTMLLIElement> {\n  isCurrent?: boolean;\n  href?: string;\n  asChild?: boolean;\n}\n\ninterface BreadcrumbSeparatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n  /** Custom separator icon or text */\n  icon?: React.ReactNode;\n}\n\ninterface BreadcrumbEllipsisProps extends React.HTMLAttributes<HTMLSpanElement> {\n  /** Custom ellipsis icon */\n  icon?: React.ReactNode;\n}\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n  ({ className, variant, size, ...props }, ref) => (\n    <nav\n      ref={ref}\n      className={cn(\"moonui-theme\", breadcrumbVariants({ variant, size }), className)}\n      aria-label=\"breadcrumb\"\n      {...props}\n    />\n  )\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nconst BreadcrumbList = React.forwardRef<HTMLOListElement, BreadcrumbListProps>(\n  ({ className, collapsed, collapsedWidth = 3, ...props }, ref) => {\n    const childrenArray = React.Children.toArray(props.children).filter(Boolean);\n    const childCount = childrenArray.length;\n\n    if (collapsed && childCount > collapsedWidth) {\n      const firstItem = childrenArray[0];\n      // const middleItems = childrenArray.slice(1, -2); // Uncomment when needed\n      const lastTwoItems = childrenArray.slice(-2);\n\n      return (\n        <ol\n          ref={ref}\n          className={cn(\n            \"flex flex-wrap items-center gap-1.5 sm:gap-2.5\",\n            className\n          )}\n          {...props}\n        >\n          {firstItem}\n          <BreadcrumbEllipsis />\n          {lastTwoItems}\n        </ol>\n      );\n    }\n\n    return (\n      <ol\n        ref={ref}\n        className={cn(\n          \"flex flex-wrap items-center gap-1.5 sm:gap-2.5\",\n          className\n        )}\n        {...props}\n      />\n    );\n  }\n);\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nconst BreadcrumbItem = React.forwardRef<HTMLLIElement, BreadcrumbItemProps>(\n  ({ className, isCurrent, href, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? React.Fragment : href ? \"a\" : \"span\";\n    const itemProps = asChild ? {} : href ? { href } : {};\n\n    return (\n      <li\n        ref={ref}\n        className={cn(\"moonui-theme\", \"inline-flex items-center gap-1.5\", className)}\n        aria-current={isCurrent ? \"page\" : undefined}\n        {...props}\n      >\n        <Comp \n          className={cn(\n            \"transition-colors duration-200 hover:text-foreground\",\n            isCurrent \n              ? \"font-medium text-foreground\" \n              : \"text-muted-foreground hover:text-foreground hover:underline hover:underline-offset-4 hover:decoration-muted-foreground/30\"\n          )}\n          {...itemProps}\n        >\n          {props.children}\n        </Comp>\n      </li>\n    );\n  }\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nconst BreadcrumbSeparator = ({\n  children,\n  className,\n  ...props\n}: BreadcrumbSeparatorProps) => (\n  <span\n    role=\"presentation\"\n    aria-hidden=\"true\"\n    className={cn(\"moonui-theme\", \"text-muted-foreground opacity-70\", className)}\n    {...props}\n  >\n    {children || <ChevronRight className=\"h-3.5 w-3.5\" />}\n  </span>\n);\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nconst BreadcrumbEllipsis = ({\n  className,\n  ...props\n}: BreadcrumbEllipsisProps) => (\n  <span\n    role=\"presentation\"\n    aria-hidden=\"true\"\n    className={cn(\"moonui-theme\", \"flex items-center text-muted-foreground hover:text-foreground/80 transition-colors duration-200\", className)}\n    {...props}\n  >\n    <MoreHorizontal className=\"h-4 w-4\" />\n    <span className=\"sr-only\">More pages</span>\n  </span>\n);\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nconst BreadcrumbLink = React.forwardRef<HTMLAnchorElement, React.AnchorHTMLAttributes<HTMLAnchorElement>>(\n  ({ className, href, ...props }, ref) => (\n    <a\n      ref={ref}\n      href={href}\n      className={cn(\n        \"transition-colors duration-200 hover:text-foreground text-muted-foreground hover:underline hover:underline-offset-4 hover:decoration-muted-foreground/30\",\n        className\n      )}\n      {...props}\n    />\n  )\n);\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nconst BreadcrumbPage = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n  ({ className, ...props }, ref) => (\n    <span\n      ref={ref}\n      className={cn(\n        \"font-medium text-foreground dark:text-white dark:text-opacity-95\",\n        className\n      )}\n      {...props}\n    />\n  )\n);\nBreadcrumbPage.displayName = \"BreadcrumbPage\";\n\nexport {\n  Breadcrumb,\n  BreadcrumbList,\n  BreadcrumbItem,\n  BreadcrumbLink,\n  BreadcrumbPage,\n  BreadcrumbSeparator,\n  BreadcrumbEllipsis,\n};\n","\"use client\"\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { Loader2 } from \"lucide-react\";\n\n/**\n * Premium Button Component\n * \n * A world-class, accessible, and versatile button component.\n * Pixel-perfect design with extensive variants and states.\n */\nconst buttonVariants = cva(\n  [\"inline-flex items-center justify-center gap-2 whitespace-nowrap\",\n  \"font-medium relative\",\n  \"transition-all duration-200 ease-out\",\n  \"transform active:scale-[0.98]\",\n  \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n  \"disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none disabled:transform-none\"],\n  {\n    variants: {\n      variant: {\n        primary: [\n          \"bg-primary text-primary-foreground\",\n          \"dark:bg-primary dark:text-primary-foreground\",\n          \"hover:bg-primary/90 dark:hover:bg-primary/90\",\n          \"active:bg-primary/80 dark:active:bg-primary/80\",\n          \"shadow-sm hover:shadow-md\",\n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"transition-all duration-200\",\n        ],\n        secondary: [\n          \"bg-gray-100 text-gray-900\",\n          \"dark:bg-gray-800 dark:text-gray-100\",\n          \"hover:bg-gray-200 dark:hover:bg-gray-700\",\n          \"active:bg-gray-300 dark:active:bg-gray-600\",\n          \"border border-gray-200 dark:border-gray-700\",\n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"shadow-sm hover:shadow-md\",\n        ],\n        outline: [\n          \"bg-background text-foreground\",\n          \"dark:bg-background dark:text-foreground\",\n          \"border border-input dark:border-input\",\n          \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent dark:hover:text-accent-foreground\",\n          \"active:bg-accent/80 dark:active:bg-accent/80\",\n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"transition-all duration-200\",\n        ],\n        ghost: [\n          \"text-gray-700\",\n          \"dark:text-gray-300\",\n          \"hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\",\n          \"active:bg-gray-200 dark:active:bg-gray-700\",\n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"transition-all duration-200\",\n        ],\n        destructive: [\n          \"bg-destructive text-destructive-foreground\",\n          \"dark:bg-destructive dark:text-destructive-foreground\",\n          \"hover:bg-destructive/90 dark:hover:bg-destructive/90\",\n          \"active:bg-destructive/80 dark:active:bg-destructive/80\",\n          \"shadow-sm hover:shadow-md\",\n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"transition-all duration-200\",\n        ],\n        success: [\n          \"bg-success text-success-foreground\",\n          \"dark:bg-success dark:text-success-foreground\",\n          \"hover:bg-success/90 dark:hover:bg-success/90\",\n          \"active:bg-success/80 dark:active:bg-success/80\",\n          \"shadow-sm hover:shadow-md\", \n          \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n          \"transition-all duration-200\",\n        ],\n        link: [\n          \"text-primary bg-transparent\",\n          \"underline-offset-4 hover:underline\",\n          \"hover:text-primary/80 active:text-primary/70\",\n          \"p-0 h-auto\",\n          \"transition-colors duration-200\",\n        ],\n        gradient: [\n          \"bg-gradient-to-r from-purple-500 to-pink-500 text-white\",\n          \"hover:from-purple-600 hover:to-pink-600\",\n          \"active:from-purple-700 active:to-pink-700\",\n          \"shadow-xl shadow-purple-500/40\",\n          \"hover:shadow-2xl hover:shadow-purple-500/50\",\n          \"focus-visible:ring-purple-500/50\",\n          \"transition-all duration-300\",\n        ],\n        glow: [\n          \"bg-blue-500 text-white\",\n          \"shadow-[0_0_30px_rgba(59,130,246,0.5)]\",\n          \"hover:shadow-[0_0_40px_rgba(59,130,246,0.7)]\",\n          \"active:shadow-[0_0_20px_rgba(59,130,246,0.4)]\",\n          \"hover:bg-blue-600\",\n          \"focus-visible:ring-blue-500/50\",\n          \"transition-all duration-300\",\n        ],\n        soft: [\n          \"bg-primary/10 text-primary\",\n          \"hover:bg-primary/20\",\n          \"active:bg-primary/30\",\n          \"focus-visible:ring-primary/50\",\n          \"dark:bg-primary/20 dark:text-primary-foreground\",\n          \"dark:hover:bg-primary/30 dark:active:bg-primary/40\",\n          \"transition-colors duration-200\",\n        ],\n        glass: [\n          \"bg-white/10 backdrop-blur-md text-foreground\",\n          \"border border-white/20\",\n          \"hover:bg-white/20 hover:border-white/30\",\n          \"active:bg-white/30\",\n          \"shadow-lg\",\n          \"focus-visible:ring-white/50\",\n          \"dark:bg-gray-800/10 dark:border-gray-700/20\",\n          \"dark:hover:bg-gray-800/20 dark:hover:border-gray-700/30\",\n          \"transition-all duration-200\",\n        ],\n        neon: [\n          \"bg-transparent text-green-400\",\n          \"border-2 border-green-400\",\n          \"hover:bg-green-400 hover:text-gray-900\",\n          \"hover:shadow-[0_0_30px_rgba(74,222,128,0.6)]\",\n          \"active:shadow-[0_0_15px_rgba(74,222,128,0.4)]\",\n          \"focus-visible:ring-green-400/50\",\n          \"transition-all duration-300\",\n        ],\n      },\n      size: {\n        xs: \"h-7 px-2.5 text-xs\",\n        sm: \"h-8 px-3 text-sm\",\n        md: \"h-10 px-4 text-base\",\n        lg: \"h-12 px-6 text-lg\",\n        xl: \"h-14 px-8 text-xl\",\n        icon: \"h-10 w-10 p-2\",\n        \"icon-sm\": \"h-8 w-8 p-1.5\",\n        \"icon-lg\": \"h-12 w-12 p-3\",\n      },\n      rounded: {\n        default: \"rounded-xl\",\n        full: \"rounded-full\",\n        none: \"rounded-none\",\n        sm: \"rounded-lg\",\n        lg: \"rounded-2xl\",\n      },\n      fullWidth: {\n        true: \"w-full\",\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n      size: \"md\",\n      rounded: \"default\",\n      fullWidth: false,\n    },\n  }\n);\n\n// Button component props\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n  loading?: boolean;\n  leftIcon?: React.ReactNode;\n  rightIcon?: React.ReactNode;\n}\n\n/**\n * Premium Button Component\n * \n * @param props - Button component properties\n * @param props.variant - Visual variant (primary, secondary, ghost, etc.)\n * @param props.size - Button size (xs, sm, md, lg, xl)\n * @param props.loading - Loading state display\n * @param props.leftIcon - Icon on the left side\n * @param props.rightIcon - Icon on the right side\n * @param props.fullWidth - Full width display\n * @param props.rounded - Corner rounding style (default, full, none)\n * @param props.asChild - For Radix UI polymorphic component\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ \n    className, \n    variant, \n    size, \n    rounded, \n    fullWidth,\n    asChild = false,\n    loading = false,\n    leftIcon,\n    rightIcon,\n    children,\n    disabled,\n    ...props \n  }, ref) => {\n    // Radix UI'ın asChild pattern'i için - \"as\" prop yerine\n    const Comp = asChild ? \"button\" : \"button\";\n    \n    return (\n      <Comp\n        className={cn(\"moonui-theme\", buttonVariants({ variant, size, rounded, fullWidth, className }))}\n        ref={ref}\n        disabled={disabled || loading}\n        data-loading={loading ? \"\" : undefined}\n        {...props}\n      >\n        {loading && (\n          <Loader2 className=\"w-4 h-4 animate-spin\" aria-hidden=\"true\" />\n        )}\n        {!loading && leftIcon}\n        {children}\n        {!loading && rightIcon}\n      </Comp>\n    );\n  }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","\"use client\"\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { microInteractionVariants, hoverAnimations, tapAnimations } from \"@/lib/micro-interactions\";\n\nconst cardVariants = cva(\n  \"rounded-lg border bg-card text-card-foreground shadow-sm dark:shadow-gray-900/20 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-100 transition-all duration-200\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        outline: \"border border-border shadow-none bg-transparent dark:border-gray-700 dark:bg-transparent dark:text-gray-200\",\n        filled: \"border-none bg-secondary dark:bg-gray-800 dark:text-gray-100 dark:shadow-inner dark:shadow-gray-950/10\",\n        elevated: \"border-none shadow-md dark:shadow-lg dark:shadow-gray-900/30 dark:bg-gray-850 dark:text-gray-100\",\n        gradient: \"border-none bg-gradient-to-br from-primary/5 to-primary/10 dark:from-primary/10 dark:to-primary/20\",\n        glass: \"border border-white/20 bg-white/10 backdrop-blur-md dark:border-gray-700/30 dark:bg-gray-800/10\",\n      },\n      size: {\n        default: \"\",\n        sm: \"\",\n        lg: \"\",\n        xl: \"\",\n      },\n      radius: {\n        default: \"rounded-lg\",\n        sm: \"rounded-md\",\n        lg: \"rounded-xl\",\n        full: \"rounded-3xl\",\n        none: \"rounded-none\",\n      },\n      interactive: {\n        true: \"cursor-pointer hover:shadow-lg hover:border-primary/20 dark:hover:border-primary/30 hover:-translate-y-0.5 active:translate-y-0 active:shadow-sm\",\n        false: \"\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      radius: \"default\",\n    },\n  }\n);\n\nexport interface CardProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof cardVariants> {\n  asChild?: boolean;\n  microInteraction?: \"lift\" | \"glow\" | \"scale\" | \"none\";\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n  ({ className, variant, size, radius, interactive, microInteraction = \"lift\", ...props }, ref) => {\n    // Interactive özelliği varsa motion.div, yoksa normal div kullan\n    if (interactive && microInteraction !== \"none\") {\n      const interactionProps = {\n        whileHover: microInteraction === \"scale\" ? hoverAnimations.scale : \n                    microInteraction === \"glow\" ? hoverAnimations.glow : \n                    hoverAnimations.lift,\n        whileTap: tapAnimations.scale,\n      };\n      \n      return (\n        <motion.div\n          ref={ref}\n          className={cn(\"moonui-theme\", cardVariants({ variant, size, radius, interactive, className }))}\n          {...interactionProps}\n          {...(props as any)}\n        />\n      );\n    }\n    \n    // Non-interactive version\n    return (\n      <div\n        ref={ref}\n        className={cn(\"moonui-theme\", cardVariants({ variant, size, radius, interactive, className }))}\n        {...props}\n      />\n    );\n  }\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"moonui-theme\", \"flex flex-col space-y-1.5 p-6\", className)}\n    {...props}\n  />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<\n  HTMLHeadingElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <h3\n    ref={ref}\n    className={cn(\"moonui-theme\", \"text-lg font-semibold leading-none tracking-tight\", className)}\n    {...props}\n  />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <p\n    ref={ref}\n    className={cn(\"moonui-theme\", \"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div ref={ref} className={cn(\"moonui-theme\", \"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"moonui-theme\", \"flex items-center p-6 pt-0\", className)}\n    {...props}\n  />\n));\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","// MoonUI Micro-interactions System\n// Provides consistent hover, focus, and active states across all components\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Micro-interaction variants for consistent component behavior\n */\nexport const microInteractionVariants = cva(\"\", {\n  variants: {\n    hover: {\n      lift: [\n        \"transition-all duration-200 ease-out\",\n        \"hover:-translate-y-0.5\",\n        \"hover:shadow-md\",\n      ],\n      glow: [\n        \"transition-all duration-300 ease-out\",\n        \"hover:shadow-lg\",\n        \"hover:shadow-primary/20\",\n      ],\n      scale: [\n        \"transition-transform duration-200 ease-out\",\n        \"hover:scale-105\",\n        \"active:scale-95\",\n      ],\n      brightness: [\n        \"transition-all duration-200 ease-out\",\n        \"hover:brightness-110\",\n        \"active:brightness-95\",\n      ],\n      border: [\n        \"transition-all duration-200 ease-out\",\n        \"hover:border-primary/50\",\n      ],\n    },\n    focus: {\n      ring: [\n        \"focus:outline-none\",\n        \"focus-visible:ring-2\",\n        \"focus-visible:ring-primary/50\",\n        \"focus-visible:ring-offset-2\",\n      ],\n      glow: [\n        \"focus:outline-none\",\n        \"focus-visible:shadow-lg\",\n        \"focus-visible:shadow-primary/30\",\n      ],\n      border: [\n        \"focus:outline-none\",\n        \"focus-visible:border-primary\",\n        \"focus-visible:border-2\",\n      ],\n    },\n    active: {\n      scale: [\n        \"active:scale-95\",\n        \"transition-transform duration-100\",\n      ],\n      darken: [\n        \"active:brightness-90\",\n        \"transition-all duration-100\",\n      ],\n      depress: [\n        \"active:translate-y-0.5\",\n        \"active:shadow-sm\",\n        \"transition-all duration-100\",\n      ],\n    },\n    cursor: {\n      pointer: \"cursor-pointer\",\n      grab: \"cursor-grab active:cursor-grabbing\",\n      text: \"cursor-text\",\n      wait: \"cursor-wait\",\n      help: \"cursor-help\",\n      notAllowed: \"cursor-not-allowed\",\n    },\n  },\n  defaultVariants: {\n    hover: \"lift\",\n    focus: \"ring\",\n    active: \"scale\",\n    cursor: \"pointer\",\n  },\n});\n\n/**\n * Spring animation configurations\n */\nexport const springAnimations = {\n  // Smooth spring for general use\n  smooth: {\n    type: \"spring\",\n    stiffness: 260,\n    damping: 20,\n  },\n  // Bouncy spring for playful interactions\n  bouncy: {\n    type: \"spring\",\n    stiffness: 300,\n    damping: 15,\n  },\n  // Stiff spring for quick responses\n  stiff: {\n    type: \"spring\",\n    stiffness: 400,\n    damping: 25,\n  },\n  // Gentle spring for subtle movements\n  gentle: {\n    type: \"spring\",\n    stiffness: 150,\n    damping: 15,\n  },\n};\n\n/**\n * Hover animation presets\n */\nexport const hoverAnimations = {\n  lift: {\n    y: -2,\n    transition: springAnimations.smooth,\n  },\n  scale: {\n    scale: 1.05,\n    transition: springAnimations.smooth,\n  },\n  glow: {\n    boxShadow: \"0 0 20px rgba(var(--primary), 0.3)\",\n    transition: springAnimations.smooth,\n  },\n  rotate: {\n    rotate: 2,\n    transition: springAnimations.bouncy,\n  },\n};\n\n/**\n * Tap/Click animation presets\n */\nexport const tapAnimations = {\n  scale: {\n    scale: 0.95,\n    transition: { duration: 0.1 },\n  },\n  depress: {\n    y: 1,\n    transition: { duration: 0.1 },\n  },\n};\n\n/**\n * Focus animation presets\n */\nexport const focusAnimations = {\n  ring: {\n    boxShadow: \"0 0 0 2px var(--background), 0 0 0 4px var(--primary)\",\n    transition: springAnimations.smooth,\n  },\n  glow: {\n    boxShadow: \"0 0 0 3px rgba(var(--primary), 0.3)\",\n    transition: springAnimations.smooth,\n  },\n};\n\n/**\n * Stagger animation for lists\n */\nexport const staggerAnimation = {\n  container: {\n    hidden: { opacity: 0 },\n    show: {\n      opacity: 1,\n      transition: {\n        staggerChildren: 0.05,\n      },\n    },\n  },\n  item: {\n    hidden: { opacity: 0, y: 20 },\n    show: { \n      opacity: 1, \n      y: 0,\n      transition: springAnimations.smooth,\n    },\n  },\n};\n\n/**\n * Page transition animations\n */\nexport const pageTransitions = {\n  fadeIn: {\n    initial: { opacity: 0 },\n    animate: { opacity: 1 },\n    exit: { opacity: 0 },\n    transition: { duration: 0.3 },\n  },\n  slideUp: {\n    initial: { opacity: 0, y: 20 },\n    animate: { opacity: 1, y: 0 },\n    exit: { opacity: 0, y: -20 },\n    transition: springAnimations.smooth,\n  },\n  slideRight: {\n    initial: { opacity: 0, x: -20 },\n    animate: { opacity: 1, x: 0 },\n    exit: { opacity: 0, x: 20 },\n    transition: springAnimations.smooth,\n  },\n  scale: {\n    initial: { opacity: 0, scale: 0.95 },\n    animate: { opacity: 1, scale: 1 },\n    exit: { opacity: 0, scale: 1.05 },\n    transition: springAnimations.smooth,\n  },\n};\n\n/**\n * Skeleton loading animation\n */\nexport const skeletonAnimation = {\n  initial: { opacity: 0.5 },\n  animate: {\n    opacity: [0.5, 0.8, 0.5],\n    transition: {\n      duration: 1.5,\n      repeat: Infinity,\n      ease: \"easeInOut\" as const,\n    },\n  },\n};\n\n/**\n * Tooltip animation\n */\nexport const tooltipAnimation = {\n  initial: { opacity: 0, scale: 0.95 },\n  animate: { opacity: 1, scale: 1 },\n  exit: { opacity: 0, scale: 0.95 },\n  transition: { duration: 0.15 },\n};\n\n/**\n * Notification animation\n */\nexport const notificationAnimation = {\n  initial: { opacity: 0, y: -20, scale: 0.95 },\n  animate: { opacity: 1, y: 0, scale: 1 },\n  exit: { opacity: 0, scale: 0.95, transition: { duration: 0.15 } },\n  transition: springAnimations.bouncy,\n};\n\nexport type MicroInteractionProps = VariantProps<typeof microInteractionVariants>;\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { buttonVariants } from \"./button\";\nimport { \n  format, \n  startOfMonth, \n  endOfMonth, \n  eachDayOfInterval, \n  getDay, \n  isSameMonth, \n  isSameDay,\n  isToday,\n  addMonths,\n  subMonths,\n  startOfWeek,\n  endOfWeek\n} from \"date-fns\";\n\nexport interface CalendarProps {\n  mode?: \"single\" | \"range\" | \"multiple\";\n  selected?: Date | Date[] | { from?: Date; to?: Date } | undefined;\n  onSelect?: (date: Date | Date[] | { from?: Date; to?: Date } | undefined) => void;\n  disabled?: (date: Date) => boolean;\n  showOutsideDays?: boolean;\n  className?: string;\n  classNames?: Record<string, string>;\n  numberOfMonths?: number;\n  defaultMonth?: Date;\n  initialFocus?: boolean;\n}\n\nfunction Calendar({\n  mode = \"single\",\n  selected,\n  onSelect,\n  disabled,\n  showOutsideDays = false,\n  className,\n  classNames,\n  numberOfMonths = 1,\n  defaultMonth,\n  ...props\n}: CalendarProps) {\n  const [currentMonth, setCurrentMonth] = React.useState(\n    defaultMonth || (selected && (selected as Date)) || new Date()\n  );\n\n  const weekDays = [\n    { short: \"S\", full: \"Sunday\" },\n    { short: \"M\", full: \"Monday\" },\n    { short: \"T\", full: \"Tuesday\" },\n    { short: \"W\", full: \"Wednesday\" },\n    { short: \"T\", full: \"Thursday\" },\n    { short: \"F\", full: \"Friday\" },\n    { short: \"S\", full: \"Saturday\" }\n  ];\n\n  const handlePreviousMonth = () => {\n    setCurrentMonth(subMonths(currentMonth, 1));\n  };\n\n  const handleNextMonth = () => {\n    setCurrentMonth(addMonths(currentMonth, 1));\n  };\n\n  const handleDateClick = (date: Date) => {\n    if (disabled?.(date)) return;\n\n    if (mode === \"single\") {\n      onSelect?.(date);\n    } else if (mode === \"range\") {\n      const currentSelection = selected as { from?: Date; to?: Date } | undefined;\n      if (!currentSelection?.from || (currentSelection.from && currentSelection.to)) {\n        onSelect?.({ from: date, to: undefined });\n      } else {\n        if (date < currentSelection.from) {\n          onSelect?.({ from: date, to: currentSelection.from });\n        } else {\n          onSelect?.({ from: currentSelection.from, to: date });\n        }\n      }\n    }\n  };\n\n  const isDateSelected = (date: Date) => {\n    if (!selected) return false;\n    \n    if (mode === \"single\") {\n      return isSameDay(date, selected as Date);\n    } else if (mode === \"range\") {\n      const range = selected as { from?: Date; to?: Date };\n      if (range.from && range.to) {\n        return date >= range.from && date <= range.to;\n      }\n      return range.from ? isSameDay(date, range.from) : false;\n    }\n    return false;\n  };\n\n  const isRangeStart = (date: Date) => {\n    if (mode !== \"range\" || !selected) return false;\n    const range = selected as { from?: Date; to?: Date };\n    return range.from ? isSameDay(date, range.from) : false;\n  };\n\n  const isRangeEnd = (date: Date) => {\n    if (mode !== \"range\" || !selected) return false;\n    const range = selected as { from?: Date; to?: Date };\n    return range.to ? isSameDay(date, range.to) : false;\n  };\n\n  const isRangeMiddle = (date: Date) => {\n    if (mode !== \"range\" || !selected) return false;\n    const range = selected as { from?: Date; to?: Date };\n    if (!range.from || !range.to) return false;\n    return date > range.from && date < range.to;\n  };\n\n  const getDaysInMonth = () => {\n    const start = startOfMonth(currentMonth);\n    const end = endOfMonth(currentMonth);\n    const days = eachDayOfInterval({ start, end });\n    \n    // Get days from previous month to fill the first week\n    const firstDayOfWeek = getDay(start);\n    const previousMonthDays = [];\n    if (firstDayOfWeek > 0 && showOutsideDays) {\n      const previousMonthStart = startOfWeek(start);\n      const previousMonthEnd = new Date(start);\n      previousMonthEnd.setDate(previousMonthEnd.getDate() - 1);\n      previousMonthDays.push(...eachDayOfInterval({ \n        start: previousMonthStart, \n        end: previousMonthEnd \n      }));\n    }\n    \n    // Get days from next month to fill the last week\n    const lastDayOfWeek = getDay(end);\n    const nextMonthDays = [];\n    if (lastDayOfWeek < 6 && showOutsideDays) {\n      const nextMonthStart = new Date(end);\n      nextMonthStart.setDate(nextMonthStart.getDate() + 1);\n      const nextMonthEnd = endOfWeek(end);\n      nextMonthDays.push(...eachDayOfInterval({ \n        start: nextMonthStart, \n        end: nextMonthEnd \n      }));\n    }\n    \n    // Add empty cells for the first week if not showing outside days\n    const emptyCells = [];\n    if (!showOutsideDays && firstDayOfWeek > 0) {\n      for (let i = 0; i < firstDayOfWeek; i++) {\n        emptyCells.push(null);\n      }\n    }\n    \n    return [...previousMonthDays, ...emptyCells, ...days, ...nextMonthDays];\n  };\n\n  const days = getDaysInMonth();\n\n  return (\n    <div className={cn(\"moonui-theme\", \"p-0\", className)}>\n      {/* Header */}\n      <div className=\"flex items-center justify-between px-6 py-4 border-b border-border/50 dark:border-gray-700/50\">\n        <button\n          onClick={handlePreviousMonth}\n          className={cn(\n            \"h-10 w-10 bg-transparent p-0 rounded-lg\",\n            \"hover:bg-muted transition-colors\",\n            \"inline-flex items-center justify-center\"\n          )}\n          type=\"button\"\n        >\n          <ChevronLeft className=\"h-5 w-5\" />\n        </button>\n        \n        <h2 className=\"text-base font-medium\">\n          {format(currentMonth, \"MMMM yyyy\")}\n        </h2>\n        \n        <button\n          onClick={handleNextMonth}\n          className={cn(\n            \"h-10 w-10 bg-transparent p-0 rounded-lg\",\n            \"hover:bg-muted transition-colors\",\n            \"inline-flex items-center justify-center\"\n          )}\n          type=\"button\"\n        >\n          <ChevronRight className=\"h-5 w-5\" />\n        </button>\n      </div>\n\n      {/* Calendar Grid */}\n      <div className=\"px-6 pb-4\">\n        {/* Week days header */}\n        <div className=\"grid grid-cols-7 mb-2\">\n          {weekDays.map((day, index) => (\n            <div\n              key={`weekday-${index}`}\n              className=\"text-muted-foreground text-xs font-medium h-10 flex items-center justify-center\"\n              title={day.full}\n            >\n              {day.short}\n            </div>\n          ))}\n        </div>\n\n        {/* Days grid */}\n        <div className=\"grid grid-cols-7 gap-1\">\n          {days.map((date, index) => {\n            if (!date) {\n              return <div key={`empty-${index}`} className=\"h-10 w-10\" />;\n            }\n\n            const isOutsideMonth = !isSameMonth(date, currentMonth);\n            const isDisabled = disabled?.(date) || false;\n            const isSelected = isDateSelected(date);\n            const isTodayDate = isToday(date);\n            const rangeStart = isRangeStart(date);\n            const rangeEnd = isRangeEnd(date);\n            const rangeMiddle = isRangeMiddle(date);\n\n            return (\n              <button\n                key={date.toISOString()}\n                onClick={() => handleDateClick(date)}\n                disabled={isDisabled}\n                className={cn(\n                  \"h-10 w-10 p-0 font-normal\",\n                  \"inline-flex items-center justify-center rounded-lg\",\n                  \"hover:bg-muted transition-colors text-sm\",\n                  \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n                  isOutsideMonth && \"text-muted-foreground/50\",\n                  isDisabled && \"text-muted-foreground/30 cursor-not-allowed hover:bg-transparent\",\n                  isSelected && !rangeMiddle && \"bg-primary text-primary-foreground font-medium hover:bg-primary hover:text-primary-foreground\",\n                  isTodayDate && \"font-semibold relative after:absolute after:bottom-1 after:left-1/2 after:-translate-x-1/2 after:h-1 after:w-1 after:rounded-full after:bg-primary\",\n                  rangeMiddle && \"bg-accent/30 text-accent-foreground rounded-none\",\n                  rangeStart && \"rounded-r-none\",\n                  rangeEnd && \"rounded-l-none\"\n                )}\n                type=\"button\"\n              >\n                {format(date, \"d\")}\n              </button>\n            );\n          })}\n        </div>\n      </div>\n\n    </div>\n  );\n}\n\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\nimport { Input } from \"@/components/ui\"\nimport { CreditCard } from \"lucide-react\"\n\n// Card type detection\nconst getCardType = (number: string): string => {\n  const patterns = {\n    visa: /^4/,\n    mastercard: /^5[1-5]/,\n    amex: /^3[47]/,\n    discover: /^6(?:011|5)/,\n    diners: /^3(?:0[0-5]|[68])/,\n    jcb: /^35/,\n  }\n\n  for (const [type, pattern] of Object.entries(patterns)) {\n    if (pattern.test(number)) return type\n  }\n  return \"unknown\"\n}\n\n// Format card number with spaces\nconst formatCardNumber = (value: string, cardType: string): string => {\n  const cleaned = value.replace(/\\s+/g, \"\")\n  const groups = cardType === \"amex\" ? [4, 6, 5] : [4, 4, 4, 4]\n  \n  let formatted = \"\"\n  let position = 0\n  \n  for (const group of groups) {\n    if (position >= cleaned.length) break\n    if (formatted) formatted += \" \"\n    formatted += cleaned.slice(position, position + group)\n    position += group\n  }\n  \n  return formatted\n}\n\n// Card Number Input\nexport interface CardNumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n  value?: string\n  onChange?: (value: string, cardType: string) => void\n  showIcon?: boolean\n}\n\nexport const CardNumberInput = React.forwardRef<HTMLInputElement, CardNumberInputProps>(\n  ({ className, value = \"\", onChange, showIcon = true, size, ...props }, ref) => {\n    const [cardType, setCardType] = React.useState(\"unknown\")\n    \n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      const rawValue = e.target.value.replace(/\\D/g, \"\")\n      const detectedType = getCardType(rawValue)\n      setCardType(detectedType)\n      \n      const maxLength = detectedType === \"amex\" ? 15 : 16\n      const truncated = rawValue.slice(0, maxLength)\n      const formatted = formatCardNumber(truncated, detectedType)\n      \n      onChange?.(truncated, detectedType)\n      \n      // Update the input value\n      e.target.value = formatted\n    }\n    \n    return (\n      <div className=\"relative\">\n        <Input\n          ref={ref}\n          type=\"text\"\n          inputMode=\"numeric\"\n          autoComplete=\"cc-number\"\n          placeholder=\"1234 5678 9012 3456\"\n          value={formatCardNumber(value, cardType)}\n          onChange={handleChange}\n          className={cn(showIcon && \"pl-10\", className)}\n          {...props}\n        />\n        {showIcon && (\n          <CreditCard className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n        )}\n      </div>\n    )\n  }\n)\nCardNumberInput.displayName = \"CardNumberInput\"\n\n// Card Expiry Input\nexport interface CardExpiryInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n  value?: string\n  onChange?: (value: string) => void\n}\n\nexport const CardExpiryInput = React.forwardRef<HTMLInputElement, CardExpiryInputProps>(\n  ({ className, value = \"\", onChange, size, ...props }, ref) => {\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      let rawValue = e.target.value.replace(/\\D/g, \"\")\n      \n      if (rawValue.length >= 2) {\n        const month = parseInt(rawValue.slice(0, 2))\n        if (month > 12) {\n          rawValue = \"12\" + rawValue.slice(2)\n        } else if (month === 0) {\n          rawValue = \"01\" + rawValue.slice(2)\n        }\n      }\n      \n      rawValue = rawValue.slice(0, 4)\n      let formatted = rawValue\n      \n      if (rawValue.length >= 2) {\n        formatted = rawValue.slice(0, 2) + \"/\" + rawValue.slice(2)\n      }\n      \n      onChange?.(rawValue)\n      e.target.value = formatted\n    }\n    \n    const formattedValue = value.length >= 2 ? value.slice(0, 2) + \"/\" + value.slice(2) : value\n    \n    return (\n      <Input\n        ref={ref}\n        type=\"text\"\n        inputMode=\"numeric\"\n        autoComplete=\"cc-exp\"\n        placeholder=\"MM/YY\"\n        value={formattedValue}\n        onChange={handleChange}\n        className={className}\n        {...props}\n      />\n    )\n  }\n)\nCardExpiryInput.displayName = \"CardExpiryInput\"\n\n// Card CVC Input\nexport interface CardCVCInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n  value?: string\n  onChange?: (value: string) => void\n  cardType?: string\n}\n\nexport const CardCVCInput = React.forwardRef<HTMLInputElement, CardCVCInputProps>(\n  ({ className, value = \"\", onChange, cardType = \"unknown\", size, ...props }, ref) => {\n    const maxLength = cardType === \"amex\" ? 4 : 3\n    \n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      const rawValue = e.target.value.replace(/\\D/g, \"\").slice(0, maxLength)\n      onChange?.(rawValue)\n    }\n    \n    return (\n      <Input\n        ref={ref}\n        type=\"text\"\n        inputMode=\"numeric\"\n        autoComplete=\"cc-csc\"\n        placeholder={cardType === \"amex\" ? \"1234\" : \"123\"}\n        value={value}\n        onChange={handleChange}\n        maxLength={maxLength}\n        className={className}\n        {...props}\n      />\n    )\n  }\n)\nCardCVCInput.displayName = \"CardCVCInput\"\n\n// Card Zip Input\nexport interface CardZipInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n  value?: string\n  onChange?: (value: string) => void\n  format?: \"US\" | \"CA\" | \"UK\" | \"other\"\n}\n\nexport const CardZipInput = React.forwardRef<HTMLInputElement, CardZipInputProps>(\n  ({ className, value = \"\", onChange, format = \"US\", size, ...props }, ref) => {\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      let rawValue = e.target.value\n      \n      switch (format) {\n        case \"US\":\n          rawValue = rawValue.replace(/\\D/g, \"\").slice(0, 5)\n          break\n        case \"CA\":\n          rawValue = rawValue.toUpperCase().replace(/[^A-Z0-9]/g, \"\").slice(0, 6)\n          if (rawValue.length >= 3) {\n            rawValue = rawValue.slice(0, 3) + \" \" + rawValue.slice(3)\n          }\n          break\n        case \"UK\":\n          rawValue = rawValue.toUpperCase().replace(/[^A-Z0-9\\s]/g, \"\").slice(0, 8)\n          break\n        default:\n          rawValue = rawValue.slice(0, 10)\n      }\n      \n      onChange?.(rawValue.replace(/\\s/g, \"\"))\n      e.target.value = rawValue\n    }\n    \n    const getPlaceholder = () => {\n      switch (format) {\n        case \"US\": return \"12345\"\n        case \"CA\": return \"K1A 0B1\"\n        case \"UK\": return \"SW1A 1AA\"\n        default: return \"Postal Code\"\n      }\n    }\n    \n    return (\n      <Input\n        ref={ref}\n        type=\"text\"\n        autoComplete=\"postal-code\"\n        placeholder={getPlaceholder()}\n        value={value}\n        onChange={handleChange}\n        className={className}\n        {...props}\n      />\n    )\n  }\n)\nCardZipInput.displayName = \"CardZipInput\"","\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Checkbox Bileşeni\n *\n * Erişilebilir, özelleştirilebilir ve tema sistemiyle tam entegre checkbox bileşeni.\n * Form elemanları ve seçim listeleri için kullanılır.\n */\n\nconst checkboxVariants = cva(\n  \"peer shrink-0 border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:text-primary-foreground\",\n  {\n    variants: {\n      variant: {\n        default: \"border-border bg-background data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n        outline: \"border-border bg-transparent data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n        muted: \"border-border bg-accent data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n        ghost: \"border-transparent bg-transparent hover:bg-accent data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n      },\n      size: {\n        sm: \"h-3.5 w-3.5\",\n        default: \"h-4 w-4\",\n        md: \"h-5 w-5\",\n        lg: \"h-6 w-6\",\n      },\n      radius: {\n        none: \"rounded-none\",\n        sm: \"rounded-sm\",\n        default: \"rounded-sm\",\n        md: \"rounded-md\",\n        full: \"rounded-full\",\n      },\n      animation: {\n        none: \"\",\n        subtle: \"transition-all duration-200\",\n        default: \"transition-all duration-200\",\n        bounce: \"transition-all duration-200\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      radius: \"default\",\n      animation: \"default\",\n    },\n  }\n);\n\nexport interface CheckboxProps\n  extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n    VariantProps<typeof checkboxVariants> {\n  /**\n   * İndeterminate durumu - grup seçimlerinde bazı öğeler seçilmişse kullanılır\n   */\n  indeterminate?: boolean;\n  /**\n   * Özel ikon komponenti\n   */\n  icon?: React.ReactNode;\n}\n\nconst Checkbox = React.forwardRef<\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\n  CheckboxProps\n>(({ \n  className, \n  variant, \n  size, \n  radius, \n  animation,\n  indeterminate = false,\n  icon,\n  checked,\n  ...props \n}, ref) => {\n  // Indeterminate state yönetimi\n  const [isIndeterminate, setIsIndeterminate] = React.useState(indeterminate);\n  \n  React.useEffect(() => {\n    setIsIndeterminate(indeterminate);\n  }, [indeterminate]);\n\n  // Checked state override, indeterminate olduğunda\n  const effectiveChecked = isIndeterminate ? false : checked;\n  \n  return (\n    <CheckboxPrimitive.Root\n      ref={ref}\n      checked={effectiveChecked}\n      className={cn(\"moonui-theme\", checkboxVariants({ variant, size, radius, animation }), className)}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator\n        className={cn(\n          \"flex items-center justify-center text-current\",\n          animation === \"bounce\" && \"data-[state=checked]:animate-bounce\"\n        )}\n      >\n        {isIndeterminate ? (\n          <Minus className=\"h-[65%] w-[65%]\" />\n        ) : icon ? (\n          icon\n        ) : (\n          <Check className=\"h-[65%] w-[65%]\" />\n        )}\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  );\n});\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\n// CheckboxGroup bileşeni\ninterface CheckboxGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Grup içi yerleşim - dikey veya yatay\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Öğeler arasındaki boşluk (piksel)\n   */\n  spacing?: number | string;\n  /**\n   * Alt bileşenler\n   */\n  children: React.ReactNode;\n}\n\nconst CheckboxGroup = React.forwardRef<HTMLDivElement, CheckboxGroupProps>(\n  ({ className, orientation = \"vertical\", spacing = \"1rem\", children, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex\",\n          orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n          className\n        )}\n        style={{ gap: spacing }}\n        role=\"group\"\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\nCheckboxGroup.displayName = \"CheckboxGroup\";\n\n// CheckboxLabel bileşeni\ninterface CheckboxLabelProps extends React.HTMLAttributes<HTMLLabelElement> {\n  /**\n   * Checkbox bileşeni için HTML id\n   */\n  htmlFor?: string;\n  /**\n   * Label içeriği\n   */\n  children: React.ReactNode;\n  /**\n   * Checkbox öncesi veya sonrası\n   */\n  position?: \"start\" | \"end\";\n  /**\n   * Devre dışı durum stili\n   */\n  disabled?: boolean;\n}\n\nconst CheckboxLabel = React.forwardRef<HTMLLabelElement, CheckboxLabelProps>(\n  ({ className, htmlFor, children, position = \"end\", disabled = false, ...props }, ref) => {\n    return (\n      <label\n        ref={ref}\n        htmlFor={htmlFor}\n        className={cn(\n          \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n          position === \"start\" ? \"mr-2\" : \"ml-2\",\n          disabled && \"cursor-not-allowed opacity-70\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </label>\n    );\n  }\n);\nCheckboxLabel.displayName = \"CheckboxLabel\";\n\n// Checkbox ve Label içeren bileşen\ninterface CheckboxWithLabelProps extends CheckboxProps {\n  /**\n   * Label içeriği\n   */\n  label: React.ReactNode;\n  /**\n   * Label pozisyonu\n   */\n  labelPosition?: \"start\" | \"end\";\n  /**\n   * Label için HTML sınıfları\n   */\n  labelClassName?: string;\n}\n\nconst CheckboxWithLabel = React.forwardRef<\n  React.ElementRef<typeof CheckboxPrimitive.Root>,\n  CheckboxWithLabelProps\n>(({ \n  id, \n  label, \n  labelPosition = \"end\", \n  labelClassName, \n  ...checkboxProps \n}, ref) => {\n  const generatedId = React.useId();\n  const checkboxId = id || generatedId;\n  \n  return (\n    <div className=\"flex items-center\">\n      {labelPosition === \"start\" && (\n        <CheckboxLabel \n          htmlFor={checkboxId}\n          position=\"start\"\n          disabled={checkboxProps.disabled}\n          className={labelClassName}\n        >\n          {label}\n        </CheckboxLabel>\n      )}\n      \n      <Checkbox ref={ref} id={checkboxId} {...checkboxProps} />\n      \n      {labelPosition === \"end\" && (\n        <CheckboxLabel \n          htmlFor={checkboxId}\n          position=\"end\"\n          disabled={checkboxProps.disabled}\n          className={labelClassName}\n        >\n          {label}\n        </CheckboxLabel>\n      )}\n    </div>\n  );\n});\nCheckboxWithLabel.displayName = \"CheckboxWithLabel\";\n\nexport { Checkbox, CheckboxGroup, CheckboxLabel, CheckboxWithLabel };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Collapsible (Daraltılabilir) Bileşeni\n * \n * İçeriği genişletilip daraltılabilen hafif bir bileşendir.\n * Tema sistemiyle tam entegre, erişilebilir ve özelleştirilebilir.\n */\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst collapsibleTriggerVariants = cva(\n  \"flex w-full items-center justify-between transition-all\",\n  {\n    variants: {\n      variant: {\n        default: \"text-foreground hover:text-primary\",\n        ghost: \"text-foreground hover:bg-accent/10 rounded\",\n        outline: \"text-foreground border border-border rounded-t-md hover:bg-accent/5\",\n      },\n      size: {\n        sm: \"text-xs py-2 px-3\",\n        default: \"text-sm py-3 px-4\",\n        md: \"text-base py-4 px-4\",\n        lg: \"text-lg py-5 px-5\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\ninterface CollapsibleTriggerProps \n  extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>,\n    VariantProps<typeof collapsibleTriggerVariants> {}\n\nconst CollapsibleTrigger = React.forwardRef<\n  React.ElementRef<typeof CollapsiblePrimitive.Trigger>,\n  CollapsibleTriggerProps\n>(({ className, children, variant, size, asChild, ...props }, ref) => {\n  // asChild kullanıldığında otomatik ikon eklemeyi atla\n  if (asChild) {\n    return (\n      <CollapsiblePrimitive.Trigger\n        ref={ref}\n        className={cn(\"moonui-theme\", collapsibleTriggerVariants({ variant, size }), className)}\n        asChild={asChild}\n        {...props}\n      >\n        {children}\n      </CollapsiblePrimitive.Trigger>\n    )\n  }\n\n  return (\n    <CollapsiblePrimitive.Trigger\n      ref={ref}\n      className={cn(\"moonui-theme\", collapsibleTriggerVariants({ variant, size }), className)}\n      {...props}\n    >\n      {children}\n      <ChevronDown className=\"h-4 w-4 shrink-0 ml-auto transition-transform duration-200 [&[data-state=open]]:rotate-180\" />\n    </CollapsiblePrimitive.Trigger>\n  )\n})\nCollapsibleTrigger.displayName = CollapsiblePrimitive.Trigger.displayName\n\nconst collapsibleContentVariants = cva(\n  \"overflow-hidden transition-all data-[state=closed]:animate-collapse-up data-[state=open]:animate-collapse-down\",\n  {\n    variants: {\n      variant: {\n        default: \"text-muted-foreground\",\n        ghost: \"text-muted-foreground rounded-b\",\n        outline: \"text-muted-foreground border border-t-0 border-border rounded-b-md\",\n      },\n      size: {\n        sm: \"text-xs\",\n        default: \"text-sm\",\n        md: \"text-base\",\n        lg: \"text-lg\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\ninterface CollapsibleContentProps \n  extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>,\n    VariantProps<typeof collapsibleContentVariants> {}\n\nconst CollapsibleContent = React.forwardRef<\n  React.ElementRef<typeof CollapsiblePrimitive.Content>,\n  CollapsibleContentProps\n>(({ className, children, variant, size, ...props }, ref) => (\n  <CollapsiblePrimitive.Content\n    ref={ref}\n    className={cn(\"moonui-theme\", collapsibleContentVariants({ variant, size }), className)}\n    {...props}\n  >\n    <div className=\"p-4\">{children}</div>\n  </CollapsiblePrimitive.Content>\n))\nCollapsibleContent.displayName = CollapsiblePrimitive.Content.displayName\n\nexport {\n  Collapsible,\n  CollapsibleTrigger,\n  CollapsibleContent,\n  collapsibleTriggerVariants,\n  collapsibleContentVariants,\n}\n\nexport type {\n  CollapsibleTriggerProps,\n  CollapsibleContentProps\n}\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Collapsible\n * -----------------------------------------------------------------------------------------------*/\n\nconst COLLAPSIBLE_NAME = 'Collapsible';\n\ntype ScopedProps<P> = P & { __scopeCollapsible?: Scope };\nconst [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\n\ntype CollapsibleContextValue = {\n  contentId: string;\n  disabled?: boolean;\n  open: boolean;\n  onOpenToggle(): void;\n};\n\nconst [CollapsibleProvider, useCollapsibleContext] =\n  createCollapsibleContext<CollapsibleContextValue>(COLLAPSIBLE_NAME);\n\ntype CollapsibleElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface CollapsibleProps extends PrimitiveDivProps {\n  defaultOpen?: boolean;\n  open?: boolean;\n  disabled?: boolean;\n  onOpenChange?(open: boolean): void;\n}\n\nconst Collapsible = React.forwardRef<CollapsibleElement, CollapsibleProps>(\n  (props: ScopedProps<CollapsibleProps>, forwardedRef) => {\n    const {\n      __scopeCollapsible,\n      open: openProp,\n      defaultOpen,\n      disabled,\n      onOpenChange,\n      ...collapsibleProps\n    } = props;\n\n    const [open, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen ?? false,\n      onChange: onOpenChange,\n      caller: COLLAPSIBLE_NAME,\n    });\n\n    return (\n      <CollapsibleProvider\n        scope={__scopeCollapsible}\n        disabled={disabled}\n        contentId={useId()}\n        open={open}\n        onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n      >\n        <Primitive.div\n          data-state={getState(open)}\n          data-disabled={disabled ? '' : undefined}\n          {...collapsibleProps}\n          ref={forwardedRef}\n        />\n      </CollapsibleProvider>\n    );\n  }\n);\n\nCollapsible.displayName = COLLAPSIBLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CollapsibleTrigger';\n\ntype CollapsibleTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface CollapsibleTriggerProps extends PrimitiveButtonProps {}\n\nconst CollapsibleTrigger = React.forwardRef<CollapsibleTriggerElement, CollapsibleTriggerProps>(\n  (props: ScopedProps<CollapsibleTriggerProps>, forwardedRef) => {\n    const { __scopeCollapsible, ...triggerProps } = props;\n    const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n    return (\n      <Primitive.button\n        type=\"button\"\n        aria-controls={context.contentId}\n        aria-expanded={context.open || false}\n        data-state={getState(context.open)}\n        data-disabled={context.disabled ? '' : undefined}\n        disabled={context.disabled}\n        {...triggerProps}\n        ref={forwardedRef}\n        onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n      />\n    );\n  }\n);\n\nCollapsibleTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'CollapsibleContent';\n\ntype CollapsibleContentElement = CollapsibleContentImplElement;\ninterface CollapsibleContentProps extends Omit<CollapsibleContentImplProps, 'present'> {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: true;\n}\n\nconst CollapsibleContent = React.forwardRef<CollapsibleContentElement, CollapsibleContentProps>(\n  (props: ScopedProps<CollapsibleContentProps>, forwardedRef) => {\n    const { forceMount, ...contentProps } = props;\n    const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n    return (\n      <Presence present={forceMount || context.open}>\n        {({ present }) => (\n          <CollapsibleContentImpl {...contentProps} ref={forwardedRef} present={present} />\n        )}\n      </Presence>\n    );\n  }\n);\n\nCollapsibleContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype CollapsibleContentImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface CollapsibleContentImplProps extends PrimitiveDivProps {\n  present: boolean;\n}\n\nconst CollapsibleContentImpl = React.forwardRef<\n  CollapsibleContentImplElement,\n  CollapsibleContentImplProps\n>((props: ScopedProps<CollapsibleContentImplProps>, forwardedRef) => {\n  const { __scopeCollapsible, present, children, ...contentProps } = props;\n  const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n  const [isPresent, setIsPresent] = React.useState(present);\n  const ref = React.useRef<CollapsibleContentImplElement>(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const heightRef = React.useRef<number | undefined>(0);\n  const height = heightRef.current;\n  const widthRef = React.useRef<number | undefined>(0);\n  const width = widthRef.current;\n  // when opening we want it to immediately open to retrieve dimensions\n  // when closing we delay `present` to retrieve dimensions before closing\n  const isOpen = context.open || isPresent;\n  const isMountAnimationPreventedRef = React.useRef(isOpen);\n  const originalStylesRef = React.useRef<Record<string, string>>(undefined);\n\n  React.useEffect(() => {\n    const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n    return () => cancelAnimationFrame(rAF);\n  }, []);\n\n  useLayoutEffect(() => {\n    const node = ref.current;\n    if (node) {\n      originalStylesRef.current = originalStylesRef.current || {\n        transitionDuration: node.style.transitionDuration,\n        animationName: node.style.animationName,\n      };\n      // block any animations/transitions so the element renders at its full dimensions\n      node.style.transitionDuration = '0s';\n      node.style.animationName = 'none';\n\n      // get width and height from full dimensions\n      const rect = node.getBoundingClientRect();\n      heightRef.current = rect.height;\n      widthRef.current = rect.width;\n\n      // kick off any animations/transitions that were originally set up if it isn't the initial mount\n      if (!isMountAnimationPreventedRef.current) {\n        node.style.transitionDuration = originalStylesRef.current.transitionDuration!;\n        node.style.animationName = originalStylesRef.current.animationName!;\n      }\n\n      setIsPresent(present);\n    }\n    /**\n     * depends on `context.open` because it will change to `false`\n     * when a close is triggered but `present` will be `false` on\n     * animation end (so when close finishes). This allows us to\n     * retrieve the dimensions *before* closing.\n     */\n  }, [context.open, present]);\n\n  return (\n    <Primitive.div\n      data-state={getState(context.open)}\n      data-disabled={context.disabled ? '' : undefined}\n      id={context.contentId}\n      hidden={!isOpen}\n      {...contentProps}\n      ref={composedRefs}\n      style={{\n        [`--radix-collapsible-content-height` as any]: height ? `${height}px` : undefined,\n        [`--radix-collapsible-content-width` as any]: width ? `${width}px` : undefined,\n        ...props.style,\n      }}\n    >\n      {isOpen && children}\n    </Primitive.div>\n  );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open?: boolean) {\n  return open ? 'open' : 'closed';\n}\n\nconst Root = Collapsible;\nconst Trigger = CollapsibleTrigger;\nconst Content = CollapsibleContent;\n\nexport {\n  createCollapsibleScope,\n  //\n  Collapsible,\n  CollapsibleTrigger,\n  CollapsibleContent,\n  //\n  Root,\n  Trigger,\n  Content,\n};\nexport type { CollapsibleProps, CollapsibleTriggerProps, CollapsibleContentProps };\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n  originalEventHandler?: (event: E) => void,\n  ourEventHandler?: (event: E) => void,\n  { checkForDefaultPrevented = true } = {}\n) {\n  return function handleEvent(event: E) {\n    originalEventHandler?.(event);\n\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access window outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access document outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n  node: Node | null | undefined,\n  activeDescendant = false\n): HTMLElement | null {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    // `activeElement` might be an empty object if we're interacting with elements\n    // inside of an iframe.\n    return null;\n  }\n\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\n\n  if (activeDescendant) {\n    const id = activeElement.getAttribute('aria-activedescendant');\n    if (id) {\n      const element = getOwnerDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n\n  return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n  return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext?: ContextValueType\n) {\n  const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n  const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n    const { children, ...context } = props;\n    // Only re-memoize when prop values change\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n    return <Context.Provider value={value}>{children}</Context.Provider>;\n  };\n\n  Provider.displayName = rootComponentName + 'Provider';\n\n  function useContext(consumerName: string) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== undefined) return defaultContext;\n    // if a defaultContext wasn't specified, it's a required context.\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n\n  return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n  scopeName: string;\n  (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n  let defaultContexts: any[] = [];\n\n  /* -----------------------------------------------------------------------------------------------\n   * createContext\n   * ---------------------------------------------------------------------------------------------*/\n\n  function createContext<ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext?: ContextValueType\n  ) {\n    const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n\n    const Provider: React.FC<\n      ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n    > = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      // Only re-memoize when prop values change\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n      return <Context.Provider value={value}>{children}</Context.Provider>;\n    };\n\n    Provider.displayName = rootComponentName + 'Provider';\n\n    function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== undefined) return defaultContext;\n      // if a defaultContext wasn't specified, it's a required context.\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n\n    return [Provider, useContext] as const;\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * createScope\n   * ---------------------------------------------------------------------------------------------*/\n\n  const createScope: CreateScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope: Scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n\n  createScope.scopeName = scopeName;\n  return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n\n  const createScope: CreateScope = () => {\n    const scopeHooks = scopes.map((createScope) => ({\n      useScope: createScope(),\n      scopeName: createScope.scopeName,\n    }));\n\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n        // We are calling a hook inside a callback which React warns against to avoid inconsistent\n        // renders, however, scoping doesn't have render side effects so we ignore the rule.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes, ...currentScope };\n      }, {});\n\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n  (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n  prop?: T | undefined;\n  defaultProp: T;\n  onChange?: ChangeHandler<T>;\n  caller?: string;\n}\n\nexport function useControllableState<T>({\n  prop,\n  defaultProp,\n  onChange = () => {},\n  caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange,\n  });\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledProp;\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (process.env.NODE_ENV !== 'production') {\n    const isControlledRef = React.useRef(prop !== undefined);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? 'controlled' : 'uncontrolled';\n        const to = isControlled ? 'controlled' : 'uncontrolled';\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  /* eslint-enable react-hooks/rules-of-hooks */\n\n  const setValue = React.useCallback<SetStateFn<T>>(\n    (nextValue) => {\n      if (isControlled) {\n        const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value !== prop) {\n          onChangeRef.current?.(value);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef]\n  );\n\n  return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n  defaultProp,\n  onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n  Value: T,\n  setValue: React.Dispatch<React.SetStateAction<T>>,\n  OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n\n  return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function';\n}\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport { useEffectEvent } from '@radix-ui/react-use-effect-event';\n\ntype ChangeHandler<T> = (state: T) => void;\n\ninterface UseControllableStateParams<T> {\n  prop: T | undefined;\n  defaultProp: T;\n  onChange: ChangeHandler<T> | undefined;\n  caller: string;\n}\n\ninterface AnyAction {\n  type: string;\n}\n\nconst SYNC_STATE = Symbol('RADIX:SYNC_STATE');\n\ninterface SyncStateAction<T> {\n  type: typeof SYNC_STATE;\n  state: T;\n}\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialState: S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, I, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: I,\n  init: (i: I & { state: T }) => S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: any,\n  init?: (i: any) => Omit<S, 'state'>\n): [S & { state: T }, React.Dispatch<A>] {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== undefined;\n\n  const onChange = useEffectEvent(onChangeProp);\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (process.env.NODE_ENV !== 'production') {\n    const isControlledRef = React.useRef(controlledState !== undefined);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? 'controlled' : 'uncontrolled';\n        const to = isControlled ? 'controlled' : 'uncontrolled';\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  /* eslint-enable react-hooks/rules-of-hooks */\n\n  type InternalState = S & { state: T };\n  const args: [InternalState] = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    // @ts-expect-error\n    args.push(init);\n  }\n\n  const [internalState, dispatch] = React.useReducer(\n    (state: InternalState, action: A | SyncStateAction<T>): InternalState => {\n      if (action.type === SYNC_STATE) {\n        return { ...state, state: action.state };\n      }\n\n      const next = reducer(state, action);\n      if (isControlled && !Object.is(next.state, state.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args\n  );\n\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React.useRef(uncontrolledState);\n  React.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n\n  const state = React.useMemo(() => {\n    const isControlled = controlledState !== undefined;\n    if (isControlled) {\n      return { ...internalState, state: controlledState };\n    }\n\n    return internalState;\n  }, [internalState, controlledState]);\n\n  React.useEffect(() => {\n    // Sync internal state for controlled components so that reducer is called\n    // with the correct state values\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n\n  return [state, dispatch as React.Dispatch<A>];\n}\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    return ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    ref.current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == 'function') {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n\n    // React <19 will log an error to the console if a callback ref returns a\n    // value. We don't use ref cleanups internally so this will only happen if a\n    // user's ref callback returns a value, which we only expect if they are\n    // using the cleanup functionality added in React 19.\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == 'function') {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst NODES = [\n  'a',\n  'button',\n  'div',\n  'form',\n  'h2',\n  'h3',\n  'img',\n  'input',\n  'label',\n  'li',\n  'nav',\n  'ol',\n  'p',\n  'select',\n  'span',\n  'svg',\n  'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n  asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n  extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp: any = asChild ? Slot : node;\n\n    if (typeof window !== 'undefined') {\n      (window as any)[Symbol.for('radix-ui')] = true;\n    }\n\n    return <Comp {...primitiveProps} ref={forwardedRef} />;\n  });\n\n  Node.displayName = `Primitive.${node}`;\n\n  return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n *  - discrete\n *  - continuous\n *  - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an  important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n  Primitive,\n  //\n  Root,\n  //\n  dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n  children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n  present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n\n  const child = (\n    typeof children === 'function'\n      ? children({ present: presence.isPresent })\n      : React.Children.only(children)\n  ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === 'function';\n  return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n  const [node, setNode] = React.useState<HTMLElement>();\n  const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n  const prevPresentRef = React.useRef(present);\n  const prevAnimationNameRef = React.useRef<string>('none');\n  const initialState = present ? 'mounted' : 'unmounted';\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: 'unmounted',\n      ANIMATION_OUT: 'unmountSuspended',\n    },\n    unmountSuspended: {\n      MOUNT: 'mounted',\n      ANIMATION_END: 'unmounted',\n    },\n    unmounted: {\n      MOUNT: 'mounted',\n    },\n  });\n\n  React.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n  }, [state]);\n\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n\n      if (present) {\n        send('MOUNT');\n      } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n        // If there is no exit animation or the element is hidden, animations won't run\n        // so we unmount instantly\n        send('UNMOUNT');\n      } else {\n        /**\n         * When `present` changes to `false`, we check changes to animation-name to\n         * determine whether an animation has started. We chose this approach (reading\n         * computed styles) because there is no `animationrun` event and `animationstart`\n         * fires after `animation-delay` has expired which would be too late.\n         */\n        const isAnimating = prevAnimationName !== currentAnimationName;\n\n        if (wasPresent && isAnimating) {\n          send('ANIMATION_OUT');\n        } else {\n          send('UNMOUNT');\n        }\n      }\n\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId: number;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      /**\n       * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n       * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n       * make sure we only trigger ANIMATION_END for the currently active animation.\n       */\n      const handleAnimationEnd = (event: AnimationEvent) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        // The event.animationName is unescaped for CSS syntax,\n        // so we need to escape it to compare with the animationName computed from the style.\n        const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n        if (event.target === node && isCurrentAnimation) {\n          // With React 18 concurrency this update is applied a frame after the\n          // animation ends, creating a flash of visible content. By setting the\n          // animation fill mode to \"forwards\", we force the node to keep the\n          // styles of the last keyframe, removing the flash.\n          //\n          // Previously we flushed the update via ReactDom.flushSync, but with\n          // exit animations this resulted in the node being removed from the\n          // DOM before the synthetic animationEnd event was dispatched, meaning\n          // user-provided event handlers would not be called.\n          // https://github.com/radix-ui/primitives/pull/1849\n          send('ANIMATION_END');\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = 'forwards';\n            // Reset the style after the node had time to unmount (for cases\n            // where the component chooses not to unmount). Doing this any\n            // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n            // still causes a flash.\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === 'forwards') {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event: AnimationEvent) => {\n        if (event.target === node) {\n          // if animation occurred, store its name as the previous animation.\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener('animationstart', handleAnimationStart);\n      node.addEventListener('animationcancel', handleAnimationEnd);\n      node.addEventListener('animationend', handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener('animationstart', handleAnimationStart);\n        node.removeEventListener('animationcancel', handleAnimationEnd);\n        node.removeEventListener('animationend', handleAnimationEnd);\n      };\n    } else {\n      // Transition to the unmounted state if the node is removed prematurely.\n      // We avoid doing so during cleanup as the node may change but still exist.\n      send('ANIMATION_END');\n    }\n  }, [node, send]);\n\n  return {\n    isPresent: ['mounted', 'unmountSuspended'].includes(state),\n    ref: React.useCallback((node: HTMLElement) => {\n      stylesRef.current = node ? getComputedStyle(node) : null;\n      setNode(node);\n    }, []),\n  };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n  return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n\n  // Not DEV\n  return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n  Presence,\n  //\n  Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n  ? R\n  : never;\n\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>\n) {\n  return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n    const nextState = (machine[state] as any)[event];\n    return nextState ?? state;\n  }, initialState);\n}\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We spaces with `.trim().toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[' useId '.trim().toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n  const [id, setId] = React.useState<string | undefined>(useReactId());\n  // React versions older than 18 will have client-side ids only.\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { Label } from \"./label\";\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"./popover\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./tabs\";\nimport { Slider } from \"./slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Copy, Check, Palette, Pipette } from \"lucide-react\";\n\n/**\n * ColorPicker Component\n * \n * A comprehensive color picker with multiple input methods\n */\n\nconst colorPickerVariants = cva(\n  \"relative inline-flex items-center justify-center\",\n  {\n    variants: {\n      size: {\n        default: \"h-10 w-10\",\n        sm: \"h-8 w-8\",\n        lg: \"h-12 w-12\",\n        xl: \"h-16 w-16\",\n      },\n      shape: {\n        square: \"rounded-md\",\n        circle: \"rounded-full\",\n        rounded: \"rounded-lg\",\n      },\n    },\n    defaultVariants: {\n      size: \"default\",\n      shape: \"square\",\n    },\n  }\n);\n\n// Color utilities\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result\n    ? {\n        r: parseInt(result[1], 16),\n        g: parseInt(result[2], 16),\n        b: parseInt(result[3], 16),\n      }\n    : null;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n  return \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n}\n\nfunction hexToHsl(hex: string): { h: number; s: number; l: number } | null {\n  const rgb = hexToRgb(hex);\n  if (!rgb) return null;\n\n  const r = rgb.r / 255;\n  const g = rgb.g / 255;\n  const b = rgb.b / 255;\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  let h = 0;\n  let s = 0;\n  const l = (max + min) / 2;\n\n  if (max !== min) {\n    const d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    switch (max) {\n      case r:\n        h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n        break;\n      case g:\n        h = ((b - r) / d + 2) / 6;\n        break;\n      case b:\n        h = ((r - g) / d + 4) / 6;\n        break;\n    }\n  }\n\n  return {\n    h: Math.round(h * 360),\n    s: Math.round(s * 100),\n    l: Math.round(l * 100),\n  };\n}\n\nfunction hslToHex(h: number, s: number, l: number): string {\n  h = h / 360;\n  s = s / 100;\n  l = l / 100;\n\n  let r, g, b;\n\n  if (s === 0) {\n    r = g = b = l;\n  } else {\n    const hue2rgb = (p: number, q: number, t: number) => {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    };\n\n    const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    const p = 2 * l - q;\n    r = hue2rgb(p, q, h + 1 / 3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1 / 3);\n  }\n\n  return rgbToHex(\n    Math.round(r * 255),\n    Math.round(g * 255),\n    Math.round(b * 255)\n  );\n}\n\nexport interface ColorPickerProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\" | \"value\">,\n    VariantProps<typeof colorPickerVariants> {\n  /**\n   * Current color value\n   */\n  value?: string;\n  /**\n   * Callback when color changes\n   */\n  onChange?: (color: string) => void;\n  /**\n   * Show color input\n   */\n  showInput?: boolean;\n  /**\n   * Show preset colors\n   */\n  showPresets?: boolean;\n  /**\n   * Preset colors\n   */\n  presets?: string[];\n  /**\n   * Allow opacity\n   */\n  allowOpacity?: boolean;\n  /**\n   * Color format\n   */\n  format?: \"hex\" | \"rgb\" | \"hsl\";\n  /**\n   * Disable copy button\n   */\n  disableCopy?: boolean;\n  /**\n   * Trigger mode\n   */\n  triggerMode?: \"click\" | \"hover\";\n}\n\n// Default preset colors\nconst defaultPresets = [\n  \"#000000\", \"#ffffff\", \"#ff0000\", \"#00ff00\", \"#0000ff\",\n  \"#ffff00\", \"#ff00ff\", \"#00ffff\", \"#ff8800\", \"#8800ff\",\n  \"#88ff00\", \"#0088ff\", \"#ff0088\", \"#00ff88\", \"#888888\",\n  \"#f87171\", \"#fb923c\", \"#fbbf24\", \"#facc15\", \"#a3e635\",\n  \"#4ade80\", \"#34d399\", \"#2dd4bf\", \"#22d3ee\", \"#38bdf8\",\n  \"#60a5fa\", \"#818cf8\", \"#a78bfa\", \"#c084fc\", \"#e879f9\",\n  \"#f472b6\", \"#fb7185\", \"#f43f5e\", \"#ef4444\", \"#dc2626\",\n];\n\nexport function ColorPicker({\n  className,\n  size,\n  shape,\n  value = \"#000000\",\n  onChange,\n  showInput = true,\n  showPresets = true,\n  presets = defaultPresets,\n  allowOpacity = false,\n  format = \"hex\",\n  disableCopy = false,\n  triggerMode = \"click\",\n  disabled,\n  ...props\n}: ColorPickerProps) {\n  const [open, setOpen] = React.useState(false);\n  const [color, setColor] = React.useState(value);\n  const [opacity, setOpacity] = React.useState(100);\n  const [copied, setCopied] = React.useState(false);\n  const [inputValue, setInputValue] = React.useState(value);\n\n  // Color components\n  const hsl = React.useMemo(() => hexToHsl(color) || { h: 0, s: 0, l: 0 }, [color]);\n  const rgb = React.useMemo(() => hexToRgb(color) || { r: 0, g: 0, b: 0 }, [color]);\n\n  React.useEffect(() => {\n    setColor(value);\n    setInputValue(value);\n  }, [value]);\n\n  const handleColorChange = (newColor: string) => {\n    setColor(newColor);\n    setInputValue(newColor);\n    onChange?.(newColor);\n  };\n\n  const handleHslChange = (component: \"h\" | \"s\" | \"l\", value: number) => {\n    const newHsl = { ...hsl, [component]: value };\n    const newColor = hslToHex(newHsl.h, newHsl.s, newHsl.l);\n    handleColorChange(newColor);\n  };\n\n  const handleRgbChange = (component: \"r\" | \"g\" | \"b\", value: number) => {\n    const newRgb = { ...rgb, [component]: value };\n    const newColor = rgbToHex(newRgb.r, newRgb.g, newRgb.b);\n    handleColorChange(newColor);\n  };\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = e.target.value;\n    setInputValue(newValue);\n    if (/^#[0-9A-F]{6}$/i.test(newValue)) {\n      handleColorChange(newValue);\n    }\n  };\n\n  const copyToClipboard = async () => {\n    try {\n      let textToCopy = color;\n      if (format === \"rgb\") {\n        textToCopy = `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n      } else if (format === \"hsl\") {\n        textToCopy = `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n      }\n      await navigator.clipboard.writeText(textToCopy);\n      setCopied(true);\n      setTimeout(() => setCopied(false), 2000);\n    } catch (err) {\n      console.error(\"Failed to copy:\", err);\n    }\n  };\n\n  const formatDisplay = () => {\n    if (format === \"rgb\") return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n    if (format === \"hsl\") return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n    return color;\n  };\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <Button\n          variant=\"outline\"\n          className={cn(\n            colorPickerVariants({ size, shape }),\n            \"p-0 border-2\",\n            className\n          )}\n          style={{ backgroundColor: color }}\n          disabled={disabled}\n          {...props}\n        >\n          <span className=\"sr-only\">Pick a color</span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-80\" align=\"start\" sideOffset={8}>\n        <Tabs defaultValue=\"picker\" className=\"w-full\">\n          <TabsList className=\"grid w-full grid-cols-3\">\n            <TabsTrigger value=\"picker\">Picker</TabsTrigger>\n            <TabsTrigger value=\"sliders\">Sliders</TabsTrigger>\n            <TabsTrigger value=\"input\">Input</TabsTrigger>\n          </TabsList>\n\n          <TabsContent value=\"picker\" className=\"space-y-4\">\n            {/* Color gradient picker */}\n            <div className=\"relative h-48 rounded-md overflow-hidden\">\n              <div\n                className=\"absolute inset-0\"\n                style={{\n                  background: `linear-gradient(to right, #fff, hsl(${hsl.h}, 100%, 50%))`,\n                }}\n              />\n              <div\n                className=\"absolute inset-0\"\n                style={{\n                  background: \"linear-gradient(to bottom, transparent, #000)\",\n                }}\n              />\n              <motion.div\n                className=\"absolute w-4 h-4 border-2 border-white rounded-full shadow-md cursor-pointer\"\n                drag\n                dragConstraints={{\n                  left: -8,\n                  right: 280,\n                  top: -8,\n                  bottom: 184,\n                }}\n                dragElastic={0}\n                style={{\n                  backgroundColor: color,\n                  left: `${(hsl.s / 100) * 280 - 8}px`,\n                  top: `${(1 - hsl.l / 100) * 192 - 8}px`,\n                }}\n              />\n            </div>\n\n            {/* Hue slider */}\n            <div className=\"space-y-2\">\n              <Label>Hue</Label>\n              <div\n                className=\"relative h-3 rounded-full\"\n                style={{\n                  background:\n                    \"linear-gradient(to right, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ff00ff, #ff0000)\",\n                }}\n              >\n                <Slider\n                  value={[hsl.h]}\n                  onValueChange={([value]) => handleHslChange(\"h\", value)}\n                  max={360}\n                  step={1}\n                  className=\"absolute inset-0\"\n                />\n              </div>\n            </div>\n\n            {/* Opacity slider */}\n            {allowOpacity && (\n              <div className=\"space-y-2\">\n                <Label>Opacity</Label>\n                <div className=\"flex items-center gap-3\">\n                  <Slider\n                    value={[opacity]}\n                    onValueChange={([value]) => setOpacity(value)}\n                    max={100}\n                    step={1}\n                    className=\"flex-1\"\n                  />\n                  <span className=\"text-sm w-10 text-right\">{opacity}%</span>\n                </div>\n              </div>\n            )}\n          </TabsContent>\n\n          <TabsContent value=\"sliders\" className=\"space-y-4\">\n            {/* RGB Sliders */}\n            <div className=\"space-y-3\">\n              <div className=\"space-y-2\">\n                <div className=\"flex items-center justify-between\">\n                  <Label>Red</Label>\n                  <span className=\"text-sm text-muted-foreground\">{rgb.r}</span>\n                </div>\n                <Slider\n                  value={[rgb.r]}\n                  onValueChange={([value]) => handleRgbChange(\"r\", value)}\n                  max={255}\n                  step={1}\n                  className=\"[&_[role=slider]]:bg-red-500\"\n                />\n              </div>\n              <div className=\"space-y-2\">\n                <div className=\"flex items-center justify-between\">\n                  <Label>Green</Label>\n                  <span className=\"text-sm text-muted-foreground\">{rgb.g}</span>\n                </div>\n                <Slider\n                  value={[rgb.g]}\n                  onValueChange={([value]) => handleRgbChange(\"g\", value)}\n                  max={255}\n                  step={1}\n                  className=\"[&_[role=slider]]:bg-green-500\"\n                />\n              </div>\n              <div className=\"space-y-2\">\n                <div className=\"flex items-center justify-between\">\n                  <Label>Blue</Label>\n                  <span className=\"text-sm text-muted-foreground\">{rgb.b}</span>\n                </div>\n                <Slider\n                  value={[rgb.b]}\n                  onValueChange={([value]) => handleRgbChange(\"b\", value)}\n                  max={255}\n                  step={1}\n                  className=\"[&_[role=slider]]:bg-blue-500\"\n                />\n              </div>\n            </div>\n\n            {/* HSL Info */}\n            <div className=\"pt-2 border-t\">\n              <div className=\"grid grid-cols-3 gap-2 text-sm\">\n                <div>\n                  <p className=\"text-muted-foreground\">H</p>\n                  <p className=\"font-medium\">{hsl.h}°</p>\n                </div>\n                <div>\n                  <p className=\"text-muted-foreground\">S</p>\n                  <p className=\"font-medium\">{hsl.s}%</p>\n                </div>\n                <div>\n                  <p className=\"text-muted-foreground\">L</p>\n                  <p className=\"font-medium\">{hsl.l}%</p>\n                </div>\n              </div>\n            </div>\n          </TabsContent>\n\n          <TabsContent value=\"input\" className=\"space-y-4\">\n            <div className=\"space-y-2\">\n              <Label>Hex Color</Label>\n              <div className=\"flex gap-2\">\n                <Input\n                  value={inputValue}\n                  onChange={handleInputChange}\n                  placeholder=\"#000000\"\n                  className=\"font-mono\"\n                />\n                <Button\n                  size=\"icon\"\n                  variant=\"outline\"\n                  onClick={() => handleColorChange(inputValue)}\n                >\n                  <Check className=\"h-4 w-4\" />\n                </Button>\n              </div>\n            </div>\n\n            <div className=\"space-y-2\">\n              <Label>RGB Values</Label>\n              <div className=\"grid grid-cols-3 gap-2\">\n                <Input\n                  type=\"number\"\n                  value={rgb.r}\n                  onChange={(e) => handleRgbChange(\"r\", parseInt(e.target.value) || 0)}\n                  min={0}\n                  max={255}\n                  className=\"text-center\"\n                />\n                <Input\n                  type=\"number\"\n                  value={rgb.g}\n                  onChange={(e) => handleRgbChange(\"g\", parseInt(e.target.value) || 0)}\n                  min={0}\n                  max={255}\n                  className=\"text-center\"\n                />\n                <Input\n                  type=\"number\"\n                  value={rgb.b}\n                  onChange={(e) => handleRgbChange(\"b\", parseInt(e.target.value) || 0)}\n                  min={0}\n                  max={255}\n                  className=\"text-center\"\n                />\n              </div>\n            </div>\n          </TabsContent>\n        </Tabs>\n\n        {/* Color preview and copy */}\n        <div className=\"mt-4 flex items-center justify-between p-3 border rounded-lg\">\n          <div className=\"flex items-center gap-3\">\n            <div\n              className={cn(\n                \"h-10 w-10 rounded border-2\",\n                colorPickerVariants({ shape })\n              )}\n              style={{ backgroundColor: color }}\n            />\n            <div>\n              <p className=\"text-sm font-medium\">{formatDisplay()}</p>\n              <p className=\"text-xs text-muted-foreground\">Current color</p>\n            </div>\n          </div>\n          {!disableCopy && (\n            <Button\n              size=\"icon\"\n              variant=\"ghost\"\n              onClick={copyToClipboard}\n              className=\"h-8 w-8\"\n            >\n              <AnimatePresence mode=\"wait\">\n                {copied ? (\n                  <motion.div\n                    key=\"check\"\n                    initial={{ scale: 0 }}\n                    animate={{ scale: 1 }}\n                    exit={{ scale: 0 }}\n                  >\n                    <Check className=\"h-4 w-4 text-green-600\" />\n                  </motion.div>\n                ) : (\n                  <motion.div\n                    key=\"copy\"\n                    initial={{ scale: 0 }}\n                    animate={{ scale: 1 }}\n                    exit={{ scale: 0 }}\n                  >\n                    <Copy className=\"h-4 w-4\" />\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </Button>\n          )}\n        </div>\n\n        {/* Preset colors */}\n        {showPresets && presets.length > 0 && (\n          <div className=\"mt-4 space-y-2\">\n            <Label>Preset Colors</Label>\n            <div className=\"grid grid-cols-10 gap-1\">\n              {presets.map((presetColor) => (\n                <button\n                  key={presetColor}\n                  className={cn(\n                    \"h-7 w-7 rounded border-2 transition-all hover:scale-110\",\n                    color === presetColor\n                      ? \"border-primary\"\n                      : \"border-transparent\"\n                  )}\n                  style={{ backgroundColor: presetColor }}\n                  onClick={() => handleColorChange(presetColor)}\n                />\n              ))}\n            </div>\n          </div>\n        )}\n      </PopoverContent>\n    </Popover>\n  );\n}\n\n/**\n * SimpleColorPicker Component\n * \n * A simplified color picker with preset colors only\n */\n\nexport interface SimpleColorPickerProps {\n  value?: string;\n  onChange?: (color: string) => void;\n  colors?: string[];\n  className?: string;\n  size?: \"sm\" | \"default\" | \"lg\";\n}\n\nexport function SimpleColorPicker({\n  value = \"#000000\",\n  onChange,\n  colors = defaultPresets.slice(0, 10),\n  className,\n  size = \"default\",\n}: SimpleColorPickerProps) {\n  const sizeClasses = {\n    sm: \"h-6 w-6\",\n    default: \"h-8 w-8\",\n    lg: \"h-10 w-10\",\n  };\n\n  return (\n    <div className={cn(\"moonui-theme\", \"flex flex-wrap gap-2\", className)}>\n      {colors.map((color) => (\n        <button\n          key={color}\n          className={cn(\n            \"rounded-full border-2 transition-all hover:scale-110\",\n            sizeClasses[size],\n            value === color ? \"border-primary ring-2 ring-primary/20\" : \"border-transparent\"\n          )}\n          style={{ backgroundColor: color }}\n          onClick={() => onChange?.(color)}\n        />\n      ))}\n    </div>\n  );\n}\n\n/**\n * GradientPicker Component\n * \n * Pick gradient colors\n */\n\nexport interface GradientPickerProps {\n  value?: { start: string; end: string; angle?: number };\n  onChange?: (gradient: { start: string; end: string; angle: number }) => void;\n  className?: string;\n}\n\nexport function GradientPicker({\n  value = { start: \"#ff0000\", end: \"#0000ff\", angle: 90 },\n  onChange,\n  className,\n}: GradientPickerProps) {\n  const [gradient, setGradient] = React.useState(value);\n\n  const handleChange = (field: \"start\" | \"end\" | \"angle\", newValue: string | number) => {\n    const newGradient = { ...gradient, [field]: newValue };\n    setGradient(newGradient);\n    onChange?.(newGradient as { start: string; end: string; angle: number });\n  };\n\n  return (\n    <div className={cn(\"moonui-theme\", \"space-y-4\", className)}>\n      <div\n        className=\"h-20 rounded-lg border-2\"\n        style={{\n          background: `linear-gradient(${gradient.angle}deg, ${gradient.start}, ${gradient.end})`,\n        }}\n      />\n      \n      <div className=\"grid grid-cols-2 gap-4\">\n        <div className=\"space-y-2\">\n          <Label>Start Color</Label>\n          <ColorPicker\n            value={gradient.start}\n            onChange={(color) => handleChange(\"start\", color)}\n            size=\"sm\"\n          />\n        </div>\n        <div className=\"space-y-2\">\n          <Label>End Color</Label>\n          <ColorPicker\n            value={gradient.end}\n            onChange={(color) => handleChange(\"end\", color)}\n            size=\"sm\"\n          />\n        </div>\n      </div>\n      \n      <div className=\"space-y-2\">\n        <div className=\"flex items-center justify-between\">\n          <Label>Angle</Label>\n          <span className=\"text-sm text-muted-foreground\">{gradient.angle}°</span>\n        </div>\n        <Slider\n          value={[gradient.angle || 90]}\n          onValueChange={([value]) => handleChange(\"angle\", value)}\n          max={360}\n          step={1}\n        />\n      </div>\n    </div>\n  );\n}\n\n// Re-export icons used\nexport { Palette, Pipette } from \"lucide-react\";","\"use client\"\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { Loader2 } from \"lucide-react\";\n\n/**\n * Premium Input Component\n * \n * Erişilebilir, estetik ve işlevsel input bileşeni.\n * İkon desteği, hata gösterimi ve çeşitli varyantlar sunar.\n */\n\nconst inputWrapperVariants = cva(\n  \"group relative flex items-center w-full transition-colors\",\n  {\n    variants: {\n      size: {\n        sm: \"\",\n        md: \"\",\n        lg: \"\",\n      },\n    },\n    defaultVariants: {\n      size: \"md\",\n    },\n  }\n);\n\nconst inputVariants = cva(\n  [\n    \"w-full bg-background transition-all duration-200\",\n    \"text-foreground placeholder:text-muted-foreground dark:placeholder:text-gray-500\", \n    \"disabled:cursor-not-allowed disabled:opacity-50\",\n    \"file:border-0 file:bg-transparent file:font-medium\",\n    \"focus-visible:outline-none dark:text-gray-200\"\n  ],\n  {\n    variants: {\n      variant: {\n        standard: \"border border-gray-300 dark:border-gray-700 rounded-md px-3 py-2 hover:border-gray-400 dark:hover:border-gray-600 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20 focus-visible:border-primary dark:focus-visible:border-primary/80 dark:bg-gray-800/80 dark:shadow-inner dark:shadow-gray-950/10\",\n        filled: \"border border-transparent bg-gray-100 dark:bg-gray-800 rounded-md px-3 py-2 hover:bg-gray-200 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20 dark:shadow-inner dark:shadow-gray-950/10\",\n        ghost: \"border-none bg-transparent shadow-none px-1 dark:text-gray-300 dark:placeholder:text-gray-500 hover:bg-gray-100/50 dark:hover:bg-gray-800/30 focus-visible:bg-transparent\",\n        underline: \"border-t-0 border-l-0 border-r-0 border-b border-gray-300 dark:border-gray-600 rounded-none px-0 py-2 hover:border-gray-400 dark:hover:border-gray-500 focus-visible:ring-0 focus-visible:border-b-2 focus-visible:border-primary dark:focus-visible:border-primary/80 dark:text-gray-300 dark:bg-transparent\",\n      },\n      size: {\n        sm: \"h-8 text-xs\",\n        md: \"h-10 text-sm\",\n        lg: \"h-12 text-base\",\n      },\n      hasLeftIcon: {\n        true: \"pl-10\",\n        false: \"\",\n      },\n      hasRightIcon: {\n        true: \"pr-10\",\n        false: \"\",\n      },\n      hasRightButton: {\n        true: \"pr-10\",\n        false: \"\",\n      },\n      isError: {\n        true: \"border-error focus-visible:ring-error/30 focus-visible:border-error hover:border-error/80 dark:hover:border-error/80\",\n        false: \"\",\n      },\n      isSuccess: {\n        true: \"border-success focus-visible:ring-success/30 focus-visible:border-success hover:border-success/80 dark:hover:border-success/80\",\n        false: \"\",\n      },\n      isDisabled: {\n        true: \"opacity-50 cursor-not-allowed bg-gray-50 dark:bg-gray-800/50 pointer-events-none\",\n        false: \"\",\n      }\n    },\n    defaultVariants: {\n      variant: \"standard\",\n      size: \"md\",\n      isError: false,\n      isSuccess: false,\n      isDisabled: false,\n      hasLeftIcon: false,\n      hasRightIcon: false,\n      hasRightButton: false,\n    },\n  }\n);\n\nexport interface InputProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n    Omit<VariantProps<typeof inputVariants>, \"isDisabled\" | \"hasLeftIcon\" | \"hasRightIcon\" | \"hasRightButton\"> {\n  /** Label metni */\n  label?: string;\n  /** Floating label animasyonu (Material Design pattern) */\n  floatingLabel?: boolean;\n  /** Floating label için ek sınıflar */\n  floatingLabelClassName?: string;\n  /** Hata mesajı */\n  error?: string;\n  /** Başarı mesajı */\n  success?: string;\n  /** Yükleniyor durumu */\n  loading?: boolean;\n  /** Sol tarafta gösterilecek ikon */\n  leftIcon?: React.ReactNode;\n  /** Sağ tarafta gösterilecek ikon */\n  rightIcon?: React.ReactNode;\n  /** Sağ tarafta gösterilecek buton (password show/hide vb. için) */\n  rightButton?: React.ReactNode;\n  /** Mesajın görünürlüğü (true: her zaman görünür, false: sadece hata/başarı durumunda) */\n  alwaysShowMessage?: boolean;\n  /** Input wrapper için ek sınıflar */\n  wrapperClassName?: string;\n  /** Mesaj için ek sınıflar */\n  messageClassName?: string;\n}\n\n/**\n * Premium Input Component\n * \n * @param props - Input bileşeni özellikleri\n * @param props.variant - Görsel varyant (standard, filled, ghost, underline)\n * @param props.size - Boyut (sm, md, lg)\n * @param props.error - Hata mesajı\n * @param props.success - Başarı mesajı\n * @param props.loading - Yükleniyor durumu\n * @param props.leftIcon - Sol tarafta gösterilecek ikon\n * @param props.rightIcon - Sağ tarafta gösterilecek ikon\n * @param props.rightButton - Sağ tarafta gösterilecek buton\n * @param props.alwaysShowMessage - Mesajın her zaman görünür olması\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({\n    className,\n    wrapperClassName,\n    messageClassName,\n    variant,\n    size,\n    isError,\n    disabled,\n    error,\n    success,\n    loading,\n    leftIcon,\n    rightIcon,\n    rightButton,\n    alwaysShowMessage = false,\n    label,\n    floatingLabel = false,\n    floatingLabelClassName,\n    value,\n    defaultValue,\n    onChange,\n    onFocus,\n    onBlur,\n    placeholder,\n    ...props\n  }, ref) => {\n    // Floating label state management\n    const [isFocused, setIsFocused] = React.useState(false);\n    const [internalValue, setInternalValue] = React.useState(value || defaultValue || \"\");\n\n    // Floating label aktif mi kontrolü\n    const hasValue = internalValue !== \"\" && internalValue !== null && internalValue !== undefined;\n    const isLabelActive = isFocused || hasValue;\n\n    // Event handler'lar\n    const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n      setIsFocused(true);\n      onFocus?.(e);\n    };\n\n    const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n      setIsFocused(false);\n      onBlur?.(e);\n    };\n\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      setInternalValue(e.target.value);\n      onChange?.(e);\n    };\n\n    // Value değişikliklerini takip et\n    React.useEffect(() => {\n      if (value !== undefined) {\n        setInternalValue(value);\n      }\n    }, [value]);\n\n    // Mesajı göster/gizle\n    const showMessage = alwaysShowMessage || error || success;\n    const messageType = error ? \"error\" : success ? \"success\" : \"normal\";\n\n    return (\n      <div className=\"space-y-1.5 w-full\">\n        <div className={cn(\"moonui-theme\", inputWrapperVariants({ size }), wrapperClassName)}>\n          {/* Floating Label */}\n          {floatingLabel && label && (\n            <label\n              htmlFor={props.id}\n              className={cn(\n                \"absolute transition-all duration-200 pointer-events-none\",\n                leftIcon || loading ? \"left-10\" : \"left-3\",\n                \"text-gray-500 dark:text-gray-400\",\n                isLabelActive\n                  ? \"top-0 -translate-y-1/2 text-xs bg-background dark:bg-gray-800 px-1\"\n                  : \"top-1/2 -translate-y-1/2 text-sm\",\n                isFocused && \"text-primary dark:text-primary\",\n                !!error && \"text-error\",\n                disabled && \"opacity-50\",\n                floatingLabelClassName\n              )}\n            >\n              {label}\n            </label>\n          )}\n\n          {leftIcon && (\n            <div className=\"absolute left-3 text-gray-500 flex items-center justify-center pointer-events-none\">\n              {loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : leftIcon}\n            </div>\n          )}\n\n          <input\n            className={cn(\n              inputVariants({\n                variant,\n                size,\n                isError: !!error || isError,\n                isSuccess: !!success,\n                isDisabled: disabled || loading,\n                hasLeftIcon: !!leftIcon || loading,\n                hasRightIcon: !!rightIcon,\n                hasRightButton: !!rightButton,\n              }),\n              className\n            )}\n            ref={ref}\n            disabled={disabled || loading}\n            data-loading={loading ? \"\" : undefined}\n            data-error={!!error ? \"\" : undefined}\n            data-success={!!success ? \"\" : undefined}\n            aria-invalid={!!error || !!isError || undefined}\n            aria-describedby={error ? `${props.id || ''}-error` : success ? `${props.id || ''}-success` : undefined}\n            value={value}\n            defaultValue={defaultValue}\n            onChange={handleChange}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            placeholder={floatingLabel ? (isLabelActive ? placeholder : \"\") : placeholder}\n            {...props}\n          />\n\n          {rightIcon && !loading && (\n            <div className=\"absolute right-3 text-gray-500 flex items-center justify-center pointer-events-none\">\n              {rightIcon}\n            </div>\n          )}\n\n          {rightButton && (\n            <div className=\"absolute right-3\">\n              {rightButton}\n            </div>\n          )}\n\n          {loading && !leftIcon && (\n            <div className=\"absolute left-3 text-gray-500 flex items-center justify-center pointer-events-none\">\n              <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n            </div>\n          )}\n        </div>\n\n        {showMessage && (\n          <p\n            className={cn(\n              \"text-xs transition-all\",\n              messageType === \"error\" && \"text-error\",\n              messageType === \"success\" && \"text-success\",\n              messageType === \"normal\" && \"text-muted-foreground\",\n              messageClassName\n            )}\n            id={error ? `${props.id || ''}-error` : success ? `${props.id || ''}-success` : undefined}\n          >\n            {error || success || \"\"}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n  \"text-sm font-medium leading-none text-gray-900 dark:text-gray-200 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 dark:peer-disabled:opacity-60 transition-colors duration-200\"\n)\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n    VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(labelVariants(), className)}\n    {...props}\n  />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Popover Bileşeni\n * \n * Tıklanabilir bir öğeden açılan, tema sistemiyle tam entegre bir içerik bileşeni.\n * Filtreler, ayarlar ve diğer içerikler için kullanışlı ve erişilebilir bir arayüz sağlar.\n */\n\nconst popoverContentVariants = cva(\n  \"z-50 w-72 rounded-md border border-border bg-background p-4 shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        destructive: \"border-destructive bg-destructive/5\",\n        outline: \"border-border bg-transparent\",\n        subtle: \"border-transparent bg-muted/50\",\n      },\n      size: {\n        sm: \"w-48 p-3\",\n        default: \"w-72 p-4\",\n        lg: \"w-96 p-5\",\n      },\n      side: {\n        top: \"data-[side=top]:slide-in-from-bottom-2\",\n        right: \"data-[side=right]:slide-in-from-left-2\",\n        bottom: \"data-[side=bottom]:slide-in-from-top-2\",\n        left: \"data-[side=left]:slide-in-from-right-2\",\n      },\n      position: {\n        pointerEventsNone: \"pointer-events-none\",\n        default: \"\",\n      },\n      radius: {\n        none: \"rounded-none\",\n        sm: \"rounded-sm\",\n        default: \"rounded-md\",\n        lg: \"rounded-lg\",\n        full: \"rounded-full\",\n      },\n      shadow: {\n        none: \"shadow-none\",\n        sm: \"shadow-sm\",\n        default: \"shadow-md\",\n        md: \"shadow-md\",\n        lg: \"shadow-lg\",\n        xl: \"shadow-xl\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      radius: \"default\",\n      shadow: \"default\",\n    },\n  }\n);\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport interface PopoverContentProps \n  extends Omit<React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>, 'side'>,\n    VariantProps<typeof popoverContentVariants> {\n  /**\n   * Popover'ın arka plan bulanıklığı etkin mi\n   */\n  backdrop?: boolean;\n  /**\n   * Popover'a tıklandığında kapanıp kapanmayacağı\n   */\n  closeOnInteractOutside?: boolean;\n  /**\n   * Popover açıkken arka planın karartılması\n   */\n  overlayBackdrop?: boolean;\n}\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  PopoverContentProps\n>(({\n  className,\n  variant,\n  size,\n  side,\n  position,\n  radius,\n  shadow,\n  backdrop = false,\n  closeOnInteractOutside = true,\n  overlayBackdrop = false,\n  sideOffset = 4,\n  ...props\n}, ref) => (\n  <>\n    {overlayBackdrop && (\n      <div className=\"fixed inset-0 z-40 bg-overlay opacity-30\" />\n    )}\n    <PopoverPrimitive.Content\n      ref={ref}\n      sideOffset={sideOffset}\n      collisionPadding={8}\n      onInteractOutside={(e) => {\n        if (!closeOnInteractOutside) {\n          e.preventDefault();\n        }\n      }}\n      className={cn(\n        popoverContentVariants({ \n          variant, \n          size, \n          side, \n          position,\n          radius,\n          shadow\n        }),\n        backdrop && \"backdrop-blur-md bg-opacity-80\",\n        className\n      )}\n      {...props}\n    />\n  </>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\n/**\n * PopoverClose bileşeni\n */\nconst PopoverClose = PopoverPrimitive.Close;\n\n/**\n * Popover için bölüm ayırıcı\n */\nconst PopoverSeparator = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\"moonui-theme\", \"my-2 h-px bg-border\", className)}\n    {...props}\n  />\n);\nPopoverSeparator.displayName = \"PopoverSeparator\";\n\n/**\n * Popover başlık bileşeni\n */\nconst PopoverHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\"moonui-theme\", \"-mx-4 -mt-4 mb-3 px-4 pt-4 pb-3 border-b border-border\", className)}\n    {...props}\n  />\n);\nPopoverHeader.displayName = \"PopoverHeader\";\n\n/**\n * Popover footer bileşeni\n */\nconst PopoverFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\"moonui-theme\", \"-mx-4 -mb-4 mt-3 px-4 pt-3 pb-4 border-t border-border\", className)}\n    {...props}\n  />\n);\nPopoverFooter.displayName = \"PopoverFooter\";\n\nexport {\n  Popover,\n  PopoverTrigger,\n  PopoverContent,\n  PopoverAnchor,\n  PopoverClose,\n  PopoverSeparator,\n  PopoverHeader,\n  PopoverFooter,\n  popoverContentVariants,\n};\n","\"use client\"\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n/* -------------------------------------------------------------------------------------------------\n * Tabs Root\n * -----------------------------------------------------------------------------------------------*/\ninterface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {\n  /** Mobil görünümde dikey düzen için */\n  vertical?: boolean;\n}\n\nconst Tabs = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Root>,\n  TabsProps\n>(({ vertical = false, ...props }, ref) => (\n  <TabsPrimitive.Root\n    ref={ref}\n    className={cn(\"moonui-theme\", props.className)}\n    orientation={vertical ? \"vertical\" : \"horizontal\"}\n    {...props}\n  />\n));\n\nTabs.displayName = TabsPrimitive.Root.displayName;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsList\n * -----------------------------------------------------------------------------------------------*/\nconst tabsListVariants = cva(\n  \"flex items-center justify-start transition-all duration-200\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-muted rounded-md p-1 text-muted-foreground dark:bg-gray-800/80 dark:text-gray-400\",\n        pills: \"bg-transparent gap-3 p-0 dark:text-gray-400\",\n        underline: \"bg-transparent border-b border-border dark:border-gray-700 gap-4 dark:text-gray-400\",\n        cards: \"bg-transparent gap-2 p-0 dark:text-gray-400\",\n        minimal: \"bg-transparent gap-1 p-0 dark:text-gray-400\",\n      },\n      orientation: {\n        horizontal: \"flex-row\",\n        vertical: \"flex-col items-start gap-1\"\n      },\n      fullWidth: {\n        true: \"w-full\"\n      },\n      scrollable: {\n        true: \"overflow-x-auto overflow-y-hidden flex-nowrap hide-scrollbar\",\n        false: \"flex-wrap\"\n      }\n    },\n    defaultVariants: {\n      variant: \"default\",\n      orientation: \"horizontal\",\n      fullWidth: false,\n      scrollable: false\n    }\n  }\n);\n\ninterface TabsListProps\n  extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n    VariantProps<typeof tabsListVariants> {\n  /** Dikey düzende göster */\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Mobil için yatay scroll */\n  scrollable?: boolean;\n}\n\nconst TabsList = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.List>,\n  TabsListProps\n>(({ className, variant, orientation, fullWidth, scrollable, ...props }, ref) => {\n  // scrollable prop'unu DOM'a geçirmemek için destructure ediyoruz\n  return (\n    <TabsPrimitive.List\n      ref={ref}\n      className={cn(\"moonui-theme\", tabsListVariants({ variant, orientation, fullWidth, scrollable, className }))}\n      {...props}\n    />\n  );\n});\n\nTabsList.displayName = TabsPrimitive.List.displayName;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsTrigger\n * -----------------------------------------------------------------------------------------------*/\nconst tabsTriggerVariants = cva(\n  \"inline-flex items-center justify-center whitespace-nowrap flex-shrink-0 font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: \"rounded-md data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm dark:data-[state=active]:bg-gray-900 dark:data-[state=active]:text-gray-100 dark:data-[state=active]:shadow-gray-950/10\",\n        underline: \"rounded-none border-b-2 border-transparent pb-2 data-[state=active]:border-primary data-[state=active]:bg-transparent data-[state=active]:text-foreground dark:data-[state=active]:border-primary/80 dark:data-[state=active]:text-gray-100\",\n        pills: \"rounded-lg bg-gray-100 hover:bg-gray-200/80 border border-gray-300 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:border-primary dark:bg-gray-800 dark:hover:bg-gray-700 dark:border-gray-700 dark:data-[state=active]:bg-primary/90 dark:data-[state=active]:text-white dark:data-[state=active]:border-primary\",\n        cards: \"rounded-md bg-muted/50 hover:bg-muted data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-md dark:bg-gray-800/50 dark:hover:bg-gray-700/50 dark:data-[state=active]:bg-gray-900 dark:data-[state=active]:text-gray-100 dark:data-[state=active]:shadow-gray-950/20\",\n        minimal: \"rounded-sm bg-transparent hover:bg-muted/30 data-[state=active]:bg-transparent data-[state=active]:text-foreground data-[state=active]:underline data-[state=active]:underline-offset-4 dark:hover:bg-gray-800/30 dark:data-[state=active]:text-gray-200\",\n      },\n      size: {\n        sm: \"h-7 px-2 text-xs\",\n        md: \"h-9 px-3 py-1.5 text-sm\",\n        lg: \"h-10 px-4 py-2 text-base\",\n      },\n      orientation: {\n        horizontal: \"\",\n        vertical: \"justify-start w-full text-left\"\n      },\n      fullWidth: {\n        true: \"w-full\"\n      }\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n      orientation: \"horizontal\",\n      fullWidth: false\n    }\n  }\n);\n\ninterface TabsTriggerProps\n  extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n    VariantProps<typeof tabsTriggerVariants> {\n  /** İkon konumu */\n  iconPosition?: \"left\" | \"right\" | \"none\";\n  /** İkon */\n  icon?: React.ReactNode;\n  /** Badge içeriği */\n  badge?: React.ReactNode;\n  /** Aktif olmayan durumda yarı saydam */\n  fadeTabs?: boolean;\n  /** Dikey düzende göster */\n  orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst TabsTrigger = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Trigger>,\n  TabsTriggerProps\n>(({ \n  className, \n  variant, \n  size, \n  icon, \n  iconPosition = \"left\", \n  badge,\n  fadeTabs = false,\n  orientation,\n  fullWidth,\n  children, \n  ...props \n}, ref) => (\n  <TabsPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"moonui-theme\",\n      tabsTriggerVariants({ variant, size, orientation, fullWidth }),\n      fadeTabs && \"data-[state=inactive]:opacity-60\",\n      className\n    )}\n    {...props}\n  >\n    {icon && iconPosition === \"left\" && (\n      <span className=\"mr-2\">{icon}</span>\n    )}\n    {children}\n    {icon && iconPosition === \"right\" && (\n      <span className=\"ml-2\">{icon}</span>\n    )}\n    {badge && (\n      <span className=\"ml-2\">{badge}</span>\n    )}\n  </TabsPrimitive.Trigger>\n));\n\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsContent\n * -----------------------------------------------------------------------------------------------*/\ninterface TabsContentProps \n  extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> {\n  /** İçerik animasyonu */\n  animated?: boolean;\n}\n\nconst TabsContent = React.forwardRef<\n  React.ElementRef<typeof TabsPrimitive.Content>,\n  TabsContentProps\n>(({ className, animated = false, ...props }, ref) => (\n  <TabsPrimitive.Content\n    ref={ref}\n    className={cn(\n      \"moonui-theme\",\n      \"mt-6 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n      animated && \"data-[state=active]:animate-fadeIn data-[state=inactive]:animate-fadeOut\",\n      className\n    )}\n    {...props}\n  />\n));\n\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Slider Component\n *\n * Accessible, customizable slider component fully integrated with the theme system.\n * Used for value ranges like volume, brightness, price ranges.\n */\n\nconst sliderVariants = cva(\n  \"relative flex w-full touch-none select-none items-center\",\n  {\n    variants: {\n      size: {\n        sm: \"h-5\",\n        default: \"h-6\",\n        md: \"h-8\",\n        lg: \"h-10\",\n      },\n    },\n    defaultVariants: {\n      size: \"default\",\n    },\n  }\n)\n\nconst sliderTrackVariants = cva(\n  \"relative h-1.5 w-full grow overflow-hidden rounded-full\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-muted\",\n        primary: \"bg-primary/20\",\n        secondary: \"bg-secondary/20\",\n        accent: \"bg-accent/20\",\n        success: \"bg-success/20\",\n        warning: \"bg-warning/20\",\n        error: \"bg-error/20\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nconst sliderRangeVariants = cva(\n  \"absolute h-full\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-foreground\",\n        primary: \"bg-primary\",\n        secondary: \"bg-secondary\",\n        accent: \"bg-accent\",\n        success: \"bg-success\",\n        warning: \"bg-warning\",\n        error: \"bg-error\",\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n    },\n  }\n)\n\nconst sliderThumbVariants = cva(\n  \"block rounded-full border-2 ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: \"border-foreground bg-background\",\n        primary: \"border-primary bg-background\",\n        secondary: \"border-secondary bg-background\",\n        accent: \"border-accent bg-background\",\n        success: \"border-success bg-background\",\n        warning: \"border-warning bg-background\",\n        error: \"border-error bg-background\",\n      },\n      size: {\n        sm: \"h-3 w-3\",\n        default: \"h-4 w-4\",\n        md: \"h-5 w-5\",\n        lg: \"h-6 w-6\",\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n      size: \"default\",\n    },\n  }\n)\n\n// Custom type definition for component properties\ntype SliderBaseProps = {\n  /**\n   * Track variant\n   */\n  trackVariant?: VariantProps<typeof sliderTrackVariants>[\"variant\"];\n  /**\n   * Range variant\n   */\n  rangeVariant?: VariantProps<typeof sliderRangeVariants>[\"variant\"];\n  /**\n   * Thumb variant\n   */\n  thumbVariant?: VariantProps<typeof sliderThumbVariants>[\"variant\"];\n  /**\n   * Thumb size\n   */\n  thumbSize?: VariantProps<typeof sliderThumbVariants>[\"size\"];\n  /**\n   * Show value label\n   */\n  showValueLabel?: boolean;\n  /**\n   * Value label format function\n   */\n  valueLabelFormat?: (value: number) => string;\n  /**\n   * Value label class name\n   */\n  valueLabelClassName?: string;\n  /**\n   * Slider value\n   */\n  value?: number[];\n  /**\n   * Default value\n   */\n  defaultValue?: number[];\n  /**\n   * Function called when value changes\n   */\n  onValueChange?: (value: number[]) => void;\n  /**\n   * Minimum value\n   */\n  min?: number;\n  /**\n   * Maximum value\n   */\n  max?: number;\n  /**\n   * Step value\n   */\n  step?: number;\n  /**\n   * Slider size\n   */\n  size?: VariantProps<typeof sliderVariants>[\"size\"];\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n}\n\n// Merge HTML properties without defaultValue conflicts\ntype SliderProps = SliderBaseProps & Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'>\n\nconst Slider = React.forwardRef<\n  HTMLDivElement,\n  SliderProps\n>(({\n  className,\n  size,\n  trackVariant,\n  rangeVariant,\n  thumbVariant,\n  thumbSize,\n  showValueLabel = false,\n  valueLabelFormat,\n  valueLabelClassName,\n  value,\n  defaultValue = [0],\n  onValueChange,\n  disabled,\n  ...props\n}, ref) => {\n  // Value management\n  const [sliderValue, setSliderValue] = React.useState<number[]>(\n    value as number[] || defaultValue as number[] || [0]\n  );\n\n  React.useEffect(() => {\n    if (value !== undefined) {\n      setSliderValue(value as number[]);\n    }\n  }, [value]);\n\n  // Format value label with proper precision handling\n  const formatValue = (val: number) => {\n    if (valueLabelFormat) {\n      return valueLabelFormat(val);\n    }\n    // Round to avoid floating point precision issues\n    const roundedValue = Math.round(val * 100) / 100;\n    return `${roundedValue}`;\n  };\n\n  // Calculate percentage for thumb position\n  const calculateThumbPercent = (value: number, min: number, max: number) => {\n    return ((value - min) / (max - min)) * 100;\n  };\n\n  // Handle mouse/touch events\n  const trackRef = React.useRef<HTMLDivElement>(null);\n  \n  const min = props.min || 0;\n  const max = props.max || 100;\n  const step = props.step || 1;\n\n  // Handle value change with proper precision\n  const handleValueChange = (newValues: number[]) => {\n    // Round values to avoid floating point precision issues\n    const roundedValues = newValues.map(val => {\n      if (step < 1) {\n        // For decimal steps, round to appropriate decimal places\n        const decimals = step.toString().split('.')[1]?.length || 0;\n        return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n      }\n      return Math.round(val);\n    });\n    \n    setSliderValue(roundedValues);\n    if (onValueChange) {\n      onValueChange(roundedValues);\n    }\n  };\n\n  // Handle track click\n  const handleTrackClick = (event: React.MouseEvent<HTMLDivElement>) => {\n    if (disabled) return;\n    \n    const track = trackRef.current;\n    if (!track) return;\n\n    const rect = track.getBoundingClientRect();\n    const percent = (event.clientX - rect.left) / rect.width;\n    const rawValue = min + percent * (max - min);\n    const steppedValue = Math.round(rawValue / step) * step;\n    const boundedValue = Math.max(min, Math.min(max, steppedValue));\n    \n    const newValues = [...sliderValue];\n    // Just update the first thumb for simplicity\n    newValues[0] = boundedValue;\n    handleValueChange(newValues);\n  };\n\n  const handleThumbMouseDown = (index: number) => (event: React.MouseEvent) => {\n    if (disabled) return;\n    event.preventDefault();\n    \n    const handleMouseMove = (moveEvent: MouseEvent) => {\n      const track = trackRef.current;\n      if (!track) return;\n\n      const rect = track.getBoundingClientRect();\n      const percent = (moveEvent.clientX - rect.left) / rect.width;\n      const rawValue = min + percent * (max - min);\n      const steppedValue = Math.round(rawValue / step) * step;\n      const boundedValue = Math.max(min, Math.min(max, steppedValue));\n      \n      const newValues = [...sliderValue];\n      newValues[index] = boundedValue;\n      handleValueChange(newValues);\n    };\n\n    const handleMouseUp = () => {\n      document.removeEventListener('mousemove', handleMouseMove);\n      document.removeEventListener('mouseup', handleMouseUp);\n    };\n\n    document.addEventListener('mousemove', handleMouseMove);\n    document.addEventListener('mouseup', handleMouseUp);\n  };\n\n  return (\n    <div className=\"w-full\" ref={ref} {...props}>\n      {showValueLabel && (\n        <div className={cn(\n          \"flex justify-end mb-1 text-sm text-muted-foreground\",\n          valueLabelClassName\n        )}>\n          {sliderValue.length === 1 ? (\n            <span>{formatValue(sliderValue[0])}</span>\n          ) : (\n            <span>{formatValue(sliderValue[0])} - {formatValue(sliderValue[sliderValue.length - 1])}</span>\n          )}\n        </div>\n      )}\n      \n      <div\n        className={cn(\"moonui-theme\", sliderVariants({ size }), className)}\n        data-disabled={disabled ? true : undefined}\n      >\n        {/* Track */}\n        <div\n          ref={trackRef}\n          className={cn(sliderTrackVariants({ variant: trackVariant || thumbVariant || \"default\" }))}\n          onClick={handleTrackClick}\n        >\n          {/* Range */}\n          <div\n            className={cn(sliderRangeVariants({ variant: rangeVariant || thumbVariant || \"primary\" }))}\n            style={{\n              left: '0%',\n              width: `${calculateThumbPercent(sliderValue[0], min, max)}%`,\n            }}\n          />\n        </div>\n\n        {/* Thumbs */}\n        {sliderValue.map((value, i) => (\n          <div\n            key={i}\n            className={cn(sliderThumbVariants({\n              variant: thumbVariant || \"primary\",\n              size: thumbSize\n            }))}\n            style={{\n              left: `${calculateThumbPercent(value, min, max)}%`,\n              transform: 'translateX(-50%)',\n              position: 'absolute',\n              top: '50%',\n              marginTop: thumbSize === \"sm\" ? '-6px' : thumbSize === \"lg\" ? '-12px' : '-8px',\n              cursor: disabled ? 'not-allowed' : 'pointer',\n            }}\n            onMouseDown={handleThumbMouseDown(i)}\n            aria-label={`Thumb ${i + 1}`}\n            tabIndex={disabled ? -1 : 0}\n            role=\"slider\"\n            aria-valuemin={min}\n            aria-valuemax={max}\n            aria-valuenow={value}\n            aria-disabled={disabled}\n          />\n        ))}\n      </div>\n    </div>\n  )\n})\n\nSlider.displayName = \"Slider\"\n\nexport { Slider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Search } from \"lucide-react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Dialog, DialogContent, DialogTitle } from \"./dialog\"\n\n/**\n * Command (Komut Paleti) Bileşeni\n * \n * Gerçek command palette işlevselliği ile klavye navigasyonu, arama ve filtreleme.\n * cmdk kütüphanesi üzerine inşa edilmiş, tam özellikli command interface.\n */\n\nconst commandVariants = cva(\n  \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-popover text-popover-foreground\",\n        glass: \"bg-background/80 text-foreground backdrop-blur-sm\",\n        bordered: \"bg-popover text-popover-foreground border border-border\",\n      },\n      size: {\n        sm: \"min-h-[200px]\",\n        default: \"min-h-[300px]\",\n        lg: \"min-h-[400px]\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\n// Command bileşeni - cmdk primitive wrapper\ninterface CommandProps \n  extends React.ComponentProps<typeof CommandPrimitive>,\n    VariantProps<typeof commandVariants> {}\n\nconst Command = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive>,\n  CommandProps\n>(({ className, variant, size, ...props }, ref) => (\n  <CommandPrimitive\n    ref={ref}\n    className={cn(\"moonui-theme\", commandVariants({ variant, size }), className)}\n    {...props}\n  />\n))\nCommand.displayName = CommandPrimitive.displayName\n\n// CommandDialog bileşeni\ninterface CommandDialogProps extends React.ComponentProps<typeof Dialog> {\n  commandClassName?: string\n  children?: React.ReactNode\n}\n\nconst CommandDialog = ({ \n  children, \n  commandClassName,\n  ...props \n}: CommandDialogProps) => {\n  return (\n    <Dialog {...props}>\n      <DialogContent className=\"overflow-hidden p-0 shadow-lg\" hideCloseButton>\n        <DialogTitle className=\"sr-only\">Command Menu</DialogTitle>\n        <Command className={cn(\n          \"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\",\n          commandClassName\n        )}>\n          {children}\n        </Command>\n      </DialogContent>\n    </Dialog>\n  )\n}\n\n// CommandInput bileşeni\ninterface CommandInputProps \n  extends React.ComponentProps<typeof CommandPrimitive.Input> {}\n\nconst CommandInput = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Input>,\n  CommandInputProps\n>(({ className, ...props }, ref) => (\n  <div className=\"flex items-center border-b px-3\" cmdk-input-wrapper=\"\">\n    <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n    <CommandPrimitive.Input\n      ref={ref}\n      className={cn(\n        \"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  </div>\n))\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\n// CommandList bileşeni\ninterface CommandListProps \n  extends React.ComponentProps<typeof CommandPrimitive.List> {}\n\nconst CommandList = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.List>,\n  CommandListProps\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.List\n    ref={ref}\n    className={cn(\"moonui-theme\", \"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n    {...props}\n  />\n))\nCommandList.displayName = CommandPrimitive.List.displayName\n\n// CommandEmpty bileşeni\ninterface CommandEmptyProps \n  extends React.ComponentProps<typeof CommandPrimitive.Empty> {}\n\nconst CommandEmpty = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Empty>,\n  CommandEmptyProps\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Empty\n    ref={ref}\n    className={cn(\"moonui-theme\", \"py-6 text-center text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n))\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\n// CommandGroup bileşeni\ninterface CommandGroupProps \n  extends React.ComponentProps<typeof CommandPrimitive.Group> {}\n\nconst CommandGroup = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Group>,\n  CommandGroupProps\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Group\n    ref={ref}\n    className={cn(\n      \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n      className\n    )}\n    {...props}\n  />\n))\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\n// CommandSeparator bileşeni\ninterface CommandSeparatorProps \n  extends React.ComponentProps<typeof CommandPrimitive.Separator> {}\n\nconst CommandSeparator = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Separator>,\n  CommandSeparatorProps\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Separator\n    ref={ref}\n    className={cn(\"moonui-theme\", \"-mx-1 h-px bg-border\", className)}\n    {...props}\n  />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\n// CommandItem bileşeni\ninterface CommandItemProps \n  extends React.ComponentProps<typeof CommandPrimitive.Item> {}\n\nconst CommandItem = React.forwardRef<\n  React.ElementRef<typeof CommandPrimitive.Item>,\n  CommandItemProps\n>(({ className, ...props }, ref) => (\n  <CommandPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n      className\n    )}\n    {...props}\n  />\n))\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\n// CommandShortcut bileşeni - utility component\nconst CommandShortcut = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n  return (\n    <span\n      className={cn(\n        \"ml-auto text-xs tracking-widest text-muted-foreground\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n  Command,\n  CommandDialog,\n  CommandInput,\n  CommandList,\n  CommandEmpty,\n  CommandGroup,\n  CommandItem,\n  CommandShortcut,\n  CommandSeparator,\n}","var U=1,Y=.9,H=.8,J=.17,p=.1,u=.999,$=.9999;var k=.99,m=/[\\\\\\/_+.#\"@\\[\\(\\{&]/,B=/[\\\\\\/_+.#\"@\\[\\(\\{&]/g,K=/[\\s-]/,X=/[\\s-]/g;function G(_,C,h,P,A,f,O){if(f===C.length)return A===_.length?U:k;var T=`${A},${f}`;if(O[T]!==void 0)return O[T];for(var L=P.charAt(f),c=h.indexOf(L,A),S=0,E,N,R,M;c>=0;)E=G(_,C,h,P,c+1,f+1,O),E>S&&(c===A?E*=U:m.test(_.charAt(c-1))?(E*=H,R=_.slice(A,c-1).match(B),R&&A>0&&(E*=Math.pow(u,R.length))):K.test(_.charAt(c-1))?(E*=Y,M=_.slice(A,c-1).match(X),M&&A>0&&(E*=Math.pow(u,M.length))):(E*=J,A>0&&(E*=Math.pow(u,c-A))),_.charAt(c)!==C.charAt(f)&&(E*=$)),(E<p&&h.charAt(c-1)===P.charAt(f+1)||P.charAt(f+1)===P.charAt(f)&&h.charAt(c-1)!==P.charAt(f))&&(N=G(_,C,h,P,c+1,f+2,O),N*p>E&&(E=N*p)),E>S&&(S=E),c=h.indexOf(L,c+1);return O[T]=S,S}function D(_){return _.toLowerCase().replace(X,\" \")}function W(_,C,h){return _=h&&h.length>0?`${_+\" \"+h.join(\" \")}`:_,G(_,C,D(_),D(C),0,0,{})}export{W as a};\n","\"use client\";import{a as ae}from\"./chunk-NZJY6EH4.mjs\";import*as w from\"@radix-ui/react-dialog\";import*as t from\"react\";import{Primitive as D}from\"@radix-ui/react-primitive\";import{useId as H}from\"@radix-ui/react-id\";import{composeRefs as G}from\"@radix-ui/react-compose-refs\";var N='[cmdk-group=\"\"]',Y='[cmdk-group-items=\"\"]',be='[cmdk-group-heading=\"\"]',le='[cmdk-item=\"\"]',ce=`${le}:not([aria-disabled=\"true\"])`,Z=\"cmdk-item-select\",T=\"data-value\",Re=(r,o,n)=>ae(r,o,n),ue=t.createContext(void 0),K=()=>t.useContext(ue),de=t.createContext(void 0),ee=()=>t.useContext(de),fe=t.createContext(void 0),me=t.forwardRef((r,o)=>{let n=L(()=>{var e,a;return{search:\"\",value:(a=(e=r.value)!=null?e:r.defaultValue)!=null?a:\"\",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),u=L(()=>new Set),c=L(()=>new Map),d=L(()=>new Map),f=L(()=>new Set),p=pe(r),{label:b,children:m,value:R,onValueChange:x,filter:C,shouldFilter:S,loop:A,disablePointerSelection:ge=!1,vimBindings:j=!0,...O}=r,$=H(),q=H(),_=H(),I=t.useRef(null),v=ke();k(()=>{if(R!==void 0){let e=R.trim();n.current.value=e,E.emit()}},[R]),k(()=>{v(6,ne)},[]);let E=t.useMemo(()=>({subscribe:e=>(f.current.add(e),()=>f.current.delete(e)),snapshot:()=>n.current,setState:(e,a,s)=>{var i,l,g,y;if(!Object.is(n.current[e],a)){if(n.current[e]=a,e===\"search\")J(),z(),v(1,W);else if(e===\"value\"){if(document.activeElement.hasAttribute(\"cmdk-input\")||document.activeElement.hasAttribute(\"cmdk-root\")){let h=document.getElementById(_);h?h.focus():(i=document.getElementById($))==null||i.focus()}if(v(7,()=>{var h;n.current.selectedItemId=(h=M())==null?void 0:h.id,E.emit()}),s||v(5,ne),((l=p.current)==null?void 0:l.value)!==void 0){let h=a!=null?a:\"\";(y=(g=p.current).onValueChange)==null||y.call(g,h);return}}E.emit()}},emit:()=>{f.current.forEach(e=>e())}}),[]),U=t.useMemo(()=>({value:(e,a,s)=>{var i;a!==((i=d.current.get(e))==null?void 0:i.value)&&(d.current.set(e,{value:a,keywords:s}),n.current.filtered.items.set(e,te(a,s)),v(2,()=>{z(),E.emit()}))},item:(e,a)=>(u.current.add(e),a&&(c.current.has(a)?c.current.get(a).add(e):c.current.set(a,new Set([e]))),v(3,()=>{J(),z(),n.current.value||W(),E.emit()}),()=>{d.current.delete(e),u.current.delete(e),n.current.filtered.items.delete(e);let s=M();v(4,()=>{J(),(s==null?void 0:s.getAttribute(\"id\"))===e&&W(),E.emit()})}),group:e=>(c.current.has(e)||c.current.set(e,new Set),()=>{d.current.delete(e),c.current.delete(e)}),filter:()=>p.current.shouldFilter,label:b||r[\"aria-label\"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:$,inputId:_,labelId:q,listInnerRef:I}),[]);function te(e,a){var i,l;let s=(l=(i=p.current)==null?void 0:i.filter)!=null?l:Re;return e?s(e,n.current.search,a):0}function z(){if(!n.current.search||p.current.shouldFilter===!1)return;let e=n.current.filtered.items,a=[];n.current.filtered.groups.forEach(i=>{let l=c.current.get(i),g=0;l.forEach(y=>{let h=e.get(y);g=Math.max(h,g)}),a.push([i,g])});let s=I.current;V().sort((i,l)=>{var h,F;let g=i.getAttribute(\"id\"),y=l.getAttribute(\"id\");return((h=e.get(y))!=null?h:0)-((F=e.get(g))!=null?F:0)}).forEach(i=>{let l=i.closest(Y);l?l.appendChild(i.parentElement===l?i:i.closest(`${Y} > *`)):s.appendChild(i.parentElement===s?i:i.closest(`${Y} > *`))}),a.sort((i,l)=>l[1]-i[1]).forEach(i=>{var g;let l=(g=I.current)==null?void 0:g.querySelector(`${N}[${T}=\"${encodeURIComponent(i[0])}\"]`);l==null||l.parentElement.appendChild(l)})}function W(){let e=V().find(s=>s.getAttribute(\"aria-disabled\")!==\"true\"),a=e==null?void 0:e.getAttribute(T);E.setState(\"value\",a||void 0)}function J(){var a,s,i,l;if(!n.current.search||p.current.shouldFilter===!1){n.current.filtered.count=u.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let g of u.current){let y=(s=(a=d.current.get(g))==null?void 0:a.value)!=null?s:\"\",h=(l=(i=d.current.get(g))==null?void 0:i.keywords)!=null?l:[],F=te(y,h);n.current.filtered.items.set(g,F),F>0&&e++}for(let[g,y]of c.current)for(let h of y)if(n.current.filtered.items.get(h)>0){n.current.filtered.groups.add(g);break}n.current.filtered.count=e}function ne(){var a,s,i;let e=M();e&&(((a=e.parentElement)==null?void 0:a.firstChild)===e&&((i=(s=e.closest(N))==null?void 0:s.querySelector(be))==null||i.scrollIntoView({block:\"nearest\"})),e.scrollIntoView({block:\"nearest\"}))}function M(){var e;return(e=I.current)==null?void 0:e.querySelector(`${le}[aria-selected=\"true\"]`)}function V(){var e;return Array.from(((e=I.current)==null?void 0:e.querySelectorAll(ce))||[])}function X(e){let s=V()[e];s&&E.setState(\"value\",s.getAttribute(T))}function Q(e){var g;let a=M(),s=V(),i=s.findIndex(y=>y===a),l=s[i+e];(g=p.current)!=null&&g.loop&&(l=i+e<0?s[s.length-1]:i+e===s.length?s[0]:s[i+e]),l&&E.setState(\"value\",l.getAttribute(T))}function re(e){let a=M(),s=a==null?void 0:a.closest(N),i;for(;s&&!i;)s=e>0?we(s,N):De(s,N),i=s==null?void 0:s.querySelector(ce);i?E.setState(\"value\",i.getAttribute(T)):Q(e)}let oe=()=>X(V().length-1),ie=e=>{e.preventDefault(),e.metaKey?oe():e.altKey?re(1):Q(1)},se=e=>{e.preventDefault(),e.metaKey?X(0):e.altKey?re(-1):Q(-1)};return t.createElement(D.div,{ref:o,tabIndex:-1,...O,\"cmdk-root\":\"\",onKeyDown:e=>{var s;(s=O.onKeyDown)==null||s.call(O,e);let a=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||a))switch(e.key){case\"n\":case\"j\":{j&&e.ctrlKey&&ie(e);break}case\"ArrowDown\":{ie(e);break}case\"p\":case\"k\":{j&&e.ctrlKey&&se(e);break}case\"ArrowUp\":{se(e);break}case\"Home\":{e.preventDefault(),X(0);break}case\"End\":{e.preventDefault(),oe();break}case\"Enter\":{e.preventDefault();let i=M();if(i){let l=new Event(Z);i.dispatchEvent(l)}}}}},t.createElement(\"label\",{\"cmdk-label\":\"\",htmlFor:U.inputId,id:U.labelId,style:Te},b),B(r,e=>t.createElement(de.Provider,{value:E},t.createElement(ue.Provider,{value:U},e))))}),he=t.forwardRef((r,o)=>{var _,I;let n=H(),u=t.useRef(null),c=t.useContext(fe),d=K(),f=pe(r),p=(I=(_=f.current)==null?void 0:_.forceMount)!=null?I:c==null?void 0:c.forceMount;k(()=>{if(!p)return d.item(n,c==null?void 0:c.id)},[p]);let b=ve(n,u,[r.value,r.children,u],r.keywords),m=ee(),R=P(v=>v.value&&v.value===b.current),x=P(v=>p||d.filter()===!1?!0:v.search?v.filtered.items.get(n)>0:!0);t.useEffect(()=>{let v=u.current;if(!(!v||r.disabled))return v.addEventListener(Z,C),()=>v.removeEventListener(Z,C)},[x,r.onSelect,r.disabled]);function C(){var v,E;S(),(E=(v=f.current).onSelect)==null||E.call(v,b.current)}function S(){m.setState(\"value\",b.current,!0)}if(!x)return null;let{disabled:A,value:ge,onSelect:j,forceMount:O,keywords:$,...q}=r;return t.createElement(D.div,{ref:G(u,o),...q,id:n,\"cmdk-item\":\"\",role:\"option\",\"aria-disabled\":!!A,\"aria-selected\":!!R,\"data-disabled\":!!A,\"data-selected\":!!R,onPointerMove:A||d.getDisablePointerSelection()?void 0:S,onClick:A?void 0:C},r.children)}),Ee=t.forwardRef((r,o)=>{let{heading:n,children:u,forceMount:c,...d}=r,f=H(),p=t.useRef(null),b=t.useRef(null),m=H(),R=K(),x=P(S=>c||R.filter()===!1?!0:S.search?S.filtered.groups.has(f):!0);k(()=>R.group(f),[]),ve(f,p,[r.value,r.heading,b]);let C=t.useMemo(()=>({id:f,forceMount:c}),[c]);return t.createElement(D.div,{ref:G(p,o),...d,\"cmdk-group\":\"\",role:\"presentation\",hidden:x?void 0:!0},n&&t.createElement(\"div\",{ref:b,\"cmdk-group-heading\":\"\",\"aria-hidden\":!0,id:m},n),B(r,S=>t.createElement(\"div\",{\"cmdk-group-items\":\"\",role:\"group\",\"aria-labelledby\":n?m:void 0},t.createElement(fe.Provider,{value:C},S))))}),ye=t.forwardRef((r,o)=>{let{alwaysRender:n,...u}=r,c=t.useRef(null),d=P(f=>!f.search);return!n&&!d?null:t.createElement(D.div,{ref:G(c,o),...u,\"cmdk-separator\":\"\",role:\"separator\"})}),Se=t.forwardRef((r,o)=>{let{onValueChange:n,...u}=r,c=r.value!=null,d=ee(),f=P(m=>m.search),p=P(m=>m.selectedItemId),b=K();return t.useEffect(()=>{r.value!=null&&d.setState(\"search\",r.value)},[r.value]),t.createElement(D.input,{ref:o,...u,\"cmdk-input\":\"\",autoComplete:\"off\",autoCorrect:\"off\",spellCheck:!1,\"aria-autocomplete\":\"list\",role:\"combobox\",\"aria-expanded\":!0,\"aria-controls\":b.listId,\"aria-labelledby\":b.labelId,\"aria-activedescendant\":p,id:b.inputId,type:\"text\",value:c?r.value:f,onChange:m=>{c||d.setState(\"search\",m.target.value),n==null||n(m.target.value)}})}),Ce=t.forwardRef((r,o)=>{let{children:n,label:u=\"Suggestions\",...c}=r,d=t.useRef(null),f=t.useRef(null),p=P(m=>m.selectedItemId),b=K();return t.useEffect(()=>{if(f.current&&d.current){let m=f.current,R=d.current,x,C=new ResizeObserver(()=>{x=requestAnimationFrame(()=>{let S=m.offsetHeight;R.style.setProperty(\"--cmdk-list-height\",S.toFixed(1)+\"px\")})});return C.observe(m),()=>{cancelAnimationFrame(x),C.unobserve(m)}}},[]),t.createElement(D.div,{ref:G(d,o),...c,\"cmdk-list\":\"\",role:\"listbox\",tabIndex:-1,\"aria-activedescendant\":p,\"aria-label\":u,id:b.listId},B(r,m=>t.createElement(\"div\",{ref:G(f,b.listInnerRef),\"cmdk-list-sizer\":\"\"},m)))}),xe=t.forwardRef((r,o)=>{let{open:n,onOpenChange:u,overlayClassName:c,contentClassName:d,container:f,...p}=r;return t.createElement(w.Root,{open:n,onOpenChange:u},t.createElement(w.Portal,{container:f},t.createElement(w.Overlay,{\"cmdk-overlay\":\"\",className:c}),t.createElement(w.Content,{\"aria-label\":r.label,\"cmdk-dialog\":\"\",className:d},t.createElement(me,{ref:o,...p}))))}),Ie=t.forwardRef((r,o)=>P(u=>u.filtered.count===0)?t.createElement(D.div,{ref:o,...r,\"cmdk-empty\":\"\",role:\"presentation\"}):null),Pe=t.forwardRef((r,o)=>{let{progress:n,children:u,label:c=\"Loading...\",...d}=r;return t.createElement(D.div,{ref:o,...d,\"cmdk-loading\":\"\",role:\"progressbar\",\"aria-valuenow\":n,\"aria-valuemin\":0,\"aria-valuemax\":100,\"aria-label\":c},B(r,f=>t.createElement(\"div\",{\"aria-hidden\":!0},f)))}),_e=Object.assign(me,{List:Ce,Item:he,Input:Se,Group:Ee,Separator:ye,Dialog:xe,Empty:Ie,Loading:Pe});function we(r,o){let n=r.nextElementSibling;for(;n;){if(n.matches(o))return n;n=n.nextElementSibling}}function De(r,o){let n=r.previousElementSibling;for(;n;){if(n.matches(o))return n;n=n.previousElementSibling}}function pe(r){let o=t.useRef(r);return k(()=>{o.current=r}),o}var k=typeof window==\"undefined\"?t.useEffect:t.useLayoutEffect;function L(r){let o=t.useRef();return o.current===void 0&&(o.current=r()),o}function P(r){let o=ee(),n=()=>r(o.snapshot());return t.useSyncExternalStore(o.subscribe,n,n)}function ve(r,o,n,u=[]){let c=t.useRef(),d=K();return k(()=>{var b;let f=(()=>{var m;for(let R of n){if(typeof R==\"string\")return R.trim();if(typeof R==\"object\"&&\"current\"in R)return R.current?(m=R.current.textContent)==null?void 0:m.trim():c.current}})(),p=u.map(m=>m.trim());d.value(r,f,p),(b=o.current)==null||b.setAttribute(T,f),c.current=f}),c}var ke=()=>{let[r,o]=t.useState(),n=L(()=>new Map);return k(()=>{n.current.forEach(u=>u()),n.current=new Map},[r]),(u,c)=>{n.current.set(u,c),o({})}};function Me(r){let o=r.type;return typeof o==\"function\"?o(r.props):\"render\"in o?o.render(r.props):r}function B({asChild:r,children:o},n){return r&&t.isValidElement(o)?t.cloneElement(Me(o),{ref:o.ref},n(o.props.children)):n(o)}var Te={position:\"absolute\",width:\"1px\",height:\"1px\",padding:\"0\",margin:\"-1px\",overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\"};export{_e as Command,xe as CommandDialog,Ie as CommandEmpty,Ee as CommandGroup,Se as CommandInput,he as CommandItem,Ce as CommandList,Pe as CommandLoading,me as CommandRoot,ye as CommandSeparator,Re as defaultFilter,P as useCommandState};\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst NODES = [\n  'a',\n  'button',\n  'div',\n  'form',\n  'h2',\n  'h3',\n  'img',\n  'input',\n  'label',\n  'li',\n  'nav',\n  'ol',\n  'p',\n  'select',\n  'span',\n  'svg',\n  'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n  asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n  extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n  const Slot = createSlot(`Primitive.${node}`);\n  const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp: any = asChild ? Slot : node;\n\n    if (typeof window !== 'undefined') {\n      (window as any)[Symbol.for('radix-ui')] = true;\n    }\n\n    return <Comp {...primitiveProps} ref={forwardedRef} />;\n  });\n\n  Node.displayName = `Primitive.${node}`;\n\n  return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n *  - discrete\n *  - continuous\n *  - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an  important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n  Primitive,\n  //\n  Root,\n  //\n  dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// We spaces with `.trim().toString()` to prevent bundlers from trying to `import { useId } from 'react';`\nconst useReactId = (React as any)[' useId '.trim().toString()] || (() => undefined);\nlet count = 0;\n\nfunction useId(deterministicId?: string): string {\n  const [id, setId] = React.useState<string | undefined>(useReactId());\n  // React versions older than 18 will have client-side ids only.\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : '');\n}\n\nexport { useId };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    return ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    ref.current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == 'function') {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n\n    // React <19 will log an error to the console if a callback ref returns a\n    // value. We don't use ref cleanups internally so this will only happen if a\n    // user's ref callback returns a value, which we only expect if they are\n    // using the cleanup functionality added in React 19.\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == 'function') {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Check, Loader2, X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Premium Dialog Component\n *\n * Modern, accessible and customizable modal dialog component.\n * Enhances user experience with variants, sizes and rich features.\n * Provides a premium appearance with dark and light mode compatibility and fluid animations.\n */\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst overlayVariants = cva(\n    \"fixed inset-0 z-50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n    {\n        variants: {\n            variant: {\n                default: \"bg-black/80\",\n                subtle: \"bg-black/60\",\n                blur: \"bg-black/40 backdrop-blur-md\",\n                minimal: \"bg-black/20 backdrop-blur-sm\",\n            },\n            animation: {\n                default: \"duration-200\",\n                slow: \"duration-300\",\n                fast: \"duration-100\",\n            },\n        },\n        defaultVariants: {\n            variant: \"default\",\n            animation: \"default\",\n        },\n    }\n);\n\ninterface DialogOverlayProps\n    extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>,\n        VariantProps<typeof overlayVariants> {}\n\nconst DialogOverlay = React.forwardRef<\n    React.ElementRef<typeof DialogPrimitive.Overlay>,\n    DialogOverlayProps\n>(({ className, variant, animation, ...props }, ref) => (\n    <DialogPrimitive.Overlay\n        ref={ref}\n        className={cn(\"moonui-theme\", overlayVariants({ variant, animation }), className)}\n        {...props}\n    />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst dialogContentVariants = cva(\n    \"fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background shadow-lg\",\n    {\n        variants: {\n            variant: {\n                default: \"border-gray-200 dark:border-gray-700\",\n                primary: \"border-primary/20 dark:border-primary/30\",\n                secondary: \"border-gray-300 dark:border-gray-600\",\n                ghost: \"border-transparent shadow-xl\",\n                destructive: \"border-error/20 dark:border-error/30\",\n            },\n            size: {\n                xs: \"max-w-xs p-4\",\n                sm: \"max-w-sm p-5\",\n                default: \"max-w-lg p-6\",\n                md: \"max-w-md p-6\",\n                lg: \"max-w-2xl p-7\",\n                xl: \"max-w-4xl p-8\",\n                full: \"max-w-[95vw] max-h-[95vh] p-6\",\n            },\n            radius: {\n                none: \"rounded-none\",\n                sm: \"rounded-md\",\n                default: \"rounded-lg\",\n                lg: \"rounded-xl\",\n                xl: \"rounded-2xl\",\n                full: \"rounded-3xl\",\n            },\n            animation: {\n                default:\n                    \"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n                fade: \"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n                zoom: \"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n                slide: \"duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n                none: \"\",\n            },\n            position: {\n                default: \"top-[50%]\",\n                top: \"top-[5%]\",\n                bottom: \"bottom-[5%] top-auto translate-y-0\",\n            },\n        },\n        defaultVariants: {\n            variant: \"default\",\n            size: \"default\",\n            radius: \"default\",\n            animation: \"default\",\n            position: \"default\",\n        },\n    }\n);\n\ninterface DialogContentProps\n    extends Omit<React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, 'title'>,\n        VariantProps<typeof dialogContentVariants> {\n    /** X butonunu gizle */\n    hideCloseButton?: boolean;\n    /** Overlay varyantı */\n    overlayVariant?: VariantProps<typeof overlayVariants>[\"variant\"];\n    /** Overlay animasyonu */\n    overlayAnimation?: VariantProps<typeof overlayVariants>[\"animation\"];\n    /** İçerik başlığı (hızlı kullanım için) */\n    title?: React.ReactNode;\n    /** İçerik açıklaması (hızlı kullanım için) */\n    description?: React.ReactNode;\n    /** Başlık ikonu */\n    icon?: React.ReactNode;\n    /** Yükleniyor durumu */\n    loading?: boolean;\n    /** Success durumu */\n    success?: boolean;\n    /** Özel onClose handler */\n    onClose?: () => void;\n}\n\nconst DialogContent = React.forwardRef<\n    React.ElementRef<typeof DialogPrimitive.Content>,\n    DialogContentProps\n>(\n    (\n        {\n            className,\n            children,\n            variant,\n            size,\n            radius,\n            animation,\n            position,\n            overlayVariant = \"default\",\n            overlayAnimation = \"default\",\n            hideCloseButton = false,\n            title,\n            description,\n            icon,\n            loading = false,\n            success = false,\n            onClose,\n            ...props\n        },\n        ref\n    ) => {\n        // Capturing the close function through the Radix Dialog API\n        const handleClose = () => {\n            if (onClose) {\n                onClose();\n            }\n        };\n\n        return (\n            <DialogPortal>\n                <DialogOverlay\n                    variant={overlayVariant}\n                    animation={overlayAnimation}\n                    onClick={hideCloseButton ? undefined : handleClose}\n                />\n                <DialogPrimitive.Content\n                    ref={ref}\n                    onEscapeKeyDown={hideCloseButton ? undefined : handleClose}\n                    onInteractOutside={\n                        hideCloseButton ? undefined : handleClose\n                    }\n                    className={cn(\n                        dialogContentVariants({\n                            variant,\n                            size,\n                            radius,\n                            animation,\n                            position,\n                        }),\n                        \"outline-none\",\n                        loading && \"pointer-events-none\",\n                        success && \"border-success/40\",\n                        className\n                    )}\n                    {...props}\n                >\n                    {/* Başlık ve açıklama varsa otomatik olarak DialogHeader oluştur */}\n                    {(title || description || icon) && (\n                        <DialogHeader className=\"flex gap-4\">\n                            {/* İkon veya loading/success durumları */}\n                            {(icon || loading || success) && (\n                                <div className=\"flex shrink-0 items-center justify-center\">\n                                    {loading && (\n                                        <Loader2 className=\"h-5 w-5 animate-spin text-primary\" />\n                                    )}\n                                    {success && (\n                                        <Check className=\"h-5 w-5 text-success\" />\n                                    )}\n                                    {!loading && !success && icon && (\n                                        <span className=\"text-primary\">\n                                            {icon}\n                                        </span>\n                                    )}\n                                </div>\n                            )}\n                            <div className=\"flex-1\">\n                                {title && <DialogTitle>{title}</DialogTitle>}\n                                {description && (\n                                    <DialogDescription>\n                                        {description}\n                                    </DialogDescription>\n                                )}\n                            </div>\n                        </DialogHeader>\n                    )}\n\n                    {/* Main content */}\n                    {children}\n\n                    {/* Close button */}\n                    {!hideCloseButton && (\n                        <DialogPrimitive.Close\n                            onClick={handleClose}\n                            className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary/30 focus:ring-offset-2 disabled:pointer-events-none dark:text-gray-300 dark:hover:text-white\"\n                        >\n                            <X className=\"h-4 w-4\" />\n                            <span className=\"sr-only\">Close</span>\n                        </DialogPrimitive.Close>\n                    )}\n                </DialogPrimitive.Content>\n            </DialogPortal>\n        );\n    }\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n    className,\n    ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n    <div\n        className={cn(\n            \"flex flex-col space-y-2 text-center sm:text-left\",\n            className\n        )}\n        {...props}\n    />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n    className,\n    ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n    <div\n        className={cn(\n            \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end sm:space-x-2 mt-6\",\n            className\n        )}\n        {...props}\n    />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n    React.ElementRef<typeof DialogPrimitive.Title>,\n    React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n    <DialogPrimitive.Title\n        ref={ref}\n        className={cn(\n            \"text-xl font-semibold leading-snug tracking-tight dark:text-white\",\n            className\n        )}\n        {...props}\n    />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n    React.ElementRef<typeof DialogPrimitive.Description>,\n    React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n    <DialogPrimitive.Description\n        ref={ref}\n        className={cn(\n            \"text-sm text-muted-foreground leading-normal dark:text-gray-400\",\n            className\n        )}\n        {...props}\n    />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\n/**\n * Dialog-Form integration for use with form support\n * Used to integrate form submission processes into the modal\n */\nconst DialogForm = React.forwardRef<\n    HTMLFormElement,\n    React.HTMLAttributes<HTMLFormElement>\n>(({ className, ...props }, ref) => (\n    <form\n        ref={ref}\n        className={cn(\"moonui-theme\", \"flex flex-col gap-4\", className)}\n        {...props}\n    />\n));\nDialogForm.displayName = \"DialogForm\";\n\nexport {\n    Dialog,\n    DialogTrigger,\n    DialogContent,\n    DialogHeader,\n    DialogFooter,\n    DialogTitle,\n    DialogDescription,\n    DialogClose,\n    DialogForm,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n  ColumnDef,\n  SortingState,\n  flexRender,\n  getCoreRowModel,\n  getPaginationRowModel,\n  getSortedRowModel,\n  getFilteredRowModel,\n  useReactTable,\n} from \"@tanstack/react-table\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { \n  Table, \n  TableBody, \n  TableCell, \n  TableHead, \n  TableHeader, \n  TableRow \n} from \"./table\";\nimport {\n  ChevronLeft, \n  ChevronRight, \n  ArrowUpDown,\n  ArrowUp,\n  ArrowDown,\n  Search,\n} from \"lucide-react\";\n\n/**\n * Basic DataTable Component\n * \n * A simple data table with sorting, filtering, and pagination.\n * For advanced features, upgrade to MoonUI Pro.\n */\n\ninterface DataTableBasicProps<TData, TValue> {\n  /**\n   * The table columns definition\n   */\n  columns: ColumnDef<TData, TValue>[];\n  /**\n   * The data to display\n   */\n  data: TData[];\n  /**\n   * Enable/disable sorting\n   */\n  enableSorting?: boolean;\n  /**\n   * Enable/disable pagination\n   */\n  enablePagination?: boolean;\n  /**\n   * Enable/disable global search\n   */\n  enableSearch?: boolean;\n  /**\n   * Default page size\n   */\n  pageSize?: number;\n  /**\n   * Search placeholder text\n   */\n  searchPlaceholder?: string;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Class name\n   */\n  className?: string;\n}\n\nexport function DataTableBasic<TData, TValue>({\n  columns,\n  data,\n  enableSorting = true,\n  enablePagination = true,\n  enableSearch = true,\n  pageSize = 10,\n  searchPlaceholder = \"Search...\",\n  emptyMessage = \"No results found.\",\n  className,\n}: DataTableBasicProps<TData, TValue>) {\n  const [sorting, setSorting] = React.useState<SortingState>([]);\n  const [globalFilter, setGlobalFilter] = React.useState(\"\");\n\n  const table = useReactTable({\n    data,\n    columns,\n    onSortingChange: enableSorting ? setSorting : undefined,\n    onGlobalFilterChange: enableSearch ? setGlobalFilter : undefined,\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: enablePagination ? getPaginationRowModel() : undefined,\n    getSortedRowModel: enableSorting ? getSortedRowModel() : undefined,\n    getFilteredRowModel: enableSearch ? getFilteredRowModel() : undefined,\n    state: {\n      sorting,\n      globalFilter,\n    },\n    initialState: {\n      pagination: {\n        pageSize,\n      },\n    },\n  });\n\n  return (\n    <div className={cn(\"space-y-4\", className)}>\n      {/* Search */}\n      {enableSearch && (\n        <div className=\"flex items-center\">\n          <div className=\"relative max-w-sm\">\n            <Search className=\"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground\" />\n            <Input\n              placeholder={searchPlaceholder}\n              value={globalFilter}\n              onChange={(event) => setGlobalFilter(event.target.value)}\n              className=\"pl-8\"\n            />\n          </div>\n        </div>\n      )}\n\n      {/* Table */}\n      <div className=\"rounded-md border\">\n        <Table>\n          <TableHeader>\n            {table.getHeaderGroups().map((headerGroup) => (\n              <TableRow key={headerGroup.id}>\n                {headerGroup.headers.map((header) => {\n                  return (\n                    <TableHead key={header.id}>\n                      {header.isPlaceholder ? null : (\n                        <div\n                          className={cn(\n                            \"flex items-center gap-2\",\n                            header.column.getCanSort() && \"cursor-pointer select-none\"\n                          )}\n                          onClick={header.column.getToggleSortingHandler()}\n                        >\n                          {flexRender(\n                            header.column.columnDef.header,\n                            header.getContext()\n                          )}\n                          {enableSorting && header.column.getCanSort() && (\n                            <div className=\"ml-auto\">\n                              {header.column.getIsSorted() === \"desc\" ? (\n                                <ArrowDown className=\"h-4 w-4\" />\n                              ) : header.column.getIsSorted() === \"asc\" ? (\n                                <ArrowUp className=\"h-4 w-4\" />\n                              ) : (\n                                <ArrowUpDown className=\"h-4 w-4 opacity-50\" />\n                              )}\n                            </div>\n                          )}\n                        </div>\n                      )}\n                    </TableHead>\n                  );\n                })}\n              </TableRow>\n            ))}\n          </TableHeader>\n          <TableBody>\n            {table.getRowModel().rows?.length ? (\n              table.getRowModel().rows.map((row) => (\n                <TableRow\n                  key={row.id}\n                  data-state={row.getIsSelected() && \"selected\"}\n                >\n                  {row.getVisibleCells().map((cell) => (\n                    <TableCell key={cell.id}>\n                      {flexRender(\n                        cell.column.columnDef.cell,\n                        cell.getContext()\n                      )}\n                    </TableCell>\n                  ))}\n                </TableRow>\n              ))\n            ) : (\n              <TableRow>\n                <TableCell\n                  colSpan={columns.length}\n                  className=\"h-24 text-center\"\n                >\n                  {emptyMessage}\n                </TableCell>\n              </TableRow>\n            )}\n          </TableBody>\n        </Table>\n      </div>\n\n      {/* Pagination */}\n      {enablePagination && (\n        <div className=\"flex items-center justify-end space-x-2\">\n          <div className=\"flex-1 text-sm text-muted-foreground\">\n            {table.getFilteredRowModel().rows.length} row(s)\n          </div>\n          <div className=\"space-x-2\">\n            <Button\n              variant=\"outline\"\n              size=\"sm\"\n              onClick={() => table.previousPage()}\n              disabled={!table.getCanPreviousPage()}\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n              Previous\n            </Button>\n            <span className=\"text-sm\">\n              Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n              {table.getPageCount()}\n            </span>\n            <Button\n              variant=\"outline\"\n              size=\"sm\"\n              onClick={() => table.nextPage()}\n              disabled={!table.getCanNextPage()}\n            >\n              Next\n              <ChevronRight className=\"h-4 w-4\" />\n            </Button>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n\n/**\n * Simple sortable header helper\n */\nexport function createSortableHeader(label: string) {\n  return ({ column }: any) => (\n    <Button\n      variant=\"ghost\"\n      className=\"-ml-3 h-8 data-[state=open]:bg-accent\"\n      onClick={() => column.toggleSorting(column.getIsSorted() === \"asc\")}\n    >\n      {label}\n      {column.getIsSorted() === \"desc\" ? (\n        <ArrowDown className=\"ml-2 h-4 w-4\" />\n      ) : column.getIsSorted() === \"asc\" ? (\n        <ArrowUp className=\"ml-2 h-4 w-4\" />\n      ) : (\n        <ArrowUpDown className=\"ml-2 h-4 w-4\" />\n      )}\n    </Button>\n  );\n}\n\n// Export utilities\nexport { type ColumnDef } from \"@tanstack/react-table\";","import { TableOptionsResolved, TableState, Updater } from './types'\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type RequiredKeys<T, K extends keyof T> = Omit<T, K> &\n  Required<Pick<T, K>>\nexport type Overwrite<T, U extends { [TKey in keyof T]?: any }> = Omit<\n  T,\n  keyof U\n> &\n  U\n\nexport type UnionToIntersection<T> = (\n  T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n  ? R\n  : never\n\nexport type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N\nexport type IsKnown<T, Y, N> = unknown extends T ? N : Y\n\ntype ComputeRange<\n  N extends number,\n  Result extends Array<unknown> = [],\n> = Result['length'] extends N\n  ? Result\n  : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n  ? Length extends Index40\n    ? T\n    : never\n  : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n  Tuple extends ReadonlyArray<any>,\n  Keys extends number = never,\n> = Tuple extends readonly []\n  ? Keys\n  : Tuple extends readonly [infer _, ...infer Tail]\n    ? AllowedIndexes<Tail, Keys | Tail['length']>\n    : Keys\n\nexport type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5\n  ? never\n  : unknown extends T\n    ? string\n    : T extends readonly any[] & IsTuple<T>\n      ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>\n      : T extends any[]\n        ? DeepKeys<T[number], [...TDepth, any]>\n        : T extends Date\n          ? never\n          : T extends object\n            ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>\n            : never\n\ntype DeepKeysPrefix<\n  T,\n  TPrefix,\n  TDepth extends any[],\n> = TPrefix extends keyof T & (number | string)\n  ? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`\n  : never\n\nexport type DeepValue<T, TProp> =\n  T extends Record<string | number, any>\n    ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n      ? DeepValue<T[TBranch], TDeepProp>\n      : T[TProp & string]\n    : never\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport type Getter<TValue> = <TTValue = TValue>() => NoInfer<TTValue>\n\n///\n\nexport function functionalUpdate<T>(updater: Updater<T>, input: T): T {\n  return typeof updater === 'function'\n    ? (updater as (input: T) => T)(input)\n    : updater\n}\n\nexport function noop() {\n  //\n}\n\nexport function makeStateUpdater<K extends keyof TableState>(\n  key: K,\n  instance: unknown\n) {\n  return (updater: Updater<TableState[K]>) => {\n    ;(instance as any).setState(<TTableState>(old: TTableState) => {\n      return {\n        ...old,\n        [key]: functionalUpdate(updater, (old as any)[key]),\n      }\n    })\n  }\n}\n\ntype AnyFunction = (...args: any) => any\n\nexport function isFunction<T extends AnyFunction>(d: any): d is T {\n  return d instanceof Function\n}\n\nexport function isNumberArray(d: any): d is number[] {\n  return Array.isArray(d) && d.every(val => typeof val === 'number')\n}\n\nexport function flattenBy<TNode>(\n  arr: TNode[],\n  getChildren: (item: TNode) => TNode[]\n) {\n  const flat: TNode[] = []\n\n  const recurse = (subArr: TNode[]) => {\n    subArr.forEach(item => {\n      flat.push(item)\n      const children = getChildren(item)\n      if (children?.length) {\n        recurse(children)\n      }\n    })\n  }\n\n  recurse(arr)\n\n  return flat\n}\n\nexport function memo<TDeps extends readonly any[], TDepArgs, TResult>(\n  getDeps: (depArgs?: TDepArgs) => [...TDeps],\n  fn: (...args: NoInfer<[...TDeps]>) => TResult,\n  opts: {\n    key: any\n    debug?: () => any\n    onChange?: (result: TResult) => void\n  }\n): (depArgs?: TDepArgs) => TResult {\n  let deps: any[] = []\n  let result: TResult | undefined\n\n  return depArgs => {\n    let depTime: number\n    if (opts.key && opts.debug) depTime = Date.now()\n\n    const newDeps = getDeps(depArgs)\n\n    const depsChanged =\n      newDeps.length !== deps.length ||\n      newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n    if (!depsChanged) {\n      return result!\n    }\n\n    deps = newDeps\n\n    let resultTime: number\n    if (opts.key && opts.debug) resultTime = Date.now()\n\n    result = fn(...newDeps)\n    opts?.onChange?.(result)\n\n    if (opts.key && opts.debug) {\n      if (opts?.debug()) {\n        const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n        const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n        const resultFpsPercentage = resultEndTime / 16\n\n        const pad = (str: number | string, num: number) => {\n          str = String(str)\n          while (str.length < num) {\n            str = ' ' + str\n          }\n          return str\n        }\n\n        console.info(\n          `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n          `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(\n              0,\n              Math.min(120 - 120 * resultFpsPercentage, 120)\n            )}deg 100% 31%);`,\n          opts?.key\n        )\n      }\n    }\n\n    return result!\n  }\n}\n\nexport function getMemoOptions(\n  tableOptions: Partial<TableOptionsResolved<any>>,\n  debugLevel:\n    | 'debugAll'\n    | 'debugCells'\n    | 'debugTable'\n    | 'debugColumns'\n    | 'debugRows'\n    | 'debugHeaders',\n  key: string,\n  onChange?: (result: any) => void\n) {\n  return {\n    debug: () => tableOptions?.debugAll ?? tableOptions[debugLevel],\n    key: process.env.NODE_ENV === 'development' && key,\n    onChange,\n  }\n}\n","import { RowData, Cell, Column, Row, Table } from '../types'\nimport { Getter, getMemoOptions, memo } from '../utils'\n\nexport interface CellContext<TData extends RowData, TValue> {\n  cell: Cell<TData, TValue>\n  column: Column<TData, TValue>\n  getValue: Getter<TValue>\n  renderValue: Getter<TValue | null>\n  row: Row<TData>\n  table: Table<TData>\n}\n\nexport interface CoreCell<TData extends RowData, TValue> {\n  /**\n   * The associated Column object for the cell.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#column)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  column: Column<TData, TValue>\n  /**\n   * Returns the rendering context (or props) for cell-based components like cells and aggregated cells. Use these props with your framework's `flexRender` utility to render these using the template of your choice:\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#getcontext)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  getContext: () => CellContext<TData, TValue>\n  /**\n   * Returns the value for the cell, accessed via the associated column's accessor key or accessor function.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#getvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  getValue: CellContext<TData, TValue>['getValue']\n  /**\n   * The unique ID for the cell across the entire table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#id)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  id: string\n  /**\n   * Renders the value for a cell the same as `getValue`, but will return the `renderFallbackValue` if no value is found.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#rendervalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  renderValue: CellContext<TData, TValue>['renderValue']\n  /**\n   * The associated Row object for the cell.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#row)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n   */\n  row: Row<TData>\n}\n\nexport function createCell<TData extends RowData, TValue>(\n  table: Table<TData>,\n  row: Row<TData>,\n  column: Column<TData, TValue>,\n  columnId: string\n): Cell<TData, TValue> {\n  const getRenderValue = () =>\n    cell.getValue() ?? table.options.renderFallbackValue\n\n  const cell: CoreCell<TData, TValue> = {\n    id: `${row.id}_${column.id}`,\n    row,\n    column,\n    getValue: () => row.getValue(columnId),\n    renderValue: getRenderValue,\n    getContext: memo(\n      () => [table, column, row, cell],\n      (table, column, row, cell) => ({\n        table,\n        column,\n        row,\n        cell: cell as Cell<TData, TValue>,\n        getValue: cell.getValue,\n        renderValue: cell.renderValue,\n      }),\n      getMemoOptions(table.options, 'debugCells', 'cell.getContext')\n    ),\n  }\n\n  table._features.forEach(feature => {\n    feature.createCell?.(\n      cell as Cell<TData, TValue>,\n      column,\n      row as Row<TData>,\n      table\n    )\n  }, {})\n\n  return cell as Cell<TData, TValue>\n}\n","import {\n  Column,\n  Table,\n  AccessorFn,\n  ColumnDef,\n  RowData,\n  ColumnDefResolved,\n} from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport interface CoreColumn<TData extends RowData, TValue> {\n  /**\n   * The resolved accessor function to use when extracting the value for the column from each row. Will only be defined if the column def has a valid accessor key or function defined.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#accessorfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  accessorFn?: AccessorFn<TData, TValue>\n  /**\n   * The original column def used to create the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#columndef)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  columnDef: ColumnDef<TData, TValue>\n  /**\n   * The child column (if the column is a group column). Will be an empty array if the column is not a group column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#columns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  columns: Column<TData, TValue>[]\n  /**\n   * The depth of the column (if grouped) relative to the root column def array.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#depth)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  depth: number\n  /**\n   * Returns the flattened array of this column and all child/grand-child columns for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#getflatcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  getFlatColumns: () => Column<TData, TValue>[]\n  /**\n   * Returns an array of all leaf-node columns for this column. If a column has no children, it is considered the only leaf-node column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#getleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  getLeafColumns: () => Column<TData, TValue>[]\n  /**\n   * The resolved unique identifier for the column resolved in this priority:\n      - A manual `id` property from the column def\n      - The accessor key from the column def\n      - The header string from the column def\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#id)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  id: string\n  /**\n   * The parent column for this column. Will be undefined if this is a root column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#parent)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n   */\n  parent?: Column<TData, TValue>\n}\n\nexport function createColumn<TData extends RowData, TValue>(\n  table: Table<TData>,\n  columnDef: ColumnDef<TData, TValue>,\n  depth: number,\n  parent?: Column<TData, TValue>\n): Column<TData, TValue> {\n  const defaultColumn = table._getDefaultColumnDef()\n\n  const resolvedColumnDef = {\n    ...defaultColumn,\n    ...columnDef,\n  } as ColumnDefResolved<TData>\n\n  const accessorKey = resolvedColumnDef.accessorKey\n\n  let id =\n    resolvedColumnDef.id ??\n    (accessorKey\n      ? typeof String.prototype.replaceAll === 'function'\n        ? accessorKey.replaceAll('.', '_')\n        : accessorKey.replace(/\\./g, '_')\n      : undefined) ??\n    (typeof resolvedColumnDef.header === 'string'\n      ? resolvedColumnDef.header\n      : undefined)\n\n  let accessorFn: AccessorFn<TData> | undefined\n\n  if (resolvedColumnDef.accessorFn) {\n    accessorFn = resolvedColumnDef.accessorFn\n  } else if (accessorKey) {\n    // Support deep accessor keys\n    if (accessorKey.includes('.')) {\n      accessorFn = (originalRow: TData) => {\n        let result = originalRow as Record<string, any>\n\n        for (const key of accessorKey.split('.')) {\n          result = result?.[key]\n          if (process.env.NODE_ENV !== 'production' && result === undefined) {\n            console.warn(\n              `\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`\n            )\n          }\n        }\n\n        return result\n      }\n    } else {\n      accessorFn = (originalRow: TData) =>\n        (originalRow as any)[resolvedColumnDef.accessorKey]\n    }\n  }\n\n  if (!id) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw new Error(\n        resolvedColumnDef.accessorFn\n          ? `Columns require an id when using an accessorFn`\n          : `Columns require an id when using a non-string header`\n      )\n    }\n    throw new Error()\n  }\n\n  let column: CoreColumn<TData, any> = {\n    id: `${String(id)}`,\n    accessorFn,\n    parent: parent as any,\n    depth,\n    columnDef: resolvedColumnDef as ColumnDef<TData, any>,\n    columns: [],\n    getFlatColumns: memo(\n      () => [true],\n      () => {\n        return [\n          column as Column<TData, TValue>,\n          ...column.columns?.flatMap(d => d.getFlatColumns()),\n        ]\n      },\n      getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')\n    ),\n    getLeafColumns: memo(\n      () => [table._getOrderColumnsFn()],\n      orderColumns => {\n        if (column.columns?.length) {\n          let leafColumns = column.columns.flatMap(column =>\n            column.getLeafColumns()\n          )\n\n          return orderColumns(leafColumns)\n        }\n\n        return [column as Column<TData, TValue>]\n      },\n      getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns')\n    ),\n  }\n\n  for (const feature of table._features) {\n    feature.createColumn?.(column as Column<TData, TValue>, table)\n  }\n\n  // Yes, we have to convert table to unknown, because we know more than the compiler here.\n  return column as Column<TData, TValue>\n}\n","import {\n  RowData,\n  Column,\n  Header,\n  HeaderGroup,\n  Table,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nconst debug = 'debugHeaders'\n\nexport interface CoreHeaderGroup<TData extends RowData> {\n  depth: number\n  headers: Header<TData, unknown>[]\n  id: string\n}\n\nexport interface HeaderContext<TData, TValue> {\n  /**\n   * An instance of a column.\n   */\n  column: Column<TData, TValue>\n  /**\n   * An instance of a header.\n   */\n  header: Header<TData, TValue>\n  /**\n   * The table instance.\n   */\n  table: Table<TData>\n}\n\nexport interface CoreHeader<TData extends RowData, TValue> {\n  /**\n   * The col-span for the header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#colspan)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  colSpan: number\n  /**\n   * The header's associated column object.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#column)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  column: Column<TData, TValue>\n  /**\n   * The depth of the header, zero-indexed based.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#depth)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  depth: number\n  /**\n   * Returns the rendering context (or props) for column-based components like headers, footers and filters.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#getcontext)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getContext: () => HeaderContext<TData, TValue>\n  /**\n   * Returns the leaf headers hierarchically nested under this header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#getleafheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeafHeaders: () => Header<TData, unknown>[]\n  /**\n   * The header's associated header group object.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#headergroup)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  headerGroup: HeaderGroup<TData>\n  /**\n   * The unique identifier for the header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#id)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  id: string\n  /**\n   * The index for the header within the header group.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#index)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  index: number\n  /**\n   * A boolean denoting if the header is a placeholder header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#isplaceholder)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  isPlaceholder: boolean\n  /**\n   * If the header is a placeholder header, this will be a unique header ID that does not conflict with any other headers across the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#placeholderid)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  placeholderId?: string\n  /**\n   * The row-span for the header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#rowspan)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  rowSpan: number\n  /**\n   * The header's hierarchical sub/child headers. Will be empty if the header's associated column is a leaf-column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#subheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  subHeaders: Header<TData, TValue>[]\n}\n\nexport interface HeadersInstance<TData extends RowData> {\n  /**\n   * Returns all header groups for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getheadergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getHeaderGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the header groups for the left pinned columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftheadergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeftHeaderGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the header groups for columns that are not pinned.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterheadergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getCenterHeaderGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the header groups for the right pinned columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightheadergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getRightHeaderGroups: () => HeaderGroup<TData>[]\n\n  /**\n   * Returns the footer groups for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getfootergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getFooterGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the footer groups for the left pinned columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftfootergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeftFooterGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the footer groups for columns that are not pinned.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterfootergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getCenterFooterGroups: () => HeaderGroup<TData>[]\n  /**\n   * If pinning, returns the footer groups for the right pinned columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightfootergroups)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getRightFooterGroups: () => HeaderGroup<TData>[]\n\n  /**\n   * Returns headers for all columns in the table, including parent headers.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getflatheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getFlatHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all left pinned columns in the table, including parent headers.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftflatheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeftFlatHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all columns that are not pinned, including parent headers.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterflatheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getCenterFlatHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all right pinned columns in the table, including parent headers.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightflatheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getRightFlatHeaders: () => Header<TData, unknown>[]\n\n  /**\n   * Returns headers for all leaf columns in the table, (not including parent headers).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleafheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeafHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all left pinned leaf columns in the table, (not including parent headers).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftleafheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getLeftLeafHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all columns that are not pinned, (not including parent headers).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterleafheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getCenterLeafHeaders: () => Header<TData, unknown>[]\n  /**\n   * If pinning, returns headers for all right pinned leaf columns in the table, (not including parent headers).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightleafheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n   */\n  getRightLeafHeaders: () => Header<TData, unknown>[]\n}\n\n//\n\nfunction createHeader<TData extends RowData, TValue>(\n  table: Table<TData>,\n  column: Column<TData, TValue>,\n  options: {\n    id?: string\n    isPlaceholder?: boolean\n    placeholderId?: string\n    index: number\n    depth: number\n  }\n): Header<TData, TValue> {\n  const id = options.id ?? column.id\n\n  let header: CoreHeader<TData, TValue> = {\n    id,\n    column,\n    index: options.index,\n    isPlaceholder: !!options.isPlaceholder,\n    placeholderId: options.placeholderId,\n    depth: options.depth,\n    subHeaders: [],\n    colSpan: 0,\n    rowSpan: 0,\n    headerGroup: null!,\n    getLeafHeaders: (): Header<TData, unknown>[] => {\n      const leafHeaders: Header<TData, unknown>[] = []\n\n      const recurseHeader = (h: CoreHeader<TData, any>) => {\n        if (h.subHeaders && h.subHeaders.length) {\n          h.subHeaders.map(recurseHeader)\n        }\n        leafHeaders.push(h as Header<TData, unknown>)\n      }\n\n      recurseHeader(header)\n\n      return leafHeaders\n    },\n    getContext: () => ({\n      table,\n      header: header as Header<TData, TValue>,\n      column,\n    }),\n  }\n\n  table._features.forEach(feature => {\n    feature.createHeader?.(header as Header<TData, TValue>, table)\n  })\n\n  return header as Header<TData, TValue>\n}\n\nexport const Headers: TableFeature = {\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    // Header Groups\n\n    table.getHeaderGroups = memo(\n      () => [\n        table.getAllColumns(),\n        table.getVisibleLeafColumns(),\n        table.getState().columnPinning.left,\n        table.getState().columnPinning.right,\n      ],\n      (allColumns, leafColumns, left, right) => {\n        const leftColumns =\n          left\n            ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n            .filter(Boolean) ?? []\n\n        const rightColumns =\n          right\n            ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n            .filter(Boolean) ?? []\n\n        const centerColumns = leafColumns.filter(\n          column => !left?.includes(column.id) && !right?.includes(column.id)\n        )\n\n        const headerGroups = buildHeaderGroups(\n          allColumns,\n          [...leftColumns, ...centerColumns, ...rightColumns],\n          table\n        )\n\n        return headerGroups\n      },\n      getMemoOptions(table.options, debug, 'getHeaderGroups')\n    )\n\n    table.getCenterHeaderGroups = memo(\n      () => [\n        table.getAllColumns(),\n        table.getVisibleLeafColumns(),\n        table.getState().columnPinning.left,\n        table.getState().columnPinning.right,\n      ],\n      (allColumns, leafColumns, left, right) => {\n        leafColumns = leafColumns.filter(\n          column => !left?.includes(column.id) && !right?.includes(column.id)\n        )\n        return buildHeaderGroups(allColumns, leafColumns, table, 'center')\n      },\n      getMemoOptions(table.options, debug, 'getCenterHeaderGroups')\n    )\n\n    table.getLeftHeaderGroups = memo(\n      () => [\n        table.getAllColumns(),\n        table.getVisibleLeafColumns(),\n        table.getState().columnPinning.left,\n      ],\n      (allColumns, leafColumns, left) => {\n        const orderedLeafColumns =\n          left\n            ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n            .filter(Boolean) ?? []\n\n        return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left')\n      },\n      getMemoOptions(table.options, debug, 'getLeftHeaderGroups')\n    )\n\n    table.getRightHeaderGroups = memo(\n      () => [\n        table.getAllColumns(),\n        table.getVisibleLeafColumns(),\n        table.getState().columnPinning.right,\n      ],\n      (allColumns, leafColumns, right) => {\n        const orderedLeafColumns =\n          right\n            ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n            .filter(Boolean) ?? []\n\n        return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right')\n      },\n      getMemoOptions(table.options, debug, 'getRightHeaderGroups')\n    )\n\n    // Footer Groups\n\n    table.getFooterGroups = memo(\n      () => [table.getHeaderGroups()],\n      headerGroups => {\n        return [...headerGroups].reverse()\n      },\n      getMemoOptions(table.options, debug, 'getFooterGroups')\n    )\n\n    table.getLeftFooterGroups = memo(\n      () => [table.getLeftHeaderGroups()],\n      headerGroups => {\n        return [...headerGroups].reverse()\n      },\n      getMemoOptions(table.options, debug, 'getLeftFooterGroups')\n    )\n\n    table.getCenterFooterGroups = memo(\n      () => [table.getCenterHeaderGroups()],\n      headerGroups => {\n        return [...headerGroups].reverse()\n      },\n      getMemoOptions(table.options, debug, 'getCenterFooterGroups')\n    )\n\n    table.getRightFooterGroups = memo(\n      () => [table.getRightHeaderGroups()],\n      headerGroups => {\n        return [...headerGroups].reverse()\n      },\n      getMemoOptions(table.options, debug, 'getRightFooterGroups')\n    )\n\n    // Flat Headers\n\n    table.getFlatHeaders = memo(\n      () => [table.getHeaderGroups()],\n      headerGroups => {\n        return headerGroups\n          .map(headerGroup => {\n            return headerGroup.headers\n          })\n          .flat()\n      },\n      getMemoOptions(table.options, debug, 'getFlatHeaders')\n    )\n\n    table.getLeftFlatHeaders = memo(\n      () => [table.getLeftHeaderGroups()],\n      left => {\n        return left\n          .map(headerGroup => {\n            return headerGroup.headers\n          })\n          .flat()\n      },\n      getMemoOptions(table.options, debug, 'getLeftFlatHeaders')\n    )\n\n    table.getCenterFlatHeaders = memo(\n      () => [table.getCenterHeaderGroups()],\n      left => {\n        return left\n          .map(headerGroup => {\n            return headerGroup.headers\n          })\n          .flat()\n      },\n      getMemoOptions(table.options, debug, 'getCenterFlatHeaders')\n    )\n\n    table.getRightFlatHeaders = memo(\n      () => [table.getRightHeaderGroups()],\n      left => {\n        return left\n          .map(headerGroup => {\n            return headerGroup.headers\n          })\n          .flat()\n      },\n      getMemoOptions(table.options, debug, 'getRightFlatHeaders')\n    )\n\n    // Leaf Headers\n\n    table.getCenterLeafHeaders = memo(\n      () => [table.getCenterFlatHeaders()],\n      flatHeaders => {\n        return flatHeaders.filter(header => !header.subHeaders?.length)\n      },\n      getMemoOptions(table.options, debug, 'getCenterLeafHeaders')\n    )\n\n    table.getLeftLeafHeaders = memo(\n      () => [table.getLeftFlatHeaders()],\n      flatHeaders => {\n        return flatHeaders.filter(header => !header.subHeaders?.length)\n      },\n      getMemoOptions(table.options, debug, 'getLeftLeafHeaders')\n    )\n\n    table.getRightLeafHeaders = memo(\n      () => [table.getRightFlatHeaders()],\n      flatHeaders => {\n        return flatHeaders.filter(header => !header.subHeaders?.length)\n      },\n      getMemoOptions(table.options, debug, 'getRightLeafHeaders')\n    )\n\n    table.getLeafHeaders = memo(\n      () => [\n        table.getLeftHeaderGroups(),\n        table.getCenterHeaderGroups(),\n        table.getRightHeaderGroups(),\n      ],\n      (left, center, right) => {\n        return [\n          ...(left[0]?.headers ?? []),\n          ...(center[0]?.headers ?? []),\n          ...(right[0]?.headers ?? []),\n        ]\n          .map(header => {\n            return header.getLeafHeaders()\n          })\n          .flat()\n      },\n      getMemoOptions(table.options, debug, 'getLeafHeaders')\n    )\n  },\n}\n\nexport function buildHeaderGroups<TData extends RowData>(\n  allColumns: Column<TData, unknown>[],\n  columnsToGroup: Column<TData, unknown>[],\n  table: Table<TData>,\n  headerFamily?: 'center' | 'left' | 'right'\n) {\n  // Find the max depth of the columns:\n  // build the leaf column row\n  // build each buffer row going up\n  //    placeholder for non-existent level\n  //    real column for existing level\n\n  let maxDepth = 0\n\n  const findMaxDepth = (columns: Column<TData, unknown>[], depth = 1) => {\n    maxDepth = Math.max(maxDepth, depth)\n\n    columns\n      .filter(column => column.getIsVisible())\n      .forEach(column => {\n        if (column.columns?.length) {\n          findMaxDepth(column.columns, depth + 1)\n        }\n      }, 0)\n  }\n\n  findMaxDepth(allColumns)\n\n  let headerGroups: HeaderGroup<TData>[] = []\n\n  const createHeaderGroup = (\n    headersToGroup: Header<TData, unknown>[],\n    depth: number\n  ) => {\n    // The header group we are creating\n    const headerGroup: HeaderGroup<TData> = {\n      depth,\n      id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n      headers: [],\n    }\n\n    // The parent columns we're going to scan next\n    const pendingParentHeaders: Header<TData, unknown>[] = []\n\n    // Scan each column for parents\n    headersToGroup.forEach(headerToGroup => {\n      // What is the latest (last) parent column?\n\n      const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]\n\n      const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n      let column: Column<TData, unknown>\n      let isPlaceholder = false\n\n      if (isLeafHeader && headerToGroup.column.parent) {\n        // The parent header is new\n        column = headerToGroup.column.parent\n      } else {\n        // The parent header is repeated\n        column = headerToGroup.column\n        isPlaceholder = true\n      }\n\n      if (\n        latestPendingParentHeader &&\n        latestPendingParentHeader?.column === column\n      ) {\n        // This column is repeated. Add it as a sub header to the next batch\n        latestPendingParentHeader.subHeaders.push(headerToGroup)\n      } else {\n        // This is a new header. Let's create it\n        const header = createHeader(table, column, {\n          id: [headerFamily, depth, column.id, headerToGroup?.id]\n            .filter(Boolean)\n            .join('_'),\n          isPlaceholder,\n          placeholderId: isPlaceholder\n            ? `${pendingParentHeaders.filter(d => d.column === column).length}`\n            : undefined,\n          depth,\n          index: pendingParentHeaders.length,\n        })\n\n        // Add the headerToGroup as a subHeader of the new header\n        header.subHeaders.push(headerToGroup)\n        // Add the new header to the pendingParentHeaders to get grouped\n        // in the next batch\n        pendingParentHeaders.push(header)\n      }\n\n      headerGroup.headers.push(headerToGroup)\n      headerToGroup.headerGroup = headerGroup\n    })\n\n    headerGroups.push(headerGroup)\n\n    if (depth > 0) {\n      createHeaderGroup(pendingParentHeaders, depth - 1)\n    }\n  }\n\n  const bottomHeaders = columnsToGroup.map((column, index) =>\n    createHeader(table, column, {\n      depth: maxDepth,\n      index,\n    })\n  )\n\n  createHeaderGroup(bottomHeaders, maxDepth - 1)\n\n  headerGroups.reverse()\n\n  // headerGroups = headerGroups.filter(headerGroup => {\n  //   return !headerGroup.headers.every(header => header.isPlaceholder)\n  // })\n\n  const recurseHeadersForSpans = (\n    headers: Header<TData, unknown>[]\n  ): { colSpan: number; rowSpan: number }[] => {\n    const filteredHeaders = headers.filter(header =>\n      header.column.getIsVisible()\n    )\n\n    return filteredHeaders.map(header => {\n      let colSpan = 0\n      let rowSpan = 0\n      let childRowSpans = [0]\n\n      if (header.subHeaders && header.subHeaders.length) {\n        childRowSpans = []\n\n        recurseHeadersForSpans(header.subHeaders).forEach(\n          ({ colSpan: childColSpan, rowSpan: childRowSpan }) => {\n            colSpan += childColSpan\n            childRowSpans.push(childRowSpan)\n          }\n        )\n      } else {\n        colSpan = 1\n      }\n\n      const minChildRowSpan = Math.min(...childRowSpans)\n      rowSpan = rowSpan + minChildRowSpan\n\n      header.colSpan = colSpan\n      header.rowSpan = rowSpan\n\n      return { colSpan, rowSpan }\n    })\n  }\n\n  recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n  return headerGroups\n}\n","import { RowData, Cell, Row, Table } from '../types'\nimport { flattenBy, getMemoOptions, memo } from '../utils'\nimport { createCell } from './cell'\n\nexport interface CoreRow<TData extends RowData> {\n  _getAllCellsByColumnId: () => Record<string, Cell<TData, unknown>>\n  _uniqueValuesCache: Record<string, unknown>\n  _valuesCache: Record<string, unknown>\n  /**\n   * The depth of the row (if nested or grouped) relative to the root row array.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#depth)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  depth: number\n  /**\n   * Returns all of the cells for the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getallcells)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getAllCells: () => Cell<TData, unknown>[]\n  /**\n   * Returns the leaf rows for the row, not including any parent rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getleafrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getLeafRows: () => Row<TData>[]\n  /**\n   * Returns the parent row for the row, if it exists.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getparentrow)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getParentRow: () => Row<TData> | undefined\n  /**\n   * Returns the parent rows for the row, all the way up to a root row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getparentrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getParentRows: () => Row<TData>[]\n  /**\n   * Returns a unique array of values from the row for a given columnId.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getuniquevalues)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getUniqueValues: <TValue>(columnId: string) => TValue[]\n  /**\n   * Returns the value from the row for a given columnId.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  getValue: <TValue>(columnId: string) => TValue\n  /**\n   * The resolved unique identifier for the row resolved via the `options.getRowId` option. Defaults to the row's index (or relative index if it is a subRow).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#id)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  id: string\n  /**\n   * The index of the row within its parent array (or the root data array).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#index)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  index: number\n  /**\n   * The original row object provided to the table. If the row is a grouped row, the original row object will be the first original in the group.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#original)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  original: TData\n  /**\n   * An array of the original subRows as returned by the `options.getSubRows` option.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#originalsubrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  originalSubRows?: TData[]\n  /**\n   * If nested, this row's parent row id.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#parentid)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  parentId?: string\n  /**\n   * Renders the value for the row in a given columnId the same as `getValue`, but will return the `renderFallbackValue` if no value is found.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#rendervalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  renderValue: <TValue>(columnId: string) => TValue\n  /**\n   * An array of subRows for the row as returned and created by the `options.getSubRows` option.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#subrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n   */\n  subRows: Row<TData>[]\n}\n\nexport const createRow = <TData extends RowData>(\n  table: Table<TData>,\n  id: string,\n  original: TData,\n  rowIndex: number,\n  depth: number,\n  subRows?: Row<TData>[],\n  parentId?: string\n): Row<TData> => {\n  let row: CoreRow<TData> = {\n    id,\n    index: rowIndex,\n    original,\n    depth,\n    parentId,\n    _valuesCache: {},\n    _uniqueValuesCache: {},\n    getValue: columnId => {\n      if (row._valuesCache.hasOwnProperty(columnId)) {\n        return row._valuesCache[columnId]\n      }\n\n      const column = table.getColumn(columnId)\n\n      if (!column?.accessorFn) {\n        return undefined\n      }\n\n      row._valuesCache[columnId] = column.accessorFn(\n        row.original as TData,\n        rowIndex\n      )\n\n      return row._valuesCache[columnId] as any\n    },\n    getUniqueValues: columnId => {\n      if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n        return row._uniqueValuesCache[columnId]\n      }\n\n      const column = table.getColumn(columnId)\n\n      if (!column?.accessorFn) {\n        return undefined\n      }\n\n      if (!column.columnDef.getUniqueValues) {\n        row._uniqueValuesCache[columnId] = [row.getValue(columnId)]\n        return row._uniqueValuesCache[columnId]\n      }\n\n      row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(\n        row.original as TData,\n        rowIndex\n      )\n\n      return row._uniqueValuesCache[columnId] as any\n    },\n    renderValue: columnId =>\n      row.getValue(columnId) ?? table.options.renderFallbackValue,\n    subRows: subRows ?? [],\n    getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n    getParentRow: () =>\n      row.parentId ? table.getRow(row.parentId, true) : undefined,\n    getParentRows: () => {\n      let parentRows: Row<TData>[] = []\n      let currentRow = row\n      while (true) {\n        const parentRow = currentRow.getParentRow()\n        if (!parentRow) break\n        parentRows.push(parentRow)\n        currentRow = parentRow\n      }\n      return parentRows.reverse()\n    },\n    getAllCells: memo(\n      () => [table.getAllLeafColumns()],\n      leafColumns => {\n        return leafColumns.map(column => {\n          return createCell(table, row as Row<TData>, column, column.id)\n        })\n      },\n      getMemoOptions(table.options, 'debugRows', 'getAllCells')\n    ),\n\n    _getAllCellsByColumnId: memo(\n      () => [row.getAllCells()],\n      allCells => {\n        return allCells.reduce(\n          (acc, cell) => {\n            acc[cell.column.id] = cell\n            return acc\n          },\n          {} as Record<string, Cell<TData, unknown>>\n        )\n      },\n      getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId')\n    ),\n  }\n\n  for (let i = 0; i < table._features.length; i++) {\n    const feature = table._features[i]\n    feature?.createRow?.(row as Row<TData>, table)\n  }\n\n  return row as Row<TData>\n}\n","import { RowModel } from '..'\nimport { Column, RowData, Table, TableFeature } from '../types'\n\nexport interface FacetedColumn<TData extends RowData> {\n  _getFacetedMinMaxValues?: () => undefined | [number, number]\n  _getFacetedRowModel?: () => RowModel<TData>\n  _getFacetedUniqueValues?: () => Map<any, number>\n  /**\n   * A function that **computes and returns** a min/max tuple derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.\n   * > ⚠️ Requires that you pass a valid `getFacetedMinMaxValues` function to `options.getFacetedMinMaxValues`. A default implementation is provided via the exported `getFacetedMinMaxValues` function.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfacetedminmaxvalues)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n   */\n  getFacetedMinMaxValues: () => undefined | [number, number]\n  /**\n   * Returns the row model with all other column filters applied, excluding its own filter. Useful for displaying faceted result counts.\n   * > ⚠️ Requires that you pass a valid `getFacetedRowModel` function to `options.facetedRowModel`. A default implementation is provided via the exported `getFacetedRowModel` function.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfacetedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n   */\n  getFacetedRowModel: () => RowModel<TData>\n  /**\n   * A function that **computes and returns** a `Map` of unique values and their occurrences derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.\n   * > ⚠️ Requires that you pass a valid `getFacetedUniqueValues` function to `options.getFacetedUniqueValues`. A default implementation is provided via the exported `getFacetedUniqueValues` function.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfaceteduniquevalues)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n   */\n  getFacetedUniqueValues: () => Map<any, number>\n}\n\nexport interface FacetedOptions<TData extends RowData> {\n  getFacetedMinMaxValues?: (\n    table: Table<TData>,\n    columnId: string\n  ) => () => undefined | [number, number]\n  getFacetedRowModel?: (\n    table: Table<TData>,\n    columnId: string\n  ) => () => RowModel<TData>\n  getFacetedUniqueValues?: (\n    table: Table<TData>,\n    columnId: string\n  ) => () => Map<any, number>\n}\n\n//\n\nexport const ColumnFaceting: TableFeature = {\n  createColumn: <TData extends RowData>(\n    column: Column<TData, unknown>,\n    table: Table<TData>\n  ): void => {\n    column._getFacetedRowModel =\n      table.options.getFacetedRowModel &&\n      table.options.getFacetedRowModel(table, column.id)\n    column.getFacetedRowModel = () => {\n      if (!column._getFacetedRowModel) {\n        return table.getPreFilteredRowModel()\n      }\n\n      return column._getFacetedRowModel()\n    }\n    column._getFacetedUniqueValues =\n      table.options.getFacetedUniqueValues &&\n      table.options.getFacetedUniqueValues(table, column.id)\n    column.getFacetedUniqueValues = () => {\n      if (!column._getFacetedUniqueValues) {\n        return new Map()\n      }\n\n      return column._getFacetedUniqueValues()\n    }\n    column._getFacetedMinMaxValues =\n      table.options.getFacetedMinMaxValues &&\n      table.options.getFacetedMinMaxValues(table, column.id)\n    column.getFacetedMinMaxValues = () => {\n      if (!column._getFacetedMinMaxValues) {\n        return undefined\n      }\n\n      return column._getFacetedMinMaxValues()\n    }\n  },\n}\n","import { FilterFn } from './features/ColumnFiltering'\n\nconst includesString: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: string\n) => {\n  const search = filterValue?.toString()?.toLowerCase()\n  return Boolean(\n    row\n      .getValue<string | null>(columnId)\n      ?.toString()\n      ?.toLowerCase()\n      ?.includes(search)\n  )\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nconst includesStringSensitive: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: string\n) => {\n  return Boolean(\n    row.getValue<string | null>(columnId)?.toString()?.includes(filterValue)\n  )\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nconst equalsString: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: string\n) => {\n  return (\n    row.getValue<string | null>(columnId)?.toString()?.toLowerCase() ===\n    filterValue?.toLowerCase()\n  )\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludes: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: unknown\n) => {\n  return row.getValue<unknown[]>(columnId)?.includes(filterValue)\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludesAll: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: unknown[]\n) => {\n  return !filterValue.some(\n    val => !row.getValue<unknown[]>(columnId)?.includes(val)\n  )\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesSome: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: unknown[]\n) => {\n  return filterValue.some(val =>\n    row.getValue<unknown[]>(columnId)?.includes(val)\n  )\n}\n\narrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {\n  return row.getValue(columnId) === filterValue\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nconst weakEquals: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: unknown\n) => {\n  return row.getValue(columnId) == filterValue\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nconst inNumberRange: FilterFn<any> = (\n  row,\n  columnId: string,\n  filterValue: [number, number]\n) => {\n  let [min, max] = filterValue\n\n  const rowValue = row.getValue<number>(columnId)\n  return rowValue >= min && rowValue <= max\n}\n\ninNumberRange.resolveFilterValue = (val: [any, any]) => {\n  let [unsafeMin, unsafeMax] = val\n\n  let parsedMin =\n    typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin\n  let parsedMax =\n    typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax\n\n  let min =\n    unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n  let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n  if (min > max) {\n    const temp = min\n    min = max\n    max = temp\n  }\n\n  return [min, max] as const\n}\n\ninNumberRange.autoRemove = (val: any) =>\n  testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Export\n\nexport const filterFns = {\n  includesString,\n  includesStringSensitive,\n  equalsString,\n  arrIncludes,\n  arrIncludesAll,\n  arrIncludesSome,\n  equals,\n  weakEquals,\n  inNumberRange,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsey(val: any) {\n  return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n  Column,\n  FilterFns,\n  FilterMeta,\n  OnChangeFn,\n  Row,\n  RowData,\n  Table,\n  TableFeature,\n  Updater,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater } from '../utils'\n\nexport interface ColumnFiltersTableState {\n  columnFilters: ColumnFiltersState\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport interface ColumnFilter {\n  id: string\n  value: unknown\n}\n\nexport interface ResolvedColumnFilter<TData extends RowData> {\n  filterFn: FilterFn<TData>\n  id: string\n  resolvedValue: unknown\n}\n\nexport interface FilterFn<TData extends RowData> {\n  (\n    row: Row<TData>,\n    columnId: string,\n    filterValue: any,\n    addMeta: (meta: FilterMeta) => void\n  ): boolean\n  autoRemove?: ColumnFilterAutoRemoveTestFn<TData>\n  resolveFilterValue?: TransformFilterValueFn<TData>\n}\n\nexport type TransformFilterValueFn<TData extends RowData> = (\n  value: any,\n  column?: Column<TData, unknown>\n) => unknown\n\nexport type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (\n  value: any,\n  column?: Column<TData, unknown>\n) => boolean\n\nexport type CustomFilterFns<TData extends RowData> = Record<\n  string,\n  FilterFn<TData>\n>\n\nexport type FilterFnOption<TData extends RowData> =\n  | 'auto'\n  | BuiltInFilterFn\n  | keyof FilterFns\n  | FilterFn<TData>\n\nexport interface ColumnFiltersColumnDef<TData extends RowData> {\n  /**\n   * Enables/disables the **column** filter for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablecolumnfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  enableColumnFilter?: boolean\n  /**\n   * The filter function to use with this column. Can be the name of a built-in filter function or a custom filter function.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#filterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  filterFn?: FilterFnOption<TData>\n}\n\nexport interface ColumnFiltersColumn<TData extends RowData> {\n  /**\n   * Returns an automatically calculated filter function for the column based off of the columns first known value.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getautofilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getAutoFilterFn: () => FilterFn<TData> | undefined\n  /**\n   * Returns whether or not the column can be **column** filtered.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getcanfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getCanFilter: () => boolean\n  /**\n   * Returns the filter function (either user-defined or automatic, depending on configuration) for the columnId specified.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getFilterFn: () => FilterFn<TData> | undefined\n  /**\n   * Returns the index (including `-1`) of the column filter in the table's `state.columnFilters` array.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilterindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getFilterIndex: () => number\n  /**\n   * Returns the current filter value for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfiltervalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getFilterValue: () => unknown\n  /**\n   * Returns whether or not the column is currently filtered.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getisfiltered)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getIsFiltered: () => boolean\n  /**\n   * A function that sets the current filter value for the column. You can pass it a value or an updater function for immutability-safe operations on existing values.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setfiltervalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  setFilterValue: (updater: Updater<any>) => void\n}\n\nexport interface ColumnFiltersRow<TData extends RowData> {\n  /**\n   * The column filters map for the row. This object tracks whether a row is passing/failing specific filters by their column ID.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#columnfilters)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  columnFilters: Record<string, boolean>\n  /**\n   * The column filters meta map for the row. This object tracks any filter meta for a row as optionally provided during the filtering process.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#columnfiltersmeta)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  columnFiltersMeta: Record<string, FilterMeta>\n}\n\ninterface ColumnFiltersOptionsBase<TData extends RowData> {\n  /**\n   * Enables/disables **column** filtering for all columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablecolumnfilters)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  enableColumnFilters?: boolean\n  /**\n   * Enables/disables all filtering for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablefilters)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  enableFilters?: boolean\n  /**\n   * By default, filtering is done from parent rows down (so if a parent row is filtered out, all of its children will be filtered out as well). Setting this option to `true` will cause filtering to be done from leaf rows up (which means parent rows will be included so long as one of their child or grand-child rows is also included).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#filterfromleafrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  filterFromLeafRows?: boolean\n  /**\n   * If provided, this function is called **once** per table and should return a **new function** which will calculate and return the row model for the table when it's filtered.\n   * - For server-side filtering, this function is unnecessary and can be ignored since the server should already return the filtered row model.\n   * - For client-side filtering, this function is required. A default implementation is provided via any table adapter's `{ getFilteredRowModel }` export.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilteredrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getFilteredRowModel?: (table: Table<any>) => () => RowModel<any>\n  /**\n   * Disables the `getFilteredRowModel` from being used to filter data. This may be useful if your table needs to dynamically support both client-side and server-side filtering.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#manualfiltering)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  manualFiltering?: boolean\n  /**\n   * By default, filtering is done for all rows (max depth of 100), no matter if they are root level parent rows or the child leaf rows of a parent row. Setting this option to `0` will cause filtering to only be applied to the root level parent rows, with all sub-rows remaining unfiltered. Similarly, setting this option to `1` will cause filtering to only be applied to child leaf rows 1 level deep, and so on.\n\n   * This is useful for situations where you want a row's entire child hierarchy to be visible regardless of the applied filter.\n    * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#maxleafrowfilterdepth)\n    * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  maxLeafRowFilterDepth?: number\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnFilters` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#oncolumnfilterschange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n}\n\ntype ResolvedFilterFns = keyof FilterFns extends never\n  ? {\n      filterFns?: Record<string, FilterFn<any>>\n    }\n  : {\n      filterFns: Record<keyof FilterFns, FilterFn<any>>\n    }\n\nexport interface ColumnFiltersOptions<TData extends RowData>\n  extends ColumnFiltersOptionsBase<TData>,\n    ResolvedFilterFns {}\n\nexport interface ColumnFiltersInstance<TData extends RowData> {\n  _getFilteredRowModel?: () => RowModel<TData>\n  /**\n   * Returns the row model for the table after **column** filtering has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilteredrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getFilteredRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model for the table before any **column** filtering has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getprefilteredrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  getPreFilteredRowModel: () => RowModel<TData>\n  /**\n   * Resets the **columnFilters** state to `initialState.columnFilters`, or `true` can be passed to force a default blank state reset to `[]`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#resetcolumnfilters)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  resetColumnFilters: (defaultState?: boolean) => void\n  /**\n   * Resets the **globalFilter** state to `initialState.globalFilter`, or `true` can be passed to force a default blank state reset to `undefined`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#resetglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  resetGlobalFilter: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.columnFilters` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setcolumnfilters)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  setColumnFilters: (updater: Updater<ColumnFiltersState>) => void\n  /**\n   * Sets or updates the `state.globalFilter` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n   */\n  setGlobalFilter: (updater: Updater<any>) => void\n}\n\n//\n\nexport const ColumnFiltering: TableFeature = {\n  getDefaultColumnDef: <\n    TData extends RowData,\n  >(): ColumnFiltersColumnDef<TData> => {\n    return {\n      filterFn: 'auto',\n    }\n  },\n\n  getInitialState: (state): ColumnFiltersTableState => {\n    return {\n      columnFilters: [],\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): ColumnFiltersOptions<TData> => {\n    return {\n      onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n      filterFromLeafRows: false,\n      maxLeafRowFilterDepth: 100,\n    } as ColumnFiltersOptions<TData>\n  },\n\n  createColumn: <TData extends RowData>(\n    column: Column<TData, unknown>,\n    table: Table<TData>\n  ): void => {\n    column.getAutoFilterFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0]\n\n      const value = firstRow?.getValue(column.id)\n\n      if (typeof value === 'string') {\n        return filterFns.includesString\n      }\n\n      if (typeof value === 'number') {\n        return filterFns.inNumberRange\n      }\n\n      if (typeof value === 'boolean') {\n        return filterFns.equals\n      }\n\n      if (value !== null && typeof value === 'object') {\n        return filterFns.equals\n      }\n\n      if (Array.isArray(value)) {\n        return filterFns.arrIncludes\n      }\n\n      return filterFns.weakEquals\n    }\n    column.getFilterFn = () => {\n      return isFunction(column.columnDef.filterFn)\n        ? column.columnDef.filterFn\n        : column.columnDef.filterFn === 'auto'\n          ? column.getAutoFilterFn()\n          : // @ts-ignore\n            table.options.filterFns?.[column.columnDef.filterFn as string] ??\n            filterFns[column.columnDef.filterFn as BuiltInFilterFn]\n    }\n    column.getCanFilter = () => {\n      return (\n        (column.columnDef.enableColumnFilter ?? true) &&\n        (table.options.enableColumnFilters ?? true) &&\n        (table.options.enableFilters ?? true) &&\n        !!column.accessorFn\n      )\n    }\n\n    column.getIsFiltered = () => column.getFilterIndex() > -1\n\n    column.getFilterValue = () =>\n      table.getState().columnFilters?.find(d => d.id === column.id)?.value\n\n    column.getFilterIndex = () =>\n      table.getState().columnFilters?.findIndex(d => d.id === column.id) ?? -1\n\n    column.setFilterValue = value => {\n      table.setColumnFilters(old => {\n        const filterFn = column.getFilterFn()\n        const previousFilter = old?.find(d => d.id === column.id)\n\n        const newFilter = functionalUpdate(\n          value,\n          previousFilter ? previousFilter.value : undefined\n        )\n\n        //\n        if (\n          shouldAutoRemoveFilter(filterFn as FilterFn<TData>, newFilter, column)\n        ) {\n          return old?.filter(d => d.id !== column.id) ?? []\n        }\n\n        const newFilterObj = { id: column.id, value: newFilter }\n\n        if (previousFilter) {\n          return (\n            old?.map(d => {\n              if (d.id === column.id) {\n                return newFilterObj\n              }\n              return d\n            }) ?? []\n          )\n        }\n\n        if (old?.length) {\n          return [...old, newFilterObj]\n        }\n\n        return [newFilterObj]\n      })\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    _table: Table<TData>\n  ): void => {\n    row.columnFilters = {}\n    row.columnFiltersMeta = {}\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setColumnFilters = (updater: Updater<ColumnFiltersState>) => {\n      const leafColumns = table.getAllLeafColumns()\n\n      const updateFn = (old: ColumnFiltersState) => {\n        return functionalUpdate(updater, old)?.filter(filter => {\n          const column = leafColumns.find(d => d.id === filter.id)\n\n          if (column) {\n            const filterFn = column.getFilterFn()\n\n            if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n              return false\n            }\n          }\n\n          return true\n        })\n      }\n\n      table.options.onColumnFiltersChange?.(updateFn)\n    }\n\n    table.resetColumnFilters = defaultState => {\n      table.setColumnFilters(\n        defaultState ? [] : table.initialState?.columnFilters ?? []\n      )\n    }\n\n    table.getPreFilteredRowModel = () => table.getCoreRowModel()\n    table.getFilteredRowModel = () => {\n      if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n        table._getFilteredRowModel = table.options.getFilteredRowModel(table)\n      }\n\n      if (table.options.manualFiltering || !table._getFilteredRowModel) {\n        return table.getPreFilteredRowModel()\n      }\n\n      return table._getFilteredRowModel()\n    }\n  },\n}\n\nexport function shouldAutoRemoveFilter<TData extends RowData>(\n  filterFn?: FilterFn<TData>,\n  value?: any,\n  column?: Column<TData, unknown>\n) {\n  return (\n    (filterFn && filterFn.autoRemove\n      ? filterFn.autoRemove(value, column)\n      : false) ||\n    typeof value === 'undefined' ||\n    (typeof value === 'string' && !value)\n  )\n}\n","import { AggregationFn } from './features/ColumnGrouping'\nimport { isNumberArray } from './utils'\n\nconst sum: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n  // It's faster to just add the aggregations together instead of\n  // process leaf nodes individually\n  return childRows.reduce((sum, next) => {\n    const nextValue = next.getValue(columnId)\n    return sum + (typeof nextValue === 'number' ? nextValue : 0)\n  }, 0)\n}\n\nconst min: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n  let min: number | undefined\n\n  childRows.forEach(row => {\n    const value = row.getValue<number>(columnId)\n\n    if (\n      value != null &&\n      (min! > value || (min === undefined && value >= value))\n    ) {\n      min = value\n    }\n  })\n\n  return min\n}\n\nconst max: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n  let max: number | undefined\n\n  childRows.forEach(row => {\n    const value = row.getValue<number>(columnId)\n    if (\n      value != null &&\n      (max! < value || (max === undefined && value >= value))\n    ) {\n      max = value\n    }\n  })\n\n  return max\n}\n\nconst extent: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n  let min: number | undefined\n  let max: number | undefined\n\n  childRows.forEach(row => {\n    const value = row.getValue<number>(columnId)\n    if (value != null) {\n      if (min === undefined) {\n        if (value >= value) min = max = value\n      } else {\n        if (min > value) min = value\n        if (max! < value) max = value\n      }\n    }\n  })\n\n  return [min, max]\n}\n\nconst mean: AggregationFn<any> = (columnId, leafRows) => {\n  let count = 0\n  let sum = 0\n\n  leafRows.forEach(row => {\n    let value = row.getValue<number>(columnId)\n    if (value != null && (value = +value) >= value) {\n      ++count, (sum += value)\n    }\n  })\n\n  if (count) return sum / count\n\n  return\n}\n\nconst median: AggregationFn<any> = (columnId, leafRows) => {\n  if (!leafRows.length) {\n    return\n  }\n\n  const values = leafRows.map(row => row.getValue(columnId))\n  if (!isNumberArray(values)) {\n    return\n  }\n  if (values.length === 1) {\n    return values[0]\n  }\n\n  const mid = Math.floor(values.length / 2)\n  const nums = values.sort((a, b) => a - b)\n  return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2\n}\n\nconst unique: AggregationFn<any> = (columnId, leafRows) => {\n  return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values())\n}\n\nconst uniqueCount: AggregationFn<any> = (columnId, leafRows) => {\n  return new Set(leafRows.map(d => d.getValue(columnId))).size\n}\n\nconst count: AggregationFn<any> = (_columnId, leafRows) => {\n  return leafRows.length\n}\n\nexport const aggregationFns = {\n  sum,\n  min,\n  max,\n  extent,\n  mean,\n  median,\n  unique,\n  uniqueCount,\n  count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","import { RowModel } from '..'\nimport { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'\nimport {\n  AggregationFns,\n  Cell,\n  Column,\n  ColumnDefTemplate,\n  OnChangeFn,\n  Row,\n  RowData,\n  Table,\n  TableFeature,\n  Updater,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type GroupingState = string[]\n\nexport interface GroupingTableState {\n  grouping: GroupingState\n}\n\nexport type AggregationFn<TData extends RowData> = (\n  columnId: string,\n  leafRows: Row<TData>[],\n  childRows: Row<TData>[]\n) => any\n\nexport type CustomAggregationFns = Record<string, AggregationFn<any>>\n\nexport type AggregationFnOption<TData extends RowData> =\n  | 'auto'\n  | keyof AggregationFns\n  | BuiltInAggregationFn\n  | AggregationFn<TData>\n\nexport interface GroupingColumnDef<TData extends RowData, TValue> {\n  /**\n   * The cell to display each row for the column if the cell is an aggregate. If a function is passed, it will be passed a props object with the context of the cell and should return the property type for your adapter (the exact type depends on the adapter being used).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#aggregatedcell)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  aggregatedCell?: ColumnDefTemplate<\n    ReturnType<Cell<TData, TValue>['getContext']>\n  >\n  /**\n   * The resolved aggregation function for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#aggregationfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  aggregationFn?: AggregationFnOption<TData>\n  /**\n   * Enables/disables grouping for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#enablegrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  enableGrouping?: boolean\n  /**\n   * Specify a value to be used for grouping rows on this column. If this option is not specified, the value derived from `accessorKey` / `accessorFn` will be used instead.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupingvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getGroupingValue?: (row: TData) => any\n}\n\nexport interface GroupingColumn<TData extends RowData> {\n  /**\n   * Returns the aggregation function for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getaggregationfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getAggregationFn: () => AggregationFn<TData> | undefined\n  /**\n   * Returns the automatically inferred aggregation function for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getautoaggregationfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getAutoAggregationFn: () => AggregationFn<TData> | undefined\n  /**\n   * Returns whether or not the column can be grouped.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getcangroup)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getCanGroup: () => boolean\n  /**\n   * Returns the index of the column in the grouping state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getGroupedIndex: () => number\n  /**\n   * Returns whether or not the column is currently grouped.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getIsGrouped: () => boolean\n  /**\n   * Returns a function that toggles the grouping state of the column. This is useful for passing to the `onClick` prop of a button.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#gettogglegroupinghandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getToggleGroupingHandler: () => () => void\n  /**\n   * Toggles the grouping state of the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#togglegrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  toggleGrouping: () => void\n}\n\nexport interface GroupingRow {\n  _groupingValuesCache: Record<string, any>\n  /**\n   * Returns the grouping value for any row and column (including leaf rows).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupingvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getGroupingValue: (columnId: string) => unknown\n  /**\n   * Returns whether or not the row is currently grouped.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getIsGrouped: () => boolean\n  /**\n   * If this row is grouped, this is the id of the column that this row is grouped by.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupingcolumnid)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  groupingColumnId?: string\n  /**\n   * If this row is grouped, this is the unique/shared value for the `groupingColumnId` for all of the rows in this group.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupingvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  groupingValue?: unknown\n}\n\nexport interface GroupingCell {\n  /**\n   * Returns whether or not the cell is currently aggregated.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisaggregated)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getIsAggregated: () => boolean\n  /**\n   * Returns whether or not the cell is currently grouped.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getIsGrouped: () => boolean\n  /**\n   * Returns whether or not the cell is currently a placeholder cell.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisplaceholder)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getIsPlaceholder: () => boolean\n}\n\nexport interface ColumnDefaultOptions {\n  enableGrouping: boolean\n  onGroupingChange: OnChangeFn<GroupingState>\n}\n\ninterface GroupingOptionsBase {\n  /**\n   * Enables/disables grouping for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#enablegrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  enableGrouping?: boolean\n  /**\n   * Returns the row model after grouping has taken place, but no further.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n  /**\n   * Grouping columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupedcolumnmode)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  groupedColumnMode?: false | 'reorder' | 'remove'\n  /**\n   * Enables manual grouping. If this option is set to `true`, the table will not automatically group rows using `getGroupedRowModel()` and instead will expect you to manually group the rows before passing them to the table. This is useful if you are doing server-side grouping and aggregation.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#manualgrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  manualGrouping?: boolean\n  /**\n   * If this function is provided, it will be called when the grouping state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.grouping` option.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#ongroupingchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  onGroupingChange?: OnChangeFn<GroupingState>\n}\n\ntype ResolvedAggregationFns = keyof AggregationFns extends never\n  ? {\n      aggregationFns?: Record<string, AggregationFn<any>>\n    }\n  : {\n      aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n    }\n\nexport interface GroupingOptions\n  extends GroupingOptionsBase,\n    ResolvedAggregationFns {}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport interface GroupingInstance<TData extends RowData> {\n  _getGroupedRowModel?: () => RowModel<TData>\n  /**\n   * Returns the row model for the table after grouping has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getGroupedRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model for the table before any grouping has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getpregroupedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  getPreGroupedRowModel: () => RowModel<TData>\n  /**\n   * Resets the **grouping** state to `initialState.grouping`, or `true` can be passed to force a default blank state reset to `[]`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#resetgrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  resetGrouping: (defaultState?: boolean) => void\n  /**\n   * Updates the grouping state of the table via an update function or value.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#setgrouping)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n   */\n  setGrouping: (updater: Updater<GroupingState>) => void\n}\n\n//\n\nexport const ColumnGrouping: TableFeature = {\n  getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<\n    TData,\n    unknown\n  > => {\n    return {\n      aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,\n      aggregationFn: 'auto',\n    }\n  },\n\n  getInitialState: (state): GroupingTableState => {\n    return {\n      grouping: [],\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): GroupingOptions => {\n    return {\n      onGroupingChange: makeStateUpdater('grouping', table),\n      groupedColumnMode: 'reorder',\n    }\n  },\n\n  createColumn: <TData extends RowData, TValue>(\n    column: Column<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    column.toggleGrouping = () => {\n      table.setGrouping(old => {\n        // Find any existing grouping for this column\n        if (old?.includes(column.id)) {\n          return old.filter(d => d !== column.id)\n        }\n\n        return [...(old ?? []), column.id]\n      })\n    }\n\n    column.getCanGroup = () => {\n      return (\n        (column.columnDef.enableGrouping ?? true) &&\n        (table.options.enableGrouping ?? true) &&\n        (!!column.accessorFn || !!column.columnDef.getGroupingValue)\n      )\n    }\n\n    column.getIsGrouped = () => {\n      return table.getState().grouping?.includes(column.id)\n    }\n\n    column.getGroupedIndex = () => table.getState().grouping?.indexOf(column.id)\n\n    column.getToggleGroupingHandler = () => {\n      const canGroup = column.getCanGroup()\n\n      return () => {\n        if (!canGroup) return\n        column.toggleGrouping()\n      }\n    }\n    column.getAutoAggregationFn = () => {\n      const firstRow = table.getCoreRowModel().flatRows[0]\n\n      const value = firstRow?.getValue(column.id)\n\n      if (typeof value === 'number') {\n        return aggregationFns.sum\n      }\n\n      if (Object.prototype.toString.call(value) === '[object Date]') {\n        return aggregationFns.extent\n      }\n    }\n    column.getAggregationFn = () => {\n      if (!column) {\n        throw new Error()\n      }\n\n      return isFunction(column.columnDef.aggregationFn)\n        ? column.columnDef.aggregationFn\n        : column.columnDef.aggregationFn === 'auto'\n          ? column.getAutoAggregationFn()\n          : table.options.aggregationFns?.[\n              column.columnDef.aggregationFn as string\n            ] ??\n            aggregationFns[\n              column.columnDef.aggregationFn as BuiltInAggregationFn\n            ]\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setGrouping = updater => table.options.onGroupingChange?.(updater)\n\n    table.resetGrouping = defaultState => {\n      table.setGrouping(defaultState ? [] : table.initialState?.grouping ?? [])\n    }\n\n    table.getPreGroupedRowModel = () => table.getFilteredRowModel()\n    table.getGroupedRowModel = () => {\n      if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n        table._getGroupedRowModel = table.options.getGroupedRowModel(table)\n      }\n\n      if (table.options.manualGrouping || !table._getGroupedRowModel) {\n        return table.getPreGroupedRowModel()\n      }\n\n      return table._getGroupedRowModel()\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row.getIsGrouped = () => !!row.groupingColumnId\n    row.getGroupingValue = columnId => {\n      if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n        return row._groupingValuesCache[columnId]\n      }\n\n      const column = table.getColumn(columnId)\n\n      if (!column?.columnDef.getGroupingValue) {\n        return row.getValue(columnId)\n      }\n\n      row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(\n        row.original\n      )\n\n      return row._groupingValuesCache[columnId]\n    }\n    row._groupingValuesCache = {}\n  },\n\n  createCell: <TData extends RowData, TValue>(\n    cell: Cell<TData, TValue>,\n    column: Column<TData, TValue>,\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    const getRenderValue = () =>\n      cell.getValue() ?? table.options.renderFallbackValue\n\n    cell.getIsGrouped = () =>\n      column.getIsGrouped() && column.id === row.groupingColumnId\n    cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped()\n    cell.getIsAggregated = () =>\n      !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!row.subRows?.length\n  },\n}\n\nexport function orderColumns<TData extends RowData>(\n  leafColumns: Column<TData, unknown>[],\n  grouping: string[],\n  groupedColumnMode?: GroupingColumnMode\n) {\n  if (!grouping?.length || !groupedColumnMode) {\n    return leafColumns\n  }\n\n  const nonGroupingColumns = leafColumns.filter(\n    col => !grouping.includes(col.id)\n  )\n\n  if (groupedColumnMode === 'remove') {\n    return nonGroupingColumns\n  }\n\n  const groupingColumns = grouping\n    .map(g => leafColumns.find(col => col.id === g)!)\n    .filter(Boolean)\n\n  return [...groupingColumns, ...nonGroupingColumns]\n}\n","import { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nimport {\n  Column,\n  OnChangeFn,\n  RowData,\n  Table,\n  TableFeature,\n  Updater,\n} from '../types'\n\nimport { orderColumns } from './ColumnGrouping'\nimport { ColumnPinningPosition, _getVisibleLeafColumns } from '..'\n\nexport interface ColumnOrderTableState {\n  columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport interface ColumnOrderOptions {\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnOrder` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#oncolumnorderchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderColumn {\n  /**\n   * Returns the index of the column in the order of the visible columns. Optionally pass a `position` parameter to get the index of the column in a sub-section of the table\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  getIndex: (position?: ColumnPinningPosition | 'center') => number\n  /**\n   * Returns `true` if the column is the first column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the first in a sub-section of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getisfirstcolumn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  getIsFirstColumn: (position?: ColumnPinningPosition | 'center') => boolean\n  /**\n   * Returns `true` if the column is the last column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the last in a sub-section of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getislastcolumn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  getIsLastColumn: (position?: ColumnPinningPosition | 'center') => boolean\n}\n\nexport interface ColumnOrderDefaultOptions {\n  onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderInstance<TData extends RowData> {\n  _getOrderColumnsFn: () => (\n    columns: Column<TData, unknown>[]\n  ) => Column<TData, unknown>[]\n  /**\n   * Resets the **columnOrder** state to `initialState.columnOrder`, or `true` can be passed to force a default blank state reset to `[]`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#resetcolumnorder)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  resetColumnOrder: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.columnOrder` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#setcolumnorder)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n   */\n  setColumnOrder: (updater: Updater<ColumnOrderState>) => void\n}\n\n//\n\nexport const ColumnOrdering: TableFeature = {\n  getInitialState: (state): ColumnOrderTableState => {\n    return {\n      columnOrder: [],\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): ColumnOrderDefaultOptions => {\n    return {\n      onColumnOrderChange: makeStateUpdater('columnOrder', table),\n    }\n  },\n\n  createColumn: <TData extends RowData>(\n    column: Column<TData, unknown>,\n    table: Table<TData>\n  ): void => {\n    column.getIndex = memo(\n      position => [_getVisibleLeafColumns(table, position)],\n      columns => columns.findIndex(d => d.id === column.id),\n      getMemoOptions(table.options, 'debugColumns', 'getIndex')\n    )\n    column.getIsFirstColumn = position => {\n      const columns = _getVisibleLeafColumns(table, position)\n      return columns[0]?.id === column.id\n    }\n    column.getIsLastColumn = position => {\n      const columns = _getVisibleLeafColumns(table, position)\n      return columns[columns.length - 1]?.id === column.id\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setColumnOrder = updater =>\n      table.options.onColumnOrderChange?.(updater)\n    table.resetColumnOrder = defaultState => {\n      table.setColumnOrder(\n        defaultState ? [] : table.initialState.columnOrder ?? []\n      )\n    }\n    table._getOrderColumnsFn = memo(\n      () => [\n        table.getState().columnOrder,\n        table.getState().grouping,\n        table.options.groupedColumnMode,\n      ],\n      (columnOrder, grouping, groupedColumnMode) =>\n        (columns: Column<TData, unknown>[]) => {\n          // Sort grouped columns to the start of the column list\n          // before the headers are built\n          let orderedColumns: Column<TData, unknown>[] = []\n\n          // If there is no order, return the normal columns\n          if (!columnOrder?.length) {\n            orderedColumns = columns\n          } else {\n            const columnOrderCopy = [...columnOrder]\n\n            // If there is an order, make a copy of the columns\n            const columnsCopy = [...columns]\n\n            // And make a new ordered array of the columns\n\n            // Loop over the columns and place them in order into the new array\n            while (columnsCopy.length && columnOrderCopy.length) {\n              const targetColumnId = columnOrderCopy.shift()\n              const foundIndex = columnsCopy.findIndex(\n                d => d.id === targetColumnId\n              )\n              if (foundIndex > -1) {\n                orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)\n              }\n            }\n\n            // If there are any columns left, add them to the end\n            orderedColumns = [...orderedColumns, ...columnsCopy]\n          }\n\n          return orderColumns(orderedColumns, grouping, groupedColumnMode)\n        },\n      getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn')\n    )\n  },\n}\n","import {\n  OnChangeFn,\n  Updater,\n  Table,\n  Column,\n  Row,\n  Cell,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type ColumnPinningPosition = false | 'left' | 'right'\n\nexport interface ColumnPinningState {\n  left?: string[]\n  right?: string[]\n}\n\nexport interface ColumnPinningTableState {\n  columnPinning: ColumnPinningState\n}\n\nexport interface ColumnPinningOptions {\n  /**\n   * Enables/disables column pinning for the table. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablecolumnpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  enableColumnPinning?: boolean\n  /**\n   * @deprecated Use `enableColumnPinning` or `enableRowPinning` instead.\n   * Enables/disables all pinning for the table. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablepinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  enablePinning?: boolean\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnPinning` changes. This overrides the default internal state management, so you will also need to supply `state.columnPinning` from your own managed state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#oncolumnpinningchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/oncolumnpinningchange)\n   */\n  onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningDefaultOptions {\n  onColumnPinningChange: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningColumnDef {\n  /**\n   * Enables/disables column pinning for this column. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablepinning-1)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  enablePinning?: boolean\n}\n\nexport interface ColumnPinningColumn {\n  /**\n   * Returns whether or not the column can be pinned.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcanpin)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getCanPin: () => boolean\n  /**\n   * Returns the pinned position of the column. (`'left'`, `'right'` or `false`)\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getispinned)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getIsPinned: () => ColumnPinningPosition\n  /**\n   * Returns the numeric pinned index of the column within a pinned column group.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getpinnedindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getPinnedIndex: () => number\n  /**\n   * Pins a column to the `'left'` or `'right'`, or unpins the column to the center if `false` is passed.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#pin)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  pin: (position: ColumnPinningPosition) => void\n}\n\nexport interface ColumnPinningRow<TData extends RowData> {\n  /**\n   * Returns all center pinned (unpinned) leaf cells in the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcentervisiblecells)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getCenterVisibleCells: () => Cell<TData, unknown>[]\n  /**\n   * Returns all left pinned leaf cells in the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getleftvisiblecells)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getLeftVisibleCells: () => Cell<TData, unknown>[]\n  /**\n   * Returns all right pinned leaf cells in the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getrightvisiblecells)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface ColumnPinningInstance<TData extends RowData> {\n  /**\n   * Returns all center pinned (unpinned) leaf columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcenterleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getCenterLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns whether or not any columns are pinned. Optionally specify to only check for pinned columns in either the `left` or `right` position.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getissomecolumnspinned)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean\n  /**\n   * Returns all left pinned leaf columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getleftleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getLeftLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns all right pinned leaf columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getrightleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  getRightLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Resets the **columnPinning** state to `initialState.columnPinning`, or `true` can be passed to force a default blank state reset to `{ left: [], right: [], }`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#resetcolumnpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  resetColumnPinning: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.columnPinning` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#setcolumnpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n   */\n  setColumnPinning: (updater: Updater<ColumnPinningState>) => void\n}\n\n//\n\nconst getDefaultColumnPinningState = (): ColumnPinningState => ({\n  left: [],\n  right: [],\n})\n\nexport const ColumnPinning: TableFeature = {\n  getInitialState: (state): ColumnPinningTableState => {\n    return {\n      columnPinning: getDefaultColumnPinningState(),\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): ColumnPinningDefaultOptions => {\n    return {\n      onColumnPinningChange: makeStateUpdater('columnPinning', table),\n    }\n  },\n\n  createColumn: <TData extends RowData, TValue>(\n    column: Column<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    column.pin = position => {\n      const columnIds = column\n        .getLeafColumns()\n        .map(d => d.id)\n        .filter(Boolean) as string[]\n\n      table.setColumnPinning(old => {\n        if (position === 'right') {\n          return {\n            left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n            right: [\n              ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),\n              ...columnIds,\n            ],\n          }\n        }\n\n        if (position === 'left') {\n          return {\n            left: [\n              ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),\n              ...columnIds,\n            ],\n            right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n          }\n        }\n\n        return {\n          left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n          right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n        }\n      })\n    }\n\n    column.getCanPin = () => {\n      const leafColumns = column.getLeafColumns()\n\n      return leafColumns.some(\n        d =>\n          (d.columnDef.enablePinning ?? true) &&\n          (table.options.enableColumnPinning ??\n            table.options.enablePinning ??\n            true)\n      )\n    }\n\n    column.getIsPinned = () => {\n      const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n      const { left, right } = table.getState().columnPinning\n\n      const isLeft = leafColumnIds.some(d => left?.includes(d))\n      const isRight = leafColumnIds.some(d => right?.includes(d))\n\n      return isLeft ? 'left' : isRight ? 'right' : false\n    }\n\n    column.getPinnedIndex = () => {\n      const position = column.getIsPinned()\n\n      return position\n        ? table.getState().columnPinning?.[position]?.indexOf(column.id) ?? -1\n        : 0\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row.getCenterVisibleCells = memo(\n      () => [\n        row._getAllVisibleCells(),\n        table.getState().columnPinning.left,\n        table.getState().columnPinning.right,\n      ],\n      (allCells, left, right) => {\n        const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n        return allCells.filter(d => !leftAndRight.includes(d.column.id))\n      },\n      getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells')\n    )\n    row.getLeftVisibleCells = memo(\n      () => [row._getAllVisibleCells(), table.getState().columnPinning.left],\n      (allCells, left) => {\n        const cells = (left ?? [])\n          .map(columnId => allCells.find(cell => cell.column.id === columnId)!)\n          .filter(Boolean)\n          .map(d => ({ ...d, position: 'left' }) as Cell<TData, unknown>)\n\n        return cells\n      },\n      getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells')\n    )\n    row.getRightVisibleCells = memo(\n      () => [row._getAllVisibleCells(), table.getState().columnPinning.right],\n      (allCells, right) => {\n        const cells = (right ?? [])\n          .map(columnId => allCells.find(cell => cell.column.id === columnId)!)\n          .filter(Boolean)\n          .map(d => ({ ...d, position: 'right' }) as Cell<TData, unknown>)\n\n        return cells\n      },\n      getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells')\n    )\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setColumnPinning = updater =>\n      table.options.onColumnPinningChange?.(updater)\n\n    table.resetColumnPinning = defaultState =>\n      table.setColumnPinning(\n        defaultState\n          ? getDefaultColumnPinningState()\n          : table.initialState?.columnPinning ?? getDefaultColumnPinningState()\n      )\n\n    table.getIsSomeColumnsPinned = position => {\n      const pinningState = table.getState().columnPinning\n\n      if (!position) {\n        return Boolean(pinningState.left?.length || pinningState.right?.length)\n      }\n      return Boolean(pinningState[position]?.length)\n    }\n\n    table.getLeftLeafColumns = memo(\n      () => [table.getAllLeafColumns(), table.getState().columnPinning.left],\n      (allColumns, left) => {\n        return (left ?? [])\n          .map(columnId => allColumns.find(column => column.id === columnId)!)\n          .filter(Boolean)\n      },\n      getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns')\n    )\n\n    table.getRightLeafColumns = memo(\n      () => [table.getAllLeafColumns(), table.getState().columnPinning.right],\n      (allColumns, right) => {\n        return (right ?? [])\n          .map(columnId => allColumns.find(column => column.id === columnId)!)\n          .filter(Boolean)\n      },\n      getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns')\n    )\n\n    table.getCenterLeafColumns = memo(\n      () => [\n        table.getAllLeafColumns(),\n        table.getState().columnPinning.left,\n        table.getState().columnPinning.right,\n      ],\n      (allColumns, left, right) => {\n        const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n        return allColumns.filter(d => !leftAndRight.includes(d.id))\n      },\n      getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns')\n    )\n  },\n}\n","export function safelyAccessDocument(_document?: Document): Document | null {\n  return _document || (typeof document !== 'undefined' ? document : null)\n}\n\nexport function safelyAccessDocumentEvent(event: Event): Document | null {\n  return !!event &&\n    !!event.target &&\n    typeof event.target === 'object' &&\n    'ownerDocument' in event.target\n    ? (event.target.ownerDocument as Document | null)\n    : null\n}\n","import { _getVisibleLeafColumns } from '..'\nimport {\n  RowData,\n  Column,\n  Header,\n  OnChangeFn,\n  Table,\n  Updater,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\nimport { ColumnPinningPosition } from './ColumnPinning'\nimport { safelyAccessDocument } from '../utils/document'\n\n//\n\nexport interface ColumnSizingTableState {\n  columnSizing: ColumnSizingState\n  columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = Record<string, number>\n\nexport interface ColumnSizingInfoState {\n  columnSizingStart: [string, number][]\n  deltaOffset: null | number\n  deltaPercentage: null | number\n  isResizingColumn: false | string\n  startOffset: null | number\n  startSize: null | number\n}\n\nexport type ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport type ColumnResizeDirection = 'ltr' | 'rtl'\n\nexport interface ColumnSizingOptions {\n  /**\n   * Determines when the columnSizing state is updated. `onChange` updates the state when the user is dragging the resize handle. `onEnd` updates the state when the user releases the resize handle.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#columnresizemode)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  columnResizeMode?: ColumnResizeMode\n  /**\n   * Enables or disables column resizing for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#enablecolumnresizing)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  enableColumnResizing?: boolean\n  /**\n   * Enables or disables right-to-left support for resizing the column. defaults to 'ltr'.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#columnResizeDirection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  columnResizeDirection?: ColumnResizeDirection\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnSizing` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizing` from your own managed state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#oncolumnsizingchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnSizingInfo` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizingInfo` from your own managed state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#oncolumnsizinginfochange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingDefaultOptions = Pick<\n  ColumnSizingOptions,\n  | 'columnResizeMode'\n  | 'onColumnSizingChange'\n  | 'onColumnSizingInfoChange'\n  | 'columnResizeDirection'\n>\n\nexport interface ColumnSizingInstance {\n  /**\n   * If pinning, returns the total size of the center portion of the table by calculating the sum of the sizes of all unpinned/center leaf-columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getcentertotalsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getCenterTotalSize: () => number\n  /**\n   * Returns the total size of the left portion of the table by calculating the sum of the sizes of all left leaf-columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getlefttotalsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getLeftTotalSize: () => number\n  /**\n   * Returns the total size of the right portion of the table by calculating the sum of the sizes of all right leaf-columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getrighttotalsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getRightTotalSize: () => number\n  /**\n   * Returns the total size of the table by calculating the sum of the sizes of all leaf-columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#gettotalsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getTotalSize: () => number\n  /**\n   * Resets column sizing to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetcolumnsizing)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  resetColumnSizing: (defaultState?: boolean) => void\n  /**\n   * Resets column sizing info to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetheadersizeinfo)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  resetHeaderSizeInfo: (defaultState?: boolean) => void\n  /**\n   * Sets the column sizing state using an updater function or a value. This will trigger the underlying `onColumnSizingChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#setcolumnsizing)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  setColumnSizing: (updater: Updater<ColumnSizingState>) => void\n  /**\n   * Sets the column sizing info state using an updater function or a value. This will trigger the underlying `onColumnSizingInfoChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#setcolumnsizinginfo)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void\n}\n\nexport interface ColumnSizingColumnDef {\n  /**\n   * Enables or disables column resizing for the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#enableresizing)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  enableResizing?: boolean\n  /**\n   * The maximum allowed size for the column\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#maxsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  maxSize?: number\n  /**\n   * The minimum allowed size for the column\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#minsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  minSize?: number\n  /**\n   * The desired size for the column\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#size)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  size?: number\n}\n\nexport interface ColumnSizingColumn {\n  /**\n   * Returns `true` if the column can be resized.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getcanresize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getCanResize: () => boolean\n  /**\n   * Returns `true` if the column is currently being resized.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getisresizing)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getIsResizing: () => boolean\n  /**\n   * Returns the current size of the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getSize: () => number\n  /**\n   * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all preceding (left) headers in relation to the current column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getstart)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getStart: (position?: ColumnPinningPosition | 'center') => number\n  /**\n   * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all succeeding (right) headers in relation to the current column.\n   */\n  getAfter: (position?: ColumnPinningPosition | 'center') => number\n  /**\n   * Resets the column to its initial size.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  resetSize: () => void\n}\n\nexport interface ColumnSizingHeader {\n  /**\n   * Returns an event handler function that can be used to resize the header. It can be used as an:\n   * - `onMouseDown` handler\n   * - `onTouchStart` handler\n   *\n   * The dragging and release events are automatically handled for you.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getresizehandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getResizeHandler: (context?: Document) => (event: unknown) => void\n  /**\n   * Returns the current size of the header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getsize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getSize: () => number\n  /**\n   * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all preceding headers.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getstart)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n   */\n  getStart: (position?: ColumnPinningPosition) => number\n}\n\n//\n\nexport const defaultColumnSizing = {\n  size: 150,\n  minSize: 20,\n  maxSize: Number.MAX_SAFE_INTEGER,\n}\n\nconst getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({\n  startOffset: null,\n  startSize: null,\n  deltaOffset: null,\n  deltaPercentage: null,\n  isResizingColumn: false,\n  columnSizingStart: [],\n})\n\nexport const ColumnSizing: TableFeature = {\n  getDefaultColumnDef: (): ColumnSizingColumnDef => {\n    return defaultColumnSizing\n  },\n  getInitialState: (state): ColumnSizingTableState => {\n    return {\n      columnSizing: {},\n      columnSizingInfo: getDefaultColumnSizingInfoState(),\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): ColumnSizingDefaultOptions => {\n    return {\n      columnResizeMode: 'onEnd',\n      columnResizeDirection: 'ltr',\n      onColumnSizingChange: makeStateUpdater('columnSizing', table),\n      onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table),\n    }\n  },\n\n  createColumn: <TData extends RowData, TValue>(\n    column: Column<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    column.getSize = () => {\n      const columnSize = table.getState().columnSizing[column.id]\n\n      return Math.min(\n        Math.max(\n          column.columnDef.minSize ?? defaultColumnSizing.minSize,\n          columnSize ?? column.columnDef.size ?? defaultColumnSizing.size\n        ),\n        column.columnDef.maxSize ?? defaultColumnSizing.maxSize\n      )\n    }\n\n    column.getStart = memo(\n      position => [\n        position,\n        _getVisibleLeafColumns(table, position),\n        table.getState().columnSizing,\n      ],\n      (position, columns) =>\n        columns\n          .slice(0, column.getIndex(position))\n          .reduce((sum, column) => sum + column.getSize(), 0),\n      getMemoOptions(table.options, 'debugColumns', 'getStart')\n    )\n\n    column.getAfter = memo(\n      position => [\n        position,\n        _getVisibleLeafColumns(table, position),\n        table.getState().columnSizing,\n      ],\n      (position, columns) =>\n        columns\n          .slice(column.getIndex(position) + 1)\n          .reduce((sum, column) => sum + column.getSize(), 0),\n      getMemoOptions(table.options, 'debugColumns', 'getAfter')\n    )\n\n    column.resetSize = () => {\n      table.setColumnSizing(({ [column.id]: _, ...rest }) => {\n        return rest\n      })\n    }\n    column.getCanResize = () => {\n      return (\n        (column.columnDef.enableResizing ?? true) &&\n        (table.options.enableColumnResizing ?? true)\n      )\n    }\n    column.getIsResizing = () => {\n      return table.getState().columnSizingInfo.isResizingColumn === column.id\n    }\n  },\n\n  createHeader: <TData extends RowData, TValue>(\n    header: Header<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    header.getSize = () => {\n      let sum = 0\n\n      const recurse = (header: Header<TData, TValue>) => {\n        if (header.subHeaders.length) {\n          header.subHeaders.forEach(recurse)\n        } else {\n          sum += header.column.getSize() ?? 0\n        }\n      }\n\n      recurse(header)\n\n      return sum\n    }\n    header.getStart = () => {\n      if (header.index > 0) {\n        const prevSiblingHeader = header.headerGroup.headers[header.index - 1]!\n        return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()\n      }\n\n      return 0\n    }\n    header.getResizeHandler = _contextDocument => {\n      const column = table.getColumn(header.column.id)\n      const canResize = column?.getCanResize()\n\n      return (e: unknown) => {\n        if (!column || !canResize) {\n          return\n        }\n\n        ;(e as any).persist?.()\n\n        if (isTouchStartEvent(e)) {\n          // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n          if (e.touches && e.touches.length > 1) {\n            return\n          }\n        }\n\n        const startSize = header.getSize()\n\n        const columnSizingStart: [string, number][] = header\n          ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()])\n          : [[column.id, column.getSize()]]\n\n        const clientX = isTouchStartEvent(e)\n          ? Math.round(e.touches[0]!.clientX)\n          : (e as MouseEvent).clientX\n\n        const newColumnSizing: ColumnSizingState = {}\n\n        const updateOffset = (\n          eventType: 'move' | 'end',\n          clientXPos?: number\n        ) => {\n          if (typeof clientXPos !== 'number') {\n            return\n          }\n\n          table.setColumnSizingInfo(old => {\n            const deltaDirection =\n              table.options.columnResizeDirection === 'rtl' ? -1 : 1\n            const deltaOffset =\n              (clientXPos - (old?.startOffset ?? 0)) * deltaDirection\n            const deltaPercentage = Math.max(\n              deltaOffset / (old?.startSize ?? 0),\n              -0.999999\n            )\n\n            old.columnSizingStart.forEach(([columnId, headerSize]) => {\n              newColumnSizing[columnId] =\n                Math.round(\n                  Math.max(headerSize + headerSize * deltaPercentage, 0) * 100\n                ) / 100\n            })\n\n            return {\n              ...old,\n              deltaOffset,\n              deltaPercentage,\n            }\n          })\n\n          if (\n            table.options.columnResizeMode === 'onChange' ||\n            eventType === 'end'\n          ) {\n            table.setColumnSizing(old => ({\n              ...old,\n              ...newColumnSizing,\n            }))\n          }\n        }\n\n        const onMove = (clientXPos?: number) => updateOffset('move', clientXPos)\n\n        const onEnd = (clientXPos?: number) => {\n          updateOffset('end', clientXPos)\n\n          table.setColumnSizingInfo(old => ({\n            ...old,\n            isResizingColumn: false,\n            startOffset: null,\n            startSize: null,\n            deltaOffset: null,\n            deltaPercentage: null,\n            columnSizingStart: [],\n          }))\n        }\n\n        const contextDocument = safelyAccessDocument(_contextDocument)\n\n        const mouseEvents = {\n          moveHandler: (e: MouseEvent) => onMove(e.clientX),\n          upHandler: (e: MouseEvent) => {\n            contextDocument?.removeEventListener(\n              'mousemove',\n              mouseEvents.moveHandler\n            )\n            contextDocument?.removeEventListener(\n              'mouseup',\n              mouseEvents.upHandler\n            )\n            onEnd(e.clientX)\n          },\n        }\n\n        const touchEvents = {\n          moveHandler: (e: TouchEvent) => {\n            if (e.cancelable) {\n              e.preventDefault()\n              e.stopPropagation()\n            }\n            onMove(e.touches[0]!.clientX)\n            return false\n          },\n          upHandler: (e: TouchEvent) => {\n            contextDocument?.removeEventListener(\n              'touchmove',\n              touchEvents.moveHandler\n            )\n            contextDocument?.removeEventListener(\n              'touchend',\n              touchEvents.upHandler\n            )\n            if (e.cancelable) {\n              e.preventDefault()\n              e.stopPropagation()\n            }\n            onEnd(e.touches[0]?.clientX)\n          },\n        }\n\n        const passiveIfSupported = passiveEventSupported()\n          ? { passive: false }\n          : false\n\n        if (isTouchStartEvent(e)) {\n          contextDocument?.addEventListener(\n            'touchmove',\n            touchEvents.moveHandler,\n            passiveIfSupported\n          )\n          contextDocument?.addEventListener(\n            'touchend',\n            touchEvents.upHandler,\n            passiveIfSupported\n          )\n        } else {\n          contextDocument?.addEventListener(\n            'mousemove',\n            mouseEvents.moveHandler,\n            passiveIfSupported\n          )\n          contextDocument?.addEventListener(\n            'mouseup',\n            mouseEvents.upHandler,\n            passiveIfSupported\n          )\n        }\n\n        table.setColumnSizingInfo(old => ({\n          ...old,\n          startOffset: clientX,\n          startSize,\n          deltaOffset: 0,\n          deltaPercentage: 0,\n          columnSizingStart,\n          isResizingColumn: column.id,\n        }))\n      }\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setColumnSizing = updater =>\n      table.options.onColumnSizingChange?.(updater)\n    table.setColumnSizingInfo = updater =>\n      table.options.onColumnSizingInfoChange?.(updater)\n    table.resetColumnSizing = defaultState => {\n      table.setColumnSizing(\n        defaultState ? {} : table.initialState.columnSizing ?? {}\n      )\n    }\n    table.resetHeaderSizeInfo = defaultState => {\n      table.setColumnSizingInfo(\n        defaultState\n          ? getDefaultColumnSizingInfoState()\n          : table.initialState.columnSizingInfo ??\n              getDefaultColumnSizingInfoState()\n      )\n    }\n    table.getTotalSize = () =>\n      table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n        return sum + header.getSize()\n      }, 0) ?? 0\n    table.getLeftTotalSize = () =>\n      table.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n        return sum + header.getSize()\n      }, 0) ?? 0\n    table.getCenterTotalSize = () =>\n      table.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n        return sum + header.getSize()\n      }, 0) ?? 0\n    table.getRightTotalSize = () =>\n      table.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n        return sum + header.getSize()\n      }, 0) ?? 0\n  },\n}\n\nlet passiveSupported: boolean | null = null\nexport function passiveEventSupported() {\n  if (typeof passiveSupported === 'boolean') return passiveSupported\n\n  let supported = false\n  try {\n    const options = {\n      get passive() {\n        supported = true\n        return false\n      },\n    }\n\n    const noop = () => {}\n\n    window.addEventListener('test', noop, options)\n    window.removeEventListener('test', noop)\n  } catch (err) {\n    supported = false\n  }\n  passiveSupported = supported\n  return passiveSupported\n}\n\nfunction isTouchStartEvent(e: unknown): e is TouchEvent {\n  return (e as TouchEvent).type === 'touchstart'\n}\n","import { ColumnPinningPosition } from '..'\nimport {\n  Cell,\n  Column,\n  OnChangeFn,\n  Table,\n  Updater,\n  Row,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type VisibilityState = Record<string, boolean>\n\nexport interface VisibilityTableState {\n  columnVisibility: VisibilityState\n}\n\nexport interface VisibilityOptions {\n  /**\n   * Whether to enable column hiding. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#enablehiding)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  enableHiding?: boolean\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.columnVisibility` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#oncolumnvisibilitychange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n}\n\nexport type VisibilityDefaultOptions = Pick<\n  VisibilityOptions,\n  'onColumnVisibilityChange'\n>\n\nexport interface VisibilityInstance<TData extends RowData> {\n  /**\n   * If column pinning, returns a flat array of leaf-node columns that are visible in the unpinned/center portion of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getcentervisibleleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getCenterVisibleLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns whether all columns are visible\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getisallcolumnsvisible)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getIsAllColumnsVisible: () => boolean\n  /**\n   * Returns whether any columns are visible\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getissomecolumnsvisible)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getIsSomeColumnsVisible: () => boolean\n  /**\n   * If column pinning, returns a flat array of leaf-node columns that are visible in the left portion of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getleftvisibleleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getLeftVisibleLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * If column pinning, returns a flat array of leaf-node columns that are visible in the right portion of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getrightvisibleleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getRightVisibleLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns a handler for toggling the visibility of all columns, meant to be bound to a `input[type=checkbox]` element.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#gettoggleallcolumnsvisibilityhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void\n  /**\n   * Returns a flat array of columns that are visible, including parent columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisibleflatcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getVisibleFlatColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns a flat array of leaf-node columns that are visible.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisibleleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getVisibleLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Resets the column visibility state to the initial state. If `defaultState` is provided, the state will be reset to `{}`\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#resetcolumnvisibility)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  resetColumnVisibility: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.columnVisibility` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#setcolumnvisibility)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  setColumnVisibility: (updater: Updater<VisibilityState>) => void\n  /**\n   * Toggles the visibility of all columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#toggleallcolumnsvisible)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  toggleAllColumnsVisible: (value?: boolean) => void\n}\n\nexport interface VisibilityColumnDef {\n  enableHiding?: boolean\n}\n\nexport interface VisibilityRow<TData extends RowData> {\n  _getAllVisibleCells: () => Cell<TData, unknown>[]\n  /**\n   * Returns an array of cells that account for column visibility for the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisiblecells)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface VisibilityColumn {\n  /**\n   * Returns whether the column can be hidden\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getcanhide)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getCanHide: () => boolean\n  /**\n   * Returns whether the column is visible\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getisvisible)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getIsVisible: () => boolean\n  /**\n   * Returns a function that can be used to toggle the column visibility. This function can be used to bind to an event handler to a checkbox.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#gettogglevisibilityhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  getToggleVisibilityHandler: () => (event: unknown) => void\n  /**\n   * Toggles the visibility of the column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#togglevisibility)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n   */\n  toggleVisibility: (value?: boolean) => void\n}\n\n//\n\nexport const ColumnVisibility: TableFeature = {\n  getInitialState: (state): VisibilityTableState => {\n    return {\n      columnVisibility: {},\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): VisibilityDefaultOptions => {\n    return {\n      onColumnVisibilityChange: makeStateUpdater('columnVisibility', table),\n    }\n  },\n\n  createColumn: <TData extends RowData, TValue>(\n    column: Column<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    column.toggleVisibility = value => {\n      if (column.getCanHide()) {\n        table.setColumnVisibility(old => ({\n          ...old,\n          [column.id]: value ?? !column.getIsVisible(),\n        }))\n      }\n    }\n    column.getIsVisible = () => {\n      const childColumns = column.columns\n      return (\n        (childColumns.length\n          ? childColumns.some(c => c.getIsVisible())\n          : table.getState().columnVisibility?.[column.id]) ?? true\n      )\n    }\n\n    column.getCanHide = () => {\n      return (\n        (column.columnDef.enableHiding ?? true) &&\n        (table.options.enableHiding ?? true)\n      )\n    }\n    column.getToggleVisibilityHandler = () => {\n      return (e: unknown) => {\n        column.toggleVisibility?.(\n          ((e as MouseEvent).target as HTMLInputElement).checked\n        )\n      }\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row._getAllVisibleCells = memo(\n      () => [row.getAllCells(), table.getState().columnVisibility],\n      cells => {\n        return cells.filter(cell => cell.column.getIsVisible())\n      },\n      getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells')\n    )\n    row.getVisibleCells = memo(\n      () => [\n        row.getLeftVisibleCells(),\n        row.getCenterVisibleCells(),\n        row.getRightVisibleCells(),\n      ],\n      (left, center, right) => [...left, ...center, ...right],\n      getMemoOptions(table.options, 'debugRows', 'getVisibleCells')\n    )\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    const makeVisibleColumnsMethod = (\n      key: string,\n      getColumns: () => Column<TData, unknown>[]\n    ): (() => Column<TData, unknown>[]) => {\n      return memo(\n        () => [\n          getColumns(),\n          getColumns()\n            .filter(d => d.getIsVisible())\n            .map(d => d.id)\n            .join('_'),\n        ],\n        columns => {\n          return columns.filter(d => d.getIsVisible?.())\n        },\n        getMemoOptions(table.options, 'debugColumns', key)\n      )\n    }\n\n    table.getVisibleFlatColumns = makeVisibleColumnsMethod(\n      'getVisibleFlatColumns',\n      () => table.getAllFlatColumns()\n    )\n    table.getVisibleLeafColumns = makeVisibleColumnsMethod(\n      'getVisibleLeafColumns',\n      () => table.getAllLeafColumns()\n    )\n    table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod(\n      'getLeftVisibleLeafColumns',\n      () => table.getLeftLeafColumns()\n    )\n    table.getRightVisibleLeafColumns = makeVisibleColumnsMethod(\n      'getRightVisibleLeafColumns',\n      () => table.getRightLeafColumns()\n    )\n    table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod(\n      'getCenterVisibleLeafColumns',\n      () => table.getCenterLeafColumns()\n    )\n\n    table.setColumnVisibility = updater =>\n      table.options.onColumnVisibilityChange?.(updater)\n\n    table.resetColumnVisibility = defaultState => {\n      table.setColumnVisibility(\n        defaultState ? {} : table.initialState.columnVisibility ?? {}\n      )\n    }\n\n    table.toggleAllColumnsVisible = value => {\n      value = value ?? !table.getIsAllColumnsVisible()\n\n      table.setColumnVisibility(\n        table.getAllLeafColumns().reduce(\n          (obj, column) => ({\n            ...obj,\n            [column.id]: !value ? !column.getCanHide?.() : value,\n          }),\n          {}\n        )\n      )\n    }\n\n    table.getIsAllColumnsVisible = () =>\n      !table.getAllLeafColumns().some(column => !column.getIsVisible?.())\n\n    table.getIsSomeColumnsVisible = () =>\n      table.getAllLeafColumns().some(column => column.getIsVisible?.())\n\n    table.getToggleAllColumnsVisibilityHandler = () => {\n      return (e: unknown) => {\n        table.toggleAllColumnsVisible(\n          ((e as MouseEvent).target as HTMLInputElement)?.checked\n        )\n      }\n    }\n  },\n}\n\nexport function _getVisibleLeafColumns<TData extends RowData>(\n  table: Table<TData>,\n  position?: ColumnPinningPosition | 'center'\n) {\n  return !position\n    ? table.getVisibleLeafColumns()\n    : position === 'center'\n      ? table.getCenterVisibleLeafColumns()\n      : position === 'left'\n        ? table.getLeftVisibleLeafColumns()\n        : table.getRightVisibleLeafColumns()\n}\n","import { RowModel } from '..'\nimport { Table, RowData, TableFeature } from '../types'\n\nexport interface GlobalFacetingInstance<TData extends RowData> {\n  _getGlobalFacetedMinMaxValues?: () => undefined | [number, number]\n  _getGlobalFacetedRowModel?: () => RowModel<TData>\n  _getGlobalFacetedUniqueValues?: () => Map<any, number>\n  /**\n   * Currently, this function returns the built-in `includesString` filter function. In future releases, it may return more dynamic filter functions based on the nature of the data provided.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalautofilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n   */\n  getGlobalFacetedMinMaxValues: () => undefined | [number, number]\n  /**\n   * Returns the row model for the table after **global** filtering has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalfacetedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n   */\n  getGlobalFacetedRowModel: () => RowModel<TData>\n  /**\n   * Returns the faceted unique values for the global filter.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalfaceteduniquevalues)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n   */\n  getGlobalFacetedUniqueValues: () => Map<any, number>\n}\n\n//\n\nexport const GlobalFaceting: TableFeature = {\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table._getGlobalFacetedRowModel =\n      table.options.getFacetedRowModel &&\n      table.options.getFacetedRowModel(table, '__global__')\n\n    table.getGlobalFacetedRowModel = () => {\n      if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n        return table.getPreFilteredRowModel()\n      }\n\n      return table._getGlobalFacetedRowModel()\n    }\n\n    table._getGlobalFacetedUniqueValues =\n      table.options.getFacetedUniqueValues &&\n      table.options.getFacetedUniqueValues(table, '__global__')\n    table.getGlobalFacetedUniqueValues = () => {\n      if (!table._getGlobalFacetedUniqueValues) {\n        return new Map()\n      }\n\n      return table._getGlobalFacetedUniqueValues()\n    }\n\n    table._getGlobalFacetedMinMaxValues =\n      table.options.getFacetedMinMaxValues &&\n      table.options.getFacetedMinMaxValues(table, '__global__')\n    table.getGlobalFacetedMinMaxValues = () => {\n      if (!table._getGlobalFacetedMinMaxValues) {\n        return\n      }\n\n      return table._getGlobalFacetedMinMaxValues()\n    }\n  },\n}\n","import { FilterFn, FilterFnOption } from '..'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n  Column,\n  OnChangeFn,\n  Table,\n  Updater,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport interface GlobalFilterTableState {\n  globalFilter: any\n}\n\nexport interface GlobalFilterColumnDef {\n  /**\n   * Enables/disables the **global** filter for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#enableglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  enableGlobalFilter?: boolean\n}\n\nexport interface GlobalFilterColumn {\n  /**\n   * Returns whether or not the column can be **globally** filtered. Set to `false` to disable a column from being scanned during global filtering.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getcanglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  getCanGlobalFilter: () => boolean\n}\n\nexport interface GlobalFilterOptions<TData extends RowData> {\n  /**\n   * Enables/disables **global** filtering for all columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#enableglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  enableGlobalFilter?: boolean\n  /**\n   * If provided, this function will be called with the column and should return `true` or `false` to indicate whether this column should be used for global filtering.\n   *\n   * This is useful if the column can contain data that is not `string` or `number` (i.e. `undefined`).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getcolumncanglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean\n  /**\n   * The filter function to use for global filtering.\n   * - A `string` referencing a built-in filter function\n   * - A `string` that references a custom filter functions provided via the `tableOptions.filterFns` option\n   * - A custom filter function\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#globalfilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  globalFilterFn?: FilterFnOption<TData>\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.globalFilter` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#onglobalfilterchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  onGlobalFilterChange?: OnChangeFn<any>\n}\n\nexport interface GlobalFilterInstance<TData extends RowData> {\n  /**\n   * Currently, this function returns the built-in `includesString` filter function. In future releases, it may return more dynamic filter functions based on the nature of the data provided.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getglobalautofilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  getGlobalAutoFilterFn: () => FilterFn<TData> | undefined\n  /**\n   * Returns the filter function (either user-defined or automatic, depending on configuration) for the global filter.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getglobalfilterfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  getGlobalFilterFn: () => FilterFn<TData> | undefined\n  /**\n   * Resets the **globalFilter** state to `initialState.globalFilter`, or `true` can be passed to force a default blank state reset to `undefined`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#resetglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  resetGlobalFilter: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.globalFilter` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#setglobalfilter)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n   */\n  setGlobalFilter: (updater: Updater<any>) => void\n}\n\n//\n\nexport const GlobalFiltering: TableFeature = {\n  getInitialState: (state): GlobalFilterTableState => {\n    return {\n      globalFilter: undefined,\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): GlobalFilterOptions<TData> => {\n    return {\n      onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n      globalFilterFn: 'auto',\n      getColumnCanGlobalFilter: column => {\n        const value = table\n          .getCoreRowModel()\n          .flatRows[0]?._getAllCellsByColumnId()\n          [column.id]?.getValue()\n\n        return typeof value === 'string' || typeof value === 'number'\n      },\n    } as GlobalFilterOptions<TData>\n  },\n\n  createColumn: <TData extends RowData>(\n    column: Column<TData, unknown>,\n    table: Table<TData>\n  ): void => {\n    column.getCanGlobalFilter = () => {\n      return (\n        (column.columnDef.enableGlobalFilter ?? true) &&\n        (table.options.enableGlobalFilter ?? true) &&\n        (table.options.enableFilters ?? true) &&\n        (table.options.getColumnCanGlobalFilter?.(column) ?? true) &&\n        !!column.accessorFn\n      )\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.getGlobalAutoFilterFn = () => {\n      return filterFns.includesString\n    }\n\n    table.getGlobalFilterFn = () => {\n      const { globalFilterFn: globalFilterFn } = table.options\n\n      return isFunction(globalFilterFn)\n        ? globalFilterFn\n        : globalFilterFn === 'auto'\n          ? table.getGlobalAutoFilterFn()\n          : table.options.filterFns?.[globalFilterFn as string] ??\n            filterFns[globalFilterFn as BuiltInFilterFn]\n    }\n\n    table.setGlobalFilter = updater => {\n      table.options.onGlobalFilterChange?.(updater)\n    }\n\n    table.resetGlobalFilter = defaultState => {\n      table.setGlobalFilter(\n        defaultState ? undefined : table.initialState.globalFilter\n      )\n    }\n  },\n}\n","import { RowModel } from '..'\nimport {\n  OnChangeFn,\n  Table,\n  Row,\n  Updater,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { makeStateUpdater } from '../utils'\n\nexport type ExpandedStateList = Record<string, boolean>\nexport type ExpandedState = true | Record<string, boolean>\nexport interface ExpandedTableState {\n  expanded: ExpandedState\n}\n\nexport interface ExpandedRow {\n  /**\n   * Returns whether the row can be expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getcanexpand)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getCanExpand: () => boolean\n  /**\n   * Returns whether all parent rows of the row are expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisallparentsexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getIsAllParentsExpanded: () => boolean\n  /**\n   * Returns whether the row is expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getIsExpanded: () => boolean\n  /**\n   * Returns a function that can be used to toggle the expanded state of the row. This function can be used to bind to an event handler to a button.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#gettoggleexpandedhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getToggleExpandedHandler: () => () => void\n  /**\n   * Toggles the expanded state (or sets it if `expanded` is provided) for the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#toggleexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  toggleExpanded: (expanded?: boolean) => void\n}\n\nexport interface ExpandedOptions<TData extends RowData> {\n  /**\n   * Enable this setting to automatically reset the expanded state of the table when expanding state changes.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#autoresetexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  autoResetExpanded?: boolean\n  /**\n   * Enable/disable expanding for all rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#enableexpanding)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  enableExpanding?: boolean\n  /**\n   * This function is responsible for returning the expanded row model. If this function is not provided, the table will not expand rows. You can use the default exported `getExpandedRowModel` function to get the expanded row model or implement your own.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getExpandedRowModel?: (table: Table<any>) => () => RowModel<any>\n  /**\n   * If provided, allows you to override the default behavior of determining whether a row is currently expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisrowexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getIsRowExpanded?: (row: Row<TData>) => boolean\n  /**\n   * If provided, allows you to override the default behavior of determining whether a row can be expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getrowcanexpand)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getRowCanExpand?: (row: Row<TData>) => boolean\n  /**\n   * Enables manual row expansion. If this is set to `true`, `getExpandedRowModel` will not be used to expand rows and you would be expected to perform the expansion in your own data model. This is useful if you are doing server-side expansion.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#manualexpanding)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  manualExpanding?: boolean\n  /**\n   * This function is called when the `expanded` table state changes. If a function is provided, you will be responsible for managing this state on your own. To pass the managed state back to the table, use the `tableOptions.state.expanded` option.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#onexpandedchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  onExpandedChange?: OnChangeFn<ExpandedState>\n  /**\n   * If `true` expanded rows will be paginated along with the rest of the table (which means expanded rows may span multiple pages). If `false` expanded rows will not be considered for pagination (which means expanded rows will always render on their parents page. This also means more rows will be rendered than the set page size)\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#paginateexpandedrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  paginateExpandedRows?: boolean\n}\n\nexport interface ExpandedInstance<TData extends RowData> {\n  _autoResetExpanded: () => void\n  _getExpandedRowModel?: () => RowModel<TData>\n  /**\n   * Returns whether there are any rows that can be expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getcansomerowsexpand)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getCanSomeRowsExpand: () => boolean\n  /**\n   * Returns the maximum depth of the expanded rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandeddepth)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getExpandedDepth: () => number\n  /**\n   * Returns the row model after expansion has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getExpandedRowModel: () => RowModel<TData>\n  /**\n   * Returns whether all rows are currently expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisallrowsexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getIsAllRowsExpanded: () => boolean\n  /**\n   * Returns whether there are any rows that are currently expanded.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getissomerowsexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getIsSomeRowsExpanded: () => boolean\n  /**\n   * Returns the row model before expansion has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getpreexpandedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getPreExpandedRowModel: () => RowModel<TData>\n  /**\n   * Returns a handler that can be used to toggle the expanded state of all rows. This handler is meant to be used with an `input[type=checkbox]` element.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#gettoggleallrowsexpandedhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  getToggleAllRowsExpandedHandler: () => (event: unknown) => void\n  /**\n   * Resets the expanded state of the table to the initial state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#resetexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  resetExpanded: (defaultState?: boolean) => void\n  /**\n   * Updates the expanded state of the table via an update function or value.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#setexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  setExpanded: (updater: Updater<ExpandedState>) => void\n  /**\n   * Toggles the expanded state for all rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#toggleallrowsexpanded)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n   */\n  toggleAllRowsExpanded: (expanded?: boolean) => void\n}\n\n//\n\nexport const RowExpanding: TableFeature = {\n  getInitialState: (state): ExpandedTableState => {\n    return {\n      expanded: {},\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): ExpandedOptions<TData> => {\n    return {\n      onExpandedChange: makeStateUpdater('expanded', table),\n      paginateExpandedRows: true,\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    let registered = false\n    let queued = false\n\n    table._autoResetExpanded = () => {\n      if (!registered) {\n        table._queue(() => {\n          registered = true\n        })\n        return\n      }\n\n      if (\n        table.options.autoResetAll ??\n        table.options.autoResetExpanded ??\n        !table.options.manualExpanding\n      ) {\n        if (queued) return\n        queued = true\n        table._queue(() => {\n          table.resetExpanded()\n          queued = false\n        })\n      }\n    }\n    table.setExpanded = updater => table.options.onExpandedChange?.(updater)\n    table.toggleAllRowsExpanded = expanded => {\n      if (expanded ?? !table.getIsAllRowsExpanded()) {\n        table.setExpanded(true)\n      } else {\n        table.setExpanded({})\n      }\n    }\n    table.resetExpanded = defaultState => {\n      table.setExpanded(defaultState ? {} : table.initialState?.expanded ?? {})\n    }\n    table.getCanSomeRowsExpand = () => {\n      return table\n        .getPrePaginationRowModel()\n        .flatRows.some(row => row.getCanExpand())\n    }\n    table.getToggleAllRowsExpandedHandler = () => {\n      return (e: unknown) => {\n        ;(e as any).persist?.()\n        table.toggleAllRowsExpanded()\n      }\n    }\n    table.getIsSomeRowsExpanded = () => {\n      const expanded = table.getState().expanded\n      return expanded === true || Object.values(expanded).some(Boolean)\n    }\n    table.getIsAllRowsExpanded = () => {\n      const expanded = table.getState().expanded\n\n      // If expanded is true, save some cycles and return true\n      if (typeof expanded === 'boolean') {\n        return expanded === true\n      }\n\n      if (!Object.keys(expanded).length) {\n        return false\n      }\n\n      // If any row is not expanded, return false\n      if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n        return false\n      }\n\n      // They must all be expanded :shrug:\n      return true\n    }\n    table.getExpandedDepth = () => {\n      let maxDepth = 0\n\n      const rowIds =\n        table.getState().expanded === true\n          ? Object.keys(table.getRowModel().rowsById)\n          : Object.keys(table.getState().expanded)\n\n      rowIds.forEach(id => {\n        const splitId = id.split('.')\n        maxDepth = Math.max(maxDepth, splitId.length)\n      })\n\n      return maxDepth\n    }\n    table.getPreExpandedRowModel = () => table.getSortedRowModel()\n    table.getExpandedRowModel = () => {\n      if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n        table._getExpandedRowModel = table.options.getExpandedRowModel(table)\n      }\n\n      if (table.options.manualExpanding || !table._getExpandedRowModel) {\n        return table.getPreExpandedRowModel()\n      }\n\n      return table._getExpandedRowModel()\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row.toggleExpanded = expanded => {\n      table.setExpanded(old => {\n        const exists = old === true ? true : !!old?.[row.id]\n\n        let oldExpanded: ExpandedStateList = {}\n\n        if (old === true) {\n          Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n            oldExpanded[rowId] = true\n          })\n        } else {\n          oldExpanded = old\n        }\n\n        expanded = expanded ?? !exists\n\n        if (!exists && expanded) {\n          return {\n            ...oldExpanded,\n            [row.id]: true,\n          }\n        }\n\n        if (exists && !expanded) {\n          const { [row.id]: _, ...rest } = oldExpanded\n          return rest\n        }\n\n        return old\n      })\n    }\n    row.getIsExpanded = () => {\n      const expanded = table.getState().expanded\n\n      return !!(\n        table.options.getIsRowExpanded?.(row) ??\n        (expanded === true || expanded?.[row.id])\n      )\n    }\n    row.getCanExpand = () => {\n      return (\n        table.options.getRowCanExpand?.(row) ??\n        ((table.options.enableExpanding ?? true) && !!row.subRows?.length)\n      )\n    }\n    row.getIsAllParentsExpanded = () => {\n      let isFullyExpanded = true\n      let currentRow = row\n\n      while (isFullyExpanded && currentRow.parentId) {\n        currentRow = table.getRow(currentRow.parentId, true)\n        isFullyExpanded = currentRow.getIsExpanded()\n      }\n\n      return isFullyExpanded\n    }\n    row.getToggleExpandedHandler = () => {\n      const canExpand = row.getCanExpand()\n\n      return () => {\n        if (!canExpand) return\n        row.toggleExpanded()\n      }\n    }\n  },\n}\n","import {\n  OnChangeFn,\n  Table,\n  RowModel,\n  Updater,\n  RowData,\n  TableFeature,\n} from '../types'\nimport {\n  functionalUpdate,\n  getMemoOptions,\n  makeStateUpdater,\n  memo,\n} from '../utils'\n\nexport interface PaginationState {\n  pageIndex: number\n  pageSize: number\n}\n\nexport interface PaginationTableState {\n  pagination: PaginationState\n}\n\nexport interface PaginationInitialTableState {\n  pagination?: Partial<PaginationState>\n}\n\nexport interface PaginationOptions {\n  /**\n   * If set to `true`, pagination will be reset to the first page when page-altering state changes eg. `data` is updated, filters change, grouping changes, etc.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#autoresetpageindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  autoResetPageIndex?: boolean\n  /**\n   * Returns the row model after pagination has taken place, but no further.\n   *\n   * Pagination columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpaginationrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n  /**\n   * Enables manual pagination. If this option is set to `true`, the table will not automatically paginate rows using `getPaginationRowModel()` and instead will expect you to manually paginate the rows before passing them to the table. This is useful if you are doing server-side pagination and aggregation.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#manualpagination)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  manualPagination?: boolean\n  /**\n   * If this function is provided, it will be called when the pagination state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.pagination` option.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#onpaginationchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  onPaginationChange?: OnChangeFn<PaginationState>\n  /**\n   * When manually controlling pagination, you can supply a total `pageCount` value to the table if you know it (Or supply a `rowCount` and `pageCount` will be calculated). If you do not know how many pages there are, you can set this to `-1`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#pagecount)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  pageCount?: number\n  /**\n   * When manually controlling pagination, you can supply a total `rowCount` value to the table if you know it. The `pageCount` can be calculated from this value and the `pageSize`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#rowcount)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  rowCount?: number\n}\n\nexport interface PaginationDefaultOptions {\n  onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport interface PaginationInstance<TData extends RowData> {\n  _autoResetPageIndex: () => void\n  _getPaginationRowModel?: () => RowModel<TData>\n  /**\n   * Returns whether the table can go to the next page.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getcannextpage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getCanNextPage: () => boolean\n  /**\n   * Returns whether the table can go to the previous page.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getcanpreviouspage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getCanPreviousPage: () => boolean\n  /**\n   * Returns the page count. If manually paginating or controlling the pagination state, this will come directly from the `options.pageCount` table option, otherwise it will be calculated from the table data using the total row count and current page size.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpagecount)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getPageCount: () => number\n  /**\n   * Returns the row count. If manually paginating or controlling the pagination state, this will come directly from the `options.rowCount` table option, otherwise it will be calculated from the table data.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getrowcount)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getRowCount: () => number\n  /**\n   * Returns an array of page options (zero-index-based) for the current page size.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpageoptions)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getPageOptions: () => number[]\n  /**\n   * Returns the row model for the table after pagination has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpaginationrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getPaginationRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model for the table before any pagination has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getprepaginationrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  getPrePaginationRowModel: () => RowModel<TData>\n  /**\n   * Increments the page index by one, if possible.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#nextpage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  nextPage: () => void\n  /**\n   * Decrements the page index by one, if possible.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#previouspage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  previousPage: () => void\n  /**\n   * Sets the page index to `0`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#firstpage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  firstPage: () => void\n  /**\n   * Sets the page index to the last page.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#lastpage)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  lastPage: () => void\n  /**\n   * Resets the page index to its initial state. If `defaultState` is `true`, the page index will be reset to `0` regardless of initial state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpageindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  resetPageIndex: (defaultState?: boolean) => void\n  /**\n   * Resets the page size to its initial state. If `defaultState` is `true`, the page size will be reset to `10` regardless of initial state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpagesize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  resetPageSize: (defaultState?: boolean) => void\n  /**\n   * Resets the **pagination** state to `initialState.pagination`, or `true` can be passed to force a default blank state reset to `[]`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpagination)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  resetPagination: (defaultState?: boolean) => void\n  /**\n   * @deprecated The page count no longer exists in the pagination state. Just pass as a table option instead.\n   */\n  setPageCount: (updater: Updater<number>) => void\n  /**\n   * Updates the page index using the provided function or value in the `state.pagination.pageIndex` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpageindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  setPageIndex: (updater: Updater<number>) => void\n  /**\n   * Updates the page size using the provided function or value in the `state.pagination.pageSize` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpagesize)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  setPageSize: (updater: Updater<number>) => void\n  /**\n   * Sets or updates the `state.pagination` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpagination)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n   */\n  setPagination: (updater: Updater<PaginationState>) => void\n}\n\n//\n\nconst defaultPageIndex = 0\nconst defaultPageSize = 10\n\nconst getDefaultPaginationState = (): PaginationState => ({\n  pageIndex: defaultPageIndex,\n  pageSize: defaultPageSize,\n})\n\nexport const RowPagination: TableFeature = {\n  getInitialState: (state): PaginationTableState => {\n    return {\n      ...state,\n      pagination: {\n        ...getDefaultPaginationState(),\n        ...state?.pagination,\n      },\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): PaginationDefaultOptions => {\n    return {\n      onPaginationChange: makeStateUpdater('pagination', table),\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    let registered = false\n    let queued = false\n\n    table._autoResetPageIndex = () => {\n      if (!registered) {\n        table._queue(() => {\n          registered = true\n        })\n        return\n      }\n\n      if (\n        table.options.autoResetAll ??\n        table.options.autoResetPageIndex ??\n        !table.options.manualPagination\n      ) {\n        if (queued) return\n        queued = true\n        table._queue(() => {\n          table.resetPageIndex()\n          queued = false\n        })\n      }\n    }\n    table.setPagination = updater => {\n      const safeUpdater: Updater<PaginationState> = old => {\n        let newState = functionalUpdate(updater, old)\n\n        return newState\n      }\n\n      return table.options.onPaginationChange?.(safeUpdater)\n    }\n    table.resetPagination = defaultState => {\n      table.setPagination(\n        defaultState\n          ? getDefaultPaginationState()\n          : table.initialState.pagination ?? getDefaultPaginationState()\n      )\n    }\n    table.setPageIndex = updater => {\n      table.setPagination(old => {\n        let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n        const maxPageIndex =\n          typeof table.options.pageCount === 'undefined' ||\n          table.options.pageCount === -1\n            ? Number.MAX_SAFE_INTEGER\n            : table.options.pageCount - 1\n\n        pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex))\n\n        return {\n          ...old,\n          pageIndex,\n        }\n      })\n    }\n    table.resetPageIndex = defaultState => {\n      table.setPageIndex(\n        defaultState\n          ? defaultPageIndex\n          : table.initialState?.pagination?.pageIndex ?? defaultPageIndex\n      )\n    }\n    table.resetPageSize = defaultState => {\n      table.setPageSize(\n        defaultState\n          ? defaultPageSize\n          : table.initialState?.pagination?.pageSize ?? defaultPageSize\n      )\n    }\n    table.setPageSize = updater => {\n      table.setPagination(old => {\n        const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))\n        const topRowIndex = old.pageSize * old.pageIndex!\n        const pageIndex = Math.floor(topRowIndex / pageSize)\n\n        return {\n          ...old,\n          pageIndex,\n          pageSize,\n        }\n      })\n    }\n    //deprecated\n    table.setPageCount = updater =>\n      table.setPagination(old => {\n        let newPageCount = functionalUpdate(\n          updater,\n          table.options.pageCount ?? -1\n        )\n\n        if (typeof newPageCount === 'number') {\n          newPageCount = Math.max(-1, newPageCount)\n        }\n\n        return {\n          ...old,\n          pageCount: newPageCount,\n        }\n      })\n\n    table.getPageOptions = memo(\n      () => [table.getPageCount()],\n      pageCount => {\n        let pageOptions: number[] = []\n        if (pageCount && pageCount > 0) {\n          pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)\n        }\n        return pageOptions\n      },\n      getMemoOptions(table.options, 'debugTable', 'getPageOptions')\n    )\n\n    table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0\n\n    table.getCanNextPage = () => {\n      const { pageIndex } = table.getState().pagination\n\n      const pageCount = table.getPageCount()\n\n      if (pageCount === -1) {\n        return true\n      }\n\n      if (pageCount === 0) {\n        return false\n      }\n\n      return pageIndex < pageCount - 1\n    }\n\n    table.previousPage = () => {\n      return table.setPageIndex(old => old - 1)\n    }\n\n    table.nextPage = () => {\n      return table.setPageIndex(old => {\n        return old + 1\n      })\n    }\n\n    table.firstPage = () => {\n      return table.setPageIndex(0)\n    }\n\n    table.lastPage = () => {\n      return table.setPageIndex(table.getPageCount() - 1)\n    }\n\n    table.getPrePaginationRowModel = () => table.getExpandedRowModel()\n    table.getPaginationRowModel = () => {\n      if (\n        !table._getPaginationRowModel &&\n        table.options.getPaginationRowModel\n      ) {\n        table._getPaginationRowModel =\n          table.options.getPaginationRowModel(table)\n      }\n\n      if (table.options.manualPagination || !table._getPaginationRowModel) {\n        return table.getPrePaginationRowModel()\n      }\n\n      return table._getPaginationRowModel()\n    }\n\n    table.getPageCount = () => {\n      return (\n        table.options.pageCount ??\n        Math.ceil(table.getRowCount() / table.getState().pagination.pageSize)\n      )\n    }\n\n    table.getRowCount = () => {\n      return (\n        table.options.rowCount ?? table.getPrePaginationRowModel().rows.length\n      )\n    }\n  },\n}\n","import {\n  OnChangeFn,\n  Updater,\n  Table,\n  Row,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type RowPinningPosition = false | 'top' | 'bottom'\n\nexport interface RowPinningState {\n  bottom?: string[]\n  top?: string[]\n}\n\nexport interface RowPinningTableState {\n  rowPinning: RowPinningState\n}\n\nexport interface RowPinningOptions<TData extends RowData> {\n  /**\n   * Enables/disables row pinning for the table. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#enablerowpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  enableRowPinning?: boolean | ((row: Row<TData>) => boolean)\n  /**\n   * When `false`, pinned rows will not be visible if they are filtered or paginated out of the table. When `true`, pinned rows will always be visible regardless of filtering or pagination. Defaults to `true`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#keeppinnedrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  keepPinnedRows?: boolean\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.rowPinning` changes. This overrides the default internal state management, so you will also need to supply `state.rowPinning` from your own managed state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#onrowpinningchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/onrowpinningchange)\n   */\n  onRowPinningChange?: OnChangeFn<RowPinningState>\n}\n\nexport interface RowPinningDefaultOptions {\n  onRowPinningChange: OnChangeFn<RowPinningState>\n}\n\nexport interface RowPinningRow {\n  /**\n   * Returns whether or not the row can be pinned.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getcanpin-1)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getCanPin: () => boolean\n  /**\n   * Returns the pinned position of the row. (`'top'`, `'bottom'` or `false`)\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getispinned-1)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getIsPinned: () => RowPinningPosition\n  /**\n   * Returns the numeric pinned index of the row within a pinned row group.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getpinnedindex-1)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getPinnedIndex: () => number\n  /**\n   * Pins a row to the `'top'` or `'bottom'`, or unpins the row to the center if `false` is passed.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#pin-1)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  pin: (\n    position: RowPinningPosition,\n    includeLeafRows?: boolean,\n    includeParentRows?: boolean\n  ) => void\n}\n\nexport interface RowPinningInstance<TData extends RowData> {\n  _getPinnedRows: (\n    visiblePinnedRows: Array<Row<TData>>,\n    pinnedRowIds: Array<string> | undefined,\n    position: 'top' | 'bottom'\n  ) => Row<TData>[]\n  /**\n   * Returns all bottom pinned rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getbottomrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getBottomRows: () => Row<TData>[]\n  /**\n   * Returns all rows that are not pinned to the top or bottom.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getcenterrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getCenterRows: () => Row<TData>[]\n  /**\n   * Returns whether or not any rows are pinned. Optionally specify to only check for pinned rows in either the `top` or `bottom` position.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getissomerowspinned)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getIsSomeRowsPinned: (position?: RowPinningPosition) => boolean\n  /**\n   * Returns all top pinned rows.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#gettoprows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  getTopRows: () => Row<TData>[]\n  /**\n   * Resets the **rowPinning** state to `initialState.rowPinning`, or `true` can be passed to force a default blank state reset to `{ top: [], bottom: [], }`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#resetrowpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  resetRowPinning: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.rowPinning` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#setrowpinning)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n   */\n  setRowPinning: (updater: Updater<RowPinningState>) => void\n}\n\n//\n\nconst getDefaultRowPinningState = (): RowPinningState => ({\n  top: [],\n  bottom: [],\n})\n\nexport const RowPinning: TableFeature = {\n  getInitialState: (state): RowPinningTableState => {\n    return {\n      rowPinning: getDefaultRowPinningState(),\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): RowPinningDefaultOptions => {\n    return {\n      onRowPinningChange: makeStateUpdater('rowPinning', table),\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row.pin = (position, includeLeafRows, includeParentRows) => {\n      const leafRowIds = includeLeafRows\n        ? row.getLeafRows().map(({ id }) => id)\n        : []\n      const parentRowIds = includeParentRows\n        ? row.getParentRows().map(({ id }) => id)\n        : []\n      const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds])\n\n      table.setRowPinning(old => {\n        if (position === 'bottom') {\n          return {\n            top: (old?.top ?? []).filter(d => !rowIds?.has(d)),\n            bottom: [\n              ...(old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n              ...Array.from(rowIds),\n            ],\n          }\n        }\n\n        if (position === 'top') {\n          return {\n            top: [\n              ...(old?.top ?? []).filter(d => !rowIds?.has(d)),\n              ...Array.from(rowIds),\n            ],\n            bottom: (old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n          }\n        }\n\n        return {\n          top: (old?.top ?? []).filter(d => !rowIds?.has(d)),\n          bottom: (old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n        }\n      })\n    }\n    row.getCanPin = () => {\n      const { enableRowPinning, enablePinning } = table.options\n      if (typeof enableRowPinning === 'function') {\n        return enableRowPinning(row)\n      }\n      return enableRowPinning ?? enablePinning ?? true\n    }\n    row.getIsPinned = () => {\n      const rowIds = [row.id]\n\n      const { top, bottom } = table.getState().rowPinning\n\n      const isTop = rowIds.some(d => top?.includes(d))\n      const isBottom = rowIds.some(d => bottom?.includes(d))\n\n      return isTop ? 'top' : isBottom ? 'bottom' : false\n    }\n    row.getPinnedIndex = () => {\n      const position = row.getIsPinned()\n      if (!position) return -1\n\n      const visiblePinnedRowIds = (\n        position === 'top' ? table.getTopRows() : table.getBottomRows()\n      )?.map(({ id }) => id)\n\n      return visiblePinnedRowIds?.indexOf(row.id) ?? -1\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setRowPinning = updater => table.options.onRowPinningChange?.(updater)\n\n    table.resetRowPinning = defaultState =>\n      table.setRowPinning(\n        defaultState\n          ? getDefaultRowPinningState()\n          : table.initialState?.rowPinning ?? getDefaultRowPinningState()\n      )\n\n    table.getIsSomeRowsPinned = position => {\n      const pinningState = table.getState().rowPinning\n\n      if (!position) {\n        return Boolean(pinningState.top?.length || pinningState.bottom?.length)\n      }\n      return Boolean(pinningState[position]?.length)\n    }\n\n    table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n      const rows =\n        table.options.keepPinnedRows ?? true\n          ? //get all rows that are pinned even if they would not be otherwise visible\n            //account for expanded parent rows, but not pagination or filtering\n            (pinnedRowIds ?? []).map(rowId => {\n              const row = table.getRow(rowId, true)\n              return row.getIsAllParentsExpanded() ? row : null\n            })\n          : //else get only visible rows that are pinned\n            (pinnedRowIds ?? []).map(\n              rowId => visibleRows.find(row => row.id === rowId)!\n            )\n\n      return rows.filter(Boolean).map(d => ({ ...d, position })) as Row<TData>[]\n    }\n\n    table.getTopRows = memo(\n      () => [table.getRowModel().rows, table.getState().rowPinning.top],\n      (allRows, topPinnedRowIds) =>\n        table._getPinnedRows(allRows, topPinnedRowIds, 'top'),\n      getMemoOptions(table.options, 'debugRows', 'getTopRows')\n    )\n\n    table.getBottomRows = memo(\n      () => [table.getRowModel().rows, table.getState().rowPinning.bottom],\n      (allRows, bottomPinnedRowIds) =>\n        table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'),\n      getMemoOptions(table.options, 'debugRows', 'getBottomRows')\n    )\n\n    table.getCenterRows = memo(\n      () => [\n        table.getRowModel().rows,\n        table.getState().rowPinning.top,\n        table.getState().rowPinning.bottom,\n      ],\n      (allRows, top, bottom) => {\n        const topAndBottom = new Set([...(top ?? []), ...(bottom ?? [])])\n        return allRows.filter(d => !topAndBottom.has(d.id))\n      },\n      getMemoOptions(table.options, 'debugRows', 'getCenterRows')\n    )\n  },\n}\n","import {\n  OnChangeFn,\n  Table,\n  Row,\n  RowModel,\n  Updater,\n  RowData,\n  TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type RowSelectionState = Record<string, boolean>\n\nexport interface RowSelectionTableState {\n  rowSelection: RowSelectionState\n}\n\nexport interface RowSelectionOptions<TData extends RowData> {\n  /**\n   * - Enables/disables multiple row selection for all rows in the table OR\n   * - A function that given a row, returns whether to enable/disable multiple row selection for that row's children/grandchildren\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablemultirowselection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  enableMultiRowSelection?: boolean | ((row: Row<TData>) => boolean)\n  /**\n   * - Enables/disables row selection for all rows in the table OR\n   * - A function that given a row, returns whether to enable/disable row selection for that row\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablerowselection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n  /**\n   * Enables/disables automatic sub-row selection when a parent row is selected, or a function that enables/disables automatic sub-row selection for each row.\n   * (Use in combination with expanding or grouping features)\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablesubrowselection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  enableSubRowSelection?: boolean | ((row: Row<TData>) => boolean)\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.rowSelection` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#onrowselectionchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  onRowSelectionChange?: OnChangeFn<RowSelectionState>\n  // enableGroupingRowSelection?:\n  //   | boolean\n  //   | ((\n  //       row: Row<TData>\n  //     ) => boolean)\n  // isAdditiveSelectEvent?: (e: unknown) => boolean\n  // isInclusiveSelectEvent?: (e: unknown) => boolean\n  // selectRowsFn?: (\n  //   table: Table<TData>,\n  //   rowModel: RowModel<TData>\n  // ) => RowModel<TData>\n}\n\nexport interface RowSelectionRow {\n  /**\n   * Returns whether or not the row can multi-select.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanmultiselect)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getCanMultiSelect: () => boolean\n  /**\n   * Returns whether or not the row can be selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanselect)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getCanSelect: () => boolean\n  /**\n   * Returns whether or not the row can select sub rows automatically when the parent row is selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanselectsubrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getCanSelectSubRows: () => boolean\n  /**\n   * Returns whether or not all of the row's sub rows are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallsubrowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsAllSubRowsSelected: () => boolean\n  /**\n   * Returns whether or not the row is selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsSelected: () => boolean\n  /**\n   * Returns whether or not some of the row's sub rows are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomeselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsSomeSelected: () => boolean\n  /**\n   * Returns a handler that can be used to toggle the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleselectedhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getToggleSelectedHandler: () => (event: unknown) => void\n  /**\n   * Selects/deselects the row.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  toggleSelected: (value?: boolean, opts?: { selectChildren?: boolean }) => void\n}\n\nexport interface RowSelectionInstance<TData extends RowData> {\n  /**\n   * Returns the row model of all rows that are selected after filtering has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getfilteredselectedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getFilteredSelectedRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model of all rows that are selected after grouping has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getgroupedselectedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getGroupedSelectedRowModel: () => RowModel<TData>\n  /**\n   * Returns whether or not all rows on the current page are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallpagerowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsAllPageRowsSelected: () => boolean\n  /**\n   * Returns whether or not all rows in the table are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallrowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsAllRowsSelected: () => boolean\n  /**\n   * Returns whether or not any rows on the current page are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomepagerowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsSomePageRowsSelected: () => boolean\n  /**\n   * Returns whether or not any rows in the table are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomerowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getIsSomeRowsSelected: () => boolean\n  /**\n   * Returns the core row model of all rows before row selection has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getpreselectedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getPreSelectedRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model of all rows that are selected.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getselectedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getSelectedRowModel: () => RowModel<TData>\n  /**\n   * Returns a handler that can be used to toggle all rows on the current page.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleallpagerowsselectedhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void\n  /**\n   * Returns a handler that can be used to toggle all rows in the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleallrowsselectedhandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  getToggleAllRowsSelectedHandler: () => (event: unknown) => void\n  /**\n   * Resets the **rowSelection** state to the `initialState.rowSelection`, or `true` can be passed to force a default blank state reset to `{}`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#resetrowselection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  resetRowSelection: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.rowSelection` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#setrowselection)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  setRowSelection: (updater: Updater<RowSelectionState>) => void\n  /**\n   * Selects/deselects all rows on the current page.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleallpagerowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  toggleAllPageRowsSelected: (value?: boolean) => void\n  /**\n   * Selects/deselects all rows in the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleallrowsselected)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n   */\n  toggleAllRowsSelected: (value?: boolean) => void\n}\n\n//\n\nexport const RowSelection: TableFeature = {\n  getInitialState: (state): RowSelectionTableState => {\n    return {\n      rowSelection: {},\n      ...state,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): RowSelectionOptions<TData> => {\n    return {\n      onRowSelectionChange: makeStateUpdater('rowSelection', table),\n      enableRowSelection: true,\n      enableMultiRowSelection: true,\n      enableSubRowSelection: true,\n      // enableGroupingRowSelection: false,\n      // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n      // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setRowSelection = updater =>\n      table.options.onRowSelectionChange?.(updater)\n    table.resetRowSelection = defaultState =>\n      table.setRowSelection(\n        defaultState ? {} : table.initialState.rowSelection ?? {}\n      )\n    table.toggleAllRowsSelected = value => {\n      table.setRowSelection(old => {\n        value =\n          typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected()\n\n        const rowSelection = { ...old }\n\n        const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows\n\n        // We don't use `mutateRowIsSelected` here for performance reasons.\n        // All of the rows are flat already, so it wouldn't be worth it\n        if (value) {\n          preGroupedFlatRows.forEach(row => {\n            if (!row.getCanSelect()) {\n              return\n            }\n            rowSelection[row.id] = true\n          })\n        } else {\n          preGroupedFlatRows.forEach(row => {\n            delete rowSelection[row.id]\n          })\n        }\n\n        return rowSelection\n      })\n    }\n    table.toggleAllPageRowsSelected = value =>\n      table.setRowSelection(old => {\n        const resolvedValue =\n          typeof value !== 'undefined'\n            ? value\n            : !table.getIsAllPageRowsSelected()\n\n        const rowSelection: RowSelectionState = { ...old }\n\n        table.getRowModel().rows.forEach(row => {\n          mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table)\n        })\n\n        return rowSelection\n      })\n\n    // addRowSelectionRange: rowId => {\n    //   const {\n    //     rows,\n    //     rowsById,\n    //     options: { selectGroupingRows, selectSubRows },\n    //   } = table\n\n    //   const findSelectedRow = (rows: Row[]) => {\n    //     let found\n    //     rows.find(d => {\n    //       if (d.getIsSelected()) {\n    //         found = d\n    //         return true\n    //       }\n    //       const subFound = findSelectedRow(d.subRows || [])\n    //       if (subFound) {\n    //         found = subFound\n    //         return true\n    //       }\n    //       return false\n    //     })\n    //     return found\n    //   }\n\n    //   const firstRow = findSelectedRow(rows) || rows[0]\n    //   const lastRow = rowsById[rowId]\n\n    //   let include = false\n    //   const selectedRowIds = {}\n\n    //   const addRow = (row: Row) => {\n    //     mutateRowIsSelected(selectedRowIds, row.id, true, {\n    //       rowsById,\n    //       selectGroupingRows: selectGroupingRows!,\n    //       selectSubRows: selectSubRows!,\n    //     })\n    //   }\n\n    //   table.rows.forEach(row => {\n    //     const isFirstRow = row.id === firstRow.id\n    //     const isLastRow = row.id === lastRow.id\n\n    //     if (isFirstRow || isLastRow) {\n    //       if (!include) {\n    //         include = true\n    //       } else if (include) {\n    //         addRow(row)\n    //         include = false\n    //       }\n    //     }\n\n    //     if (include) {\n    //       addRow(row)\n    //     }\n    //   })\n\n    //   table.setRowSelection(selectedRowIds)\n    // },\n    table.getPreSelectedRowModel = () => table.getCoreRowModel()\n    table.getSelectedRowModel = memo(\n      () => [table.getState().rowSelection, table.getCoreRowModel()],\n      (rowSelection, rowModel) => {\n        if (!Object.keys(rowSelection).length) {\n          return {\n            rows: [],\n            flatRows: [],\n            rowsById: {},\n          }\n        }\n\n        return selectRowsFn(table, rowModel)\n      },\n      getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel')\n    )\n\n    table.getFilteredSelectedRowModel = memo(\n      () => [table.getState().rowSelection, table.getFilteredRowModel()],\n      (rowSelection, rowModel) => {\n        if (!Object.keys(rowSelection).length) {\n          return {\n            rows: [],\n            flatRows: [],\n            rowsById: {},\n          }\n        }\n\n        return selectRowsFn(table, rowModel)\n      },\n      getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel')\n    )\n\n    table.getGroupedSelectedRowModel = memo(\n      () => [table.getState().rowSelection, table.getSortedRowModel()],\n      (rowSelection, rowModel) => {\n        if (!Object.keys(rowSelection).length) {\n          return {\n            rows: [],\n            flatRows: [],\n            rowsById: {},\n          }\n        }\n\n        return selectRowsFn(table, rowModel)\n      },\n      getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel')\n    )\n\n    ///\n\n    // getGroupingRowCanSelect: rowId => {\n    //   const row = table.getRow(rowId)\n\n    //   if (!row) {\n    //     throw new Error()\n    //   }\n\n    //   if (typeof table.options.enableGroupingRowSelection === 'function') {\n    //     return table.options.enableGroupingRowSelection(row)\n    //   }\n\n    //   return table.options.enableGroupingRowSelection ?? false\n    // },\n\n    table.getIsAllRowsSelected = () => {\n      const preGroupedFlatRows = table.getFilteredRowModel().flatRows\n      const { rowSelection } = table.getState()\n\n      let isAllRowsSelected = Boolean(\n        preGroupedFlatRows.length && Object.keys(rowSelection).length\n      )\n\n      if (isAllRowsSelected) {\n        if (\n          preGroupedFlatRows.some(\n            row => row.getCanSelect() && !rowSelection[row.id]\n          )\n        ) {\n          isAllRowsSelected = false\n        }\n      }\n\n      return isAllRowsSelected\n    }\n\n    table.getIsAllPageRowsSelected = () => {\n      const paginationFlatRows = table\n        .getPaginationRowModel()\n        .flatRows.filter(row => row.getCanSelect())\n      const { rowSelection } = table.getState()\n\n      let isAllPageRowsSelected = !!paginationFlatRows.length\n\n      if (\n        isAllPageRowsSelected &&\n        paginationFlatRows.some(row => !rowSelection[row.id])\n      ) {\n        isAllPageRowsSelected = false\n      }\n\n      return isAllPageRowsSelected\n    }\n\n    table.getIsSomeRowsSelected = () => {\n      const totalSelected = Object.keys(\n        table.getState().rowSelection ?? {}\n      ).length\n      return (\n        totalSelected > 0 &&\n        totalSelected < table.getFilteredRowModel().flatRows.length\n      )\n    }\n\n    table.getIsSomePageRowsSelected = () => {\n      const paginationFlatRows = table.getPaginationRowModel().flatRows\n      return table.getIsAllPageRowsSelected()\n        ? false\n        : paginationFlatRows\n            .filter(row => row.getCanSelect())\n            .some(d => d.getIsSelected() || d.getIsSomeSelected())\n    }\n\n    table.getToggleAllRowsSelectedHandler = () => {\n      return (e: unknown) => {\n        table.toggleAllRowsSelected(\n          ((e as MouseEvent).target as HTMLInputElement).checked\n        )\n      }\n    }\n\n    table.getToggleAllPageRowsSelectedHandler = () => {\n      return (e: unknown) => {\n        table.toggleAllPageRowsSelected(\n          ((e as MouseEvent).target as HTMLInputElement).checked\n        )\n      }\n    }\n  },\n\n  createRow: <TData extends RowData>(\n    row: Row<TData>,\n    table: Table<TData>\n  ): void => {\n    row.toggleSelected = (value, opts) => {\n      const isSelected = row.getIsSelected()\n\n      table.setRowSelection(old => {\n        value = typeof value !== 'undefined' ? value : !isSelected\n\n        if (row.getCanSelect() && isSelected === value) {\n          return old\n        }\n\n        const selectedRowIds = { ...old }\n\n        mutateRowIsSelected(\n          selectedRowIds,\n          row.id,\n          value,\n          opts?.selectChildren ?? true,\n          table\n        )\n\n        return selectedRowIds\n      })\n    }\n    row.getIsSelected = () => {\n      const { rowSelection } = table.getState()\n      return isRowSelected(row, rowSelection)\n    }\n\n    row.getIsSomeSelected = () => {\n      const { rowSelection } = table.getState()\n      return isSubRowSelected(row, rowSelection, table) === 'some'\n    }\n\n    row.getIsAllSubRowsSelected = () => {\n      const { rowSelection } = table.getState()\n      return isSubRowSelected(row, rowSelection, table) === 'all'\n    }\n\n    row.getCanSelect = () => {\n      if (typeof table.options.enableRowSelection === 'function') {\n        return table.options.enableRowSelection(row)\n      }\n\n      return table.options.enableRowSelection ?? true\n    }\n\n    row.getCanSelectSubRows = () => {\n      if (typeof table.options.enableSubRowSelection === 'function') {\n        return table.options.enableSubRowSelection(row)\n      }\n\n      return table.options.enableSubRowSelection ?? true\n    }\n\n    row.getCanMultiSelect = () => {\n      if (typeof table.options.enableMultiRowSelection === 'function') {\n        return table.options.enableMultiRowSelection(row)\n      }\n\n      return table.options.enableMultiRowSelection ?? true\n    }\n    row.getToggleSelectedHandler = () => {\n      const canSelect = row.getCanSelect()\n\n      return (e: unknown) => {\n        if (!canSelect) return\n        row.toggleSelected(\n          ((e as MouseEvent).target as HTMLInputElement)?.checked\n        )\n      }\n    }\n  },\n}\n\nconst mutateRowIsSelected = <TData extends RowData>(\n  selectedRowIds: Record<string, boolean>,\n  id: string,\n  value: boolean,\n  includeChildren: boolean,\n  table: Table<TData>\n) => {\n  const row = table.getRow(id, true)\n\n  // const isGrouped = row.getIsGrouped()\n\n  // if ( // TODO: enforce grouping row selection rules\n  //   !isGrouped ||\n  //   (isGrouped && table.options.enableGroupingRowSelection)\n  // ) {\n  if (value) {\n    if (!row.getCanMultiSelect()) {\n      Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key])\n    }\n    if (row.getCanSelect()) {\n      selectedRowIds[id] = true\n    }\n  } else {\n    delete selectedRowIds[id]\n  }\n  // }\n\n  if (includeChildren && row.subRows?.length && row.getCanSelectSubRows()) {\n    row.subRows.forEach(row =>\n      mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table)\n    )\n  }\n}\n\nexport function selectRowsFn<TData extends RowData>(\n  table: Table<TData>,\n  rowModel: RowModel<TData>\n): RowModel<TData> {\n  const rowSelection = table.getState().rowSelection\n\n  const newSelectedFlatRows: Row<TData>[] = []\n  const newSelectedRowsById: Record<string, Row<TData>> = {}\n\n  // Filters top level and nested rows\n  const recurseRows = (rows: Row<TData>[], depth = 0): Row<TData>[] => {\n    return rows\n      .map(row => {\n        const isSelected = isRowSelected(row, rowSelection)\n\n        if (isSelected) {\n          newSelectedFlatRows.push(row)\n          newSelectedRowsById[row.id] = row\n        }\n\n        if (row.subRows?.length) {\n          row = {\n            ...row,\n            subRows: recurseRows(row.subRows, depth + 1),\n          }\n        }\n\n        if (isSelected) {\n          return row\n        }\n      })\n      .filter(Boolean) as Row<TData>[]\n  }\n\n  return {\n    rows: recurseRows(rowModel.rows),\n    flatRows: newSelectedFlatRows,\n    rowsById: newSelectedRowsById,\n  }\n}\n\nexport function isRowSelected<TData extends RowData>(\n  row: Row<TData>,\n  selection: Record<string, boolean>\n): boolean {\n  return selection[row.id] ?? false\n}\n\nexport function isSubRowSelected<TData extends RowData>(\n  row: Row<TData>,\n  selection: Record<string, boolean>,\n  table: Table<TData>\n): boolean | 'some' | 'all' {\n  if (!row.subRows?.length) return false\n\n  let allChildrenSelected = true\n  let someSelected = false\n\n  row.subRows.forEach(subRow => {\n    // Bail out early if we know both of these\n    if (someSelected && !allChildrenSelected) {\n      return\n    }\n\n    if (subRow.getCanSelect()) {\n      if (isRowSelected(subRow, selection)) {\n        someSelected = true\n      } else {\n        allChildrenSelected = false\n      }\n    }\n\n    // Check row selection of nested subrows\n    if (subRow.subRows && subRow.subRows.length) {\n      const subRowChildrenSelected = isSubRowSelected(subRow, selection, table)\n      if (subRowChildrenSelected === 'all') {\n        someSelected = true\n      } else if (subRowChildrenSelected === 'some') {\n        someSelected = true\n        allChildrenSelected = false\n      } else {\n        allChildrenSelected = false\n      }\n    }\n  })\n\n  return allChildrenSelected ? 'all' : someSelected ? 'some' : false\n}\n","import { SortingFn } from './features/RowSorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(\n    toString(rowA.getValue(columnId)).toLowerCase(),\n    toString(rowB.getValue(columnId)).toLowerCase()\n  )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n  return compareAlphanumeric(\n    toString(rowA.getValue(columnId)),\n    toString(rowB.getValue(columnId))\n  )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n  return compareBasic(\n    toString(rowA.getValue(columnId)).toLowerCase(),\n    toString(rowB.getValue(columnId)).toLowerCase()\n  )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n  return compareBasic(\n    toString(rowA.getValue(columnId)),\n    toString(rowB.getValue(columnId))\n  )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n  const a = rowA.getValue<Date>(columnId)\n  const b = rowB.getValue<Date>(columnId)\n\n  // Can handle nullish values\n  // Use > and < because == (and ===) doesn't work with\n  // Date objects (would require calling getTime()).\n  return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn<any> = (rowA, rowB, columnId) => {\n  return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n  return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n  if (typeof a === 'number') {\n    if (isNaN(a) || a === Infinity || a === -Infinity) {\n      return ''\n    }\n    return String(a)\n  }\n  if (typeof a === 'string') {\n    return a\n  }\n  return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n  // Split on number groups, but keep the delimiter\n  // Then remove falsey split values\n  const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n  const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n  // While\n  while (a.length && b.length) {\n    const aa = a.shift()!\n    const bb = b.shift()!\n\n    const an = parseInt(aa, 10)\n    const bn = parseInt(bb, 10)\n\n    const combo = [an, bn].sort()\n\n    // Both are string\n    if (isNaN(combo[0]!)) {\n      if (aa > bb) {\n        return 1\n      }\n      if (bb > aa) {\n        return -1\n      }\n      continue\n    }\n\n    // One is a string, one is a number\n    if (isNaN(combo[1]!)) {\n      return isNaN(an) ? -1 : 1\n    }\n\n    // Both are numbers\n    if (an > bn) {\n      return 1\n    }\n    if (bn > an) {\n      return -1\n    }\n  }\n\n  return a.length - b.length\n}\n\n// Exports\n\nexport const sortingFns = {\n  alphanumeric,\n  alphanumericCaseSensitive,\n  text,\n  textCaseSensitive,\n  datetime,\n  basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n","import { RowModel } from '..'\nimport {\n  BuiltInSortingFn,\n  reSplitAlphaNumeric,\n  sortingFns,\n} from '../sortingFns'\n\nimport {\n  Column,\n  OnChangeFn,\n  Table,\n  Row,\n  Updater,\n  RowData,\n  SortingFns,\n  TableFeature,\n} from '../types'\n\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface ColumnSort {\n  desc: boolean\n  id: string\n}\n\nexport type SortingState = ColumnSort[]\n\nexport interface SortingTableState {\n  sorting: SortingState\n}\n\nexport interface SortingFn<TData extends RowData> {\n  (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n  string,\n  SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n  | 'auto'\n  | keyof SortingFns\n  | BuiltInSortingFn\n  | SortingFn<TData>\n\nexport interface SortingColumnDef<TData extends RowData> {\n  /**\n   * Enables/Disables multi-sorting for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultisort)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableMultiSort?: boolean\n  /**\n   * Enables/Disables sorting for this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableSorting?: boolean\n  /**\n   * Inverts the order of the sorting for this column. This is useful for values that have an inverted best/worst scale where lower numbers are better, eg. a ranking (1st, 2nd, 3rd) or golf-like scoring\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#invertsorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  invertSorting?: boolean\n  /**\n   * Set to `true` for sorting toggles on this column to start in the descending direction.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortdescfirst)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  sortDescFirst?: boolean\n  /**\n   * The sorting function to use with this column.\n   * - A `string` referencing a built-in sorting function\n   * - A custom sorting function\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortingfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  sortingFn?: SortingFnOption<TData>\n  /**\n   * The priority of undefined values when sorting this column.\n   * - `false`\n   *   - Undefined values will be considered tied and need to be sorted by the next column filter or original index (whichever applies)\n   * - `-1`\n   *   - Undefined values will be sorted with higher priority (ascending) (if ascending, undefined will appear on the beginning of the list)\n   * - `1`\n   *   - Undefined values will be sorted with lower priority (descending) (if ascending, undefined will appear on the end of the list)\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortundefined)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  sortUndefined?: false | -1 | 1 | 'first' | 'last'\n}\n\nexport interface SortingColumn<TData extends RowData> {\n  /**\n   * Removes this column from the table's sorting state\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#clearsorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  clearSorting: () => void\n  /**\n   * Returns a sort direction automatically inferred based on the columns values.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getautosortdir)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getAutoSortDir: () => SortDirection\n  /**\n   * Returns a sorting function automatically inferred based on the columns values.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getautosortingfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getAutoSortingFn: () => SortingFn<TData>\n  /**\n   * Returns whether this column can be multi-sorted.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getcanmultisort)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getCanMultiSort: () => boolean\n  /**\n   * Returns whether this column can be sorted.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getcansort)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getCanSort: () => boolean\n  /**\n   * Returns the first direction that should be used when sorting this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getfirstsortdir)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getFirstSortDir: () => SortDirection\n  /**\n   * Returns the current sort direction of this column.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getissorted)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getIsSorted: () => false | SortDirection\n  /**\n   * Returns the next sorting order.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getnextsortingorder)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getNextSortingOrder: () => SortDirection | false\n  /**\n   * Returns the index position of this column's sorting within the sorting state\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortindex)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getSortIndex: () => number\n  /**\n   * Returns the resolved sorting function to be used for this column\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortingfn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getSortingFn: () => SortingFn<TData>\n  /**\n   * Returns a function that can be used to toggle this column's sorting state. This is useful for attaching a click handler to the column header.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#gettogglesortinghandler)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n  /**\n   * Toggles this columns sorting state. If `desc` is provided, it will force the sort direction to that value. If `isMulti` is provided, it will additivity multi-sort the column (or toggle it if it is already sorted).\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#togglesorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n}\n\ninterface SortingOptionsBase {\n  /**\n   * Enables/disables the ability to remove multi-sorts\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultiremove)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableMultiRemove?: boolean\n  /**\n   * Enables/Disables multi-sorting for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultisort)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableMultiSort?: boolean\n  /**\n   * Enables/Disables sorting for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableSorting?: boolean\n  /**\n   * Enables/Disables the ability to remove sorting for the table.\n   * - If `true` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'none' -> ...\n   * - If `false` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesortingremoval)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  enableSortingRemoval?: boolean\n  /**\n   * This function is used to retrieve the sorted row model. If using server-side sorting, this function is not required. To use client-side sorting, pass the exported `getSortedRowModel()` from your adapter to your table or implement your own.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n  /**\n   * Pass a custom function that will be used to determine if a multi-sort event should be triggered. It is passed the event from the sort toggle handler and should return `true` if the event should trigger a multi-sort.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#ismultisortevent)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  isMultiSortEvent?: (e: unknown) => boolean\n  /**\n   * Enables manual sorting for the table. If this is `true`, you will be expected to sort your data before it is passed to the table. This is useful if you are doing server-side sorting.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#manualsorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  manualSorting?: boolean\n  /**\n   * Set a maximum number of columns that can be multi-sorted.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#maxmultisortcolcount)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  maxMultiSortColCount?: number\n  /**\n   * If provided, this function will be called with an `updaterFn` when `state.sorting` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#onsortingchange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  onSortingChange?: OnChangeFn<SortingState>\n  /**\n   * If `true`, all sorts will default to descending as their first toggle state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortdescfirst)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  sortDescFirst?: boolean\n}\n\ntype ResolvedSortingFns = keyof SortingFns extends never\n  ? {\n      sortingFns?: Record<string, SortingFn<any>>\n    }\n  : {\n      sortingFns: Record<keyof SortingFns, SortingFn<any>>\n    }\n\nexport interface SortingOptions<TData extends RowData>\n  extends SortingOptionsBase,\n    ResolvedSortingFns {}\n\nexport interface SortingInstance<TData extends RowData> {\n  _getSortedRowModel?: () => RowModel<TData>\n  /**\n   * Returns the row model for the table before any sorting has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getpresortedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getPreSortedRowModel: () => RowModel<TData>\n  /**\n   * Returns the row model for the table after sorting has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortedrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  getSortedRowModel: () => RowModel<TData>\n  /**\n   * Resets the **sorting** state to `initialState.sorting`, or `true` can be passed to force a default blank state reset to `[]`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#resetsorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  resetSorting: (defaultState?: boolean) => void\n  /**\n   * Sets or updates the `state.sorting` state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#setsorting)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n   */\n  setSorting: (updater: Updater<SortingState>) => void\n}\n\n//\n\nexport const RowSorting: TableFeature = {\n  getInitialState: (state): SortingTableState => {\n    return {\n      sorting: [],\n      ...state,\n    }\n  },\n\n  getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n    return {\n      sortingFn: 'auto',\n      sortUndefined: 1,\n    }\n  },\n\n  getDefaultOptions: <TData extends RowData>(\n    table: Table<TData>\n  ): SortingOptions<TData> => {\n    return {\n      onSortingChange: makeStateUpdater('sorting', table),\n      isMultiSortEvent: (e: unknown) => {\n        return (e as MouseEvent).shiftKey\n      },\n    }\n  },\n\n  createColumn: <TData extends RowData, TValue>(\n    column: Column<TData, TValue>,\n    table: Table<TData>\n  ): void => {\n    column.getAutoSortingFn = () => {\n      const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n      let isString = false\n\n      for (const row of firstRows) {\n        const value = row?.getValue(column.id)\n\n        if (Object.prototype.toString.call(value) === '[object Date]') {\n          return sortingFns.datetime\n        }\n\n        if (typeof value === 'string') {\n          isString = true\n\n          if (value.split(reSplitAlphaNumeric).length > 1) {\n            return sortingFns.alphanumeric\n          }\n        }\n      }\n\n      if (isString) {\n        return sortingFns.text\n      }\n\n      return sortingFns.basic\n    }\n    column.getAutoSortDir = () => {\n      const firstRow = table.getFilteredRowModel().flatRows[0]\n\n      const value = firstRow?.getValue(column.id)\n\n      if (typeof value === 'string') {\n        return 'asc'\n      }\n\n      return 'desc'\n    }\n    column.getSortingFn = () => {\n      if (!column) {\n        throw new Error()\n      }\n\n      return isFunction(column.columnDef.sortingFn)\n        ? column.columnDef.sortingFn\n        : column.columnDef.sortingFn === 'auto'\n          ? column.getAutoSortingFn()\n          : table.options.sortingFns?.[column.columnDef.sortingFn as string] ??\n            sortingFns[column.columnDef.sortingFn as BuiltInSortingFn]\n    }\n    column.toggleSorting = (desc, multi) => {\n      // if (column.columns.length) {\n      //   column.columns.forEach((c, i) => {\n      //     if (c.id) {\n      //       table.toggleColumnSorting(c.id, undefined, multi || !!i)\n      //     }\n      //   })\n      //   return\n      // }\n\n      // this needs to be outside of table.setSorting to be in sync with rerender\n      const nextSortingOrder = column.getNextSortingOrder()\n      const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n      table.setSorting(old => {\n        // Find any existing sorting for this column\n        const existingSorting = old?.find(d => d.id === column.id)\n        const existingIndex = old?.findIndex(d => d.id === column.id)\n\n        let newSorting: SortingState = []\n\n        // What should we do with this sort action?\n        let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n        let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n        // Multi-mode\n        if (old?.length && column.getCanMultiSort() && multi) {\n          if (existingSorting) {\n            sortAction = 'toggle'\n          } else {\n            sortAction = 'add'\n          }\n        } else {\n          // Normal mode\n          if (old?.length && existingIndex !== old.length - 1) {\n            sortAction = 'replace'\n          } else if (existingSorting) {\n            sortAction = 'toggle'\n          } else {\n            sortAction = 'replace'\n          }\n        }\n\n        // Handle toggle states that will remove the sorting\n        if (sortAction === 'toggle') {\n          // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n          if (!hasManualValue) {\n            // Is our intention to remove?\n            if (!nextSortingOrder) {\n              sortAction = 'remove'\n            }\n          }\n        }\n\n        if (sortAction === 'add') {\n          newSorting = [\n            ...old,\n            {\n              id: column.id,\n              desc: nextDesc,\n            },\n          ]\n          // Take latest n columns\n          newSorting.splice(\n            0,\n            newSorting.length -\n              (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n          )\n        } else if (sortAction === 'toggle') {\n          // This flips (or sets) the\n          newSorting = old.map(d => {\n            if (d.id === column.id) {\n              return {\n                ...d,\n                desc: nextDesc,\n              }\n            }\n            return d\n          })\n        } else if (sortAction === 'remove') {\n          newSorting = old.filter(d => d.id !== column.id)\n        } else {\n          newSorting = [\n            {\n              id: column.id,\n              desc: nextDesc,\n            },\n          ]\n        }\n\n        return newSorting\n      })\n    }\n\n    column.getFirstSortDir = () => {\n      const sortDescFirst =\n        column.columnDef.sortDescFirst ??\n        table.options.sortDescFirst ??\n        column.getAutoSortDir() === 'desc'\n      return sortDescFirst ? 'desc' : 'asc'\n    }\n\n    column.getNextSortingOrder = (multi?: boolean) => {\n      const firstSortDirection = column.getFirstSortDir()\n      const isSorted = column.getIsSorted()\n\n      if (!isSorted) {\n        return firstSortDirection\n      }\n\n      if (\n        isSorted !== firstSortDirection &&\n        (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n        (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n      ) {\n        return false\n      }\n      return isSorted === 'desc' ? 'asc' : 'desc'\n    }\n\n    column.getCanSort = () => {\n      return (\n        (column.columnDef.enableSorting ?? true) &&\n        (table.options.enableSorting ?? true) &&\n        !!column.accessorFn\n      )\n    }\n\n    column.getCanMultiSort = () => {\n      return (\n        column.columnDef.enableMultiSort ??\n        table.options.enableMultiSort ??\n        !!column.accessorFn\n      )\n    }\n\n    column.getIsSorted = () => {\n      const columnSort = table.getState().sorting?.find(d => d.id === column.id)\n\n      return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n    }\n\n    column.getSortIndex = () =>\n      table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1\n\n    column.clearSorting = () => {\n      //clear sorting for just 1 column\n      table.setSorting(old =>\n        old?.length ? old.filter(d => d.id !== column.id) : []\n      )\n    }\n\n    column.getToggleSortingHandler = () => {\n      const canSort = column.getCanSort()\n\n      return (e: unknown) => {\n        if (!canSort) return\n        ;(e as any).persist?.()\n        column.toggleSorting?.(\n          undefined,\n          column.getCanMultiSort() ? table.options.isMultiSortEvent?.(e) : false\n        )\n      }\n    }\n  },\n\n  createTable: <TData extends RowData>(table: Table<TData>): void => {\n    table.setSorting = updater => table.options.onSortingChange?.(updater)\n    table.resetSorting = defaultState => {\n      table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n    }\n    table.getPreSortedRowModel = () => table.getGroupedRowModel()\n    table.getSortedRowModel = () => {\n      if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n        table._getSortedRowModel = table.options.getSortedRowModel(table)\n      }\n\n      if (table.options.manualSorting || !table._getSortedRowModel) {\n        return table.getPreSortedRowModel()\n      }\n\n      return table._getSortedRowModel()\n    }\n  },\n}\n","import { functionalUpdate, getMemoOptions, memo, RequiredKeys } from '../utils'\n\nimport {\n  Updater,\n  TableOptionsResolved,\n  TableState,\n  Table,\n  InitialTableState,\n  Row,\n  Column,\n  RowModel,\n  ColumnDef,\n  TableOptions,\n  RowData,\n  TableMeta,\n  ColumnDefResolved,\n  GroupColumnDef,\n  TableFeature,\n} from '../types'\n\n//\nimport { createColumn } from './column'\nimport { Headers } from './headers'\n//\n\nimport { ColumnFaceting } from '../features/ColumnFaceting'\nimport { ColumnFiltering } from '../features/ColumnFiltering'\nimport { ColumnGrouping } from '../features/ColumnGrouping'\nimport { ColumnOrdering } from '../features/ColumnOrdering'\nimport { ColumnPinning } from '../features/ColumnPinning'\nimport { ColumnSizing } from '../features/ColumnSizing'\nimport { ColumnVisibility } from '../features/ColumnVisibility'\nimport { GlobalFaceting } from '../features/GlobalFaceting'\nimport { GlobalFiltering } from '../features/GlobalFiltering'\nimport { RowExpanding } from '../features/RowExpanding'\nimport { RowPagination } from '../features/RowPagination'\nimport { RowPinning } from '../features/RowPinning'\nimport { RowSelection } from '../features/RowSelection'\nimport { RowSorting } from '../features/RowSorting'\n\nconst builtInFeatures = [\n  Headers,\n  ColumnVisibility,\n  ColumnOrdering,\n  ColumnPinning,\n  ColumnFaceting,\n  ColumnFiltering,\n  GlobalFaceting, //depends on ColumnFaceting\n  GlobalFiltering, //depends on ColumnFiltering\n  RowSorting,\n  ColumnGrouping, //depends on RowSorting\n  RowExpanding,\n  RowPagination,\n  RowPinning,\n  RowSelection,\n  ColumnSizing,\n] as const\n\n//\n\nexport interface CoreTableState {}\n\nexport interface CoreOptions<TData extends RowData> {\n  /**\n   * An array of extra features that you can add to the table instance.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#_features)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  _features?: TableFeature[]\n  /**\n   * Set this option to override any of the `autoReset...` feature options.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#autoresetall)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  autoResetAll?: boolean\n  /**\n   * The array of column defs to use for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#columns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  columns: ColumnDef<TData, any>[]\n  /**\n   * The data for the table to display. This array should match the type you provided to `table.setRowType<...>`. Columns can access this data via string/index or a functional accessor. When the `data` option changes reference, the table will reprocess the data.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#data)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  data: TData[]\n  /**\n   * Set this option to `true` to output all debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugall)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugAll?: boolean\n  /**\n   * Set this option to `true` to output cell debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugcells]\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugCells?: boolean\n  /**\n   * Set this option to `true` to output column debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugColumns?: boolean\n  /**\n   * Set this option to `true` to output header debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugheaders)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugHeaders?: boolean\n  /**\n   * Set this option to `true` to output row debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugRows?: boolean\n  /**\n   * Set this option to `true` to output table debugging information to the console.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugtable)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  debugTable?: boolean\n  /**\n   * Default column options to use for all column defs supplied to the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#defaultcolumn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  defaultColumn?: Partial<ColumnDef<TData, unknown>>\n  /**\n   * This required option is a factory for a function that computes and returns the core row model for the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcorerowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getCoreRowModel: (table: Table<any>) => () => RowModel<any>\n  /**\n   * This optional function is used to derive a unique ID for any given row. If not provided the rows index is used (nested rows join together with `.` using their grandparents' index eg. `index.index.index`). If you need to identify individual rows that are originating from any server-side operations, it's suggested you use this function to return an ID that makes sense regardless of network IO/ambiguity eg. a userId, taskId, database ID field, etc.\n   * @example getRowId: row => row.userId\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrowid)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string\n  /**\n   * This optional function is used to access the sub rows for any given row. If you are using nested rows, you will need to use this function to return the sub rows object (or undefined) from the row.\n   * @example getSubRows: row => row.subRows\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getsubrows)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getSubRows?: (originalRow: TData, index: number) => undefined | TData[]\n  /**\n   * Use this option to optionally pass initial state to the table. This state will be used when resetting various table states either automatically by the table (eg. `options.autoResetPageIndex`) or via functions like `table.resetRowSelection()`. Most reset function allow you optionally pass a flag to reset to a blank/default state instead of the initial state.\n   *\n   * Table state will not be reset when this object changes, which also means that the initial state object does not need to be stable.\n   *\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#initialstate)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  initialState?: InitialTableState\n  /**\n   * This option is used to optionally implement the merging of table options.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#mergeoptions)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  mergeOptions?: (\n    defaultOptions: TableOptions<TData>,\n    options: Partial<TableOptions<TData>>\n  ) => TableOptions<TData>\n  /**\n   * You can pass any object to `options.meta` and access it anywhere the `table` is available via `table.options.meta`.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#meta)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  meta?: TableMeta<TData>\n  /**\n   * The `onStateChange` option can be used to optionally listen to state changes within the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#onstatechange)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  onStateChange: (updater: Updater<TableState>) => void\n  /**\n   * Value used when the desired value is not found in the data.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#renderfallbackvalue)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  renderFallbackValue: any\n  /**\n   * The `state` option can be used to optionally _control_ part or all of the table state. The state you pass here will merge with and overwrite the internal automatically-managed state to produce the final state for the table. You can also listen to state changes via the `onStateChange` option.\n   * > Note: Any state passed in here will override both the internal state and any other `initialState` you provide.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#state)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  state: Partial<TableState>\n}\n\nexport interface CoreInstance<TData extends RowData> {\n  _features: readonly TableFeature[]\n  _getAllFlatColumnsById: () => Record<string, Column<TData, unknown>>\n  _getColumnDefs: () => ColumnDef<TData, unknown>[]\n  _getCoreRowModel?: () => RowModel<TData>\n  _getDefaultColumnDef: () => Partial<ColumnDef<TData, unknown>>\n  _getRowId: (_: TData, index: number, parent?: Row<TData>) => string\n  _queue: (cb: () => void) => void\n  /**\n   * Returns all columns in the table in their normalized and nested hierarchy.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getAllColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns all columns in the table flattened to a single level.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallflatcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getAllFlatColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns all leaf-node columns in the table flattened to a single level. This does not include parent columns.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallleafcolumns)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getAllLeafColumns: () => Column<TData, unknown>[]\n  /**\n   * Returns a single column by its ID.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcolumn)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getColumn: (columnId: string) => Column<TData, unknown> | undefined\n  /**\n   * Returns the core row model before any processing has been applied.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcorerowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getCoreRowModel: () => RowModel<TData>\n  /**\n   * Returns the row with the given ID.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrow)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getRow: (id: string, searchAll?: boolean) => Row<TData>\n  /**\n   * Returns the final model after all processing from other used features has been applied. This is the row model that is most commonly used for rendering.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrowmodel)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getRowModel: () => RowModel<TData>\n  /**\n   * Call this function to get the table's current state. It's recommended to use this function and its state, especially when managing the table state manually. It is the exact same state used internally by the table for every feature and function it provides.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getstate)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  getState: () => TableState\n  /**\n   * This is the resolved initial state of the table.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#initialstate)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  initialState: TableState\n  /**\n   * A read-only reference to the table's current options.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#options)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  options: RequiredKeys<TableOptionsResolved<TData>, 'state'>\n  /**\n   * Call this function to reset the table state to the initial state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#reset)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  reset: () => void\n  /**\n   * This function can be used to update the table options.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#setoptions)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  setOptions: (newOptions: Updater<TableOptionsResolved<TData>>) => void\n  /**\n   * Call this function to update the table state.\n   * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#setstate)\n   * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n   */\n  setState: (updater: Updater<TableState>) => void\n}\n\nexport function createTable<TData extends RowData>(\n  options: TableOptionsResolved<TData>\n): Table<TData> {\n  if (\n    process.env.NODE_ENV !== 'production' &&\n    (options.debugAll || options.debugTable)\n  ) {\n    console.info('Creating Table Instance...')\n  }\n\n  const _features = [...builtInFeatures, ...(options._features ?? [])]\n\n  let table = { _features } as unknown as Table<TData>\n\n  const defaultOptions = table._features.reduce((obj, feature) => {\n    return Object.assign(obj, feature.getDefaultOptions?.(table))\n  }, {}) as TableOptionsResolved<TData>\n\n  const mergeOptions = (options: TableOptionsResolved<TData>) => {\n    if (table.options.mergeOptions) {\n      return table.options.mergeOptions(defaultOptions, options)\n    }\n\n    return {\n      ...defaultOptions,\n      ...options,\n    }\n  }\n\n  const coreInitialState: CoreTableState = {}\n\n  let initialState = {\n    ...coreInitialState,\n    ...(options.initialState ?? {}),\n  } as TableState\n\n  table._features.forEach(feature => {\n    initialState = (feature.getInitialState?.(initialState) ??\n      initialState) as TableState\n  })\n\n  const queued: (() => void)[] = []\n  let queuedTimeout = false\n\n  const coreInstance: CoreInstance<TData> = {\n    _features,\n    options: {\n      ...defaultOptions,\n      ...options,\n    },\n    initialState,\n    _queue: cb => {\n      queued.push(cb)\n\n      if (!queuedTimeout) {\n        queuedTimeout = true\n\n        // Schedule a microtask to run the queued callbacks after\n        // the current call stack (render, etc) has finished.\n        Promise.resolve()\n          .then(() => {\n            while (queued.length) {\n              queued.shift()!()\n            }\n            queuedTimeout = false\n          })\n          .catch(error =>\n            setTimeout(() => {\n              throw error\n            })\n          )\n      }\n    },\n    reset: () => {\n      table.setState(table.initialState)\n    },\n    setOptions: updater => {\n      const newOptions = functionalUpdate(updater, table.options)\n      table.options = mergeOptions(newOptions) as RequiredKeys<\n        TableOptionsResolved<TData>,\n        'state'\n      >\n    },\n\n    getState: () => {\n      return table.options.state as TableState\n    },\n\n    setState: (updater: Updater<TableState>) => {\n      table.options.onStateChange?.(updater)\n    },\n\n    _getRowId: (row: TData, index: number, parent?: Row<TData>) =>\n      table.options.getRowId?.(row, index, parent) ??\n      `${parent ? [parent.id, index].join('.') : index}`,\n\n    getCoreRowModel: () => {\n      if (!table._getCoreRowModel) {\n        table._getCoreRowModel = table.options.getCoreRowModel(table)\n      }\n\n      return table._getCoreRowModel!()\n    },\n\n    // The final calls start at the bottom of the model,\n    // expanded rows, which then work their way up\n\n    getRowModel: () => {\n      return table.getPaginationRowModel()\n    },\n    //in next version, we should just pass in the row model as the optional 2nd arg\n    getRow: (id: string, searchAll?: boolean) => {\n      let row = (\n        searchAll ? table.getPrePaginationRowModel() : table.getRowModel()\n      ).rowsById[id]\n\n      if (!row) {\n        row = table.getCoreRowModel().rowsById[id]\n        if (!row) {\n          if (process.env.NODE_ENV !== 'production') {\n            throw new Error(`getRow could not find row with ID: ${id}`)\n          }\n          throw new Error()\n        }\n      }\n\n      return row\n    },\n    _getDefaultColumnDef: memo(\n      () => [table.options.defaultColumn],\n      defaultColumn => {\n        defaultColumn = (defaultColumn ?? {}) as Partial<\n          ColumnDef<TData, unknown>\n        >\n\n        return {\n          header: props => {\n            const resolvedColumnDef = props.header.column\n              .columnDef as ColumnDefResolved<TData>\n\n            if (resolvedColumnDef.accessorKey) {\n              return resolvedColumnDef.accessorKey\n            }\n\n            if (resolvedColumnDef.accessorFn) {\n              return resolvedColumnDef.id\n            }\n\n            return null\n          },\n          // footer: props => props.header.column.id,\n          cell: props => props.renderValue<any>()?.toString?.() ?? null,\n          ...table._features.reduce((obj, feature) => {\n            return Object.assign(obj, feature.getDefaultColumnDef?.())\n          }, {}),\n          ...defaultColumn,\n        } as Partial<ColumnDef<TData, unknown>>\n      },\n      getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')\n    ),\n\n    _getColumnDefs: () => table.options.columns,\n\n    getAllColumns: memo(\n      () => [table._getColumnDefs()],\n      columnDefs => {\n        const recurseColumns = (\n          columnDefs: ColumnDef<TData, unknown>[],\n          parent?: Column<TData, unknown>,\n          depth = 0\n        ): Column<TData, unknown>[] => {\n          return columnDefs.map(columnDef => {\n            const column = createColumn(table, columnDef, depth, parent)\n\n            const groupingColumnDef = columnDef as GroupColumnDef<\n              TData,\n              unknown\n            >\n\n            column.columns = groupingColumnDef.columns\n              ? recurseColumns(groupingColumnDef.columns, column, depth + 1)\n              : []\n\n            return column\n          })\n        }\n\n        return recurseColumns(columnDefs)\n      },\n      getMemoOptions(options, 'debugColumns', 'getAllColumns')\n    ),\n\n    getAllFlatColumns: memo(\n      () => [table.getAllColumns()],\n      allColumns => {\n        return allColumns.flatMap(column => {\n          return column.getFlatColumns()\n        })\n      },\n      getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')\n    ),\n\n    _getAllFlatColumnsById: memo(\n      () => [table.getAllFlatColumns()],\n      flatColumns => {\n        return flatColumns.reduce(\n          (acc, column) => {\n            acc[column.id] = column\n            return acc\n          },\n          {} as Record<string, Column<TData, unknown>>\n        )\n      },\n      getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')\n    ),\n\n    getAllLeafColumns: memo(\n      () => [table.getAllColumns(), table._getOrderColumnsFn()],\n      (allColumns, orderColumns) => {\n        let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n        return orderColumns(leafColumns)\n      },\n      getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')\n    ),\n\n    getColumn: columnId => {\n      const column = table._getAllFlatColumnsById()[columnId]\n\n      if (process.env.NODE_ENV !== 'production' && !column) {\n        console.error(`[Table] Column with id '${columnId}' does not exist.`)\n      }\n\n      return column\n    },\n  }\n\n  Object.assign(table, coreInstance)\n\n  for (let index = 0; index < table._features.length; index++) {\n    const feature = table._features[index]\n    feature?.createTable?.(table)\n  }\n\n  return table\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getCoreRowModel<TData extends RowData>(): (\n  table: Table<TData>\n) => () => RowModel<TData> {\n  return table =>\n    memo(\n      () => [table.options.data],\n      (\n        data\n      ): {\n        rows: Row<TData>[]\n        flatRows: Row<TData>[]\n        rowsById: Record<string, Row<TData>>\n      } => {\n        const rowModel: RowModel<TData> = {\n          rows: [],\n          flatRows: [],\n          rowsById: {},\n        }\n\n        const accessRows = (\n          originalRows: TData[],\n          depth = 0,\n          parentRow?: Row<TData>\n        ): Row<TData>[] => {\n          const rows = [] as Row<TData>[]\n\n          for (let i = 0; i < originalRows.length; i++) {\n            // This could be an expensive check at scale, so we should move it somewhere else, but where?\n            // if (!id) {\n            //   if (process.env.NODE_ENV !== 'production') {\n            //     throw new Error(`getRowId expected an ID, but got ${id}`)\n            //   }\n            // }\n\n            // Make the row\n            const row = createRow(\n              table,\n              table._getRowId(originalRows[i]!, i, parentRow),\n              originalRows[i]!,\n              i,\n              depth,\n              undefined,\n              parentRow?.id\n            )\n\n            // Keep track of every row in a flat array\n            rowModel.flatRows.push(row)\n            // Also keep track of every row by its ID\n            rowModel.rowsById[row.id] = row\n            // Push table row into parent\n            rows.push(row)\n\n            // Get the original subrows\n            if (table.options.getSubRows) {\n              row.originalSubRows = table.options.getSubRows(\n                originalRows[i]!,\n                i\n              )\n\n              // Then recursively access them\n              if (row.originalSubRows?.length) {\n                row.subRows = accessRows(row.originalSubRows, depth + 1, row)\n              }\n            }\n          }\n\n          return rows\n        }\n\n        rowModel.rows = accessRows(data)\n\n        return rowModel\n      },\n      getMemoOptions(table.options, 'debugTable', 'getRowModel', () =>\n        table._autoResetPageIndex()\n      )\n    )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getExpandedRowModel<TData extends RowData>(): (\n  table: Table<TData>\n) => () => RowModel<TData> {\n  return table =>\n    memo(\n      () => [\n        table.getState().expanded,\n        table.getPreExpandedRowModel(),\n        table.options.paginateExpandedRows,\n      ],\n      (expanded, rowModel, paginateExpandedRows) => {\n        if (\n          !rowModel.rows.length ||\n          (expanded !== true && !Object.keys(expanded ?? {}).length)\n        ) {\n          return rowModel\n        }\n\n        if (!paginateExpandedRows) {\n          // Only expand rows at this point if they are being paginated\n          return rowModel\n        }\n\n        return expandRows(rowModel)\n      },\n      getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel')\n    )\n}\n\nexport function expandRows<TData extends RowData>(rowModel: RowModel<TData>) {\n  const expandedRows: Row<TData>[] = []\n\n  const handleRow = (row: Row<TData>) => {\n    expandedRows.push(row)\n\n    if (row.subRows?.length && row.getIsExpanded()) {\n      row.subRows.forEach(handleRow)\n    }\n  }\n\n  rowModel.rows.forEach(handleRow)\n\n  return {\n    rows: expandedRows,\n    flatRows: rowModel.flatRows,\n    rowsById: rowModel.rowsById,\n  }\n}\n","import { createRow } from '../core/row'\nimport { Row, RowModel, Table, RowData } from '../types'\n\nexport function filterRows<TData extends RowData>(\n  rows: Row<TData>[],\n  filterRowImpl: (row: Row<TData>) => any,\n  table: Table<TData>\n) {\n  if (table.options.filterFromLeafRows) {\n    return filterRowModelFromLeafs(rows, filterRowImpl, table)\n  }\n\n  return filterRowModelFromRoot(rows, filterRowImpl, table)\n}\n\nfunction filterRowModelFromLeafs<TData extends RowData>(\n  rowsToFilter: Row<TData>[],\n  filterRow: (row: Row<TData>) => Row<TData>[],\n  table: Table<TData>\n): RowModel<TData> {\n  const newFilteredFlatRows: Row<TData>[] = []\n  const newFilteredRowsById: Record<string, Row<TData>> = {}\n  const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n  const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n    const rows: Row<TData>[] = []\n\n    // Filter from children up first\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      let row = rowsToFilter[i]!\n\n      const newRow = createRow(\n        table,\n        row.id,\n        row.original,\n        row.index,\n        row.depth,\n        undefined,\n        row.parentId\n      )\n      newRow.columnFilters = row.columnFilters\n\n      if (row.subRows?.length && depth < maxDepth) {\n        newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n        row = newRow\n\n        if (filterRow(row) && !newRow.subRows.length) {\n          rows.push(row)\n          newFilteredRowsById[row.id] = row\n          newFilteredFlatRows.push(row)\n          continue\n        }\n\n        if (filterRow(row) || newRow.subRows.length) {\n          rows.push(row)\n          newFilteredRowsById[row.id] = row\n          newFilteredFlatRows.push(row)\n          continue\n        }\n      } else {\n        row = newRow\n        if (filterRow(row)) {\n          rows.push(row)\n          newFilteredRowsById[row.id] = row\n          newFilteredFlatRows.push(row)\n        }\n      }\n    }\n\n    return rows\n  }\n\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById,\n  }\n}\n\nfunction filterRowModelFromRoot<TData extends RowData>(\n  rowsToFilter: Row<TData>[],\n  filterRow: (row: Row<TData>) => any,\n  table: Table<TData>\n): RowModel<TData> {\n  const newFilteredFlatRows: Row<TData>[] = []\n  const newFilteredRowsById: Record<string, Row<TData>> = {}\n  const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n  // Filters top level and nested rows\n  const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n    // Filter from parents downward first\n\n    const rows: Row<TData>[] = []\n\n    // Apply the filter to any subRows\n    for (let i = 0; i < rowsToFilter.length; i++) {\n      let row = rowsToFilter[i]!\n\n      const pass = filterRow(row)\n\n      if (pass) {\n        if (row.subRows?.length && depth < maxDepth) {\n          const newRow = createRow(\n            table,\n            row.id,\n            row.original,\n            row.index,\n            row.depth,\n            undefined,\n            row.parentId\n          )\n          newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n          row = newRow\n        }\n\n        rows.push(row)\n        newFilteredFlatRows.push(row)\n        newFilteredRowsById[row.id] = row\n      }\n    }\n\n    return rows\n  }\n\n  return {\n    rows: recurseFilterRows(rowsToFilter),\n    flatRows: newFilteredFlatRows,\n    rowsById: newFilteredRowsById,\n  }\n}\n","import { ResolvedColumnFilter } from '../features/ColumnFiltering'\nimport { Table, RowModel, Row, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFilteredRowModel<TData extends RowData>(): (\n  table: Table<TData>\n) => () => RowModel<TData> {\n  return table =>\n    memo(\n      () => [\n        table.getPreFilteredRowModel(),\n        table.getState().columnFilters,\n        table.getState().globalFilter,\n      ],\n      (rowModel, columnFilters, globalFilter) => {\n        if (\n          !rowModel.rows.length ||\n          (!columnFilters?.length && !globalFilter)\n        ) {\n          for (let i = 0; i < rowModel.flatRows.length; i++) {\n            rowModel.flatRows[i]!.columnFilters = {}\n            rowModel.flatRows[i]!.columnFiltersMeta = {}\n          }\n          return rowModel\n        }\n\n        const resolvedColumnFilters: ResolvedColumnFilter<TData>[] = []\n        const resolvedGlobalFilters: ResolvedColumnFilter<TData>[] = []\n\n        ;(columnFilters ?? []).forEach(d => {\n          const column = table.getColumn(d.id)\n\n          if (!column) {\n            return\n          }\n\n          const filterFn = column.getFilterFn()\n\n          if (!filterFn) {\n            if (process.env.NODE_ENV !== 'production') {\n              console.warn(\n                `Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`\n              )\n            }\n            return\n          }\n\n          resolvedColumnFilters.push({\n            id: d.id,\n            filterFn,\n            resolvedValue: filterFn.resolveFilterValue?.(d.value) ?? d.value,\n          })\n        })\n\n        const filterableIds = (columnFilters ?? []).map(d => d.id)\n\n        const globalFilterFn = table.getGlobalFilterFn()\n\n        const globallyFilterableColumns = table\n          .getAllLeafColumns()\n          .filter(column => column.getCanGlobalFilter())\n\n        if (\n          globalFilter &&\n          globalFilterFn &&\n          globallyFilterableColumns.length\n        ) {\n          filterableIds.push('__global__')\n\n          globallyFilterableColumns.forEach(column => {\n            resolvedGlobalFilters.push({\n              id: column.id,\n              filterFn: globalFilterFn,\n              resolvedValue:\n                globalFilterFn.resolveFilterValue?.(globalFilter) ??\n                globalFilter,\n            })\n          })\n        }\n\n        let currentColumnFilter\n        let currentGlobalFilter\n\n        // Flag the prefiltered row model with each filter state\n        for (let j = 0; j < rowModel.flatRows.length; j++) {\n          const row = rowModel.flatRows[j]!\n\n          row.columnFilters = {}\n\n          if (resolvedColumnFilters.length) {\n            for (let i = 0; i < resolvedColumnFilters.length; i++) {\n              currentColumnFilter = resolvedColumnFilters[i]!\n              const id = currentColumnFilter.id\n\n              // Tag the row with the column filter state\n              row.columnFilters[id] = currentColumnFilter.filterFn(\n                row,\n                id,\n                currentColumnFilter.resolvedValue,\n                filterMeta => {\n                  row.columnFiltersMeta[id] = filterMeta\n                }\n              )\n            }\n          }\n\n          if (resolvedGlobalFilters.length) {\n            for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n              currentGlobalFilter = resolvedGlobalFilters[i]!\n              const id = currentGlobalFilter.id\n              // Tag the row with the first truthy global filter state\n              if (\n                currentGlobalFilter.filterFn(\n                  row,\n                  id,\n                  currentGlobalFilter.resolvedValue,\n                  filterMeta => {\n                    row.columnFiltersMeta[id] = filterMeta\n                  }\n                )\n              ) {\n                row.columnFilters.__global__ = true\n                break\n              }\n            }\n\n            if (row.columnFilters.__global__ !== true) {\n              row.columnFilters.__global__ = false\n            }\n          }\n        }\n\n        const filterRowsImpl = (row: Row<TData>) => {\n          // Horizontally filter rows through each column\n          for (let i = 0; i < filterableIds.length; i++) {\n            if (row.columnFilters[filterableIds[i]!] === false) {\n              return false\n            }\n          }\n          return true\n        }\n\n        // Filter final rows using all of the active filters\n        return filterRows(rowModel.rows, filterRowsImpl, table)\n      },\n      getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () =>\n        table._autoResetPageIndex()\n      )\n    )\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\nimport { expandRows } from './getExpandedRowModel'\n\nexport function getPaginationRowModel<TData extends RowData>(opts?: {\n  initialSync: boolean\n}): (table: Table<TData>) => () => RowModel<TData> {\n  return table =>\n    memo(\n      () => [\n        table.getState().pagination,\n        table.getPrePaginationRowModel(),\n        table.options.paginateExpandedRows\n          ? undefined\n          : table.getState().expanded,\n      ],\n      (pagination, rowModel) => {\n        if (!rowModel.rows.length) {\n          return rowModel\n        }\n\n        const { pageSize, pageIndex } = pagination\n        let { rows, flatRows, rowsById } = rowModel\n        const pageStart = pageSize * pageIndex\n        const pageEnd = pageStart + pageSize\n\n        rows = rows.slice(pageStart, pageEnd)\n\n        let paginatedRowModel: RowModel<TData>\n\n        if (!table.options.paginateExpandedRows) {\n          paginatedRowModel = expandRows({\n            rows,\n            flatRows,\n            rowsById,\n          })\n        } else {\n          paginatedRowModel = {\n            rows,\n            flatRows,\n            rowsById,\n          }\n        }\n\n        paginatedRowModel.flatRows = []\n\n        const handleRow = (row: Row<TData>) => {\n          paginatedRowModel.flatRows.push(row)\n          if (row.subRows.length) {\n            row.subRows.forEach(handleRow)\n          }\n        }\n\n        paginatedRowModel.rows.forEach(handleRow)\n\n        return paginatedRowModel\n      },\n      getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel')\n    )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { SortingFn } from '../features/RowSorting'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getSortedRowModel<TData extends RowData>(): (\n  table: Table<TData>\n) => () => RowModel<TData> {\n  return table =>\n    memo(\n      () => [table.getState().sorting, table.getPreSortedRowModel()],\n      (sorting, rowModel) => {\n        if (!rowModel.rows.length || !sorting?.length) {\n          return rowModel\n        }\n\n        const sortingState = table.getState().sorting\n\n        const sortedFlatRows: Row<TData>[] = []\n\n        // Filter out sortings that correspond to non existing columns\n        const availableSorting = sortingState.filter(sort =>\n          table.getColumn(sort.id)?.getCanSort()\n        )\n\n        const columnInfoById: Record<\n          string,\n          {\n            sortUndefined?: false | -1 | 1 | 'first' | 'last'\n            invertSorting?: boolean\n            sortingFn: SortingFn<TData>\n          }\n        > = {}\n\n        availableSorting.forEach(sortEntry => {\n          const column = table.getColumn(sortEntry.id)\n          if (!column) return\n\n          columnInfoById[sortEntry.id] = {\n            sortUndefined: column.columnDef.sortUndefined,\n            invertSorting: column.columnDef.invertSorting,\n            sortingFn: column.getSortingFn(),\n          }\n        })\n\n        const sortData = (rows: Row<TData>[]) => {\n          // This will also perform a stable sorting using the row index\n          // if needed.\n          const sortedData = rows.map(row => ({ ...row }))\n\n          sortedData.sort((rowA, rowB) => {\n            for (let i = 0; i < availableSorting.length; i += 1) {\n              const sortEntry = availableSorting[i]!\n              const columnInfo = columnInfoById[sortEntry.id]!\n              const sortUndefined = columnInfo.sortUndefined\n              const isDesc = sortEntry?.desc ?? false\n\n              let sortInt = 0\n\n              // All sorting ints should always return in ascending order\n              if (sortUndefined) {\n                const aValue = rowA.getValue(sortEntry.id)\n                const bValue = rowB.getValue(sortEntry.id)\n\n                const aUndefined = aValue === undefined\n                const bUndefined = bValue === undefined\n\n                if (aUndefined || bUndefined) {\n                  if (sortUndefined === 'first') return aUndefined ? -1 : 1\n                  if (sortUndefined === 'last') return aUndefined ? 1 : -1\n                  sortInt =\n                    aUndefined && bUndefined\n                      ? 0\n                      : aUndefined\n                        ? sortUndefined\n                        : -sortUndefined\n                }\n              }\n\n              if (sortInt === 0) {\n                sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id)\n              }\n\n              // If sorting is non-zero, take care of desc and inversion\n              if (sortInt !== 0) {\n                if (isDesc) {\n                  sortInt *= -1\n                }\n\n                if (columnInfo.invertSorting) {\n                  sortInt *= -1\n                }\n\n                return sortInt\n              }\n            }\n\n            return rowA.index - rowB.index\n          })\n\n          // If there are sub-rows, sort them\n          sortedData.forEach(row => {\n            sortedFlatRows.push(row)\n            if (row.subRows?.length) {\n              row.subRows = sortData(row.subRows)\n            }\n          })\n\n          return sortedData\n        }\n\n        return {\n          rows: sortData(rowModel.rows),\n          flatRows: sortedFlatRows,\n          rowsById: rowModel.rowsById,\n        }\n      },\n      getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () =>\n        table._autoResetPageIndex()\n      )\n    )\n}\n","import * as React from 'react'\nexport * from '@tanstack/table-core'\n\nimport {\n  TableOptions,\n  TableOptionsResolved,\n  RowData,\n  createTable,\n} from '@tanstack/table-core'\n\nexport type Renderable<TProps> = React.ReactNode | React.ComponentType<TProps>\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nexport function flexRender<TProps extends object>(\n  Comp: Renderable<TProps>,\n  props: TProps\n): React.ReactNode | React.JSX.Element {\n  return !Comp ? null : isReactComponent<TProps>(Comp) ? (\n    <Comp {...props} />\n  ) : (\n    Comp\n  )\n}\n\nfunction isReactComponent<TProps>(\n  component: unknown\n): component is React.ComponentType<TProps> {\n  return (\n    isClassComponent(component) ||\n    typeof component === 'function' ||\n    isExoticComponent(component)\n  )\n}\n\nfunction isClassComponent(component: any) {\n  return (\n    typeof component === 'function' &&\n    (() => {\n      const proto = Object.getPrototypeOf(component)\n      return proto.prototype && proto.prototype.isReactComponent\n    })()\n  )\n}\n\nfunction isExoticComponent(component: any) {\n  return (\n    typeof component === 'object' &&\n    typeof component.$$typeof === 'symbol' &&\n    ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n  )\n}\n\nexport function useReactTable<TData extends RowData>(\n  options: TableOptions<TData>\n) {\n  // Compose in the generic options to the user options\n  const resolvedOptions: TableOptionsResolved<TData> = {\n    state: {}, // Dummy state\n    onStateChange: () => {}, // noop\n    renderFallbackValue: null,\n    ...options,\n  }\n\n  // Create a new table and store it in state\n  const [tableRef] = React.useState(() => ({\n    current: createTable<TData>(resolvedOptions),\n  }))\n\n  // By default, manage table state here using the table's initial state\n  const [state, setState] = React.useState(() => tableRef.current.initialState)\n\n  // Compose the default state above with any user state. This will allow the user\n  // to only control a subset of the state if desired.\n  tableRef.current.setOptions(prev => ({\n    ...prev,\n    ...options,\n    state: {\n      ...state,\n      ...options.state,\n    },\n    // Similarly, we'll maintain both our internal state and any user-provided\n    // state.\n    onStateChange: updater => {\n      setState(updater)\n      options.onStateChange?.(updater)\n    },\n  }))\n\n  return tableRef.current\n}\n","\"use client\"\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport type SortDirection = \"asc\" | \"desc\" | null;\n\nconst tableVariants = cva(\n  \"w-full caption-bottom text-sm\",\n  {\n    variants: {\n      variant: {\n        default: \"dark:text-gray-200\",\n        bordered: \"border border-border dark:border-gray-700\",\n        striped: \"dark:text-gray-200\",\n        card: \"border border-border dark:border-gray-700 rounded-md shadow-sm dark:shadow-gray-900/20\",\n        minimal: \"border-none dark:text-gray-200\",\n      },\n      size: {\n        sm: \"text-xs\",\n        default: \"text-sm\",\n        lg: \"text-base\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n);\n\nexport interface ColumnDefinition<T> {\n  id: string;\n  header: React.ReactNode;\n  accessorKey?: keyof T;\n  cell?: (row: T) => React.ReactNode;\n  sortable?: boolean;\n}\n\ninterface TableProps<T>\n  extends React.HTMLAttributes<HTMLTableElement>,\n    VariantProps<typeof tableVariants> {\n  /** Veri yükleniyor durumunu gösterir */\n  loading?: boolean;\n  /** Sıralama için kullanılan sütun */\n  sortColumn?: string;\n  /** Sıralama yönü */\n  sortDirection?: SortDirection;\n  /** Sıralama değiştiğinde çağrılacak fonksiyon */\n  onSortChange?: (column: string, direction: SortDirection) => void;\n  /** Boş durum için özel içerik */\n  emptyContent?: React.ReactNode;\n  /** Seçili satır id'leri */\n  selectedRowIds?: string[];\n  /** Satır seçim değiştiğinde çağrılacak fonksiyon */\n  onRowSelectionChange?: (selectedRowIds: string[]) => void;\n  /** Satır seçim devre dışı */\n  disableRowSelection?: boolean;\n  /** Her satır için benzersiz id çıkarma fonksiyonu */\n  getRowId?: (row: T) => string;\n}\n\n// Tip parametresiz Table bileşeni için varsayılan tip, herhangi bir veri tipini kabul edebilmesi için\nconst Table = React.forwardRef<\n  HTMLTableElement,\n  TableProps<unknown>\n>(({ \n  className, \n  variant, \n  size, \n  loading, \n  emptyContent,\n  // Kullanılmayan özellikleri yoruma alarak lint uyarılarını önlüyoruz\n  // sortColumn,\n  // sortDirection,\n  // onSortChange,\n  // selectedRowIds,\n  // onRowSelectionChange,\n  // disableRowSelection,\n  // getRowId,\n  ...props \n}, ref) => {\n  // Apply striped styles to the tbody via a class name\n  const striped = variant === \"striped\";\n  \n  // Çocukları güvenli bir şekilde işle ve tip kontrollerini doğru yap\n  const childrenWithProps = React.Children.map(props.children, (child) => {\n    if (React.isValidElement(child)) {\n      if (child.type === \"tbody\") {\n        // Tip güvenliği için props'ları düzgün şekilde ele alıyoruz\n        const tbodyProps = child.props as Record<string, unknown>;\n        return React.cloneElement(child as React.ReactElement<React.HTMLAttributes<HTMLTableSectionElement>>, {\n          className: cn(tbodyProps.className as string | undefined, striped && \"even:[&>tr]:bg-muted/50\")\n        });\n      }\n    }\n    return child;\n  });\n  \n  return (\n    <div className=\"relative w-full overflow-auto\">\n      {/* Yükleniyor durumu için overlay */}\n      {loading && (\n        <div className=\"absolute inset-0 bg-background/60 flex items-center justify-center z-10\">\n          <div className=\"h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent\"></div>\n        </div>\n      )}\n      \n      <table\n        ref={ref}\n        className={cn(\n          tableVariants({ variant, size }),\n          loading && \"opacity-70\",\n          className\n        )}\n        {...props}\n      >\n        {childrenWithProps}\n      </table>\n      \n    </div>\n  );\n});\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <thead ref={ref} className={cn(\"moonui-theme\", \"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\ninterface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n  /** Veri yoksa gösterilecek boş durum içeriği */\n  emptyContent?: React.ReactNode;\n  /** Varsayılan boş durum mesajı */\n  emptyMessage?: string;\n}\n\nconst TableBody = React.forwardRef<\n  HTMLTableSectionElement,\n  TableBodyProps\n>(({ className, emptyContent, emptyMessage = \"No data available\", children, ...props }, ref) => {\n  // Çocuk elementlerin varlığını kontrol et\n  const hasChildren = React.Children.count(children) > 0;\n  \n  return (\n    <tbody\n      ref={ref}\n      className={cn(\"moonui-theme\", \"[&_tr:last-child]:border-0\", className)}\n      {...props}\n    >\n      {hasChildren ? (\n        children\n      ) : (\n        <tr>\n          <td colSpan={100} className=\"h-24 text-center\">\n            {emptyContent || (\n              <div className=\"py-6 text-muted-foreground\">\n                <div className=\"text-sm\">\n                  {emptyMessage}\n                </div>\n              </div>\n            )}\n          </td>\n        </tr>\n      )}\n    </tbody>\n  )\n});\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n  HTMLTableSectionElement,\n  React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n  <tfoot\n    ref={ref}\n    className={cn(\"moonui-theme\", \"bg-primary text-primary-foreground font-medium\", className)}\n    {...props}\n  />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n  HTMLTableRowElement,\n  React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n  <tr\n    ref={ref}\n    className={cn(\n      \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n      className\n    )}\n    {...props}\n  />\n));\nTableRow.displayName = \"TableRow\";\n\ninterface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n  /** Bu sütun için sıralama durumu */\n  sortable?: boolean;\n  /** Bu sütunun sıralanma durumu */\n  sorted?: SortDirection;\n  /** Sıralama değiştiğinde çağrılacak fonksiyon */\n  onSort?: () => void;\n  /** Text alignment */\n  align?: 'left' | 'center' | 'right';\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n  ({ className, sortable, sorted, onSort, align = 'left', children, ...props }, ref) => {\n    // Sıralama için simgeler\n    const renderSortIcon = () => {\n      if (!sortable) return null;\n      \n      if (sorted === \"asc\") {\n        return (\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            className=\"ml-1 h-4 w-4 inline-block\"\n            viewBox=\"0 0 20 20\"\n            fill=\"currentColor\"\n          >\n            <path\n              fillRule=\"evenodd\"\n              d=\"M14.707 10.293a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 111.414-1.414L9 12.586V5a1 1 0 012 0v7.586l2.293-2.293a1 1 0 011.414 0z\"\n              clipRule=\"evenodd\"\n            />\n          </svg>\n        );\n      }\n      \n      if (sorted === \"desc\") {\n        return (\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            className=\"ml-1 h-4 w-4 inline-block\"\n            viewBox=\"0 0 20 20\"\n            fill=\"currentColor\"\n          >\n            <path\n              fillRule=\"evenodd\"\n              d=\"M5.293 9.707a1 1 0 010-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 01-1.414 1.414L11 7.414V15a1 1 0 11-2 0V7.414L6.707 9.707a1 1 0 01-1.414 0z\"\n              clipRule=\"evenodd\"\n            />\n          </svg>\n        );\n      }\n      \n      return (\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          className=\"ml-1 h-4 w-4 inline-block opacity-30\"\n          viewBox=\"0 0 20 20\"\n          fill=\"currentColor\"\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z\"\n            clipRule=\"evenodd\"\n          />\n        </svg>\n      );\n    };\n    \n    const alignmentClasses = {\n      left: 'text-left justify-start',\n      center: 'text-center justify-center',\n      right: 'text-right justify-end'\n    };\n\n    return (\n      <th\n        ref={ref}\n        className={cn(\n          \"h-10 px-4 align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n          alignmentClasses[align].split(' ')[0], // text alignment\n          sortable && \"cursor-pointer hover:text-foreground select-none\",\n          className\n        )}\n        onClick={sortable ? onSort : undefined}\n        {...props}\n      >\n        {sortable || align !== 'left' ? (\n          <div className={cn(\"flex items-center\", alignmentClasses[align].split(' ')[1])}>\n            {children}\n            {sortable && renderSortIcon()}\n          </div>\n        ) : (\n          children\n        )}\n      </th>\n    );\n  }\n);\nTableHead.displayName = \"TableHead\";\n\ninterface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n  /** Text alignment */\n  align?: 'left' | 'center' | 'right';\n}\n\nconst TableCell = React.forwardRef<\n  HTMLTableCellElement,\n  TableCellProps\n>(({ className, align = 'left', ...props }, ref) => {\n  const alignmentClass = {\n    left: 'text-left',\n    center: 'text-center',\n    right: 'text-right'\n  }[align];\n\n  return (\n    <td\n      ref={ref}\n      className={cn(\"moonui-theme\", \"p-4 align-middle [&:has([role=checkbox])]:pr-0\", alignmentClass, className)}\n      {...props}\n    />\n  );\n});\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n  HTMLTableCaptionElement,\n  React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n  <caption\n    ref={ref}\n    className={cn(\"moonui-theme\", \"mt-4 text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n  Table,\n  TableHeader,\n  TableBody,\n  TableFooter,\n  TableHead,\n  TableRow,\n  TableCell,\n  TableCaption,\n};\n\nexport type { TableBodyProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { format, isValid } from \"date-fns\";\nimport { Calendar as CalendarIcon, Clock } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { Calendar } from \"./calendar\";\nimport {\n  Popover,\n  PopoverContent,\n  PopoverTrigger,\n} from \"./popover\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n// Define pageTransitions locally since micro-interactions might not exist\nconst pageTransitions = {\n  initial: { opacity: 0, x: 20 },\n  animate: { opacity: 1, x: 0 },\n  exit: { opacity: 0, x: -20 }\n};\n\n/**\n * DatePicker Component\n * \n * A comprehensive date picker with calendar interface\n */\n\nconst datePickerVariants = cva(\n  \"w-full justify-start text-left font-normal\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        outline: \"border-2\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-8 px-3 text-sm\",\n        lg: \"h-12 px-6 text-base\",\n        icon: \"h-10 w-10\",\n      },\n      state: {\n        default: \"\",\n        error: \"border-destructive focus:ring-destructive\",\n        success: \"border-success focus:ring-success\",\n        warning: \"border-warning focus:ring-warning\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      state: \"default\",\n    },\n  }\n);\n\nexport interface DatePickerProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\" | \"value\">,\n    VariantProps<typeof datePickerVariants> {\n  /**\n   * Selected date value\n   */\n  value?: Date;\n  /**\n   * Callback when date changes\n   */\n  onChange?: (date: Date | undefined) => void;\n  /**\n   * Placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Date format string\n   */\n  formatString?: string;\n  /**\n   * Minimum selectable date\n   */\n  minDate?: Date;\n  /**\n   * Maximum selectable date\n   */\n  maxDate?: Date;\n  /**\n   * Disabled dates\n   */\n  disabledDates?: Date[];\n  /**\n   * Disabled days of week (0-6, Sunday is 0)\n   */\n  disabledDaysOfWeek?: number[];\n  /**\n   * Show week numbers\n   */\n  showWeekNumbers?: boolean;\n  /**\n   * Icon position\n   */\n  iconPosition?: \"left\" | \"right\";\n  /**\n   * Custom icon\n   */\n  icon?: React.ReactNode;\n  /**\n   * Allow clear\n   */\n  allowClear?: boolean;\n  /**\n   * Read only\n   */\n  readOnly?: boolean;\n  /**\n   * Show today button\n   */\n  showTodayButton?: boolean;\n  /**\n   * Calendar props\n   */\n  calendarProps?: React.ComponentProps<typeof Calendar>;\n}\n\nexport function DatePicker({\n  className,\n  variant,\n  size,\n  state,\n  value,\n  onChange,\n  placeholder = \"Pick a date\",\n  formatString = \"PPP\",\n  minDate,\n  maxDate,\n  disabledDates,\n  disabledDaysOfWeek,\n  showWeekNumbers,\n  iconPosition = \"left\",\n  icon,\n  allowClear = true,\n  readOnly = false,\n  showTodayButton = true,\n  calendarProps,\n  disabled,\n  ...props\n}: DatePickerProps) {\n  const [open, setOpen] = React.useState(false);\n  const [internalDate, setInternalDate] = React.useState<Date | undefined>(value);\n\n  React.useEffect(() => {\n    setInternalDate(value);\n  }, [value]);\n\n  const handleSelect = (date: Date | Date[] | { from?: Date; to?: Date } | undefined) => {\n    // Handle single date selection for now\n    const singleDate = Array.isArray(date) ? date[0] : \n                       (date && typeof date === 'object' && 'from' in date) ? date.from :\n                       date as Date | undefined;\n    setInternalDate(singleDate);\n    onChange?.(singleDate);\n    if (singleDate) {\n      setOpen(false);\n    }\n  };\n\n  const handleClear = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    handleSelect(undefined);\n  };\n\n  const handleToday = () => {\n    const today = new Date();\n    handleSelect(today);\n  };\n\n  const isDateDisabled = (date: Date) => {\n    if (minDate && date < minDate) return true;\n    if (maxDate && date > maxDate) return true;\n    if (disabledDates?.some(d => d.toDateString() === date.toDateString())) return true;\n    if (disabledDaysOfWeek?.includes(date.getDay())) return true;\n    return false;\n  };\n\n  const displayValue = internalDate && isValid(internalDate)\n    ? format(internalDate, formatString)\n    : null;\n\n  const iconElement = icon || <CalendarIcon className=\"h-4 w-4\" />;\n\n  return (\n    <div className=\"moonui-theme\">\n      <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <Button\n          variant={variant === \"ghost\" ? \"ghost\" : \"outline\"}\n          className={cn(\n            datePickerVariants({ variant, size, state }),\n            !displayValue && \"text-muted-foreground\",\n            className\n          )}\n          disabled={disabled || readOnly}\n          {...props}\n        >\n          <AnimatePresence mode=\"wait\">\n            <motion.div\n              key={displayValue || \"placeholder\"}\n              initial={{ opacity: 0, y: -2 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: 2 }}\n              transition={{ duration: 0.15 }}\n              className=\"flex items-center gap-2 flex-1\"\n            >\n              {iconPosition === \"left\" && iconElement}\n              <span className=\"flex-1 truncate\">\n                {displayValue || placeholder}\n              </span>\n              {iconPosition === \"right\" && iconElement}\n            </motion.div>\n          </AnimatePresence>\n          {allowClear && displayValue && !readOnly && !disabled && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.8 }}\n              animate={{ opacity: 1, scale: 1 }}\n              exit={{ opacity: 0, scale: 0.8 }}\n              whileHover={{ scale: 1.1 }}\n              whileTap={{ scale: 0.9 }}\n              className=\"ml-2 h-4 w-4 shrink-0 opacity-50 hover:opacity-100 transition-opacity cursor-pointer\"\n              onClick={handleClear}\n              role=\"button\"\n              tabIndex={0}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter' || e.key === ' ') {\n                  e.preventDefault();\n                  handleClear(e as any);\n                }\n              }}\n            >\n              <span className=\"sr-only\">Clear date</span>\n              <svg\n                width=\"15\"\n                height=\"15\"\n                viewBox=\"0 0 15 15\"\n                fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\"\n              >\n                <path\n                  d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n                  fill=\"currentColor\"\n                  fillRule=\"evenodd\"\n                  clipRule=\"evenodd\"\n                />\n              </svg>\n            </motion.div>\n          )}\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent \n        className=\"w-[360px] p-0 shadow-2xl rounded-2xl border border-gray-200 dark:border-gray-700 bg-background/95 backdrop-blur-sm !z-[9999]\" \n        align=\"start\"\n        sideOffset={12}\n      >\n        <motion.div\n          {...pageTransitions}\n          className=\"rounded-2xl bg-background overflow-hidden\"\n        >\n          <Calendar\n            mode=\"single\"\n            selected={internalDate}\n            onSelect={handleSelect}\n            disabled={isDateDisabled}\n            showOutsideDays={false}\n            className={cn(\"rounded-2xl\", calendarProps?.className)}\n            {...calendarProps}\n          />\n          {showTodayButton && (\n            <div className=\"border-t px-4 py-3\">\n              <Button\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleToday}\n                className=\"w-full justify-center hover:bg-accent hover:text-accent-foreground transition-all duration-200\"\n              >\n                Today\n              </Button>\n            </div>\n          )}\n        </motion.div>\n      </PopoverContent>\n    </Popover>\n    </div>\n  );\n}\n\n/**\n * DateRangePicker Component\n * \n * Select a date range with start and end dates\n */\n\nexport interface DateRangePickerProps\n  extends Omit<DatePickerProps, \"value\" | \"onChange\"> {\n  /**\n   * Selected date range\n   */\n  value?: { from: Date | undefined; to: Date | undefined };\n  /**\n   * Callback when date range changes\n   */\n  onChange?: (range: { from: Date | undefined; to: Date | undefined } | undefined) => void;\n  /**\n   * Separator between dates\n   */\n  separator?: string;\n}\n\nexport function DateRangePicker({\n  className,\n  value,\n  onChange,\n  placeholder = \"Pick a date range\",\n  formatString = \"LLL dd, y\",\n  separator = \" - \",\n  ...props\n}: DateRangePickerProps) {\n  const [open, setOpen] = React.useState(false);\n  const [internalRange, setInternalRange] = React.useState(value);\n\n  React.useEffect(() => {\n    setInternalRange(value);\n  }, [value]);\n\n  const handleSelect = (range: { from: Date | undefined; to: Date | undefined } | undefined) => {\n    setInternalRange(range);\n    onChange?.(range);\n    if (range?.from && range?.to) {\n      setOpen(false);\n    }\n  };\n\n  const displayValue = React.useMemo(() => {\n    if (!internalRange?.from) return null;\n    if (!internalRange?.to) {\n      return format(internalRange.from, formatString);\n    }\n    return `${format(internalRange.from, formatString)}${separator}${format(\n      internalRange.to,\n      formatString\n    )}`;\n  }, [internalRange, formatString, separator]);\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <Button\n          variant={props.variant === \"ghost\" ? \"ghost\" : \"outline\"}\n          className={cn(\n            datePickerVariants({ \n              variant: props.variant, \n              size: props.size, \n              state: props.state \n            }),\n            !displayValue && \"text-muted-foreground\",\n            className\n          )}\n          disabled={props.disabled || props.readOnly}\n        >\n          <CalendarIcon className=\"mr-2 h-4 w-4\" />\n          <span className=\"flex-1 truncate text-left\">\n            {displayValue || placeholder}\n          </span>\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-auto p-0 shadow-2xl rounded-2xl border border-gray-200 dark:border-gray-700 bg-background/95 backdrop-blur-sm !z-[9999]\" align=\"start\" sideOffset={12}>\n        <Calendar\n          mode=\"range\"\n          defaultMonth={internalRange?.from}\n          selected={internalRange}\n          onSelect={handleSelect as any}\n          showOutsideDays={false}\n          {...props.calendarProps}\n          className=\"rounded-2xl\"\n        />\n      </PopoverContent>\n    </Popover>\n  );\n}\n\n/**\n * DateTimePicker Component\n * \n * Combined date and time picker\n */\n\nexport interface DateTimePickerProps extends DatePickerProps {\n  /**\n   * Show time picker\n   */\n  showTimePicker?: boolean;\n  /**\n   * Time format (12 or 24 hour)\n   */\n  timeFormat?: \"12\" | \"24\";\n  /**\n   * Time interval in minutes\n   */\n  timeInterval?: number;\n}\n\nexport function DateTimePicker({\n  value,\n  onChange,\n  formatString = \"PPP p\",\n  showTimePicker = true,\n  timeFormat = \"24\",\n  timeInterval = 15,\n  ...props\n}: DateTimePickerProps) {\n  const [date, setDate] = React.useState<Date | undefined>(value);\n  const [time, setTime] = React.useState<string>(\n    value ? format(value, timeFormat === \"24\" ? \"HH:mm\" : \"hh:mm a\") : \"00:00\"\n  );\n\n  const handleDateChange = (newDate: Date | undefined) => {\n    if (!newDate) {\n      setDate(undefined);\n      onChange?.(undefined);\n      return;\n    }\n\n    const [hours, minutes] = time.split(\":\").map(Number);\n    newDate.setHours(hours, minutes);\n    setDate(newDate);\n    onChange?.(newDate);\n  };\n\n  const handleTimeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n    const newTime = e.target.value;\n    setTime(newTime);\n\n    if (date) {\n      const [hours, minutes] = newTime.split(\":\").map(Number);\n      const newDate = new Date(date);\n      newDate.setHours(hours, minutes);\n      setDate(newDate);\n      onChange?.(newDate);\n    }\n  };\n\n  // Generate time options\n  const timeOptions = React.useMemo(() => {\n    const options = [];\n    for (let h = 0; h < 24; h++) {\n      for (let m = 0; m < 60; m += timeInterval) {\n        const hour24 = h.toString().padStart(2, \"0\");\n        const minute = m.toString().padStart(2, \"0\");\n        const time24 = `${hour24}:${minute}`;\n        \n        if (timeFormat === \"12\") {\n          const hour12 = h === 0 ? 12 : h > 12 ? h - 12 : h;\n          const ampm = h < 12 ? \"AM\" : \"PM\";\n          const time12 = `${hour12}:${minute} ${ampm}`;\n          options.push({ value: time24, label: time12 });\n        } else {\n          options.push({ value: time24, label: time24 });\n        }\n      }\n    }\n    return options;\n  }, [timeFormat, timeInterval]);\n\n  return (\n    <div className=\"flex flex-col gap-2\">\n      <DatePicker\n        {...props}\n        value={date}\n        onChange={handleDateChange}\n        formatString=\"PPP\"\n        showTodayButton={false}\n      />\n      {showTimePicker && date && (\n        <motion.div\n          initial={{ opacity: 0, height: 0 }}\n          animate={{ opacity: 1, height: \"auto\" }}\n          exit={{ opacity: 0, height: 0 }}\n          className=\"flex items-center gap-2\"\n        >\n          <Clock className=\"h-4 w-4 text-muted-foreground\" />\n          <select\n            value={time}\n            onChange={handleTimeChange}\n            className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm transition-colors focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50\"\n          >\n            {timeOptions.map((option) => (\n              <option key={option.value} value={option.value}>\n                {option.label}\n              </option>\n            ))}\n          </select>\n        </motion.div>\n      )}\n    </div>\n  );\n}\n\n/**\n * MonthPicker Component\n * \n * Select month and year\n */\n\nexport interface MonthPickerProps extends Omit<DatePickerProps, \"formatString\"> {\n  /**\n   * Format for displaying the month\n   */\n  formatString?: string;\n}\n\nexport function MonthPicker({\n  value,\n  onChange,\n  placeholder = \"Pick a month\",\n  formatString = \"MMMM yyyy\",\n  ...props\n}: MonthPickerProps) {\n  const [open, setOpen] = React.useState(false);\n  const [viewDate, setViewDate] = React.useState(value || new Date());\n\n  const months = [\n    \"January\", \"February\", \"March\", \"April\",\n    \"May\", \"June\", \"July\", \"August\",\n    \"September\", \"October\", \"November\", \"December\"\n  ];\n\n  const handleMonthSelect = (monthIndex: number) => {\n    const newDate = new Date(viewDate);\n    newDate.setMonth(monthIndex);\n    onChange?.(newDate);\n    setOpen(false);\n  };\n\n  const handleYearChange = (increment: number) => {\n    const newDate = new Date(viewDate);\n    newDate.setFullYear(newDate.getFullYear() + increment);\n    setViewDate(newDate);\n  };\n\n  const displayValue = value ? format(value, formatString) : null;\n\n  return (\n    <Popover open={open} onOpenChange={setOpen}>\n      <PopoverTrigger asChild>\n        <Button\n          variant={props.variant === \"default\" ? \"outline\" : (props.variant || \"outline\")}\n          className={cn(\n            datePickerVariants({ \n              variant: props.variant, \n              size: props.size, \n              state: props.state \n            }),\n            !displayValue && \"text-muted-foreground\",\n            props.className\n          )}\n          disabled={props.disabled || props.readOnly}\n        >\n          <CalendarIcon className=\"mr-2 h-4 w-4\" />\n          {displayValue || placeholder}\n        </Button>\n      </PopoverTrigger>\n      <PopoverContent className=\"w-64 p-0 shadow-2xl border border-gray-200 dark:border-gray-700 bg-background !z-[9999]\" align=\"start\">\n        <div className=\"p-3\">\n          <div className=\"flex items-center justify-between mb-3\">\n            <Button\n              variant=\"outline\"\n              size=\"icon\"\n              onClick={() => handleYearChange(-1)}\n            >\n              <ChevronLeft className=\"h-4 w-4\" />\n            </Button>\n            <span className=\"font-semibold\">\n              {viewDate.getFullYear()}\n            </span>\n            <Button\n              variant=\"outline\"\n              size=\"icon\"\n              onClick={() => handleYearChange(1)}\n            >\n              <ChevronRight className=\"h-4 w-4\" />\n            </Button>\n          </div>\n          <div className=\"grid grid-cols-3 gap-2\">\n            {months.map((month, index) => (\n              <Button\n                key={month}\n                variant={value && value.getMonth() === index ? \"primary\" : \"outline\"}\n                size=\"sm\"\n                onClick={() => handleMonthSelect(index)}\n                className=\"h-8 text-xs\"\n              >\n                {month.slice(0, 3)}\n              </Button>\n            ))}\n          </div>\n        </div>\n      </PopoverContent>\n    </Popover>\n  );\n}\n\n// Re-export utilities\nexport { format } from \"date-fns\";\n\n// Import ChevronLeft and ChevronRight for MonthPicker\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";","\"use client\"\n\n// Basic Draggable List - Free Version\n\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface DraggableListProps<T> {\n  items: T[]\n  onReorder: (items: T[]) => void\n  renderItem: (item: T, index: number) => React.ReactNode\n  keyExtractor: (item: T) => string\n  className?: string\n  disabled?: boolean\n}\n\nexport function DraggableList<T>({\n  items,\n  onReorder,\n  renderItem,\n  keyExtractor,\n  className,\n  disabled = false\n}: DraggableListProps<T>) {\n  const [draggedIndex, setDraggedIndex] = React.useState<number | null>(null)\n\n  const handleDragStart = (e: React.DragEvent, index: number) => {\n    if (disabled) return\n    setDraggedIndex(index)\n    e.dataTransfer.effectAllowed = \"move\"\n  }\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault()\n    e.dataTransfer.dropEffect = \"move\"\n  }\n\n  const handleDrop = (e: React.DragEvent, dropIndex: number) => {\n    e.preventDefault()\n    \n    if (disabled || draggedIndex === null || draggedIndex === dropIndex) {\n      setDraggedIndex(null)\n      return\n    }\n\n    const newItems = [...items]\n    const draggedItem = newItems[draggedIndex]\n    \n    newItems.splice(draggedIndex, 1)\n    newItems.splice(dropIndex, 0, draggedItem)\n    \n    onReorder(newItems)\n    setDraggedIndex(null)\n  }\n\n  const handleDragEnd = () => {\n    setDraggedIndex(null)\n  }\n\n  return (\n    <div className={cn(\"moonui-theme\", \"space-y-2\", className)}>\n      {items.map((item, index) => (\n        <div\n          key={keyExtractor(item)}\n          draggable={!disabled}\n          onDragStart={(e) => handleDragStart(e, index)}\n          onDragOver={handleDragOver}\n          onDrop={(e) => handleDrop(e, index)}\n          onDragEnd={handleDragEnd}\n          className={cn(\n            \"transition-opacity duration-200\",\n            !disabled && \"cursor-move hover:opacity-80\",\n            draggedIndex === index && \"opacity-50\",\n            disabled && \"cursor-not-allowed\"\n          )}\n        >\n          {renderItem(item, index)}\n        </div>\n      ))}\n    </div>\n  )\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n    inset?: boolean\n  }\n>(({ className, inset, children, ...props }, ref) => (\n  <DropdownMenuPrimitive.SubTrigger\n    ref={ref}\n    className={cn(\n      \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <ChevronRight className=\"ml-auto h-4 w-4\" />\n  </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n  DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n  <DropdownMenuPrimitive.SubContent\n    ref={ref}\n    className={cn(\n      \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuSubContent.displayName =\n  DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <DropdownMenuPrimitive.Portal>\n    <DropdownMenuPrimitive.Content\n      ref={ref}\n      sideOffset={sideOffset}\n      className={cn(\n        \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        className\n      )}\n      {...props}\n    />\n  </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n    inset?: boolean\n  }\n>(({ className, inset, ...props }, ref) => (\n  <DropdownMenuPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n  <DropdownMenuPrimitive.CheckboxItem\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    checked={checked}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <DropdownMenuPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </DropdownMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n  DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n  <DropdownMenuPrimitive.RadioItem\n    ref={ref}\n    className={cn(\n      \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <DropdownMenuPrimitive.ItemIndicator>\n        <Circle className=\"h-2 w-2 fill-current\" />\n      </DropdownMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n    inset?: boolean\n  }\n>(({ className, inset, ...props }, ref) => (\n  <DropdownMenuPrimitive.Label\n    ref={ref}\n    className={cn(\n      \"px-2 py-1.5 text-sm font-semibold\",\n      inset && \"pl-8\",\n      className\n    )}\n    {...props}\n  />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n  React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <DropdownMenuPrimitive.Separator\n    ref={ref}\n    className={cn(\"moonui-theme\", \"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n  return (\n    <span\n      className={cn(\"moonui-theme\", \"ml-auto text-xs tracking-widest opacity-60\", className)}\n      {...props}\n    />\n  )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n  DropdownMenu,\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuCheckboxItem,\n  DropdownMenuRadioItem,\n  DropdownMenuLabel,\n  DropdownMenuSeparator,\n  DropdownMenuShortcut,\n  DropdownMenuGroup,\n  DropdownMenuPortal,\n  DropdownMenuSub,\n  DropdownMenuSubContent,\n  DropdownMenuSubTrigger,\n  DropdownMenuRadioGroup,\n}","\"use client\"\n\nimport React, { useCallback, useState, useId } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Button } from './button'\nimport { Progress } from './progress'\nimport { Badge } from './badge'\nimport { cn } from '../../lib/utils'\nimport { \n  Upload, \n  X, \n  File, \n  Image as ImageIcon, \n  Video, \n  Music, \n  FileText,\n  CheckCircle,\n  AlertCircle,\n  Loader2\n} from 'lucide-react'\n\nexport interface FileUploadProps {\n  accept?: string\n  multiple?: boolean\n  maxSize?: number // in bytes\n  maxFiles?: number\n  disabled?: boolean\n  className?: string\n  onUpload?: (files: File[]) => Promise<void>\n  onRemove?: (fileId: string) => void\n  children?: React.ReactNode\n}\n\ninterface UploadedFile {\n  id: string\n  file: File\n  progress: number\n  status: 'uploading' | 'success' | 'error'\n  preview?: string\n}\n\nconst getFileIcon = (type: string) => {\n  if (type.startsWith('image/')) return <ImageIcon className=\"h-4 w-4\" />\n  if (type.startsWith('video/')) return <Video className=\"h-4 w-4\" />\n  if (type.startsWith('audio/')) return <Music className=\"h-4 w-4\" />\n  if (type.includes('text') || type.includes('document')) return <FileText className=\"h-4 w-4\" />\n  return <File className=\"h-4 w-4\" />\n}\n\nconst formatFileSize = (bytes: number): string => {\n  if (bytes === 0) return '0 Bytes'\n  const k = 1024\n  const sizes = ['Bytes', 'KB', 'MB', 'GB']\n  const i = Math.floor(Math.log(bytes) / Math.log(k))\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]\n}\n\nconst FileItem = ({ \n  uploadedFile, \n  onRemove \n}: { \n  uploadedFile: UploadedFile\n  onRemove: (id: string) => void \n}) => {\n  const { id, file, progress, status, preview } = uploadedFile\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 10 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, y: -10 }}\n      className=\"flex items-center space-x-3 p-3 border rounded-lg bg-background\"\n    >\n      {/* File Preview/Icon */}\n      <div className=\"flex-shrink-0\">\n        {preview ? (\n          <img \n            src={preview} \n            alt={file.name}\n            className=\"h-10 w-10 object-cover rounded\"\n          />\n        ) : (\n          <div className=\"h-10 w-10 rounded bg-muted flex items-center justify-center\">\n            {getFileIcon(file.type)}\n          </div>\n        )}\n      </div>\n\n      {/* File Info */}\n      <div className=\"flex-1 min-w-0\">\n        <div className=\"flex items-center justify-between\">\n          <p className=\"text-sm font-medium truncate\">{file.name}</p>\n          <Button\n            variant=\"ghost\"\n            size=\"sm\"\n            className=\"h-6 w-6 p-0\"\n            onClick={() => onRemove(id)}\n          >\n            <X className=\"h-3 w-3\" />\n          </Button>\n        </div>\n        \n        <div className=\"flex items-center space-x-2 mt-1\">\n          <p className=\"text-xs text-muted-foreground\">{formatFileSize(file.size)}</p>\n          \n          {/* Status Badge */}\n          {status === 'uploading' && (\n            <Badge variant=\"secondary\" className=\"h-5\">\n              <Loader2 className=\"h-3 w-3 mr-1 animate-spin\" />\n              Uploading\n            </Badge>\n          )}\n          {status === 'success' && (\n            <Badge variant=\"success\" className=\"h-5\">\n              <CheckCircle className=\"h-3 w-3 mr-1\" />\n              Done\n            </Badge>\n          )}\n          {status === 'error' && (\n            <Badge variant=\"destructive\" className=\"h-5\">\n              <AlertCircle className=\"h-3 w-3 mr-1\" />\n              Error\n            </Badge>\n          )}\n        </div>\n\n        {/* Progress Bar */}\n        {status === 'uploading' && (\n          <div className=\"mt-2\">\n            <Progress value={progress} className=\"h-1\" />\n          </div>\n        )}\n      </div>\n    </motion.div>\n  )\n}\n\nexport const FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n  ({ \n    accept = \"*\",\n    multiple = true,\n    maxSize = 10 * 1024 * 1024, // 10MB\n    maxFiles = 5,\n    disabled = false,\n    className,\n    onUpload,\n    onRemove,\n    children,\n    ...props \n  }, ref) => {\n    const [uploadedFiles, setUploadedFiles] = useState<UploadedFile[]>([])\n    const [isDragOver, setIsDragOver] = useState(false)\n    const [error, setError] = useState<string | null>(null)\n\n    const validateFile = (file: File): string | null => {\n      if (file.size > maxSize) {\n        return `File size exceeds ${formatFileSize(maxSize)}`\n      }\n\n      if (accept !== \"*\" && !accept.split(',').some(type => {\n        const cleanType = type.trim()\n        if (cleanType.includes('*')) {\n          return file.type.startsWith(cleanType.replace('*', ''))\n        }\n        return file.type === cleanType\n      })) {\n        return `File type not supported`\n      }\n\n      return null\n    }\n\n    const processFiles = useCallback(async (files: FileList | File[]) => {\n      const fileArray = Array.from(files)\n      setError(null)\n\n      // Check total file count\n      if (uploadedFiles.length + fileArray.length > maxFiles) {\n        setError(`Maximum ${maxFiles} files allowed`)\n        return\n      }\n\n      const validFiles: File[] = []\n      const errors: string[] = []\n\n      // Validate each file\n      fileArray.forEach(file => {\n        const validationError = validateFile(file)\n        if (validationError) {\n          errors.push(`${file.name}: ${validationError}`)\n        } else {\n          validFiles.push(file)\n        }\n      })\n\n      if (errors.length > 0) {\n        setError(errors.join(', '))\n        return\n      }\n\n      // Create uploaded file entries\n      const newUploadedFiles: UploadedFile[] = validFiles.map((file, index) => ({\n        id: `${Date.now()}-${index}-${file.name.replace(/[^a-zA-Z0-9]/g, '')}`,\n        file,\n        progress: 0,\n        status: 'uploading' as const,\n        preview: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined\n      }))\n\n      setUploadedFiles(prev => [...prev, ...newUploadedFiles])\n\n      // Simulate upload progress\n      for (const uploadedFile of newUploadedFiles) {\n        let progress = 0\n        const interval = setInterval(() => {\n          progress += 15 + (uploadedFile.file.size % 10) // Deterministic progress based on file size\n          if (progress >= 100) {\n            progress = 100\n            clearInterval(interval)\n            \n            setUploadedFiles(prev => \n              prev.map(f => \n                f.id === uploadedFile.id \n                  ? { ...f, progress: 100, status: 'success' as const }\n                  : f\n              )\n            )\n          } else {\n            setUploadedFiles(prev => \n              prev.map(f => \n                f.id === uploadedFile.id \n                  ? { ...f, progress }\n                  : f\n              )\n            )\n          }\n        }, 200)\n      }\n\n      // Call onUpload if provided\n      if (onUpload) {\n        try {\n          await onUpload(validFiles)\n        } catch (error) {\n          console.error('Upload failed:', error)\n          setUploadedFiles(prev => \n            prev.map(f => \n              newUploadedFiles.some(nf => nf.id === f.id)\n                ? { ...f, status: 'error' as const }\n                : f\n            )\n          )\n        }\n      }\n    }, [uploadedFiles.length, maxFiles, maxSize, accept, onUpload])\n\n    const handleDrop = useCallback((e: React.DragEvent) => {\n      e.preventDefault()\n      setIsDragOver(false)\n      \n      if (disabled) return\n      \n      const files = e.dataTransfer.files\n      if (files.length > 0) {\n        processFiles(files)\n      }\n    }, [processFiles, disabled])\n\n    const handleDragOver = useCallback((e: React.DragEvent) => {\n      e.preventDefault()\n      if (!disabled) {\n        setIsDragOver(true)\n      }\n    }, [disabled])\n\n    const handleDragLeave = useCallback((e: React.DragEvent) => {\n      e.preventDefault()\n      setIsDragOver(false)\n    }, [])\n\n    const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n      const files = e.target.files\n      if (files && files.length > 0) {\n        processFiles(files)\n      }\n      // Reset input value\n      e.target.value = ''\n    }, [processFiles])\n\n    const removeFile = useCallback((fileId: string) => {\n      setUploadedFiles(prev => {\n        const fileToRemove = prev.find(f => f.id === fileId)\n        if (fileToRemove?.preview) {\n          URL.revokeObjectURL(fileToRemove.preview)\n        }\n        return prev.filter(f => f.id !== fileId)\n      })\n      \n      if (onRemove) {\n        onRemove(fileId)\n      }\n    }, [onRemove])\n\n    return (\n      <div ref={ref} className={cn(\"moonui-theme\", \"space-y-4\", className)} {...props}>\n        {/* Upload Area */}\n        <motion.div\n          className={cn(\n            \"relative border-2 border-dashed rounded-lg p-8 text-center transition-colors\",\n            isDragOver && \"border-primary bg-primary/5\",\n            disabled && \"opacity-50 cursor-not-allowed\",\n            !disabled && \"hover:border-primary/50 cursor-pointer\"\n          )}\n          onDrop={handleDrop}\n          onDragOver={handleDragOver}\n          onDragLeave={handleDragLeave}\n          animate={{\n            scale: isDragOver ? 1.02 : 1,\n            borderColor: isDragOver ? \"hsl(var(--primary))\" : \"hsl(var(--border))\"\n          }}\n        >\n          <input\n            type=\"file\"\n            accept={accept}\n            multiple={multiple}\n            disabled={disabled}\n            onChange={handleFileSelect}\n            className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer\"\n          />\n          \n          {children || (\n            <div className=\"space-y-4\">\n              <div className=\"mx-auto h-12 w-12 text-muted-foreground\">\n                <Upload className=\"h-full w-full\" />\n              </div>\n              <div>\n                <p className=\"text-lg font-medium\">\n                  {isDragOver ? 'Drop files here' : 'Upload files'}\n                </p>\n                <p className=\"text-sm text-muted-foreground\">\n                  Drag & drop files here, or click to select\n                </p>\n                <p className=\"text-xs text-muted-foreground mt-2\">\n                  Max {maxFiles} files, {formatFileSize(maxSize)} each\n                </p>\n              </div>\n              <Button variant=\"outline\" disabled={disabled}>\n                Select Files\n              </Button>\n            </div>\n          )}\n        </motion.div>\n\n        {/* Error Message */}\n        <AnimatePresence>\n          {error && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -10 }}\n              className=\"flex items-center space-x-2 text-sm text-destructive\"\n            >\n              <AlertCircle className=\"h-4 w-4\" />\n              <span>{error}</span>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Uploaded Files */}\n        <AnimatePresence>\n          {uploadedFiles.length > 0 && (\n            <motion.div\n              initial={{ opacity: 0, height: 0 }}\n              animate={{ opacity: 1, height: 'auto' }}\n              exit={{ opacity: 0, height: 0 }}\n              className=\"space-y-2\"\n            >\n              <h4 className=\"text-sm font-medium\">\n                Uploaded Files ({uploadedFiles.length})\n              </h4>\n              <div className=\"space-y-2\">\n                <AnimatePresence>\n                  {uploadedFiles.map(uploadedFile => (\n                    <FileItem\n                      key={uploadedFile.id}\n                      uploadedFile={uploadedFile}\n                      onRemove={removeFile}\n                    />\n                  ))}\n                </AnimatePresence>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    )\n  }\n)\n\nFileUpload.displayName = \"FileUpload\"","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Progress Bileşeni\n *\n * İlerleme durumunu görsel olarak gösteren, tema sistemiyle tam entegre bir bileşen.\n * Yükleme işlemleri, form gönderimi ve diğer zaman alan işlemleri göstermek için kullanılır.\n */\n\nconst progressVariants = cva(\n  \"relative overflow-hidden bg-muted\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-muted\",\n        primary: \"bg-primary/20\",\n        secondary: \"bg-secondary/20\",\n        success: \"bg-success/20\",\n        warning: \"bg-warning/20\",\n        error: \"bg-error/20\",\n      },\n      size: {\n        xs: \"h-1\",\n        sm: \"h-1.5\",\n        default: \"h-2\",\n        md: \"h-2.5\",\n        lg: \"h-3\",\n        xl: \"h-4\",\n      },\n      radius: {\n        none: \"rounded-none\",\n        sm: \"rounded-sm\",\n        default: \"rounded-md\", \n        lg: \"rounded-lg\",\n        full: \"rounded-full\",\n      },\n      animation: {\n        default: \"[&>div]:transition-all [&>div]:duration-500\",\n        smooth: \"[&>div]:transition-all [&>div]:duration-700\",\n        fast: \"[&>div]:transition-all [&>div]:duration-300\",\n        none: \"\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      radius: \"full\",\n      animation: \"default\",\n    },\n  }\n);\n\nconst progressIndicatorVariants = cva(\n  \"h-full w-full flex-1\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-foreground\",\n        primary: \"bg-primary\",\n        secondary: \"bg-secondary\",\n        success: \"bg-success\",\n        warning: \"bg-warning\",\n        error: \"bg-error\",\n      },\n      animation: {\n        default: \"transition-all duration-500\",\n        smooth: \"transition-all duration-700\",\n        fast: \"transition-all duration-300\",\n        none: \"\",\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n      animation: \"default\",\n    },\n  }\n);\n\nexport interface ProgressProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof progressVariants> {\n  /**\n   * İlerleme çubuğu değeri (0-100)\n   */\n  value?: number;\n  /**\n   * İndikatör (dolgu) için renk varyantı\n   */\n  indicatorVariant?: VariantProps<typeof progressIndicatorVariants>[\"variant\"];\n  /**\n   * İlerleme durumunu gösteren metin görünürlüğü\n   */\n  showValueLabel?: boolean;\n  /**\n   * İlerleme değeri etiketi için format (ör: \"30%\" veya \"3/10\")\n   */\n  valueLabel?: string;\n  /**\n   * Etiket stili\n   */\n  labelClassName?: string;\n  /**\n   * Belirsiz ilerleme animasyonu (indeterminate)\n   */\n  indeterminate?: boolean;\n  /**\n   * İlerleme değeri maksimumu (default: 100)\n   */\n  max?: number;\n}\n\nconst Progress = React.forwardRef<\n  HTMLDivElement,\n  ProgressProps\n>(({\n  className,\n  value = 0,\n  variant,\n  size,\n  radius,\n  animation,\n  indicatorVariant,\n  showValueLabel = false,\n  valueLabel,\n  labelClassName,\n  indeterminate = false,\n  max = 100,\n  ...props\n}, ref) => {\n  // İlerleme değeri 0-100 arasında olmalı\n  const normalizedValue = Math.max(0, Math.min(value, max));\n  const percentage = max > 0 ? (normalizedValue / max) * 100 : 0;\n  \n  // Etiket içeriği\n  const label = valueLabel || `${Math.round(percentage)}%`;\n  \n  return (\n    <>\n      {showValueLabel && (\n        <div className=\"flex justify-between items-center mb-1\">\n          <span \n            className={cn(\n              \"text-sm font-medium text-muted-foreground\",\n              labelClassName\n            )}\n          >\n            {label}\n          </span>\n        </div>\n      )}\n      <div\n        ref={ref}\n        className={cn(\"moonui-theme\", progressVariants({ variant, size, radius, animation }), className)}\n        role=\"progressbar\"\n        aria-valuemin={0}\n        aria-valuemax={max}\n        aria-valuenow={indeterminate ? undefined : normalizedValue}\n        {...props}\n      >\n        <div\n          className={cn(\n            progressIndicatorVariants({ variant: indicatorVariant || \"primary\", animation }),\n            indeterminate && \"animate-indeterminate-progress\"\n          )}\n          style={indeterminate ? {} : { transform: `translateX(-${100 - percentage}%)` }}\n        />\n      </div>\n    </>\n  );\n});\nProgress.displayName = \"Progress\";\n\n// Not: Belirsiz ilerleme animasyonu için CSS keyframe styles.css veya Tailwind config içinde tanımlanmalı\n// @keyframes indeterminate-progress içeren bir tanımlama yapılmalıdır\n// .animate-indeterminate-progress sınıfı da bu animasyonu kullanmalıdır\n\nexport { Progress, progressVariants };\n","\"use client\"\n\nimport React, { useState, useRef, useEffect } from \"react\"\nimport { motion, useMotionValue, useTransform, animate, PanInfo } from \"framer-motion\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface GestureDrawerProps {\n  children: React.ReactNode\n  isOpen: boolean\n  onOpenChange: (open: boolean) => void\n  direction?: \"up\" | \"down\" | \"left\" | \"right\"\n  threshold?: number\n  className?: string\n  overlayClassName?: string\n  enableSwipeToClose?: boolean\n}\n\nexport const GestureDrawer = React.forwardRef<HTMLDivElement, GestureDrawerProps>(\n  ({\n    children,\n    isOpen,\n    onOpenChange,\n    direction = \"up\",\n    threshold = 50,\n    className,\n    overlayClassName,\n    enableSwipeToClose = true,\n    ...props\n  }, ref) => {\n    const y = useMotionValue(0)\n    const x = useMotionValue(0)\n    \n    const isVertical = direction === \"up\" || direction === \"down\"\n    const motionValue = isVertical ? y : x\n    \n    const opacity = useTransform(motionValue, [0, threshold], [1, 0.5])\n    \n    const handleDragEnd = (event: any, info: PanInfo) => {\n      if (!enableSwipeToClose) return\n      \n      const offset = isVertical ? info.offset.y : info.offset.x\n      const velocity = isVertical ? info.velocity.y : info.velocity.x\n      \n      let shouldClose = false\n      \n      switch (direction) {\n        case \"up\":\n          shouldClose = offset > threshold || velocity > 500\n          break\n        case \"down\":\n          shouldClose = offset < -threshold || velocity < -500\n          break\n        case \"left\":\n          shouldClose = offset > threshold || velocity > 500\n          break\n        case \"right\":\n          shouldClose = offset < -threshold || velocity < -500\n          break\n      }\n      \n      if (shouldClose) {\n        onOpenChange(false)\n      } else {\n        animate(motionValue, 0, { type: \"spring\", stiffness: 300, damping: 20 })\n      }\n    }\n    \n    const getInitialPosition = () => {\n      switch (direction) {\n        case \"up\":\n          return { y: \"100%\" }\n        case \"down\":\n          return { y: \"-100%\" }\n        case \"left\":\n          return { x: \"100%\" }\n        case \"right\":\n          return { x: \"-100%\" }\n        default:\n          return { y: \"100%\" }\n      }\n    }\n    \n    const getAnimatePosition = () => {\n      return isVertical ? { y: 0 } : { x: 0 }\n    }\n    \n    if (!isOpen) return null\n    \n    return (\n      <div className=\"fixed inset-0 z-50\">\n        {/* Overlay */}\n        <motion.div\n          initial={{ opacity: 0 }}\n          animate={{ opacity: 1 }}\n          exit={{ opacity: 0 }}\n          onClick={() => onOpenChange(false)}\n          className={cn(\"absolute inset-0 bg-black/50\", overlayClassName)}\n        />\n        \n        {/* Drawer */}\n        <motion.div\n          ref={ref}\n          drag={enableSwipeToClose ? (isVertical ? \"y\" : \"x\") : false}\n          dragConstraints={{ \n            top: direction === \"up\" ? 0 : undefined,\n            bottom: direction === \"down\" ? 0 : undefined,\n            left: direction === \"left\" ? 0 : undefined,\n            right: direction === \"right\" ? 0 : undefined\n          }}\n          dragElastic={0.2}\n          onDragEnd={handleDragEnd}\n          style={{ \n            [isVertical ? \"y\" : \"x\"]: motionValue,\n            opacity\n          }}\n          initial={getInitialPosition()}\n          animate={getAnimatePosition()}\n          exit={getInitialPosition()}\n          transition={{ type: \"spring\", damping: 30, stiffness: 300 }}\n          className={cn(\n            \"absolute bg-background border shadow-lg\",\n            {\n              \"bottom-0 left-0 right-0 rounded-t-lg\": direction === \"up\",\n              \"top-0 left-0 right-0 rounded-b-lg\": direction === \"down\", \n              \"top-0 bottom-0 right-0 rounded-l-lg\": direction === \"left\",\n              \"top-0 bottom-0 left-0 rounded-r-lg\": direction === \"right\"\n            },\n            className\n          )}\n          {...props}\n        >\n          {/* Drag Handle */}\n          {(direction === \"up\" || direction === \"down\") && (\n            <div className=\"flex justify-center p-2\">\n              <div className=\"w-12 h-1 bg-muted rounded-full\" />\n            </div>\n          )}\n          \n          {children}\n        </motion.div>\n      </div>\n    )\n  }\n)\n\nGestureDrawer.displayName = \"GestureDrawer\"","\"use client\";\n\nimport { useState, useEffect } from 'react';\nimport { Star, GitFork, Eye, ExternalLink } from 'lucide-react';\nimport { Button } from './button';\nimport { cn } from '../../lib/utils';\n\ninterface GitHubStarsProps {\n  className?: string;\n  size?: 'sm' | 'md' | 'lg';\n  showForks?: boolean;\n  showWatchers?: boolean;\n  repoUrl?: string;\n}\n\ninterface GitHubStats {\n  stars: number;\n  forks: number;\n  watchers: number;\n  isLive: boolean;\n}\n\nexport function GitHubStars({\n  className,\n  size = 'md',\n  showForks = true,\n  showWatchers = false,\n  repoUrl = 'https://github.com/moonui/moonui'\n}: GitHubStarsProps) {\n  const [stats, setStats] = useState<GitHubStats | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n\n  useEffect(() => {\n    const fetchStats = async () => {\n      try {\n        const response = await fetch('/api/github-stars');\n        const data = await response.json();\n        setStats(data);\n      } catch (error) {\n        console.error('Failed to fetch GitHub stats:', error);\n        // Set fallback data\n        setStats({\n          stars: 1240,\n          forks: 89,\n          watchers: 156,\n          isLive: false\n        });\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    fetchStats();\n  }, []);\n\n  const formatNumber = (num: number) => {\n    if (num >= 1000) {\n      return (num / 1000).toFixed(1) + 'k';\n    }\n    return num.toString();\n  };\n\n  const sizeClasses = {\n    sm: 'text-sm gap-2',\n    md: 'text-base gap-3',\n    lg: 'text-lg gap-4'\n  };\n\n  const iconSizes = {\n    sm: 14,\n    md: 16,\n    lg: 20\n  };\n\n  if (isLoading) {\n    return (\n      <div className={cn(\"flex items-center animate-pulse\", sizeClasses[size], className)}>\n        <div className=\"flex items-center gap-1\">\n          <div className=\"w-4 h-4 bg-gray-300 dark:bg-gray-700 rounded\"></div>\n          <div className=\"w-8 h-4 bg-gray-300 dark:bg-gray-700 rounded\"></div>\n        </div>\n        {showForks && (\n          <div className=\"flex items-center gap-1\">\n            <div className=\"w-4 h-4 bg-gray-300 dark:bg-gray-700 rounded\"></div>\n            <div className=\"w-6 h-4 bg-gray-300 dark:bg-gray-700 rounded\"></div>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  if (!stats) {\n    return null;\n  }\n\n  return (\n    <div className={cn(\"flex items-center\", sizeClasses[size], className)}>\n      <a\n        href={repoUrl}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        className=\"flex items-center gap-1 text-gray-700 dark:text-gray-300 hover:text-primary transition-colors\"\n      >\n        <Star className=\"fill-current text-yellow-500\" size={iconSizes[size]} />\n        <span className=\"font-medium\">{formatNumber(stats.stars)}</span>\n      </a>\n      \n      {showForks && (\n        <a\n          href={`${repoUrl}/network/members`}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"flex items-center gap-1 text-gray-700 dark:text-gray-300 hover:text-primary transition-colors\"\n        >\n          <GitFork size={iconSizes[size]} />\n          <span className=\"font-medium\">{formatNumber(stats.forks)}</span>\n        </a>\n      )}\n      \n      {showWatchers && (\n        <a\n          href={`${repoUrl}/watchers`}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          className=\"flex items-center gap-1 text-gray-700 dark:text-gray-300 hover:text-primary transition-colors\"\n        >\n          <Eye size={iconSizes[size]} />\n          <span className=\"font-medium\">{formatNumber(stats.watchers)}</span>\n        </a>\n      )}\n      \n      {!stats.isLive && (\n        <span className=\"text-xs text-gray-500 dark:text-gray-500 ml-2\">\n          (demo)\n        </span>\n      )}\n    </div>\n  );\n}\n\nexport function GitHubStarButton({\n  className,\n  size = 'md',\n  repoUrl = 'https://github.com/moonui/moonui'\n}: {\n  className?: string;\n  size?: 'sm' | 'md' | 'lg';\n  repoUrl?: string;\n}) {\n  const [stars, setStars] = useState<number | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n\n  useEffect(() => {\n    const fetchStats = async () => {\n      try {\n        const response = await fetch('/api/github-stars');\n        const data = await response.json();\n        setStars(data.stars);\n      } catch (error) {\n        console.error('Failed to fetch GitHub stats:', error);\n        setStars(1240);\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    fetchStats();\n  }, []);\n\n  const formatNumber = (num: number) => {\n    if (num >= 1000) {\n      return (num / 1000).toFixed(1) + 'k';\n    }\n    return num.toString();\n  };\n\n  return (\n    <Button\n      variant=\"outline\"\n      size={size}\n      className={cn(\"moonui-theme\", \"group\", className)}\n      asChild\n    >\n      <a\n        href={repoUrl}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        className=\"flex items-center gap-2\"\n      >\n        <Star className=\"fill-current text-yellow-500 group-hover:scale-110 transition-transform\" size={16} />\n        <span>Star on GitHub</span>\n        {!isLoading && stars && (\n          <span className=\"px-2 py-0.5 bg-gray-100 dark:bg-gray-800 rounded-full text-xs font-medium\">\n            {formatNumber(stars)}\n          </span>\n        )}\n        <ExternalLink size={14} className=\"opacity-50 group-hover:opacity-100 transition-opacity\" />\n      </a>\n    </Button>\n  );\n}","\"use client\"\n\n// Locked Component UI\n// Pro componentlerin locked state'ini gösteren wrapper component\n\nimport React, { useState, useEffect } from 'react'\nimport { cn } from '../../lib/utils'\nimport { Button } from './button'\nimport { Badge } from './badge'\nimport { Lock, Crown, Zap, AlertCircle } from 'lucide-react'\n\ninterface LockedComponentProps {\n  children: React.ReactNode\n  componentName: string\n  className?: string\n  showPreview?: boolean\n  previewDuration?: number // ms\n}\n\nexport function LockedComponent({\n  children,\n  componentName,\n  className,\n  showPreview = true,\n  previewDuration = 2000\n}: LockedComponentProps) {\n  const [isPreviewActive, setIsPreviewActive] = useState(false)\n  const [previewTimeout, setPreviewTimeout] = useState<NodeJS.Timeout | null>(null)\n\n  const handleMouseEnter = () => {\n    if (!showPreview) return\n    \n    setIsPreviewActive(true)\n    \n    // Clear existing timeout\n    if (previewTimeout) {\n      clearTimeout(previewTimeout)\n    }\n    \n    // Set new timeout\n    const timeout = setTimeout(() => {\n      setIsPreviewActive(false)\n    }, previewDuration)\n    \n    setPreviewTimeout(timeout)\n  }\n\n  const handleMouseLeave = () => {\n    if (previewTimeout) {\n      clearTimeout(previewTimeout)\n      setPreviewTimeout(null)\n    }\n    setIsPreviewActive(false)\n  }\n\n  return (\n    <div \n      className={cn(\n        \"relative group cursor-pointer transition-all duration-300\",\n        className\n      )}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n    >\n      {/* Component Content */}\n      <div \n        className={cn(\n          \"transition-all duration-300\",\n          !isPreviewActive && \"blur-sm grayscale-[0.3] opacity-60\"\n        )}\n      >\n        {children}\n      </div>\n\n      {/* Overlay */}\n      <div \n        className={cn(\n          \"absolute inset-0 bg-gradient-to-br from-amber-500/10 via-transparent to-purple-500/10\",\n          \"border-2 border-dashed border-amber-400/30 rounded-lg\",\n          \"flex items-center justify-center\",\n          \"transition-all duration-300\",\n          isPreviewActive ? \"opacity-0\" : \"opacity-100\"\n        )}\n      >\n        <div className=\"text-center space-y-3 p-6\">\n          {/* Pro Badge */}\n          <div className=\"flex justify-center\">\n            <Badge \n              variant=\"secondary\" \n              className=\"bg-gradient-to-r from-amber-500 to-orange-500 text-white border-0 px-3 py-1\"\n            >\n              <Crown className=\"w-3 h-3 mr-1\" />\n              PRO ONLY\n            </Badge>\n          </div>\n\n          {/* Lock Icon */}\n          <div className=\"flex justify-center\">\n            <div className=\"p-3 rounded-full bg-amber-100 dark:bg-amber-900/30\">\n              <Lock className=\"w-6 h-6 text-amber-600 dark:text-amber-400\" />\n            </div>\n          </div>\n\n          {/* Component Name */}\n          <h3 className=\"font-semibold text-gray-900 dark:text-gray-100\">\n            {componentName}\n          </h3>\n\n          {/* Description */}\n          <p className=\"text-sm text-gray-600 dark:text-gray-400 max-w-xs\">\n            This premium component is available with Pro subscription\n          </p>\n\n          {/* Upgrade Button */}\n          <Button \n            size=\"sm\" \n            className=\"bg-gradient-to-r from-amber-500 to-orange-500 hover:from-amber-600 hover:to-orange-600 border-0\"\n            onClick={() => {\n              if (typeof window !== 'undefined') {\n                window.location.href = '/pricing'\n              }\n            }}\n          >\n            <Zap className=\"w-4 h-4 mr-2\" />\n            Upgrade to Pro\n          </Button>\n        </div>\n      </div>\n\n      {/* Preview Hint */}\n      {showPreview && !isPreviewActive && (\n        <div className=\"absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200\">\n          <div className=\"bg-black/80 text-white text-xs px-2 py-1 rounded\">\n            Hover to preview\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\n// Pro Component Wrapper - Otomatik erişim kontrolü ile\ninterface ProComponentWrapperProps {\n  children: React.ReactNode\n  componentId: string\n  componentName?: string\n  className?: string\n  fallback?: React.ReactNode\n  requireCLI?: boolean\n}\n\nexport function ProComponentWrapper({\n  children,\n  componentId,\n  componentName,\n  className,\n  fallback,\n  requireCLI = true\n}: ProComponentWrapperProps) {\n  const [authState, setAuthState] = useState<{\n    isAuthenticated: boolean\n    deviceValid: boolean\n    hasProAccess: boolean\n    loading: boolean\n  }>({\n    isAuthenticated: false,\n    deviceValid: false,\n    hasProAccess: false,\n    loading: true\n  })\n\n  useEffect(() => {\n    // Enhanced environment detection - prevent manipulation\n    const isDevelopment = () => {\n      // Check multiple indicators to prevent spoofing\n      const checks = {\n        nodeEnv: process.env.NODE_ENV === 'development',\n        nextPublicEnv: process.env.NEXT_PUBLIC_VERCEL_ENV === 'development',\n        localhost: typeof window !== 'undefined' && (\n          window.location.hostname === 'localhost' ||\n          window.location.hostname === '127.0.0.1' ||\n          window.location.hostname.includes('.local')\n        ),\n        port: typeof window !== 'undefined' && (\n          window.location.port === '3000' ||\n          window.location.port === '3001' ||\n          window.location.port === '8080'\n        ),\n        vercelEnv: !process.env.VERCEL,\n        ciEnv: !process.env.CI,\n        deploymentEnv: !process.env.DEPLOYMENT_ENV\n      }\n      \n      // If running on Vercel, Netlify, or any deployment platform - it's production\n      if (process.env.VERCEL || process.env.NETLIFY || process.env.RENDER || \n          process.env.RAILWAY_ENVIRONMENT || process.env.FLY_APP_NAME ||\n          process.env.DEPLOYMENT_ENV === 'production') {\n        return false\n      }\n      \n      // Must be localhost AND development env\n      return checks.nodeEnv && checks.localhost && !checks.vercelEnv && !checks.ciEnv\n    }\n    \n    // Skip checks only in true production or if not requiring CLI\n    if (!isDevelopment() || !requireCLI) {\n      setAuthState({\n        isAuthenticated: true,\n        deviceValid: true,\n        hasProAccess: true,\n        loading: false\n      })\n      return\n    }\n\n    // Check CLI authentication in development\n    async function checkAuth() {\n      try {\n        const cliToken = localStorage.getItem('moonui_cli_token')\n        const deviceId = localStorage.getItem('moonui_device_id')\n        \n        if (!cliToken || !deviceId) {\n          setAuthState({\n            isAuthenticated: false,\n            deviceValid: false,\n            hasProAccess: false,\n            loading: false\n          })\n          return\n        }\n\n        // Validate token and device with API\n        const response = await fetch('/api/device/validate', {\n          method: 'POST',\n          headers: {\n            'Authorization': `Bearer ${cliToken}`,\n            'X-Device-ID': deviceId,\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify({\n            environment: {\n              nodeEnv: process.env.NODE_ENV,\n              hostname: window.location.hostname,\n              port: window.location.port,\n              protocol: window.location.protocol\n            }\n          })\n        })\n        \n        if (response.ok) {\n          const data = await response.json()\n          setAuthState({\n            isAuthenticated: true,\n            deviceValid: data.valid,\n            hasProAccess: data.hasProAccess,\n            loading: false\n          })\n        } else {\n          setAuthState({\n            isAuthenticated: false,\n            deviceValid: false,\n            hasProAccess: false,\n            loading: false\n          })\n        }\n      } catch (error) {\n        setAuthState({\n          isAuthenticated: false,\n          deviceValid: false,\n          hasProAccess: false,\n          loading: false\n        })\n      }\n    }\n\n    checkAuth()\n  }, [requireCLI])\n\n  // Loading state\n  if (authState.loading) {\n    return (\n      <div className={cn(\"animate-pulse bg-gray-200 dark:bg-gray-800 rounded-lg h-32\", className)}>\n        <div className=\"flex items-center justify-center h-full\">\n          <div className=\"text-sm text-gray-500\">Loading...</div>\n        </div>\n      </div>\n    )\n  }\n\n  // Development mode checks - use same enhanced detection\n  const isDevelopment = () => {\n    const checks = {\n      nodeEnv: process.env.NODE_ENV === 'development',\n      localhost: typeof window !== 'undefined' && (\n        window.location.hostname === 'localhost' ||\n        window.location.hostname === '127.0.0.1' ||\n        window.location.hostname.includes('.local')\n      ),\n      port: typeof window !== 'undefined' && (\n        window.location.port === '3000' ||\n        window.location.port === '3001' ||\n        window.location.port === '8080'\n      )\n    }\n    \n    if (process.env.VERCEL || process.env.NETLIFY || process.env.RENDER || \n        process.env.RAILWAY_ENVIRONMENT || process.env.FLY_APP_NAME) {\n      return false\n    }\n    \n    return checks.nodeEnv && checks.localhost\n  }\n  \n  if (isDevelopment() && requireCLI) {\n    // Not authenticated\n    if (!authState.isAuthenticated) {\n      return (\n        <div className={cn(\"relative\", className)}>\n          <div className=\"blur-sm grayscale-[0.3] opacity-60 pointer-events-none\">\n            {fallback || children}\n          </div>\n          <div className=\"absolute inset-0 bg-gradient-to-br from-red-500/10 via-transparent to-orange-500/10 border-2 border-dashed border-red-400/30 rounded-lg flex items-center justify-center\">\n            <div className=\"text-center space-y-3 p-6\">\n              <Badge variant=\"destructive\" className=\"mb-2\">\n                <Lock className=\"w-3 h-3 mr-1\" />\n                CLI AUTH REQUIRED\n              </Badge>\n              <h3 className=\"font-semibold text-gray-900 dark:text-gray-100\">\n                CLI Authentication Required\n              </h3>\n              <p className=\"text-sm text-gray-600 dark:text-gray-400 max-w-xs\">\n                Run the following command to authenticate:\n              </p>\n              <code className=\"block bg-black/80 text-green-400 p-2 rounded text-xs\">\n                npx moonui auth login\n              </code>\n            </div>\n          </div>\n        </div>\n      )\n    }\n\n    // Device not valid\n    if (!authState.deviceValid) {\n      return (\n        <div className={cn(\"relative\", className)}>\n          <div className=\"blur-sm grayscale-[0.3] opacity-60 pointer-events-none\">\n            {fallback || children}\n          </div>\n          <div className=\"absolute inset-0 bg-gradient-to-br from-yellow-500/10 via-transparent to-orange-500/10 border-2 border-dashed border-yellow-400/30 rounded-lg flex items-center justify-center\">\n            <div className=\"text-center space-y-3 p-6\">\n              <Badge variant=\"secondary\" className=\"bg-yellow-500 text-white mb-2\">\n                <Zap className=\"w-3 h-3 mr-1\" />\n                DEVICE LIMIT\n              </Badge>\n              <h3 className=\"font-semibold text-gray-900 dark:text-gray-100\">\n                Device Limit Exceeded\n              </h3>\n              <p className=\"text-sm text-gray-600 dark:text-gray-400 max-w-xs\">\n                This device is not registered or you've reached your device limit\n              </p>\n              <Button \n                size=\"sm\" \n                className=\"bg-gradient-to-r from-yellow-500 to-orange-500\"\n                onClick={() => window.open('/dashboard/devices', '_blank')}\n              >\n                Manage Devices\n              </Button>\n            </div>\n          </div>\n        </div>\n      )\n    }\n\n    // No pro access\n    if (!authState.hasProAccess) {\n      return (\n        <LockedComponent\n          componentName={componentName || componentId}\n          className={className}\n        >\n          {fallback || children}\n        </LockedComponent>\n      )\n    }\n  }\n\n  // All checks passed - show component\n  return <div className={className}>{children}</div>\n}\n\n// Pro Badge Component\nexport function ProBadge({ className }: { className?: string }) {\n  return (\n    <Badge \n      variant=\"secondary\"\n      className={cn(\n        \"bg-gradient-to-r from-amber-500 to-orange-500 text-white border-0 text-xs\",\n        className\n      )}\n    >\n      <Crown className=\"w-3 h-3 mr-1\" />\n      PRO\n    </Badge>\n  )\n}\n\n// Free Badge Component  \nexport function FreeBadge({ className }: { className?: string }) {\n  return (\n    <Badge \n      variant=\"outline\"\n      className={cn(\"border-green-500 text-green-600 dark:text-green-400 text-xs\", className)}\n    >\n      FREE\n    </Badge>\n  )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface MoonLogoProps extends React.SVGProps<SVGSVGElement> {\n  variant?: \"default\" | \"monochrome\" | \"gradient\"\n  showText?: boolean\n}\n\nexport function MoonLogo({ \n  className, \n  variant = \"default\",\n  showText = true,\n  ...props \n}: MoonLogoProps) {\n  const logoId = React.useId()\n  const gradientId = `moon-gradient-${logoId}`\n  const maskId = `moon-mask-${logoId}`\n  \n  return (\n    <div className={cn(\"flex items-center gap-2\", className)}>\n      {/* Moon Icon */}\n      <svg\n        width=\"32\"\n        height=\"32\"\n        viewBox=\"0 0 32 32\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        className=\"flex-shrink-0\"\n        {...props}\n      >\n        <defs>\n          {variant === \"gradient\" && (\n            <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n              <stop offset=\"0%\" stopColor=\"#3B82F6\" />\n              <stop offset=\"50%\" stopColor=\"#8B5CF6\" />\n              <stop offset=\"100%\" stopColor=\"#EC4899\" />\n            </linearGradient>\n          )}\n          <mask id={maskId}>\n            <rect width=\"32\" height=\"32\" fill=\"white\"/>\n            <circle cx=\"22\" cy=\"10\" r=\"10\" fill=\"black\"/>\n          </mask>\n        </defs>\n        \n        {/* Moon Circle with transparent crescent */}\n        <circle\n          cx=\"16\"\n          cy=\"16\"\n          r=\"14\"\n          fill={variant === \"gradient\" ? `url(#${gradientId})` : \"currentColor\"}\n          className={variant === \"default\" ? \"fill-primary\" : \"\"}\n          mask={`url(#${maskId})`}\n        />\n      </svg>\n      \n      {/* Text */}\n      {showText && (\n        <span className=\"text-xl font-bold\">\n          <span className=\"text-foreground\">Moon</span>\n          <span className=\"text-primary\">UI</span>\n        </span>\n      )}\n    </div>\n  )\n}\n\nexport function MoonLogoIcon({ \n  className, \n  variant = \"default\",\n  ...props \n}: Omit<MoonLogoProps, \"showText\">) {\n  return <MoonLogo showText={false} className={className} variant={variant} {...props} />\n}\n\nexport function MoonLogoAnimated({ \n  className, \n  variant = \"default\",\n  showText = true,\n  ...props \n}: MoonLogoProps) {\n  return (\n    <MoonLogo \n      className={cn(\n        \"transition-all duration-300 hover:scale-105\",\n        className\n      )} \n      variant={variant}\n      showText={showText}\n      {...props}\n    />\n  )\n}","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\nimport { ButtonProps, buttonVariants } from \"./button\"\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n  <nav\n    role=\"navigation\"\n    aria-label=\"pagination\"\n    className={cn(\"moonui-theme\", \"mx-auto flex w-full justify-center\", className)}\n    {...props}\n  />\n)\nPagination.displayName = \"Pagination\"\n\nconst PaginationContent = React.forwardRef<\n  HTMLUListElement,\n  React.ComponentProps<\"ul\">\n>(({ className, ...props }, ref) => (\n  <ul\n    ref={ref}\n    className={cn(\"moonui-theme\", \"flex flex-row items-center gap-1\", className)}\n    {...props}\n  />\n))\nPaginationContent.displayName = \"PaginationContent\"\n\nconst PaginationItem = React.forwardRef<\n  HTMLLIElement,\n  React.ComponentProps<\"li\">\n>(({ className, ...props }, ref) => (\n  <li ref={ref} className={cn(\"moonui-theme\", \"\", className)} {...props} />\n))\nPaginationItem.displayName = \"PaginationItem\"\n\ntype PaginationLinkProps = {\n  isActive?: boolean\n} & Partial<Pick<ButtonProps, \"size\">> &\n  React.ComponentProps<\"a\">\n\nconst PaginationLink = ({\n  className,\n  isActive,\n  size = \"icon\",\n  ...props\n}: PaginationLinkProps) => (\n  <a\n    aria-current={isActive ? \"page\" : undefined}\n    className={cn(\n      buttonVariants({\n        variant: isActive ? \"outline\" : \"ghost\",\n        size,\n      }),\n      className\n    )}\n    {...props}\n  />\n)\nPaginationLink.displayName = \"PaginationLink\"\n\nconst PaginationPrevious = ({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n  <PaginationLink\n    aria-label=\"Go to previous page\"\n    size=\"md\"\n    className={cn(\"moonui-theme\", \"gap-1 pl-2.5\", className)}\n    {...props}\n  >\n    <ChevronLeft className=\"h-4 w-4\" />\n    <span>Previous</span>\n  </PaginationLink>\n)\nPaginationPrevious.displayName = \"PaginationPrevious\"\n\nconst PaginationNext = ({\n  className,\n  ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n  <PaginationLink\n    aria-label=\"Go to next page\"\n    size=\"md\"\n    className={cn(\"moonui-theme\", \"gap-1 pr-2.5\", className)}\n    {...props}\n  >\n    <span>Next</span>\n    <ChevronRight className=\"h-4 w-4\" />\n  </PaginationLink>\n)\nPaginationNext.displayName = \"PaginationNext\"\n\nconst PaginationEllipsis = ({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) => (\n  <span\n    aria-hidden\n    className={cn(\"moonui-theme\", \"flex h-9 w-9 items-center justify-center\", className)}\n    {...props}\n  >\n    <MoreHorizontal className=\"h-4 w-4\" />\n    <span className=\"sr-only\">More pages</span>\n  </span>\n)\nPaginationEllipsis.displayName = \"PaginationEllipsis\"\n\nexport {\n  Pagination,\n  PaginationContent,\n  PaginationEllipsis,\n  PaginationItem,\n  PaginationLink,\n  PaginationNext,\n  PaginationPrevious,\n}","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\nimport { Input } from \"./input\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select\"\nimport { Phone } from \"lucide-react\"\n\n// Country codes data\nconst countryCodes = [\n  { code: \"+1\", country: \"US\", flag: \"🇺🇸\", name: \"United States\" },\n  { code: \"+44\", country: \"GB\", flag: \"🇬🇧\", name: \"United Kingdom\" },\n  { code: \"+49\", country: \"DE\", flag: \"🇩🇪\", name: \"Germany\" },\n  { code: \"+33\", country: \"FR\", flag: \"🇫🇷\", name: \"France\" },\n  { code: \"+39\", country: \"IT\", flag: \"🇮🇹\", name: \"Italy\" },\n  { code: \"+34\", country: \"ES\", flag: \"🇪🇸\", name: \"Spain\" },\n  { code: \"+31\", country: \"NL\", flag: \"🇳🇱\", name: \"Netherlands\" },\n  { code: \"+46\", country: \"SE\", flag: \"🇸🇪\", name: \"Sweden\" },\n  { code: \"+47\", country: \"NO\", flag: \"🇳🇴\", name: \"Norway\" },\n  { code: \"+45\", country: \"DK\", flag: \"🇩🇰\", name: \"Denmark\" },\n  { code: \"+358\", country: \"FI\", flag: \"🇫🇮\", name: \"Finland\" },\n  { code: \"+48\", country: \"PL\", flag: \"🇵🇱\", name: \"Poland\" },\n  { code: \"+90\", country: \"TR\", flag: \"🇹🇷\", name: \"Turkey\" },\n  { code: \"+86\", country: \"CN\", flag: \"🇨🇳\", name: \"China\" },\n  { code: \"+81\", country: \"JP\", flag: \"🇯🇵\", name: \"Japan\" },\n  { code: \"+82\", country: \"KR\", flag: \"🇰🇷\", name: \"South Korea\" },\n  { code: \"+91\", country: \"IN\", flag: \"🇮🇳\", name: \"India\" },\n  { code: \"+61\", country: \"AU\", flag: \"🇦🇺\", name: \"Australia\" },\n  { code: \"+64\", country: \"NZ\", flag: \"🇳🇿\", name: \"New Zealand\" },\n  { code: \"+27\", country: \"ZA\", flag: \"🇿🇦\", name: \"South Africa\" },\n  { code: \"+55\", country: \"BR\", flag: \"🇧🇷\", name: \"Brazil\" },\n  { code: \"+52\", country: \"MX\", flag: \"🇲🇽\", name: \"Mexico\" },\n  { code: \"+54\", country: \"AR\", flag: \"🇦🇷\", name: \"Argentina\" },\n  { code: \"+20\", country: \"EG\", flag: \"🇪🇬\", name: \"Egypt\" },\n  { code: \"+966\", country: \"SA\", flag: \"🇸🇦\", name: \"Saudi Arabia\" },\n  { code: \"+971\", country: \"AE\", flag: \"🇦🇪\", name: \"UAE\" },\n]\n\n// Format phone number based on country\nconst formatPhoneNumber = (value: string, countryCode: string): string => {\n  const cleaned = value.replace(/\\D/g, \"\")\n  \n  switch (countryCode) {\n    case \"+1\": // US/Canada\n      if (cleaned.length <= 3) return cleaned\n      if (cleaned.length <= 6) return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3)}`\n      return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)}-${cleaned.slice(6, 10)}`\n    \n    case \"+44\": // UK\n      if (cleaned.length <= 4) return cleaned\n      if (cleaned.length <= 7) return `${cleaned.slice(0, 4)} ${cleaned.slice(4)}`\n      return `${cleaned.slice(0, 4)} ${cleaned.slice(4, 7)} ${cleaned.slice(7, 11)}`\n    \n    case \"+90\": // Turkey\n      if (cleaned.length <= 3) return cleaned\n      if (cleaned.length <= 6) return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3)}`\n      if (cleaned.length <= 9) return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)} ${cleaned.slice(6)}`\n      return `(${cleaned.slice(0, 3)}) ${cleaned.slice(3, 6)} ${cleaned.slice(6, 8)} ${cleaned.slice(8, 10)}`\n    \n    default: // Generic formatting\n      let formatted = \"\"\n      for (let i = 0; i < cleaned.length; i++) {\n        if (i > 0 && i % 3 === 0) formatted += \" \"\n        formatted += cleaned[i]\n      }\n      return formatted\n  }\n}\n\n// Get max length based on country\nconst getMaxLength = (countryCode: string): number => {\n  switch (countryCode) {\n    case \"+1\": return 10 // US/Canada\n    case \"+44\": return 11 // UK\n    case \"+90\": return 10 // Turkey\n    default: return 15 // Generic max\n  }\n}\n\nexport interface PhoneInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"value\"> {\n  value?: string\n  onChange?: (value: string, countryCode: string) => void\n  defaultCountry?: string\n  showIcon?: boolean\n  showCountrySelect?: boolean\n  countries?: typeof countryCodes\n}\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(\n  ({ \n    className, \n    value = \"\", \n    onChange, \n    defaultCountry = \"+1\",\n    showIcon = true,\n    showCountrySelect = true,\n    countries = countryCodes,\n    size,\n    ...props \n  }, ref) => {\n    const [countryCode, setCountryCode] = React.useState(defaultCountry)\n    const [phoneNumber, setPhoneNumber] = React.useState(value)\n    \n    const selectedCountry = countries.find(c => c.code === countryCode) || countries[0]\n    \n    const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      const rawValue = e.target.value.replace(/\\D/g, \"\")\n      const maxLength = getMaxLength(countryCode)\n      const truncated = rawValue.slice(0, maxLength)\n      const formatted = formatPhoneNumber(truncated, countryCode)\n      \n      setPhoneNumber(truncated)\n      onChange?.(truncated, countryCode)\n      \n      // Update the input value with formatted version\n      e.target.value = formatted\n    }\n    \n    const handleCountryChange = (newCountryCode: string) => {\n      setCountryCode(newCountryCode)\n      onChange?.(phoneNumber, newCountryCode)\n    }\n    \n    const formattedValue = formatPhoneNumber(phoneNumber, countryCode)\n    \n    return (\n      <div className={cn(\"relative flex gap-2\", className)}>\n        {showCountrySelect && (\n          <Select value={countryCode} onValueChange={handleCountryChange}>\n            <SelectTrigger className=\"w-[120px]\">\n              <SelectValue>\n                <div className=\"flex items-center gap-2\">\n                  <span>{selectedCountry.flag}</span>\n                  <span>{selectedCountry.code}</span>\n                </div>\n              </SelectValue>\n            </SelectTrigger>\n            <SelectContent>\n              {countries.map((country) => (\n                <SelectItem key={country.code} value={country.code}>\n                  <div className=\"flex items-center gap-2\">\n                    <span>{country.flag}</span>\n                    <span>{country.code}</span>\n                    <span className=\"text-muted-foreground\">{country.name}</span>\n                  </div>\n                </SelectItem>\n              ))}\n            </SelectContent>\n          </Select>\n        )}\n        \n        <div className=\"relative flex-1\">\n          <Input\n            ref={ref}\n            type=\"tel\"\n            inputMode=\"numeric\"\n            autoComplete=\"tel\"\n            placeholder={countryCode === \"+1\" ? \"(555) 123-4567\" : \"123 456 789\"}\n            value={formattedValue}\n            onChange={handlePhoneChange}\n            className={cn(showIcon && \"pl-10\", className)}\n            {...props}\n          />\n          {showIcon && (\n            <Phone className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n          )}\n        </div>\n      </div>\n    )\n  }\n)\nPhoneInput.displayName = \"PhoneInput\"","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp, Loader2 } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Premium Select Component\n * \n * Advanced dropdown/select component with variants, sizes and accessibility features.\n * Compatible with dark and light mode, providing a modern user experience with smooth animations.\n */\n\n// Directly re-exporting the Root component\nconst Select = SelectPrimitive.Root\nSelect.displayName = \"Select\"\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\ntype SelectTriggerVariant = \"standard\" | \"outline\" | \"ghost\" | \"underline\";\ntype SelectTriggerSize = \"sm\" | \"md\" | \"lg\";\n\ninterface SelectTriggerProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> {\n  /** Visual variant */\n  variant?: SelectTriggerVariant;\n  /** Size */\n  size?: SelectTriggerSize;\n  /** Error state */\n  error?: boolean | string;\n  /** Success state */\n  success?: boolean;\n  /** Loading state */\n  loading?: boolean;\n  /** Icon displayed on the left */\n  leftIcon?: React.ReactNode;\n  /** Icon displayed on the right (instead of default chevron) */\n  rightIcon?: React.ReactNode;\n}\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  SelectTriggerProps\n>(({ className, children, variant = \"standard\", size = \"md\", error, success, loading, leftIcon, rightIcon, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      /* Base styles */\n      \"flex w-full items-center justify-between gap-1 rounded-md transition-all duration-200\",\n      \"disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n      \"focus-visible:outline-none\",\n      /* Error state */\n      error && \"border-error focus-visible:ring-error/30 focus-visible:border-error\",\n      /* Success state */\n      success && \"border-success focus-visible:ring-success/30 focus-visible:border-success\",\n      /* Size variants */\n      size === \"sm\" && \"h-8 text-xs px-2\",\n      size === \"md\" && \"h-10 text-sm px-3\",\n      size === \"lg\" && \"h-12 text-base px-4\",\n      /* Visual variants */\n      variant === \"standard\" && \"border border-gray-300 dark:border-gray-700 bg-background dark:bg-gray-800/80 dark:shadow-inner dark:shadow-gray-950/10 dark:text-gray-200 hover:border-gray-400 dark:hover:border-gray-600 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20 focus-visible:border-primary dark:focus-visible:border-primary/80\",\n      variant === \"outline\" && \"border border-gray-300 dark:border-gray-700 bg-transparent dark:text-gray-200 hover:border-gray-400 dark:hover:border-gray-600 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20 focus-visible:border-primary dark:focus-visible:border-primary/80\",\n      variant === \"ghost\" && \"border-none bg-gray-100 dark:bg-gray-800 dark:shadow-inner dark:shadow-gray-950/10 dark:text-gray-200 hover:bg-gray-200 dark:hover:bg-gray-700 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20\",\n      variant === \"underline\" && \"border-t-0 border-l-0 border-r-0 border-b border-gray-300 dark:border-gray-600 rounded-none px-0 dark:text-gray-200 dark:bg-transparent hover:border-gray-400 dark:hover:border-gray-500 focus-visible:ring-0 focus-visible:border-b-2 focus-visible:border-primary dark:focus-visible:border-primary/80\",\n      className\n    )}\n    {...props}\n    disabled={props.disabled || loading}\n    data-error={error ? true : undefined}\n    data-success={success ? true : undefined}\n    data-loading={loading ? true : undefined}\n  >\n    <div className=\"flex items-center flex-1 gap-2\">\n      {leftIcon && (\n        <span className=\"flex items-center justify-center text-gray-500 dark:text-gray-400\">\n          {leftIcon}\n        </span>\n      )}\n      {loading ? (\n        <div className=\"flex items-center gap-2\">\n          <Loader2 className=\"h-3.5 w-3.5 animate-spin text-muted-foreground dark:text-gray-400\" />\n          <span className=\"text-muted-foreground dark:text-gray-400\">Loading...</span>\n        </div>\n      ) : children}\n    </div>\n    {!loading && (\n      <SelectPrimitive.Icon asChild>\n        {rightIcon ? (\n          <span className=\"opacity-60\">{rightIcon}</span>\n        ) : (\n          <ChevronDown className=\"h-4 w-4 opacity-60 transition-transform duration-200 ease-out group-data-[state=open]:rotate-180\" />\n        )}\n      </SelectPrimitive.Icon>\n    )}\n  </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\n/**\n * Scroll Up Button Component\n */\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1 text-muted-foreground hover:text-foreground transition-colors\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronUp className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\n/**\n * Scroll Down Button Component\n */\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1 text-muted-foreground hover:text-foreground transition-colors\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronDown className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", side = \"bottom\", sideOffset = 4, align = \"start\", ...props }, ref) => (\n  <SelectPrimitive.Portal>\n    <SelectPrimitive.Content\n      ref={ref}\n      side={side}\n      sideOffset={sideOffset}\n      align={align}\n      avoidCollisions={false}\n      className={cn(\n        [\"relative z-50 max-h-96 min-w-[8rem] overflow-hidden\",\n        \"rounded-md border border-gray-200 dark:border-gray-700\",\n        \"bg-background dark:bg-gray-800/80 backdrop-blur-sm text-foreground dark:text-gray-200\",\n        \"shadow-lg dark:shadow-gray-900/20\",\n        \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n        \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n        \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\", \n        \"data-[state=open]:duration-150\"],\n        position === \"popper\" &&\n          \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n        className\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectScrollUpButton />\n      <SelectPrimitive.Viewport\n        className={cn(\n          \"p-1\",\n          position === \"popper\" &&\n            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n      <SelectScrollDownButton />\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"moonui-theme\", \"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n    {...props}\n  />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\ntype SelectItemVariant = \"default\" | \"subtle\" | \"destructive\" | \"success\" | \"warning\";\ntype SelectItemSize = \"sm\" | \"md\" | \"lg\";\n\ninterface SelectItemProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {\n  /** Visual variant */\n  variant?: SelectItemVariant;\n  /** Size */\n  size?: SelectItemSize;\n  /** Icon displayed on the right */\n  rightIcon?: React.ReactNode;\n  /** Custom indicator icon (instead of default check) */\n  customIndicator?: React.ReactNode;\n}\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  SelectItemProps\n>(({ className, children, variant = \"default\", size = \"md\", rightIcon, customIndicator, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"moonui-theme\",\n      \"relative flex w-full cursor-default select-none items-center rounded-sm outline-none\",\n      \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      \"transition-colors duration-150\",\n\n      /* Size variants */\n      size === \"sm\" && \"py-1 pl-7 pr-2 text-xs\",\n      size === \"md\" && \"py-1.5 pl-8 pr-2 text-sm\",\n      size === \"lg\" && \"py-2 pl-9 pr-3 text-base\",\n      \n      /* Color variants */\n      variant === \"default\" && \"focus:bg-accent focus:text-accent-foreground dark:focus:bg-gray-700 dark:focus:text-gray-100\",\n      variant === \"subtle\" && \"focus:bg-gray-100 dark:focus:bg-gray-800 focus:text-foreground dark:focus:text-gray-200\",\n      variant === \"destructive\" && \"text-error dark:text-red-400 focus:bg-error/10 dark:focus:bg-red-900/20 focus:text-error dark:focus:text-red-300\",\n      variant === \"success\" && \"text-success dark:text-green-400 focus:bg-success/10 dark:focus:bg-green-900/20 focus:text-success dark:focus:text-green-300\",\n      variant === \"warning\" && \"text-warning dark:text-yellow-400 focus:bg-warning/10 dark:focus:bg-yellow-900/20 focus:text-warning dark:focus:text-yellow-300\",\n      \n      className\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        {customIndicator || <Check className=\"h-4 w-4\" />}\n      </SelectPrimitive.ItemIndicator>\n    </span>\n\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    \n    {rightIcon && (\n      <span className=\"ml-auto pl-2 opacity-70\">\n        {rightIcon}\n      </span>\n    )}\n  </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"moonui-theme\", \"-mx-1 my-1 h-px bg-muted dark:bg-gray-700\", className)}\n    {...props}\n  />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Circle } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n/**\n * Radio Group Component\n *\n * Accessible, customizable, and fully integrated with the theme system radio button group.\n * Allows users to select a single option from a group of choices.\n */\n\nconst radioGroupItemVariants = cva(\n  \"aspect-square border focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n  {\n    variants: {\n      variant: {\n        default: \"border-border bg-background text-primary\",\n        outline: \"border-border bg-transparent text-primary\",\n        filled: \"border-primary bg-primary/10 text-primary\",\n      },\n      size: {\n        sm: \"h-3.5 w-3.5\",\n        default: \"h-4 w-4\",\n        md: \"h-5 w-5\",\n        lg: \"h-6 w-6\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n);\n\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Radio group value\n   */\n  value?: string;\n  /**\n   * Function to call when radio group value changes\n   */\n  onValueChange?: (value: string) => void;\n  /**\n   * Radio group disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Radio group name\n   */\n  name?: string;\n}\n\nconst RadioGroupContext = React.createContext<{\n  value?: string;\n  onValueChange?: (value: string) => void;\n  disabled?: boolean;\n  name?: string;\n}>({});\n\nconst RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n  ({ className, value, onValueChange, disabled, name, ...props }, ref) => {\n    return (\n      <RadioGroupContext.Provider value={{ value, onValueChange, disabled, name }}>\n        <div\n          ref={ref}\n          role=\"radiogroup\"\n          className={cn(\"moonui-theme\", \"grid gap-2\", className)}\n          {...props}\n        />\n      </RadioGroupContext.Provider>\n    );\n  }\n);\nRadioGroup.displayName = \"RadioGroup\";\n\nexport interface RadioGroupItemProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n    VariantProps<typeof radioGroupItemVariants> {\n  /**\n   * Custom indicator component\n   */\n  indicator?: React.ReactNode;\n  /**\n   * HTML id for radio button\n   */\n  id?: string;\n  /**\n   * Radio button value\n   */\n  value: string;\n  /**\n   * Radio button disabled state\n   */\n  disabled?: boolean;\n}\n\nconst RadioGroupItem = React.forwardRef<\n  HTMLInputElement,\n  RadioGroupItemProps\n>(({ className, variant, size, indicator, id, value, disabled, ...props }, ref) => {\n  // Get context values from radio group\n  const radioGroup = React.useContext(RadioGroupContext);\n  const generatedId = React.useId();\n  const radioId = id || generatedId;\n  const isChecked = radioGroup.value === value;\n  \n  // Call onValueChange function when RadioGroupItem changes\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    if (radioGroup.onValueChange) {\n      radioGroup.onValueChange(e.target.value);\n    }\n    \n    if (props.onChange) {\n      props.onChange(e);\n    }\n  };\n  \n  return (\n    <div className=\"relative flex items-center\">\n      <input\n        type=\"radio\"\n        id={radioId}\n        ref={ref}\n        value={value}\n        checked={isChecked}\n        disabled={disabled || radioGroup.disabled}\n        name={radioGroup.name}\n        onChange={handleChange}\n        className=\"sr-only\"\n        {...props}\n      />\n      <label\n        htmlFor={radioId}\n        className={cn(\n          radioGroupItemVariants({ variant, size }),\n          \"rounded-full\",\n          \"focus-visible:ring-primary/50\",\n          \"relative inline-flex shrink-0 cursor-pointer items-center justify-center overflow-hidden\",\n          disabled && \"cursor-not-allowed opacity-50\",\n          className\n        )}\n      >\n        <span className={cn(\n          \"absolute inset-0 pointer-events-none\",\n          isChecked && \"flex items-center justify-center\"\n        )}>\n          {isChecked && (indicator || <Circle className=\"h-[60%] w-[60%] fill-current text-current\" />)}\n        </span>\n      </label>\n    </div>\n  );\n});\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\n// Radio Label Component\ninterface RadioLabelProps extends React.HTMLAttributes<HTMLLabelElement> {\n  /**\n   * HTML id for radio button\n   */\n  htmlFor?: string;\n  /**\n   * Label content\n   */\n  children: React.ReactNode;\n  /**\n   * Disabled state style\n   */\n  disabled?: boolean;\n}\n\nconst RadioLabel = React.forwardRef<HTMLLabelElement, RadioLabelProps>(\n  ({ className, htmlFor, children, disabled = false, ...props }, ref) => {\n    return (\n      <label\n        ref={ref}\n        htmlFor={htmlFor}\n        className={cn(\n          \"text-sm font-medium leading-none ml-2 text-foreground\",\n          disabled && \"cursor-not-allowed opacity-70\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </label>\n    );\n  }\n);\nRadioLabel.displayName = \"RadioLabel\";\n\n// Radio Item and Label combination\ninterface RadioItemWithLabelProps extends RadioGroupItemProps {\n  /**\n   * Label content\n   */\n  label: React.ReactNode;\n  /**\n   * HTML classes for label\n   */\n  labelClassName?: string;\n  /**\n   * HTML id for radio button\n   */\n  id?: string;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n}\n\nconst RadioItemWithLabel = React.forwardRef<\n  HTMLInputElement,\n  RadioItemWithLabelProps\n>(({ \n  id, \n  label, \n  labelClassName, \n  ...radioProps \n}, ref) => {\n  const generatedId = React.useId();\n  const radioId = id || generatedId;\n  \n  return (\n    <div className=\"flex items-center\">\n      <RadioGroupItem ref={ref} id={radioId} {...radioProps} />\n      <RadioLabel \n        htmlFor={radioId}\n        disabled={radioProps.disabled}\n        className={labelClassName}\n      >\n        {label}\n      </RadioLabel>\n    </div>\n  );\n});\nRadioItemWithLabel.displayName = \"RadioItemWithLabel\";\n\nexport { RadioGroup, RadioGroupItem, RadioLabel, RadioItemWithLabel };\n","\"use client\"\n\n// Basic Rich Text Editor - Free Version\n\nimport * as React from \"react\"\nimport { cn } from \"../../../lib/utils\"\n\nexport interface RichTextEditorProps {\n  value?: string\n  onChange?: (value: string) => void\n  placeholder?: string\n  className?: string\n  disabled?: boolean\n}\n\nexport function RichTextEditor({\n  value = \"\",\n  onChange,\n  placeholder = \"Start typing...\",\n  className,\n  disabled = false\n}: RichTextEditorProps) {\n  const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    if (!disabled && onChange) {\n      onChange(e.target.value)\n    }\n  }\n\n  return (\n    <div className={cn(\"border border-input rounded-md\", className)}>\n      <div className=\"border-b border-border p-2 bg-muted/50\">\n        <div className=\"flex gap-1\">\n          <button\n            type=\"button\"\n            className=\"px-2 py-1 text-sm rounded hover:bg-background disabled:opacity-50\"\n            disabled={disabled}\n            title=\"Bold (Pro feature)\"\n          >\n            B\n          </button>\n          <button\n            type=\"button\"\n            className=\"px-2 py-1 text-sm rounded hover:bg-background disabled:opacity-50\"\n            disabled={disabled}\n            title=\"Italic (Pro feature)\"\n          >\n            I\n          </button>\n          <button\n            type=\"button\"\n            className=\"px-2 py-1 text-sm rounded hover:bg-background disabled:opacity-50\"\n            disabled={disabled}\n            title=\"Underline (Pro feature)\"\n          >\n            U\n          </button>\n        </div>\n      </div>\n      <textarea\n        value={value}\n        onChange={handleChange}\n        placeholder={placeholder}\n        disabled={disabled}\n        className={cn(\n          \"w-full min-h-[200px] p-3 resize-none border-0 bg-transparent\",\n          \"focus:outline-none focus:ring-0\",\n          \"disabled:cursor-not-allowed disabled:opacity-50\"\n        )}\n      />\n    </div>\n  )\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n  <ScrollAreaPrimitive.Root\n    ref={ref}\n    className={cn(\"relative overflow-hidden\", className)}\n    {...props}\n  >\n    <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n      {children}\n    </ScrollAreaPrimitive.Viewport>\n    <ScrollBar />\n    <ScrollAreaPrimitive.Corner />\n  </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n  <ScrollAreaPrimitive.ScrollAreaScrollbar\n    ref={ref}\n    orientation={orientation}\n    className={cn(\n      \"flex touch-none select-none transition-colors\",\n      orientation === \"vertical\" &&\n        \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n      orientation === \"horizontal\" &&\n        \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n      className\n    )}\n    {...props}\n  >\n    <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n  </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useStateMachine } from './use-state-machine';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\ntype Sizes = {\n  content: number;\n  viewport: number;\n  scrollbar: {\n    size: number;\n    paddingStart: number;\n    paddingEnd: number;\n  };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollArea\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_AREA_NAME = 'ScrollArea';\n\ntype ScopedProps<P> = P & { __scopeScrollArea?: Scope };\nconst [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\n\ntype ScrollAreaContextValue = {\n  type: 'auto' | 'always' | 'scroll' | 'hover';\n  dir: Direction;\n  scrollHideDelay: number;\n  scrollArea: ScrollAreaElement | null;\n  viewport: ScrollAreaViewportElement | null;\n  onViewportChange(viewport: ScrollAreaViewportElement | null): void;\n  content: HTMLDivElement | null;\n  onContentChange(content: HTMLDivElement): void;\n  scrollbarX: ScrollAreaScrollbarElement | null;\n  onScrollbarXChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n  scrollbarXEnabled: boolean;\n  onScrollbarXEnabledChange(rendered: boolean): void;\n  scrollbarY: ScrollAreaScrollbarElement | null;\n  onScrollbarYChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n  scrollbarYEnabled: boolean;\n  onScrollbarYEnabledChange(rendered: boolean): void;\n  onCornerWidthChange(width: number): void;\n  onCornerHeightChange(height: number): void;\n};\n\nconst [ScrollAreaProvider, useScrollAreaContext] =\n  createScrollAreaContext<ScrollAreaContextValue>(SCROLL_AREA_NAME);\n\ntype ScrollAreaElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface ScrollAreaProps extends PrimitiveDivProps {\n  type?: ScrollAreaContextValue['type'];\n  dir?: ScrollAreaContextValue['dir'];\n  scrollHideDelay?: number;\n}\n\nconst ScrollArea = React.forwardRef<ScrollAreaElement, ScrollAreaProps>(\n  (props: ScopedProps<ScrollAreaProps>, forwardedRef) => {\n    const {\n      __scopeScrollArea,\n      type = 'hover',\n      dir,\n      scrollHideDelay = 600,\n      ...scrollAreaProps\n    } = props;\n    const [scrollArea, setScrollArea] = React.useState<ScrollAreaElement | null>(null);\n    const [viewport, setViewport] = React.useState<ScrollAreaViewportElement | null>(null);\n    const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n    const [scrollbarX, setScrollbarX] = React.useState<ScrollAreaScrollbarElement | null>(null);\n    const [scrollbarY, setScrollbarY] = React.useState<ScrollAreaScrollbarElement | null>(null);\n    const [cornerWidth, setCornerWidth] = React.useState(0);\n    const [cornerHeight, setCornerHeight] = React.useState(0);\n    const [scrollbarXEnabled, setScrollbarXEnabled] = React.useState(false);\n    const [scrollbarYEnabled, setScrollbarYEnabled] = React.useState(false);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n    const direction = useDirection(dir);\n\n    return (\n      <ScrollAreaProvider\n        scope={__scopeScrollArea}\n        type={type}\n        dir={direction}\n        scrollHideDelay={scrollHideDelay}\n        scrollArea={scrollArea}\n        viewport={viewport}\n        onViewportChange={setViewport}\n        content={content}\n        onContentChange={setContent}\n        scrollbarX={scrollbarX}\n        onScrollbarXChange={setScrollbarX}\n        scrollbarXEnabled={scrollbarXEnabled}\n        onScrollbarXEnabledChange={setScrollbarXEnabled}\n        scrollbarY={scrollbarY}\n        onScrollbarYChange={setScrollbarY}\n        scrollbarYEnabled={scrollbarYEnabled}\n        onScrollbarYEnabledChange={setScrollbarYEnabled}\n        onCornerWidthChange={setCornerWidth}\n        onCornerHeightChange={setCornerHeight}\n      >\n        <Primitive.div\n          dir={direction}\n          {...scrollAreaProps}\n          ref={composedRefs}\n          style={{\n            position: 'relative',\n            // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n            ['--radix-scroll-area-corner-width' as any]: cornerWidth + 'px',\n            ['--radix-scroll-area-corner-height' as any]: cornerHeight + 'px',\n            ...props.style,\n          }}\n        />\n      </ScrollAreaProvider>\n    );\n  }\n);\n\nScrollArea.displayName = SCROLL_AREA_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaViewport\n * -----------------------------------------------------------------------------------------------*/\n\nconst VIEWPORT_NAME = 'ScrollAreaViewport';\n\ntype ScrollAreaViewportElement = React.ComponentRef<typeof Primitive.div>;\ninterface ScrollAreaViewportProps extends PrimitiveDivProps {\n  nonce?: string;\n}\n\nconst ScrollAreaViewport = React.forwardRef<ScrollAreaViewportElement, ScrollAreaViewportProps>(\n  (props: ScopedProps<ScrollAreaViewportProps>, forwardedRef) => {\n    const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n    const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n    const ref = React.useRef<ScrollAreaViewportElement>(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n    return (\n      <>\n        {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n        <style\n          dangerouslySetInnerHTML={{\n            __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`,\n          }}\n          nonce={nonce}\n        />\n        <Primitive.div\n          data-radix-scroll-area-viewport=\"\"\n          {...viewportProps}\n          ref={composedRefs}\n          style={{\n            /**\n             * We don't support `visible` because the intention is to have at least one scrollbar\n             * if this component is used and `visible` will behave like `auto` in that case\n             * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n             *\n             * We don't handle `auto` because the intention is for the native implementation\n             * to be hidden if using this component. We just want to ensure the node is scrollable\n             * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n             * the browser from having to work out whether to render native scrollbars or not,\n             * we tell it to with the intention of hiding them in CSS.\n             */\n            overflowX: context.scrollbarXEnabled ? 'scroll' : 'hidden',\n            overflowY: context.scrollbarYEnabled ? 'scroll' : 'hidden',\n            ...props.style,\n          }}\n        >\n          {/**\n           * `display: table` ensures our content div will match the size of its children in both\n           * horizontal and vertical axis so we can determine if scroll width/height changed and\n           * recalculate thumb sizes. This doesn't account for children with *percentage*\n           * widths that change. We'll wait to see what use-cases consumers come up with there\n           * before trying to resolve it.\n           */}\n          <div ref={context.onContentChange} style={{ minWidth: '100%', display: 'table' }}>\n            {children}\n          </div>\n        </Primitive.div>\n      </>\n    );\n  }\n);\n\nScrollAreaViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaScrollbar\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLLBAR_NAME = 'ScrollAreaScrollbar';\n\ntype ScrollAreaScrollbarElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarProps extends ScrollAreaScrollbarVisibleProps {\n  forceMount?: true;\n}\n\nconst ScrollAreaScrollbar = React.forwardRef<ScrollAreaScrollbarElement, ScrollAreaScrollbarProps>(\n  (props: ScopedProps<ScrollAreaScrollbarProps>, forwardedRef) => {\n    const { forceMount, ...scrollbarProps } = props;\n    const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n    const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n    const isHorizontal = props.orientation === 'horizontal';\n\n    React.useEffect(() => {\n      isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n      return () => {\n        isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n      };\n    }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n\n    return context.type === 'hover' ? (\n      <ScrollAreaScrollbarHover {...scrollbarProps} ref={forwardedRef} forceMount={forceMount} />\n    ) : context.type === 'scroll' ? (\n      <ScrollAreaScrollbarScroll {...scrollbarProps} ref={forwardedRef} forceMount={forceMount} />\n    ) : context.type === 'auto' ? (\n      <ScrollAreaScrollbarAuto {...scrollbarProps} ref={forwardedRef} forceMount={forceMount} />\n    ) : context.type === 'always' ? (\n      <ScrollAreaScrollbarVisible {...scrollbarProps} ref={forwardedRef} />\n    ) : null;\n  }\n);\n\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarHoverElement = ScrollAreaScrollbarAutoElement;\ninterface ScrollAreaScrollbarHoverProps extends ScrollAreaScrollbarAutoProps {\n  forceMount?: true;\n}\n\nconst ScrollAreaScrollbarHover = React.forwardRef<\n  ScrollAreaScrollbarHoverElement,\n  ScrollAreaScrollbarHoverProps\n>((props: ScopedProps<ScrollAreaScrollbarHoverProps>, forwardedRef) => {\n  const { forceMount, ...scrollbarProps } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const [visible, setVisible] = React.useState(false);\n\n  React.useEffect(() => {\n    const scrollArea = context.scrollArea;\n    let hideTimer = 0;\n    if (scrollArea) {\n      const handlePointerEnter = () => {\n        window.clearTimeout(hideTimer);\n        setVisible(true);\n      };\n      const handlePointerLeave = () => {\n        hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n      };\n      scrollArea.addEventListener('pointerenter', handlePointerEnter);\n      scrollArea.addEventListener('pointerleave', handlePointerLeave);\n      return () => {\n        window.clearTimeout(hideTimer);\n        scrollArea.removeEventListener('pointerenter', handlePointerEnter);\n        scrollArea.removeEventListener('pointerleave', handlePointerLeave);\n      };\n    }\n  }, [context.scrollArea, context.scrollHideDelay]);\n\n  return (\n    <Presence present={forceMount || visible}>\n      <ScrollAreaScrollbarAuto\n        data-state={visible ? 'visible' : 'hidden'}\n        {...scrollbarProps}\n        ref={forwardedRef}\n      />\n    </Presence>\n  );\n});\n\ntype ScrollAreaScrollbarScrollElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarScrollProps extends ScrollAreaScrollbarVisibleProps {\n  forceMount?: true;\n}\n\nconst ScrollAreaScrollbarScroll = React.forwardRef<\n  ScrollAreaScrollbarScrollElement,\n  ScrollAreaScrollbarScrollProps\n>((props: ScopedProps<ScrollAreaScrollbarScrollProps>, forwardedRef) => {\n  const { forceMount, ...scrollbarProps } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const isHorizontal = props.orientation === 'horizontal';\n  const debounceScrollEnd = useDebounceCallback(() => send('SCROLL_END'), 100);\n  const [state, send] = useStateMachine('hidden', {\n    hidden: {\n      SCROLL: 'scrolling',\n    },\n    scrolling: {\n      SCROLL_END: 'idle',\n      POINTER_ENTER: 'interacting',\n    },\n    interacting: {\n      SCROLL: 'interacting',\n      POINTER_LEAVE: 'idle',\n    },\n    idle: {\n      HIDE: 'hidden',\n      SCROLL: 'scrolling',\n      POINTER_ENTER: 'interacting',\n    },\n  });\n\n  React.useEffect(() => {\n    if (state === 'idle') {\n      const hideTimer = window.setTimeout(() => send('HIDE'), context.scrollHideDelay);\n      return () => window.clearTimeout(hideTimer);\n    }\n  }, [state, context.scrollHideDelay, send]);\n\n  React.useEffect(() => {\n    const viewport = context.viewport;\n    const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n\n    if (viewport) {\n      let prevScrollPos = viewport[scrollDirection];\n      const handleScroll = () => {\n        const scrollPos = viewport[scrollDirection];\n        const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n        if (hasScrollInDirectionChanged) {\n          send('SCROLL');\n          debounceScrollEnd();\n        }\n        prevScrollPos = scrollPos;\n      };\n      viewport.addEventListener('scroll', handleScroll);\n      return () => viewport.removeEventListener('scroll', handleScroll);\n    }\n  }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n\n  return (\n    <Presence present={forceMount || state !== 'hidden'}>\n      <ScrollAreaScrollbarVisible\n        data-state={state === 'hidden' ? 'hidden' : 'visible'}\n        {...scrollbarProps}\n        ref={forwardedRef}\n        onPointerEnter={composeEventHandlers(props.onPointerEnter, () => send('POINTER_ENTER'))}\n        onPointerLeave={composeEventHandlers(props.onPointerLeave, () => send('POINTER_LEAVE'))}\n      />\n    </Presence>\n  );\n});\n\ntype ScrollAreaScrollbarAutoElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarAutoProps extends ScrollAreaScrollbarVisibleProps {\n  forceMount?: true;\n}\n\nconst ScrollAreaScrollbarAuto = React.forwardRef<\n  ScrollAreaScrollbarAutoElement,\n  ScrollAreaScrollbarAutoProps\n>((props: ScopedProps<ScrollAreaScrollbarAutoProps>, forwardedRef) => {\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const { forceMount, ...scrollbarProps } = props;\n  const [visible, setVisible] = React.useState(false);\n  const isHorizontal = props.orientation === 'horizontal';\n  const handleResize = useDebounceCallback(() => {\n    if (context.viewport) {\n      const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n      const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n      setVisible(isHorizontal ? isOverflowX : isOverflowY);\n    }\n  }, 10);\n\n  useResizeObserver(context.viewport, handleResize);\n  useResizeObserver(context.content, handleResize);\n\n  return (\n    <Presence present={forceMount || visible}>\n      <ScrollAreaScrollbarVisible\n        data-state={visible ? 'visible' : 'hidden'}\n        {...scrollbarProps}\n        ref={forwardedRef}\n      />\n    </Presence>\n  );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarVisibleElement = ScrollAreaScrollbarAxisElement;\ninterface ScrollAreaScrollbarVisibleProps\n  extends Omit<ScrollAreaScrollbarAxisProps, keyof ScrollAreaScrollbarAxisPrivateProps> {\n  orientation?: 'horizontal' | 'vertical';\n}\n\nconst ScrollAreaScrollbarVisible = React.forwardRef<\n  ScrollAreaScrollbarVisibleElement,\n  ScrollAreaScrollbarVisibleProps\n>((props: ScopedProps<ScrollAreaScrollbarVisibleProps>, forwardedRef) => {\n  const { orientation = 'vertical', ...scrollbarProps } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const thumbRef = React.useRef<ScrollAreaThumbElement | null>(null);\n  const pointerOffsetRef = React.useRef(0);\n  const [sizes, setSizes] = React.useState<Sizes>({\n    content: 0,\n    viewport: 0,\n    scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 },\n  });\n  const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n\n  type UncommonProps = 'onThumbPositionChange' | 'onDragScroll' | 'onWheelScroll';\n  const commonProps: Omit<ScrollAreaScrollbarAxisPrivateProps, UncommonProps> = {\n    ...scrollbarProps,\n    sizes,\n    onSizesChange: setSizes,\n    hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n    onThumbChange: (thumb) => (thumbRef.current = thumb),\n    onThumbPointerUp: () => (pointerOffsetRef.current = 0),\n    onThumbPointerDown: (pointerPos) => (pointerOffsetRef.current = pointerPos),\n  };\n\n  function getScrollPosition(pointerPos: number, dir?: Direction) {\n    return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n  }\n\n  if (orientation === 'horizontal') {\n    return (\n      <ScrollAreaScrollbarX\n        {...commonProps}\n        ref={forwardedRef}\n        onThumbPositionChange={() => {\n          if (context.viewport && thumbRef.current) {\n            const scrollPos = context.viewport.scrollLeft;\n            const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n            thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n          }\n        }}\n        onWheelScroll={(scrollPos) => {\n          if (context.viewport) context.viewport.scrollLeft = scrollPos;\n        }}\n        onDragScroll={(pointerPos) => {\n          if (context.viewport) {\n            context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n          }\n        }}\n      />\n    );\n  }\n\n  if (orientation === 'vertical') {\n    return (\n      <ScrollAreaScrollbarY\n        {...commonProps}\n        ref={forwardedRef}\n        onThumbPositionChange={() => {\n          if (context.viewport && thumbRef.current) {\n            const scrollPos = context.viewport.scrollTop;\n            const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n            thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n          }\n        }}\n        onWheelScroll={(scrollPos) => {\n          if (context.viewport) context.viewport.scrollTop = scrollPos;\n        }}\n        onDragScroll={(pointerPos) => {\n          if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n        }}\n      />\n    );\n  }\n\n  return null;\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarAxisPrivateProps = {\n  hasThumb: boolean;\n  sizes: Sizes;\n  onSizesChange(sizes: Sizes): void;\n  onThumbChange(thumb: ScrollAreaThumbElement | null): void;\n  onThumbPointerDown(pointerPos: number): void;\n  onThumbPointerUp(): void;\n  onThumbPositionChange(): void;\n  onWheelScroll(scrollPos: number): void;\n  onDragScroll(pointerPos: number): void;\n};\n\ntype ScrollAreaScrollbarAxisElement = ScrollAreaScrollbarImplElement;\ninterface ScrollAreaScrollbarAxisProps\n  extends Omit<ScrollAreaScrollbarImplProps, keyof ScrollAreaScrollbarImplPrivateProps>,\n    ScrollAreaScrollbarAxisPrivateProps {}\n\nconst ScrollAreaScrollbarX = React.forwardRef<\n  ScrollAreaScrollbarAxisElement,\n  ScrollAreaScrollbarAxisProps\n>((props: ScopedProps<ScrollAreaScrollbarAxisProps>, forwardedRef) => {\n  const { sizes, onSizesChange, ...scrollbarProps } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const [computedStyle, setComputedStyle] = React.useState<CSSStyleDeclaration>();\n  const ref = React.useRef<ScrollAreaScrollbarAxisElement>(null);\n  const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n\n  React.useEffect(() => {\n    if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n  }, [ref]);\n\n  return (\n    <ScrollAreaScrollbarImpl\n      data-orientation=\"horizontal\"\n      {...scrollbarProps}\n      ref={composeRefs}\n      sizes={sizes}\n      style={{\n        bottom: 0,\n        left: context.dir === 'rtl' ? 'var(--radix-scroll-area-corner-width)' : 0,\n        right: context.dir === 'ltr' ? 'var(--radix-scroll-area-corner-width)' : 0,\n        ['--radix-scroll-area-thumb-width' as any]: getThumbSize(sizes) + 'px',\n        ...props.style,\n      }}\n      onThumbPointerDown={(pointerPos) => props.onThumbPointerDown(pointerPos.x)}\n      onDragScroll={(pointerPos) => props.onDragScroll(pointerPos.x)}\n      onWheelScroll={(event, maxScrollPos) => {\n        if (context.viewport) {\n          const scrollPos = context.viewport.scrollLeft + event.deltaX;\n          props.onWheelScroll(scrollPos);\n          // prevent window scroll when wheeling on scrollbar\n          if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n            event.preventDefault();\n          }\n        }\n      }}\n      onResize={() => {\n        if (ref.current && context.viewport && computedStyle) {\n          onSizesChange({\n            content: context.viewport.scrollWidth,\n            viewport: context.viewport.offsetWidth,\n            scrollbar: {\n              size: ref.current.clientWidth,\n              paddingStart: toInt(computedStyle.paddingLeft),\n              paddingEnd: toInt(computedStyle.paddingRight),\n            },\n          });\n        }\n      }}\n    />\n  );\n});\n\nconst ScrollAreaScrollbarY = React.forwardRef<\n  ScrollAreaScrollbarAxisElement,\n  ScrollAreaScrollbarAxisProps\n>((props: ScopedProps<ScrollAreaScrollbarAxisProps>, forwardedRef) => {\n  const { sizes, onSizesChange, ...scrollbarProps } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n  const [computedStyle, setComputedStyle] = React.useState<CSSStyleDeclaration>();\n  const ref = React.useRef<ScrollAreaScrollbarAxisElement>(null);\n  const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n\n  React.useEffect(() => {\n    if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n  }, [ref]);\n\n  return (\n    <ScrollAreaScrollbarImpl\n      data-orientation=\"vertical\"\n      {...scrollbarProps}\n      ref={composeRefs}\n      sizes={sizes}\n      style={{\n        top: 0,\n        right: context.dir === 'ltr' ? 0 : undefined,\n        left: context.dir === 'rtl' ? 0 : undefined,\n        bottom: 'var(--radix-scroll-area-corner-height)',\n        ['--radix-scroll-area-thumb-height' as any]: getThumbSize(sizes) + 'px',\n        ...props.style,\n      }}\n      onThumbPointerDown={(pointerPos) => props.onThumbPointerDown(pointerPos.y)}\n      onDragScroll={(pointerPos) => props.onDragScroll(pointerPos.y)}\n      onWheelScroll={(event, maxScrollPos) => {\n        if (context.viewport) {\n          const scrollPos = context.viewport.scrollTop + event.deltaY;\n          props.onWheelScroll(scrollPos);\n          // prevent window scroll when wheeling on scrollbar\n          if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n            event.preventDefault();\n          }\n        }\n      }}\n      onResize={() => {\n        if (ref.current && context.viewport && computedStyle) {\n          onSizesChange({\n            content: context.viewport.scrollHeight,\n            viewport: context.viewport.offsetHeight,\n            scrollbar: {\n              size: ref.current.clientHeight,\n              paddingStart: toInt(computedStyle.paddingTop),\n              paddingEnd: toInt(computedStyle.paddingBottom),\n            },\n          });\n        }\n      }}\n    />\n  );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollbarContext = {\n  hasThumb: boolean;\n  scrollbar: ScrollAreaScrollbarElement | null;\n  onThumbChange(thumb: ScrollAreaThumbElement | null): void;\n  onThumbPointerUp(): void;\n  onThumbPointerDown(pointerPos: { x: number; y: number }): void;\n  onThumbPositionChange(): void;\n};\n\nconst [ScrollbarProvider, useScrollbarContext] =\n  createScrollAreaContext<ScrollbarContext>(SCROLLBAR_NAME);\n\ntype ScrollAreaScrollbarImplElement = React.ComponentRef<typeof Primitive.div>;\ntype ScrollAreaScrollbarImplPrivateProps = {\n  sizes: Sizes;\n  hasThumb: boolean;\n  onThumbChange: ScrollbarContext['onThumbChange'];\n  onThumbPointerUp: ScrollbarContext['onThumbPointerUp'];\n  onThumbPointerDown: ScrollbarContext['onThumbPointerDown'];\n  onThumbPositionChange: ScrollbarContext['onThumbPositionChange'];\n  onWheelScroll(event: WheelEvent, maxScrollPos: number): void;\n  onDragScroll(pointerPos: { x: number; y: number }): void;\n  onResize(): void;\n};\ninterface ScrollAreaScrollbarImplProps\n  extends Omit<PrimitiveDivProps, keyof ScrollAreaScrollbarImplPrivateProps>,\n    ScrollAreaScrollbarImplPrivateProps {}\n\nconst ScrollAreaScrollbarImpl = React.forwardRef<\n  ScrollAreaScrollbarImplElement,\n  ScrollAreaScrollbarImplProps\n>((props: ScopedProps<ScrollAreaScrollbarImplProps>, forwardedRef) => {\n  const {\n    __scopeScrollArea,\n    sizes,\n    hasThumb,\n    onThumbChange,\n    onThumbPointerUp,\n    onThumbPointerDown,\n    onThumbPositionChange,\n    onDragScroll,\n    onWheelScroll,\n    onResize,\n    ...scrollbarProps\n  } = props;\n  const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n  const [scrollbar, setScrollbar] = React.useState<ScrollAreaScrollbarElement | null>(null);\n  const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n  const rectRef = React.useRef<DOMRect | null>(null);\n  const prevWebkitUserSelectRef = React.useRef<string>('');\n  const viewport = context.viewport;\n  const maxScrollPos = sizes.content - sizes.viewport;\n  const handleWheelScroll = useCallbackRef(onWheelScroll);\n  const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n  const handleResize = useDebounceCallback(onResize, 10);\n\n  function handleDragScroll(event: React.PointerEvent<HTMLElement>) {\n    if (rectRef.current) {\n      const x = event.clientX - rectRef.current.left;\n      const y = event.clientY - rectRef.current.top;\n      onDragScroll({ x, y });\n    }\n  }\n\n  /**\n   * We bind wheel event imperatively so we can switch off passive\n   * mode for document wheel event to allow it to be prevented\n   */\n  React.useEffect(() => {\n    const handleWheel = (event: WheelEvent) => {\n      const element = event.target as HTMLElement;\n      const isScrollbarWheel = scrollbar?.contains(element);\n      if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n    };\n    document.addEventListener('wheel', handleWheel, { passive: false });\n    return () => document.removeEventListener('wheel', handleWheel, { passive: false } as any);\n  }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n\n  /**\n   * Update thumb position on sizes change\n   */\n  React.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n\n  useResizeObserver(scrollbar, handleResize);\n  useResizeObserver(context.content, handleResize);\n\n  return (\n    <ScrollbarProvider\n      scope={__scopeScrollArea}\n      scrollbar={scrollbar}\n      hasThumb={hasThumb}\n      onThumbChange={useCallbackRef(onThumbChange)}\n      onThumbPointerUp={useCallbackRef(onThumbPointerUp)}\n      onThumbPositionChange={handleThumbPositionChange}\n      onThumbPointerDown={useCallbackRef(onThumbPointerDown)}\n    >\n      <Primitive.div\n        {...scrollbarProps}\n        ref={composeRefs}\n        style={{ position: 'absolute', ...scrollbarProps.style }}\n        onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n          const mainPointer = 0;\n          if (event.button === mainPointer) {\n            const element = event.target as HTMLElement;\n            element.setPointerCapture(event.pointerId);\n            rectRef.current = scrollbar!.getBoundingClientRect();\n            // pointer capture doesn't prevent text selection in Safari\n            // so we remove text selection manually when scrolling\n            prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n            document.body.style.webkitUserSelect = 'none';\n            if (context.viewport) context.viewport.style.scrollBehavior = 'auto';\n            handleDragScroll(event);\n          }\n        })}\n        onPointerMove={composeEventHandlers(props.onPointerMove, handleDragScroll)}\n        onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n          const element = event.target as HTMLElement;\n          if (element.hasPointerCapture(event.pointerId)) {\n            element.releasePointerCapture(event.pointerId);\n          }\n          document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n          if (context.viewport) context.viewport.style.scrollBehavior = '';\n          rectRef.current = null;\n        })}\n      />\n    </ScrollbarProvider>\n  );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'ScrollAreaThumb';\n\ntype ScrollAreaThumbElement = ScrollAreaThumbImplElement;\ninterface ScrollAreaThumbProps extends ScrollAreaThumbImplProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: true;\n}\n\nconst ScrollAreaThumb = React.forwardRef<ScrollAreaThumbElement, ScrollAreaThumbProps>(\n  (props: ScopedProps<ScrollAreaThumbProps>, forwardedRef) => {\n    const { forceMount, ...thumbProps } = props;\n    const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n    return (\n      <Presence present={forceMount || scrollbarContext.hasThumb}>\n        <ScrollAreaThumbImpl ref={forwardedRef} {...thumbProps} />\n      </Presence>\n    );\n  }\n);\n\ntype ScrollAreaThumbImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface ScrollAreaThumbImplProps extends PrimitiveDivProps {}\n\nconst ScrollAreaThumbImpl = React.forwardRef<ScrollAreaThumbImplElement, ScrollAreaThumbImplProps>(\n  (props: ScopedProps<ScrollAreaThumbImplProps>, forwardedRef) => {\n    const { __scopeScrollArea, style, ...thumbProps } = props;\n    const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n    const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n    const { onThumbPositionChange } = scrollbarContext;\n    const composedRef = useComposedRefs(forwardedRef, (node) =>\n      scrollbarContext.onThumbChange(node)\n    );\n    const removeUnlinkedScrollListenerRef = React.useRef<() => void>(undefined);\n    const debounceScrollEnd = useDebounceCallback(() => {\n      if (removeUnlinkedScrollListenerRef.current) {\n        removeUnlinkedScrollListenerRef.current();\n        removeUnlinkedScrollListenerRef.current = undefined;\n      }\n    }, 100);\n\n    React.useEffect(() => {\n      const viewport = scrollAreaContext.viewport;\n      if (viewport) {\n        /**\n         * We only bind to native scroll event so we know when scroll starts and ends.\n         * When scroll starts we start a requestAnimationFrame loop that checks for\n         * changes to scroll position. That rAF loop triggers our thumb position change\n         * when relevant to avoid scroll-linked effects. We cancel the loop when scroll ends.\n         * https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\n         */\n        const handleScroll = () => {\n          debounceScrollEnd();\n          if (!removeUnlinkedScrollListenerRef.current) {\n            const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n            removeUnlinkedScrollListenerRef.current = listener;\n            onThumbPositionChange();\n          }\n        };\n        onThumbPositionChange();\n        viewport.addEventListener('scroll', handleScroll);\n        return () => viewport.removeEventListener('scroll', handleScroll);\n      }\n    }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n\n    return (\n      <Primitive.div\n        data-state={scrollbarContext.hasThumb ? 'visible' : 'hidden'}\n        {...thumbProps}\n        ref={composedRef}\n        style={{\n          width: 'var(--radix-scroll-area-thumb-width)',\n          height: 'var(--radix-scroll-area-thumb-height)',\n          ...style,\n        }}\n        onPointerDownCapture={composeEventHandlers(props.onPointerDownCapture, (event) => {\n          const thumb = event.target as HTMLElement;\n          const thumbRect = thumb.getBoundingClientRect();\n          const x = event.clientX - thumbRect.left;\n          const y = event.clientY - thumbRect.top;\n          scrollbarContext.onThumbPointerDown({ x, y });\n        })}\n        onPointerUp={composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)}\n      />\n    );\n  }\n);\n\nScrollAreaThumb.displayName = THUMB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaCorner\n * -----------------------------------------------------------------------------------------------*/\n\nconst CORNER_NAME = 'ScrollAreaCorner';\n\ntype ScrollAreaCornerElement = ScrollAreaCornerImplElement;\ninterface ScrollAreaCornerProps extends ScrollAreaCornerImplProps {}\n\nconst ScrollAreaCorner = React.forwardRef<ScrollAreaCornerElement, ScrollAreaCornerProps>(\n  (props: ScopedProps<ScrollAreaCornerProps>, forwardedRef) => {\n    const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n    const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n    const hasCorner = context.type !== 'scroll' && hasBothScrollbarsVisible;\n    return hasCorner ? <ScrollAreaCornerImpl {...props} ref={forwardedRef} /> : null;\n  }\n);\n\nScrollAreaCorner.displayName = CORNER_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaCornerImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface ScrollAreaCornerImplProps extends PrimitiveDivProps {}\n\nconst ScrollAreaCornerImpl = React.forwardRef<\n  ScrollAreaCornerImplElement,\n  ScrollAreaCornerImplProps\n>((props: ScopedProps<ScrollAreaCornerImplProps>, forwardedRef) => {\n  const { __scopeScrollArea, ...cornerProps } = props;\n  const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n  const [width, setWidth] = React.useState(0);\n  const [height, setHeight] = React.useState(0);\n  const hasSize = Boolean(width && height);\n\n  useResizeObserver(context.scrollbarX, () => {\n    const height = context.scrollbarX?.offsetHeight || 0;\n    context.onCornerHeightChange(height);\n    setHeight(height);\n  });\n\n  useResizeObserver(context.scrollbarY, () => {\n    const width = context.scrollbarY?.offsetWidth || 0;\n    context.onCornerWidthChange(width);\n    setWidth(width);\n  });\n\n  return hasSize ? (\n    <Primitive.div\n      {...cornerProps}\n      ref={forwardedRef}\n      style={{\n        width,\n        height,\n        position: 'absolute',\n        right: context.dir === 'ltr' ? 0 : undefined,\n        left: context.dir === 'rtl' ? 0 : undefined,\n        bottom: 0,\n        ...props.style,\n      }}\n    />\n  ) : null;\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction toInt(value?: string) {\n  return value ? parseInt(value, 10) : 0;\n}\n\nfunction getThumbRatio(viewportSize: number, contentSize: number) {\n  const ratio = viewportSize / contentSize;\n  return isNaN(ratio) ? 0 : ratio;\n}\n\nfunction getThumbSize(sizes: Sizes) {\n  const ratio = getThumbRatio(sizes.viewport, sizes.content);\n  const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n  const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n  // minimum of 18 matches macOS minimum\n  return Math.max(thumbSize, 18);\n}\n\nfunction getScrollPositionFromPointer(\n  pointerPos: number,\n  pointerOffset: number,\n  sizes: Sizes,\n  dir: Direction = 'ltr'\n) {\n  const thumbSizePx = getThumbSize(sizes);\n  const thumbCenter = thumbSizePx / 2;\n  const offset = pointerOffset || thumbCenter;\n  const thumbOffsetFromEnd = thumbSizePx - offset;\n  const minPointerPos = sizes.scrollbar.paddingStart + offset;\n  const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n  const maxScrollPos = sizes.content - sizes.viewport;\n  const scrollRange = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n  const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange as [number, number]);\n  return interpolate(pointerPos);\n}\n\nfunction getThumbOffsetFromScroll(scrollPos: number, sizes: Sizes, dir: Direction = 'ltr') {\n  const thumbSizePx = getThumbSize(sizes);\n  const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n  const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n  const maxScrollPos = sizes.content - sizes.viewport;\n  const maxThumbPos = scrollbar - thumbSizePx;\n  const scrollClampRange = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n  const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange as [number, number]);\n  const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n  return interpolate(scrollWithoutMomentum);\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n  return (value: number) => {\n    if (input[0] === input[1] || output[0] === output[1]) return output[0];\n    const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n    return output[0] + ratio * (value - input[0]);\n  };\n}\n\nfunction isScrollingWithinScrollbarBounds(scrollPos: number, maxScrollPos: number) {\n  return scrollPos > 0 && scrollPos < maxScrollPos;\n}\n\n// Custom scroll handler to avoid scroll-linked effects\n// https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\nconst addUnlinkedScrollListener = (node: HTMLElement, handler = () => {}) => {\n  let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n  let rAF = 0;\n  (function loop() {\n    const position = { left: node.scrollLeft, top: node.scrollTop };\n    const isHorizontalScroll = prevPosition.left !== position.left;\n    const isVerticalScroll = prevPosition.top !== position.top;\n    if (isHorizontalScroll || isVerticalScroll) handler();\n    prevPosition = position;\n    rAF = window.requestAnimationFrame(loop);\n  })();\n  return () => window.cancelAnimationFrame(rAF);\n};\n\nfunction useDebounceCallback(callback: () => void, delay: number) {\n  const handleCallback = useCallbackRef(callback);\n  const debounceTimerRef = React.useRef(0);\n  React.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n  return React.useCallback(() => {\n    window.clearTimeout(debounceTimerRef.current);\n    debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n  }, [handleCallback, delay]);\n}\n\nfunction useResizeObserver(element: HTMLElement | null, onResize: () => void) {\n  const handleResize = useCallbackRef(onResize);\n  useLayoutEffect(() => {\n    let rAF = 0;\n    if (element) {\n      /**\n       * Resize Observer will throw an often benign error that says `ResizeObserver loop\n       * completed with undelivered notifications`. This means that ResizeObserver was not\n       * able to deliver all observations within a single animation frame, so we use\n       * `requestAnimationFrame` to ensure we don't deliver unnecessary observations.\n       * Further reading: https://github.com/WICG/resize-observer/issues/38\n       */\n      const resizeObserver = new ResizeObserver(() => {\n        cancelAnimationFrame(rAF);\n        rAF = window.requestAnimationFrame(handleResize);\n      });\n      resizeObserver.observe(element);\n      return () => {\n        window.cancelAnimationFrame(rAF);\n        resizeObserver.unobserve(element);\n      };\n    }\n  }, [element, handleResize]);\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = ScrollArea;\nconst Viewport = ScrollAreaViewport;\nconst Scrollbar = ScrollAreaScrollbar;\nconst Thumb = ScrollAreaThumb;\nconst Corner = ScrollAreaCorner;\n\nexport {\n  createScrollAreaScope,\n  //\n  ScrollArea,\n  ScrollAreaViewport,\n  ScrollAreaScrollbar,\n  ScrollAreaThumb,\n  ScrollAreaCorner,\n  //\n  Root,\n  Viewport,\n  Scrollbar,\n  Thumb,\n  Corner,\n};\nexport type {\n  ScrollAreaProps,\n  ScrollAreaViewportProps,\n  ScrollAreaScrollbarProps,\n  ScrollAreaThumbProps,\n  ScrollAreaCornerProps,\n};\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n  children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n  present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n\n  const child = (\n    typeof children === 'function'\n      ? children({ present: presence.isPresent })\n      : React.Children.only(children)\n  ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === 'function';\n  return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n  const [node, setNode] = React.useState<HTMLElement>();\n  const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n  const prevPresentRef = React.useRef(present);\n  const prevAnimationNameRef = React.useRef<string>('none');\n  const initialState = present ? 'mounted' : 'unmounted';\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: 'unmounted',\n      ANIMATION_OUT: 'unmountSuspended',\n    },\n    unmountSuspended: {\n      MOUNT: 'mounted',\n      ANIMATION_END: 'unmounted',\n    },\n    unmounted: {\n      MOUNT: 'mounted',\n    },\n  });\n\n  React.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n  }, [state]);\n\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n\n      if (present) {\n        send('MOUNT');\n      } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n        // If there is no exit animation or the element is hidden, animations won't run\n        // so we unmount instantly\n        send('UNMOUNT');\n      } else {\n        /**\n         * When `present` changes to `false`, we check changes to animation-name to\n         * determine whether an animation has started. We chose this approach (reading\n         * computed styles) because there is no `animationrun` event and `animationstart`\n         * fires after `animation-delay` has expired which would be too late.\n         */\n        const isAnimating = prevAnimationName !== currentAnimationName;\n\n        if (wasPresent && isAnimating) {\n          send('ANIMATION_OUT');\n        } else {\n          send('UNMOUNT');\n        }\n      }\n\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId: number;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      /**\n       * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n       * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n       * make sure we only trigger ANIMATION_END for the currently active animation.\n       */\n      const handleAnimationEnd = (event: AnimationEvent) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        // The event.animationName is unescaped for CSS syntax,\n        // so we need to escape it to compare with the animationName computed from the style.\n        const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n        if (event.target === node && isCurrentAnimation) {\n          // With React 18 concurrency this update is applied a frame after the\n          // animation ends, creating a flash of visible content. By setting the\n          // animation fill mode to \"forwards\", we force the node to keep the\n          // styles of the last keyframe, removing the flash.\n          //\n          // Previously we flushed the update via ReactDom.flushSync, but with\n          // exit animations this resulted in the node being removed from the\n          // DOM before the synthetic animationEnd event was dispatched, meaning\n          // user-provided event handlers would not be called.\n          // https://github.com/radix-ui/primitives/pull/1849\n          send('ANIMATION_END');\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = 'forwards';\n            // Reset the style after the node had time to unmount (for cases\n            // where the component chooses not to unmount). Doing this any\n            // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n            // still causes a flash.\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === 'forwards') {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event: AnimationEvent) => {\n        if (event.target === node) {\n          // if animation occurred, store its name as the previous animation.\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener('animationstart', handleAnimationStart);\n      node.addEventListener('animationcancel', handleAnimationEnd);\n      node.addEventListener('animationend', handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener('animationstart', handleAnimationStart);\n        node.removeEventListener('animationcancel', handleAnimationEnd);\n        node.removeEventListener('animationend', handleAnimationEnd);\n      };\n    } else {\n      // Transition to the unmounted state if the node is removed prematurely.\n      // We avoid doing so during cleanup as the node may change but still exist.\n      send('ANIMATION_END');\n    }\n  }, [node, send]);\n\n  return {\n    isPresent: ['mounted', 'unmountSuspended'].includes(state),\n    ref: React.useCallback((node: HTMLElement) => {\n      stylesRef.current = node ? getComputedStyle(node) : null;\n      setNode(node);\n    }, []),\n  };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n  return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n  // React <=18 in DEV\n  let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n  let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return (element as any).ref;\n  }\n\n  // React 19 in DEV\n  getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n  mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n\n  // Not DEV\n  return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n  Presence,\n  //\n  Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n  ? R\n  : never;\n\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>\n) {\n  return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n    const nextState = (machine[state] as any)[event];\n    return nextState ?? state;\n  }, initialState);\n}\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n  rootComponentName: string,\n  defaultContext?: ContextValueType\n) {\n  const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n  const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n    const { children, ...context } = props;\n    // Only re-memoize when prop values change\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n    return <Context.Provider value={value}>{children}</Context.Provider>;\n  };\n\n  Provider.displayName = rootComponentName + 'Provider';\n\n  function useContext(consumerName: string) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== undefined) return defaultContext;\n    // if a defaultContext wasn't specified, it's a required context.\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n\n  return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n  scopeName: string;\n  (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n  let defaultContexts: any[] = [];\n\n  /* -----------------------------------------------------------------------------------------------\n   * createContext\n   * ---------------------------------------------------------------------------------------------*/\n\n  function createContext<ContextValueType extends object | null>(\n    rootComponentName: string,\n    defaultContext?: ContextValueType\n  ) {\n    const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n\n    const Provider: React.FC<\n      ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n    > = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      // Only re-memoize when prop values change\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n      return <Context.Provider value={value}>{children}</Context.Provider>;\n    };\n\n    Provider.displayName = rootComponentName + 'Provider';\n\n    function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== undefined) return defaultContext;\n      // if a defaultContext wasn't specified, it's a required context.\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n\n    return [Provider, useContext] as const;\n  }\n\n  /* -----------------------------------------------------------------------------------------------\n   * createScope\n   * ---------------------------------------------------------------------------------------------*/\n\n  const createScope: CreateScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope: Scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n\n  createScope.scopeName = scopeName;\n  return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n\n  const createScope: CreateScope = () => {\n    const scopeHooks = scopes.map((createScope) => ({\n      useScope: createScope(),\n      scopeName: createScope.scopeName,\n    }));\n\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n        // We are calling a hook inside a callback which React warns against to avoid inconsistent\n        // renders, however, scoping doesn't have render side effects so we ignore the rule.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes, ...currentScope };\n      }, {});\n\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n  const callbackRef = React.useRef(callback);\n\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n\n  // https://github.com/facebook/react/issues/19240\n  return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\n\ntype Direction = 'ltr' | 'rtl';\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\n/* -------------------------------------------------------------------------------------------------\n * Direction\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DirectionProviderProps {\n  children?: React.ReactNode;\n  dir: Direction;\n}\nconst DirectionProvider: React.FC<DirectionProviderProps> = (props) => {\n  const { dir, children } = props;\n  return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction useDirection(localDir?: Direction) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || 'ltr';\n}\n\nconst Provider = DirectionProvider;\n\nexport {\n  useDirection,\n  //\n  Provider,\n  //\n  DirectionProvider,\n};\n","function clamp(value: number, [min, max]: [number, number]): number {\n  return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n  originalEventHandler?: (event: E) => void,\n  ourEventHandler?: (event: E) => void,\n  { checkForDefaultPrevented = true } = {}\n) {\n  return function handleEvent(event: E) {\n    originalEventHandler?.(event);\n\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access window outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n  if (!canUseDOM) {\n    throw new Error('Cannot access document outside of the DOM');\n  }\n  // eslint-disable-next-line no-restricted-globals\n  return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n  node: Node | null | undefined,\n  activeDescendant = false\n): HTMLElement | null {\n  const { activeElement } = getOwnerDocument(node);\n  if (!activeElement?.nodeName) {\n    // `activeElement` might be an empty object if we're interacting with elements\n    // inside of an iframe.\n    return null;\n  }\n\n  if (isFrame(activeElement) && activeElement.contentDocument) {\n    return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n  }\n\n  if (activeDescendant) {\n    const id = activeElement.getAttribute('aria-activedescendant');\n    if (id) {\n      const element = getOwnerDocument(activeElement).getElementById(id);\n      if (element) {\n        return element;\n      }\n    }\n  }\n\n  return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n  return element.tagName === 'IFRAME';\n}\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n  ? R\n  : never;\n\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>\n) {\n  return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n    const nextState = (machine[state] as any)[event];\n    return nextState ?? state;\n  }, initialState);\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { motion, Variants, Transition, UseInViewOptions } from \"framer-motion\"\nimport { cn } from \"../../lib/utils\"\n\n/**\n * ScrollReveal Component\n *\n * Reveals content with smooth animations when scrolling into view\n * Built with Framer Motion for performance and flexibility\n *\n * @example\n * ```tsx\n * <ScrollReveal direction=\"up\" delay={0.2}>\n *   <Card>Your content</Card>\n * </ScrollReveal>\n * ```\n */\n\ninterface ScrollRevealProps {\n  /** Content to reveal */\n  children: React.ReactNode\n  /** Animation direction */\n  direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"fade\" | \"scale\" | \"blur\"\n  /** Animation delay in seconds */\n  delay?: number\n  /** Animation duration in seconds */\n  duration?: number\n  /** Distance to animate from (pixels) */\n  distance?: number\n  /** Viewport threshold for trigger (0-1) */\n  threshold?: number\n  /** Trigger animation only once */\n  once?: boolean\n  /** Deprecated: Use 'once' instead */\n  triggerOnce?: boolean\n  /** Stagger delay for multiple children (deprecated: use ScrollRevealContainer) */\n  stagger?: number\n  /** Additional CSS classes */\n  className?: string\n  /** Custom animation variants */\n  variants?: Variants\n  /** Enable/disable animations */\n  animate?: boolean\n  /** Custom styles */\n  style?: React.CSSProperties\n  /** Element ID */\n  id?: string\n  /** Viewport options for intersection observer */\n  viewport?: UseInViewOptions\n}\n\n// Default animation variants with professional easing\nconst createDefaultVariants = (direction: string, distance: number): Variants => {\n  const baseVariants: Record<string, Variants> = {\n    up: {\n      hidden: { opacity: 0, y: distance },\n      visible: { opacity: 1, y: 0 }\n    },\n    down: {\n      hidden: { opacity: 0, y: -distance },\n      visible: { opacity: 1, y: 0 }\n    },\n    left: {\n      hidden: { opacity: 0, x: distance },\n      visible: { opacity: 1, x: 0 }\n    },\n    right: {\n      hidden: { opacity: 0, x: -distance },\n      visible: { opacity: 1, x: 0 }\n    },\n    fade: {\n      hidden: { opacity: 0 },\n      visible: { opacity: 1 }\n    },\n    scale: {\n      hidden: { opacity: 0, scale: 0.85 },\n      visible: { opacity: 1, scale: 1 }\n    },\n    blur: {\n      hidden: { opacity: 0, filter: \"blur(10px)\" },\n      visible: { opacity: 1, filter: \"blur(0px)\" }\n    }\n  }\n\n  return baseVariants[direction] || baseVariants.up\n}\n\n// Professional easing curve\nconst defaultTransition: Transition = {\n  duration: 0.5,\n  ease: [0.25, 0.46, 0.45, 0.94], // Custom cubic-bezier for smooth motion\n}\n\nconst ScrollReveal = React.forwardRef<HTMLDivElement, ScrollRevealProps>(\n  ({\n    children,\n    direction = \"up\",\n    delay = 0,\n    duration = 0.5,\n    distance = 50,\n    threshold = 0.3, // Increased from 0.1 for better visibility\n    once = true,\n    triggerOnce, // Backward compatibility\n    stagger = 0,\n    className,\n    variants,\n    animate = true,\n    style,\n    id,\n    viewport\n  }, ref) => {\n    // Handle backward compatibility\n    const shouldTriggerOnce = triggerOnce !== undefined ? triggerOnce : once\n\n    // Get animation variants\n    const animationVariants = React.useMemo(() => {\n      if (variants) return variants\n      return createDefaultVariants(direction, distance)\n    }, [direction, distance, variants])\n\n    // Transition configuration\n    const transition = React.useMemo<Transition>(() => ({\n      ...defaultTransition,\n      duration,\n      delay: delay + stagger,\n    }), [duration, delay, stagger])\n\n    // Viewport configuration\n    const viewportConfig = React.useMemo<UseInViewOptions>(() => ({\n      once: shouldTriggerOnce,\n      amount: threshold,\n      ...viewport\n    }), [shouldTriggerOnce, threshold, viewport])\n\n    // If animations are disabled, render children in a regular div\n    if (!animate) {\n      return (\n        <div\n          ref={ref}\n          className={className}\n          style={style}\n          id={id}\n        >\n          {children}\n        </div>\n      )\n    }\n\n    // Render with Framer Motion using whileInView pattern\n    return (\n      <motion.div\n        ref={ref}\n        initial=\"hidden\"\n        whileInView=\"visible\"\n        viewport={viewportConfig}\n        variants={animationVariants}\n        transition={transition}\n        className={cn(className)}\n        style={style}\n        id={id}\n      >\n        {children}\n      </motion.div>\n    )\n  }\n)\n\nScrollReveal.displayName = \"ScrollReveal\"\n\n/**\n * ScrollRevealContainer Component\n *\n * Container for orchestrating staggered scroll reveal animations\n * Uses Framer Motion's staggerChildren for better performance\n *\n * @example\n * ```tsx\n * <ScrollRevealContainer stagger={0.1}>\n *   <ScrollRevealItem>Item 1</ScrollRevealItem>\n *   <ScrollRevealItem>Item 2</ScrollRevealItem>\n * </ScrollRevealContainer>\n * ```\n */\n\ninterface ScrollRevealContainerProps {\n  /** ScrollRevealItem components */\n  children: React.ReactNode\n  /** Delay between child animations (seconds) */\n  stagger?: number\n  /** Additional CSS classes */\n  className?: string\n  /** Custom styles */\n  style?: React.CSSProperties\n  /** Element ID */\n  id?: string\n  /** Viewport threshold for trigger (0-1) */\n  threshold?: number\n  /** Trigger animation only once */\n  once?: boolean\n  /** Deprecated: Use 'once' instead */\n  triggerOnce?: boolean\n  /** Viewport options for intersection observer */\n  viewport?: UseInViewOptions\n}\n\nconst ScrollRevealContainer = React.forwardRef<HTMLDivElement, ScrollRevealContainerProps>(\n  ({\n    children,\n    stagger = 0.1,\n    className,\n    style,\n    id,\n    threshold = 0.3,\n    once = true,\n    triggerOnce,\n    viewport\n  }, ref) => {\n    // Handle backward compatibility\n    const shouldTriggerOnce = triggerOnce !== undefined ? triggerOnce : once\n\n    // Viewport configuration\n    const viewportConfig = React.useMemo<UseInViewOptions>(() => ({\n      once: shouldTriggerOnce,\n      amount: threshold,\n      ...viewport\n    }), [shouldTriggerOnce, threshold, viewport])\n\n    // Container variants for staggered children\n    const containerVariants: Variants = {\n      hidden: {},\n      visible: {\n        transition: {\n          staggerChildren: stagger,\n          delayChildren: 0\n        }\n      }\n    }\n\n    return (\n      <motion.div\n        ref={ref}\n        initial=\"hidden\"\n        whileInView=\"visible\"\n        viewport={viewportConfig}\n        variants={containerVariants}\n        className={cn(className)}\n        style={style}\n        id={id}\n      >\n        {children}\n      </motion.div>\n    )\n  }\n)\n\nScrollRevealContainer.displayName = \"ScrollRevealContainer\"\n\n/**\n * ScrollRevealItem Component\n *\n * Individual item within a ScrollRevealContainer\n * Automatically inherits timing from parent container\n *\n * @example\n * ```tsx\n * <ScrollRevealItem direction=\"up\">\n *   <Card>Item content</Card>\n * </ScrollRevealItem>\n * ```\n */\n\ninterface ScrollRevealItemProps {\n  /** Content to animate */\n  children: React.ReactNode\n  /** Animation direction */\n  direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"fade\" | \"scale\" | \"blur\"\n  /** Animation duration in seconds */\n  duration?: number\n  /** Distance to animate from (pixels) */\n  distance?: number\n  /** Additional CSS classes */\n  className?: string\n  /** Custom animation variants */\n  variants?: Variants\n  /** Custom styles */\n  style?: React.CSSProperties\n  /** Element ID */\n  id?: string\n}\n\nconst ScrollRevealItem = React.forwardRef<HTMLDivElement, ScrollRevealItemProps>(\n  ({\n    children,\n    direction = \"up\",\n    duration = 0.5,\n    distance = 50,\n    className,\n    variants,\n    style,\n    id\n  }, ref) => {\n    // Get animation variants\n    const animationVariants = React.useMemo(() => {\n      if (variants) return variants\n      return createDefaultVariants(direction, distance)\n    }, [direction, distance, variants])\n\n    // Transition configuration\n    const transition = React.useMemo<Transition>(() => ({\n      ...defaultTransition,\n      duration,\n    }), [duration])\n\n    return (\n      <motion.div\n        ref={ref}\n        variants={animationVariants}\n        transition={transition}\n        className={cn(className)}\n        style={style}\n        id={id}\n      >\n        {children}\n      </motion.div>\n    )\n  }\n)\n\nScrollRevealItem.displayName = \"ScrollRevealItem\"\n\nexport { ScrollReveal, ScrollRevealContainer, ScrollRevealItem }\nexport type { ScrollRevealProps, ScrollRevealContainerProps, ScrollRevealItemProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst separatorVariants = cva(\n  \"shrink-0 bg-border\",\n  {\n    variants: {\n      orientation: {\n        horizontal: \"h-[1px] w-full\",\n        vertical: \"h-full w-[1px]\",\n      },\n      variant: {\n        default: \"bg-border\",\n        dashed: \"border-dashed border-border bg-transparent\",\n        dotted: \"border-dotted border-border bg-transparent\",\n        gradient: \"bg-gradient-to-r from-transparent via-border to-transparent\",\n      },\n      size: {\n        sm: \"\",\n        md: \"\",\n        lg: \"\",\n      },\n    },\n    compoundVariants: [\n      {\n        orientation: \"horizontal\",\n        variant: \"dashed\",\n        className: \"border-t h-0\",\n      },\n      {\n        orientation: \"vertical\",\n        variant: \"dashed\",\n        className: \"border-l w-0\",\n      },\n      {\n        orientation: \"horizontal\",\n        variant: \"dotted\",\n        className: \"border-t h-0\",\n      },\n      {\n        orientation: \"vertical\",\n        variant: \"dotted\",\n        className: \"border-l w-0\",\n      },\n      {\n        orientation: \"horizontal\",\n        size: \"sm\",\n        variant: [\"dashed\", \"dotted\"],\n        className: \"border-t-[0.5px]\",\n      },\n      {\n        orientation: \"horizontal\",\n        size: \"lg\",\n        variant: [\"dashed\", \"dotted\"],\n        className: \"border-t-2\",\n      },\n      {\n        orientation: \"vertical\",\n        size: \"sm\",\n        variant: [\"dashed\", \"dotted\"],\n        className: \"border-l-[0.5px]\",\n      },\n      {\n        orientation: \"vertical\",\n        size: \"lg\",\n        variant: [\"dashed\", \"dotted\"],\n        className: \"border-l-2\",\n      },\n      {\n        orientation: \"horizontal\",\n        size: \"sm\",\n        variant: [\"default\", \"gradient\"],\n        className: \"h-[0.5px]\",\n      },\n      {\n        orientation: \"horizontal\",\n        size: \"lg\",\n        variant: [\"default\", \"gradient\"],\n        className: \"h-[2px]\",\n      },\n      {\n        orientation: \"vertical\",\n        size: \"sm\",\n        variant: [\"default\", \"gradient\"],\n        className: \"w-[0.5px]\",\n      },\n      {\n        orientation: \"vertical\",\n        size: \"lg\",\n        variant: [\"default\", \"gradient\"],\n        className: \"w-[2px]\",\n      },\n    ],\n    defaultVariants: {\n      orientation: \"horizontal\",\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\nexport interface SeparatorProps\n  extends Omit<React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>, keyof VariantProps<typeof separatorVariants>>,\n    VariantProps<typeof separatorVariants> {}\n\nconst Separator = React.forwardRef<\n  React.ElementRef<typeof SeparatorPrimitive.Root>,\n  SeparatorProps\n>(\n  (\n    { \n      className, \n      orientation = \"horizontal\", \n      variant = \"default\",\n      size = \"md\",\n      decorative = true, \n      ...props \n    },\n    ref\n  ) => (\n    <SeparatorPrimitive.Root\n      ref={ref}\n      decorative={decorative}\n      orientation={orientation || undefined}\n      className={cn(\n        separatorVariants({ orientation, variant, size }),\n        className\n      )}\n      {...props}\n    />\n  )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator, separatorVariants }","\"use client\"\n\nimport React, { useCallback, useState, useEffect } from 'react'\nimport { motion } from 'framer-motion'\nimport { Button } from './button'\nimport { Separator } from './separator'\nimport { Toggle } from './toggle'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './select'\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip'\nimport { cn } from '../../lib/utils'\nimport {\n  Bold,\n  Italic,\n  Underline,\n  Strikethrough,\n  AlignLeft,\n  AlignCenter,\n  AlignRight,\n  AlignJustify,\n  List,\n  ListOrdered,\n  Quote,\n  Link,\n  Image as ImageIcon,\n  Code,\n  Type,\n  Palette,\n  Undo,\n  Redo,\n  Eye,\n  Edit\n} from 'lucide-react'\n\nexport interface SimpleEditorProps {\n  value?: string\n  onChange?: (value: string) => void\n  placeholder?: string\n  disabled?: boolean\n  className?: string\n  minHeight?: number\n  maxHeight?: number\n  showToolbar?: boolean\n  showPreview?: boolean\n}\n\ninterface ToolbarButtonProps {\n  icon: React.ReactNode\n  tooltip: string\n  active?: boolean\n  onClick: () => void\n  disabled?: boolean\n}\n\nconst ToolbarButton = ({ icon, tooltip, active, onClick, disabled }: ToolbarButtonProps) => (\n  <Tooltip>\n    <TooltipTrigger asChild>\n      <Toggle\n        pressed={active}\n        onPressedChange={() => onClick()}\n        disabled={disabled}\n        className=\"h-8 w-8 p-0\"\n      >\n        {icon}\n      </Toggle>\n    </TooltipTrigger>\n    <TooltipContent>\n      <p>{tooltip}</p>\n    </TooltipContent>\n  </Tooltip>\n)\n\nconst ColorPicker = ({ onColorSelect }: { onColorSelect: (color: string) => void }) => {\n  const colors = [\n    '#000000', '#374151', '#6B7280', '#9CA3AF',\n    '#EF4444', '#F59E0B', '#EAB308', '#22C55E',\n    '#3B82F6', '#6366F1', '#8B5CF6', '#EC4899'\n  ]\n\n  return (\n    <div className=\"grid grid-cols-4 gap-1 p-2\">\n      {colors.map(color => (\n        <button\n          key={color}\n          className=\"w-6 h-6 rounded border-2 border-gray-200 hover:border-gray-400\"\n          style={{ backgroundColor: color }}\n          onClick={() => onColorSelect(color)}\n        />\n      ))}\n    </div>\n  )\n}\n\nexport const SimpleEditor = React.forwardRef<HTMLDivElement, SimpleEditorProps>(\n  ({\n    value = '',\n    onChange,\n    placeholder = 'Start writing...',\n    disabled = false,\n    className,\n    minHeight = 200,\n    maxHeight = 500,\n    showToolbar = true,\n    showPreview = true,\n    ...props\n  }, ref) => {\n    const [content, setContent] = useState(value)\n    const [isPreview, setIsPreview] = useState(false)\n    const [sourceContent, setSourceContent] = useState(value)\n    const [selection, setSelection] = useState<{ start: number; end: number } | null>(null)\n    const editorRef = React.useRef<HTMLDivElement>(null)\n    const sourceRef = React.useRef<HTMLTextAreaElement>(null)\n\n    // Format state tracking\n    const [formatState, setFormatState] = useState({\n      bold: false,\n      italic: false,\n      underline: false,\n      strikethrough: false,\n      alignLeft: true,\n      alignCenter: false,\n      alignRight: false,\n      alignJustify: false,\n      orderedList: false,\n      unorderedList: false,\n      quote: false,\n      code: false\n    })\n\n    const updateContent = useCallback((newContent: string) => {\n      setContent(newContent)\n      onChange?.(newContent)\n    }, [onChange])\n\n    const saveSelection = useCallback(() => {\n      const selection = window.getSelection()\n      if (selection && selection.rangeCount > 0) {\n        return selection.getRangeAt(0)\n      }\n      return null\n    }, [])\n\n    const restoreSelection = useCallback((range: Range | null) => {\n      if (!range) return\n      \n      const selection = window.getSelection()\n      if (selection) {\n        selection.removeAllRanges()\n        selection.addRange(range)\n      }\n    }, [])\n\n    const executeCommand = useCallback((command: string, value?: string) => {\n      if (disabled) return\n      \n      // Focus the editor first\n      if (editorRef.current) {\n        editorRef.current.focus()\n      }\n      \n      // Save current selection before executing command\n      const savedRange = saveSelection()\n      \n      // Execute the command\n      const result = document.execCommand(command, false, value)\n      \n      if (!result) {\n        console.warn(`Command '${command}' failed to execute`)\n      }\n      \n      // Update content state to trigger re-render\n      if (editorRef.current) {\n        const newContent = editorRef.current.innerHTML\n        updateContent(newContent)\n      }\n      \n      // Update format state\n      setFormatState({\n        bold: document.queryCommandState('bold'),\n        italic: document.queryCommandState('italic'),\n        underline: document.queryCommandState('underline'),\n        strikethrough: document.queryCommandState('strikeThrough'),\n        alignLeft: document.queryCommandState('justifyLeft'),\n        alignCenter: document.queryCommandState('justifyCenter'),\n        alignRight: document.queryCommandState('justifyRight'),\n        alignJustify: document.queryCommandState('justifyFull'),\n        orderedList: document.queryCommandState('insertOrderedList'),\n        unorderedList: document.queryCommandState('insertUnorderedList'),\n        quote: document.queryCommandState('formatBlock'),\n        code: document.queryCommandState('formatBlock')\n      })\n      \n      // Keep focus on editor\n      if (editorRef.current) {\n        editorRef.current.focus()\n      }\n    }, [disabled, saveSelection, updateContent])\n\n    const handleInput = useCallback((e: React.FormEvent<HTMLDivElement>) => {\n      const newContent = e.currentTarget.innerHTML\n      updateContent(newContent)\n    }, [updateContent])\n\n    const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n      // Handle keyboard shortcuts\n      if (e.ctrlKey || e.metaKey) {\n        switch (e.key) {\n          case 'b':\n            e.preventDefault()\n            executeCommand('bold')\n            break\n          case 'i':\n            e.preventDefault()\n            executeCommand('italic')\n            break\n          case 'u':\n            e.preventDefault()\n            executeCommand('underline')\n            break\n          case 'z':\n            e.preventDefault()\n            if (e.shiftKey) {\n              executeCommand('redo')\n            } else {\n              executeCommand('undo')\n            }\n            break\n        }\n      }\n\n      // Handle Tab for indentation\n      if (e.key === 'Tab') {\n        e.preventDefault()\n        executeCommand('insertHTML', '&nbsp;&nbsp;&nbsp;&nbsp;')\n      }\n    }, [executeCommand])\n\n    const insertLink = useCallback(() => {\n      const url = prompt('Enter URL:')\n      if (url) {\n        executeCommand('createLink', url)\n      }\n    }, [executeCommand])\n\n    const insertImage = useCallback(() => {\n      const url = prompt('Enter image URL:')\n      if (url) {\n        executeCommand('insertImage', url)\n      }\n    }, [executeCommand])\n\n    const formatHeading = useCallback((level: string) => {\n      executeCommand('formatBlock', `<h${level}>`)\n    }, [executeCommand])\n\n    const setTextColor = useCallback((color: string) => {\n      // First try the modern way\n      const selection = window.getSelection()\n      if (selection && selection.rangeCount > 0) {\n        const range = selection.getRangeAt(0)\n        const span = document.createElement('span')\n        span.style.color = color\n        \n        try {\n          range.surroundContents(span)\n        } catch (e) {\n          // If surroundContents fails, use execCommand\n          executeCommand('foreColor', color)\n        }\n        \n        // Update content\n        if (editorRef.current) {\n          const newContent = editorRef.current.innerHTML\n          updateContent(newContent)\n        }\n      }\n    }, [executeCommand, updateContent])\n\n    // Convert HTML to plain text for preview\n    const getPlainText = (html: string) => {\n      if (typeof window === 'undefined') {\n        // Server-side: simple regex-based HTML stripping\n        return html\n          .replace(/<[^>]*>/g, '') // Remove HTML tags\n          .replace(/&nbsp;/g, ' ') // Replace &nbsp; with space\n          .replace(/&amp;/g, '&')  // Replace &amp; with &\n          .replace(/&lt;/g, '<')   // Replace &lt; with <\n          .replace(/&gt;/g, '>')   // Replace &gt; with >\n          .replace(/&quot;/g, '\"') // Replace &quot; with \"\n          .replace(/&#39;/g, \"'\")  // Replace &#39; with '\n      }\n      // Client-side: use DOM for accurate conversion\n      const div = document.createElement('div')\n      div.innerHTML = html\n      return div.textContent || div.innerText || ''\n    }\n\n    React.useEffect(() => {\n      if (editorRef.current && content && content !== editorRef.current.innerHTML) {\n        editorRef.current.innerHTML = content\n      }\n    }, [content])\n\n    // Sync source content when value prop changes\n    React.useEffect(() => {\n      if (value !== undefined && value !== content) {\n        setContent(value)\n        setSourceContent(value)\n      }\n    }, [value, content])\n\n    const toolbar = showToolbar && (\n      <TooltipProvider>\n        <motion.div\n          className=\"flex items-center gap-1 p-2 border-b bg-gray-50/50 dark:bg-zinc-800/50 backdrop-blur-sm\"\n          initial={{ opacity: 0, y: -10 }}\n          animate={{ opacity: 1, y: 0 }}\n        >\n        {/* Text Formatting */}\n        {!isPreview && (\n          <>\n            <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<Bold className=\"h-3 w-3\" />}\n            tooltip=\"Bold (Ctrl+B)\"\n            active={formatState.bold}\n            onClick={() => executeCommand('bold')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Italic className=\"h-3 w-3\" />}\n            tooltip=\"Italic (Ctrl+I)\"\n            active={formatState.italic}\n            onClick={() => executeCommand('italic')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Underline className=\"h-3 w-3\" />}\n            tooltip=\"Underline (Ctrl+U)\"\n            active={formatState.underline}\n            onClick={() => executeCommand('underline')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Strikethrough className=\"h-3 w-3\" />}\n            tooltip=\"Strikethrough\"\n            active={formatState.strikethrough}\n            onClick={() => executeCommand('strikeThrough')}\n            disabled={disabled}\n          />\n        </div>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Font Size / Heading */}\n        <Select \n          onValueChange={(value) => {\n            if (value.startsWith('h')) {\n              formatHeading(value.substring(1))\n            } else if (value === 'normal') {\n              executeCommand('formatBlock', 'p')\n            } else {\n              executeCommand('fontSize', value)\n            }\n          }} \n          disabled={disabled}\n        >\n          <SelectTrigger className=\"w-24 h-8\">\n            <SelectValue placeholder=\"Size\" />\n          </SelectTrigger>\n          <SelectContent>\n            <SelectItem value=\"1\">Small</SelectItem>\n            <SelectItem value=\"3\">Normal</SelectItem>\n            <SelectItem value=\"5\">Large</SelectItem>\n            <SelectItem value=\"7\">X-Large</SelectItem>\n            <Separator className=\"my-1\" />\n            <SelectItem value=\"h1\">Heading 1</SelectItem>\n            <SelectItem value=\"h2\">Heading 2</SelectItem>\n            <SelectItem value=\"h3\">Heading 3</SelectItem>\n            <SelectItem value=\"h4\">Heading 4</SelectItem>\n            <SelectItem value=\"h5\">Heading 5</SelectItem>\n            <SelectItem value=\"h6\">Heading 6</SelectItem>\n          </SelectContent>\n        </Select>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Alignment */}\n        <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<AlignLeft className=\"h-3 w-3\" />}\n            tooltip=\"Align Left\"\n            active={formatState.alignLeft}\n            onClick={() => executeCommand('justifyLeft')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<AlignCenter className=\"h-3 w-3\" />}\n            tooltip=\"Align Center\"\n            active={formatState.alignCenter}\n            onClick={() => executeCommand('justifyCenter')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<AlignRight className=\"h-3 w-3\" />}\n            tooltip=\"Align Right\"\n            active={formatState.alignRight}\n            onClick={() => executeCommand('justifyRight')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<AlignJustify className=\"h-3 w-3\" />}\n            tooltip=\"Justify\"\n            active={formatState.alignJustify}\n            onClick={() => executeCommand('justifyFull')}\n            disabled={disabled}\n          />\n        </div>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Lists */}\n        <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<List className=\"h-3 w-3\" />}\n            tooltip=\"Bullet List\"\n            active={formatState.unorderedList}\n            onClick={() => executeCommand('insertUnorderedList')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<ListOrdered className=\"h-3 w-3\" />}\n            tooltip=\"Numbered List\"\n            active={formatState.orderedList}\n            onClick={() => executeCommand('insertOrderedList')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Quote className=\"h-3 w-3\" />}\n            tooltip=\"Quote\"\n            active={formatState.quote}\n            onClick={() => executeCommand('formatBlock', 'blockquote')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Code className=\"h-3 w-3\" />}\n            tooltip=\"Code Block\"\n            active={formatState.code}\n            onClick={() => executeCommand('formatBlock', 'pre')}\n            disabled={disabled}\n          />\n        </div>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Indentation */}\n        <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<span className=\"text-xs font-mono\">←</span>}\n            tooltip=\"Decrease Indent\"\n            onClick={() => executeCommand('outdent')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<span className=\"text-xs font-mono\">→</span>}\n            tooltip=\"Increase Indent\"\n            onClick={() => executeCommand('indent')}\n            disabled={disabled}\n          />\n        </div>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Insert */}\n        <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<Link className=\"h-3 w-3\" />}\n            tooltip=\"Insert Link\"\n            onClick={insertLink}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<ImageIcon className=\"h-3 w-3\" />}\n            tooltip=\"Insert Image\"\n            onClick={insertImage}\n            disabled={disabled}\n          />\n        </div>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Color */}\n        <Popover>\n          <PopoverTrigger asChild>\n            <Button \n              variant=\"ghost\" \n              size=\"sm\" \n              className=\"h-8 w-8 p-0\" \n              disabled={disabled}\n              title=\"Text Color\"\n            >\n              <Palette className=\"h-3 w-3\" />\n            </Button>\n          </PopoverTrigger>\n          <PopoverContent className=\"w-auto p-0\">\n            <ColorPicker onColorSelect={setTextColor} />\n          </PopoverContent>\n        </Popover>\n\n        <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />\n\n        {/* Undo/Redo */}\n        <div className=\"flex items-center gap-1\">\n          <ToolbarButton\n            icon={<Undo className=\"h-3 w-3\" />}\n            tooltip=\"Undo (Ctrl+Z)\"\n            onClick={() => executeCommand('undo')}\n            disabled={disabled}\n          />\n          <ToolbarButton\n            icon={<Redo className=\"h-3 w-3\" />}\n            tooltip=\"Redo (Ctrl+Shift+Z)\"\n            onClick={() => executeCommand('redo')}\n            disabled={disabled}\n          />\n        </div>\n\n          </>\n        )}\n\n        {/* Preview Toggle */}\n        {showPreview && (\n          <>\n            {!isPreview && <Separator orientation=\"vertical\" className=\"h-6 bg-gray-300 dark:bg-zinc-600\" />}\n            <ToolbarButton\n              icon={isPreview ? <Edit className=\"h-3 w-3\" /> : <Eye className=\"h-3 w-3\" />}\n              tooltip={isPreview ? \"Edit Mode\" : \"View Source Code\"}\n              active={isPreview}\n              onClick={() => {\n                if (isPreview) {\n                  // Apply source changes to content when switching back to edit mode\n                  updateContent(sourceContent)\n                } else {\n                  // Update source content when switching to preview mode\n                  setSourceContent(content)\n                }\n                setIsPreview(!isPreview)\n              }}\n              disabled={disabled}\n            />\n          </>\n        )}\n        </motion.div>\n      </TooltipProvider>\n    )\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"border border-gray-200 dark:border-zinc-700 rounded-lg overflow-hidden focus-within:ring-2 focus-within:ring-ring focus-within:border-transparent\",\n          disabled && \"opacity-50 cursor-not-allowed\",\n          className\n        )}\n        {...props}\n      >\n        {toolbar}\n\n        <div className=\"relative\">\n          {isPreview ? (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              className=\"bg-slate-50 dark:bg-zinc-900/95\"\n              style={{ minHeight, maxHeight, overflow: 'auto' }}\n            >\n              <textarea\n                ref={sourceRef}\n                value={sourceContent}\n                onChange={(e) => setSourceContent(e.target.value)}\n                className=\"w-full h-full bg-transparent p-4 font-mono text-sm text-gray-900 dark:text-gray-100 resize-none focus:outline-none\"\n                style={{ minHeight: minHeight - 32 }}\n                disabled={disabled}\n                placeholder=\"HTML source code...\"\n              />\n            </motion.div>\n          ) : (\n            <motion.div\n              ref={editorRef}\n              contentEditable={!disabled}\n              suppressContentEditableWarning\n              className={cn(\n                \"p-4 outline-none prose prose-sm dark:prose-invert max-w-none overflow-y-auto\",\n                \"bg-slate-50 dark:bg-zinc-900/95\",\n                \"text-gray-900 dark:text-gray-100\",\n                \"focus:ring-0\",\n                \"[&_h1]:text-3xl [&_h1]:font-bold [&_h1]:mb-4\",\n                \"[&_h2]:text-2xl [&_h2]:font-bold [&_h2]:mb-3\",\n                \"[&_h3]:text-xl [&_h3]:font-bold [&_h3]:mb-2\",\n                \"[&_h4]:text-lg [&_h4]:font-bold [&_h4]:mb-2\",\n                \"[&_h5]:text-base [&_h5]:font-bold [&_h5]:mb-1\",\n                \"[&_h6]:text-sm [&_h6]:font-bold [&_h6]:mb-1\",\n                \"[&_ul]:list-disc [&_ul]:pl-6 [&_ul]:mb-4\",\n                \"[&_ol]:list-decimal [&_ol]:pl-6 [&_ol]:mb-4\",\n                \"[&_li]:mb-1\",\n                \"[&_blockquote]:border-l-4 [&_blockquote]:border-gray-300 [&_blockquote]:pl-4 [&_blockquote]:italic\",\n                \"[&_pre]:bg-gray-100 [&_pre]:dark:bg-gray-800 [&_pre]:p-4 [&_pre]:rounded [&_pre]:overflow-x-auto\"\n              )}\n              style={{ minHeight, maxHeight }}\n              onInput={handleInput}\n              onKeyDown={handleKeyDown}\n              data-placeholder={placeholder}\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n            />\n          )}\n\n          {/* Placeholder */}\n          {!content && !isPreview && (\n            <div\n              className=\"absolute top-4 left-4 text-muted-foreground pointer-events-none\"\n              style={{ fontSize: '16px' }}\n            >\n              {placeholder}\n            </div>\n          )}\n        </div>\n\n        {/* Character Count */}\n        <div className=\"px-4 py-2 border-t bg-gray-50/50 dark:bg-zinc-800/50 backdrop-blur-sm text-xs text-gray-600 dark:text-gray-400\">\n          <CharacterCount content={content} />\n        </div>\n      </div>\n    )\n  }\n)\n\nSimpleEditor.displayName = \"SimpleEditor\"\n\n// Character count component to avoid hydration issues\nconst CharacterCount = ({ content }: { content: string }) => {\n  const [count, setCount] = useState(0)\n  \n  useEffect(() => {\n    const getPlainText = (html: string) => {\n      const div = document.createElement('div')\n      div.innerHTML = html\n      return div.textContent || div.innerText || ''\n    }\n    setCount(getPlainText(content).length)\n  }, [content])\n  \n  return <>{count} characters</>\n}","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst toggleVariants = cva(\n  \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-transparent\",\n        outline:\n          \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n      },\n      size: {\n        default: \"h-10 px-3\",\n        sm: \"h-9 px-2.5\",\n        lg: \"h-11 px-5\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nexport interface ToggleProps extends React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root>, VariantProps<typeof toggleVariants> {}\n\nconst Toggle = React.forwardRef<\n  React.ElementRef<typeof TogglePrimitive.Root>,\n  ToggleProps\n>(({ className, variant, size, ...props }, ref) => (\n  <TogglePrimitive.Root\n    ref={ref}\n    className={cn(\"moonui-theme\", toggleVariants({ variant, size, className }))}\n    {...props}\n  />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Toggle\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Toggle';\n\ntype ToggleElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface ToggleProps extends PrimitiveButtonProps {\n  /**\n   * The controlled state of the toggle.\n   */\n  pressed?: boolean;\n  /**\n   * The state of the toggle when initially rendered. Use `defaultPressed`\n   * if you do not need to control the state of the toggle.\n   * @defaultValue false\n   */\n  defaultPressed?: boolean;\n  /**\n   * The callback that fires when the state of the toggle changes.\n   */\n  onPressedChange?(pressed: boolean): void;\n}\n\nconst Toggle = React.forwardRef<ToggleElement, ToggleProps>((props, forwardedRef) => {\n  const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;\n\n  const [pressed, setPressed] = useControllableState({\n    prop: pressedProp,\n    onChange: onPressedChange,\n    defaultProp: defaultPressed ?? false,\n    caller: NAME,\n  });\n\n  return (\n    <Primitive.button\n      type=\"button\"\n      aria-pressed={pressed}\n      data-state={pressed ? 'on' : 'off'}\n      data-disabled={props.disabled ? '' : undefined}\n      {...buttonProps}\n      ref={forwardedRef}\n      onClick={composeEventHandlers(props.onClick, () => {\n        if (!props.disabled) {\n          setPressed(!pressed);\n        }\n      })}\n    />\n  );\n});\n\nToggle.displayName = NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst Root = Toggle;\n\nexport {\n  Toggle,\n  //\n  Root,\n};\nexport type { ToggleProps };\n","import * as React from 'react';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n// Prevent bundlers from trying to optimize the import\nconst useInsertionEffect: typeof useLayoutEffect =\n  (React as any)[' useInsertionEffect '.trim().toString()] || useLayoutEffect;\n\ntype ChangeHandler<T> = (state: T) => void;\ntype SetStateFn<T> = React.Dispatch<React.SetStateAction<T>>;\n\ninterface UseControllableStateParams<T> {\n  prop?: T | undefined;\n  defaultProp: T;\n  onChange?: ChangeHandler<T>;\n  caller?: string;\n}\n\nexport function useControllableState<T>({\n  prop,\n  defaultProp,\n  onChange = () => {},\n  caller,\n}: UseControllableStateParams<T>): [T, SetStateFn<T>] {\n  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n    defaultProp,\n    onChange,\n  });\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledProp;\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (process.env.NODE_ENV !== 'production') {\n    const isControlledRef = React.useRef(prop !== undefined);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? 'controlled' : 'uncontrolled';\n        const to = isControlled ? 'controlled' : 'uncontrolled';\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  /* eslint-enable react-hooks/rules-of-hooks */\n\n  const setValue = React.useCallback<SetStateFn<T>>(\n    (nextValue) => {\n      if (isControlled) {\n        const value = isFunction(nextValue) ? nextValue(prop) : nextValue;\n        if (value !== prop) {\n          onChangeRef.current?.(value);\n        }\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, onChangeRef]\n  );\n\n  return [value, setValue];\n}\n\nfunction useUncontrolledState<T>({\n  defaultProp,\n  onChange,\n}: Omit<UseControllableStateParams<T>, 'prop'>): [\n  Value: T,\n  setValue: React.Dispatch<React.SetStateAction<T>>,\n  OnChangeRef: React.RefObject<ChangeHandler<T> | undefined>,\n] {\n  const [value, setValue] = React.useState(defaultProp);\n  const prevValueRef = React.useRef(value);\n\n  const onChangeRef = React.useRef(onChange);\n  useInsertionEffect(() => {\n    onChangeRef.current = onChange;\n  }, [onChange]);\n\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      onChangeRef.current?.(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef]);\n\n  return [value, setValue, onChangeRef];\n}\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function';\n}\n","import * as React from 'react';\nimport { useEffectEvent } from '@radix-ui/react-use-effect-event';\n\ntype ChangeHandler<T> = (state: T) => void;\n\ninterface UseControllableStateParams<T> {\n  prop: T | undefined;\n  defaultProp: T;\n  onChange: ChangeHandler<T> | undefined;\n  caller: string;\n}\n\ninterface AnyAction {\n  type: string;\n}\n\nconst SYNC_STATE = Symbol('RADIX:SYNC_STATE');\n\ninterface SyncStateAction<T> {\n  type: typeof SYNC_STATE;\n  state: T;\n}\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialState: S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, I, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: I,\n  init: (i: I & { state: T }) => S\n): [S & { state: T }, React.Dispatch<A>];\n\nexport function useControllableStateReducer<T, S extends {}, A extends AnyAction>(\n  reducer: (prevState: S & { state: T }, action: A) => S & { state: T },\n  userArgs: UseControllableStateParams<T>,\n  initialArg: any,\n  init?: (i: any) => Omit<S, 'state'>\n): [S & { state: T }, React.Dispatch<A>] {\n  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n  const isControlled = controlledState !== undefined;\n\n  const onChange = useEffectEvent(onChangeProp);\n\n  // OK to disable conditionally calling hooks here because they will always run\n  // consistently in the same environment. Bundlers should be able to remove the\n  // code block entirely in production.\n  /* eslint-disable react-hooks/rules-of-hooks */\n  if (process.env.NODE_ENV !== 'production') {\n    const isControlledRef = React.useRef(controlledState !== undefined);\n    React.useEffect(() => {\n      const wasControlled = isControlledRef.current;\n      if (wasControlled !== isControlled) {\n        const from = wasControlled ? 'controlled' : 'uncontrolled';\n        const to = isControlled ? 'controlled' : 'uncontrolled';\n        console.warn(\n          `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n        );\n      }\n      isControlledRef.current = isControlled;\n    }, [isControlled, caller]);\n  }\n  /* eslint-enable react-hooks/rules-of-hooks */\n\n  type InternalState = S & { state: T };\n  const args: [InternalState] = [{ ...initialArg, state: defaultProp }];\n  if (init) {\n    // @ts-expect-error\n    args.push(init);\n  }\n\n  const [internalState, dispatch] = React.useReducer(\n    (state: InternalState, action: A | SyncStateAction<T>): InternalState => {\n      if (action.type === SYNC_STATE) {\n        return { ...state, state: action.state };\n      }\n\n      const next = reducer(state, action);\n      if (isControlled && !Object.is(next.state, state.state)) {\n        onChange(next.state);\n      }\n      return next;\n    },\n    ...args\n  );\n\n  const uncontrolledState = internalState.state;\n  const prevValueRef = React.useRef(uncontrolledState);\n  React.useEffect(() => {\n    if (prevValueRef.current !== uncontrolledState) {\n      prevValueRef.current = uncontrolledState;\n      if (!isControlled) {\n        onChange(uncontrolledState);\n      }\n    }\n  }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n\n  const state = React.useMemo(() => {\n    const isControlled = controlledState !== undefined;\n    if (isControlled) {\n      return { ...internalState, state: controlledState };\n    }\n\n    return internalState;\n  }, [internalState, controlledState]);\n\n  React.useEffect(() => {\n    // Sync internal state for controlled components so that reducer is called\n    // with the correct state values\n    if (isControlled && !Object.is(controlledState, internalState.state)) {\n      dispatch({ type: SYNC_STATE, state: controlledState });\n    }\n  }, [controlledState, internalState.state, isControlled]);\n\n  return [state, dispatch as React.Dispatch<A>];\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst tooltipVariants = cva(\n  \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground\",\n        secondary: \"bg-secondary text-secondary-foreground\",\n        success: \"bg-green-500 text-white border-green-600\",\n        warning: \"bg-yellow-500 text-white border-yellow-600\",\n        destructive: \"bg-destructive text-destructive-foreground\",\n        info: \"bg-blue-500 text-white border-blue-600\",\n      },\n      size: {\n        sm: \"px-2 py-1 text-xs\",\n        md: \"px-3 py-1.5 text-sm\",\n        lg: \"px-4 py-2 text-base\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipArrow = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Arrow>,\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>\n>(({ className, ...props }, ref) => (\n  <TooltipPrimitive.Arrow\n    ref={ref}\n    className={cn(\"moonui-theme\", \"fill-current\", className)}\n    {...props}\n  />\n))\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName\n\nexport interface TooltipContentProps\n  extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>,\n    VariantProps<typeof tooltipVariants> {\n  showArrow?: boolean\n}\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  TooltipContentProps\n>(({ className, variant, size, showArrow = false, sideOffset = 4, ...props }, ref) => (\n  <TooltipPrimitive.Content\n    ref={ref}\n    sideOffset={sideOffset}\n    className={cn(\"moonui-theme\", tooltipVariants({ variant, size }), className)}\n    {...props}\n  >\n    {props.children}\n    {showArrow && <TooltipArrow />}\n  </TooltipPrimitive.Content>\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\n// Simplified Tooltip component for easy usage\nexport interface SimpleTooltipProps {\n  children: React.ReactElement\n  content: React.ReactNode\n  variant?: TooltipContentProps[\"variant\"]\n  size?: TooltipContentProps[\"size\"]\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n  align?: \"start\" | \"center\" | \"end\"\n  delayDuration?: number\n  sideOffset?: number\n  showArrow?: boolean\n  className?: string\n  open?: boolean\n  defaultOpen?: boolean\n  onOpenChange?: (open: boolean) => void\n}\n\nconst SimpleTooltip = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  SimpleTooltipProps\n>(\n  (\n    {\n      children,\n      content,\n      variant = \"default\",\n      size = \"md\",\n      side = \"top\",\n      align = \"center\",\n      delayDuration = 400,\n      sideOffset = 4,\n      showArrow = false,\n      className,\n      open,\n      defaultOpen,\n      onOpenChange,\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <Tooltip\n        open={open}\n        defaultOpen={defaultOpen}\n        onOpenChange={onOpenChange}\n        delayDuration={delayDuration}\n      >\n        <TooltipTrigger asChild>{children}</TooltipTrigger>\n        <TooltipContent\n          ref={ref}\n          side={side}\n          align={align}\n          variant={variant}\n          size={size}\n          sideOffset={sideOffset}\n          showArrow={showArrow}\n          className={className}\n          {...props}\n        >\n          {content}\n        </TooltipContent>\n      </Tooltip>\n    )\n  }\n)\nSimpleTooltip.displayName = \"SimpleTooltip\"\n\nexport {\n  Tooltip,\n  TooltipProvider,\n  TooltipTrigger,\n  TooltipContent,\n  TooltipArrow,\n  SimpleTooltip,\n  tooltipVariants,\n}","\"use client\";\n\nimport * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { motion } from \"framer-motion\";\nimport { skeletonAnimation } from \"../../lib/micro-interactions\";\n\n/**\n * Skeleton Component\n *\n * A loading placeholder that mimics the structure of content.\n * Fully integrated with the theme system and provides various shapes, sizes, and animations.\n */\n\nconst skeletonVariants = cva(\n  \"animate-pulse rounded-md\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-muted\",\n        primary: \"bg-primary/10\",\n        secondary: \"bg-secondary/10\",\n        accent: \"bg-accent\",\n      },\n      size: {\n        default: \"\",\n        sm: \"scale-90\",\n        lg: \"scale-110\",\n      },\n      shape: {\n        rect: \"rounded-md\",\n        circle: \"rounded-full\",\n        pill: \"rounded-full\",\n      },\n      animation: {\n        pulse: \"animate-pulse\",\n        wave: \"overflow-hidden relative after:absolute after:inset-0 after:-translate-x-full after:animate-[shimmer_2s_infinite] after:bg-gradient-to-r after:from-transparent after:via-white/10 after:to-transparent dark:after:via-white/5\",\n        none: \"animate-none\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n      shape: \"rect\",\n      animation: \"pulse\",\n    },\n  }\n);\n\nexport interface SkeletonProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof skeletonVariants> {\n  /**\n   * Height of the skeleton\n   */\n  height?: string | number;\n  /**\n   * Width of the skeleton\n   */\n  width?: string | number;\n  /**\n   * Whether the content is loaded\n   */\n  isLoaded?: boolean;\n  /**\n   * Content to show when loaded\n   */\n  children?: React.ReactNode;\n  /**\n   * Fade-in animation duration in ms\n   */\n  fadeInDuration?: number;\n  /**\n   * Use motion animation for loading state\n   */\n  motion?: boolean;\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n  ({ \n    className,\n    variant,\n    size,\n    shape,\n    animation,\n    height,\n    width,\n    isLoaded = false,\n    children,\n    fadeInDuration = 400,\n    motion: useMotion = false,\n    style,\n    ...props \n  }, ref) => {\n    // Filter out HTML event handlers that conflict with Framer Motion\n    const { \n      onDrag, \n      onDragEnd, \n      onDragStart,\n      onAnimationStart,\n      onAnimationEnd,\n      onAnimationIteration,\n      ...filteredProps \n    } = props;\n    \n    // Show content when loaded\n    if (isLoaded && children) {\n      if (useMotion) {\n        return (\n          <motion.div\n            ref={ref}\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            transition={{ duration: fadeInDuration / 1000 }}\n            className={cn(\"moonui-theme\", className)}\n            style={{\n              height,\n              width,\n              ...style,\n            }}\n            {...filteredProps}\n          >\n            {children}\n          </motion.div>\n        );\n      }\n      \n      return (\n        <div\n          ref={ref}\n          className={cn(\"moonui-theme\", \"animate-fade-in\", className)}\n          style={{\n            animationDuration: `${fadeInDuration}ms`,\n            height,\n            width,\n            ...style,\n          }}\n          {...props}\n        >\n          {children}\n        </div>\n      );\n    }\n\n    const SkeletonElement = useMotion ? motion.div : \"div\";\n    \n    return (\n      <SkeletonElement\n        ref={ref}\n        className={cn(\n          \"moonui-theme\",\n          skeletonVariants({ variant, size, shape, animation }),\n          \"relative isolate\",\n          className\n        )}\n        style={{\n          height,\n          width,\n          ...style,\n        }}\n        {...(useMotion ? skeletonAnimation : {})}\n        {...filteredProps}\n      />\n    );\n  }\n);\nSkeleton.displayName = \"Skeleton\";\n\n/**\n * Text Skeleton Component\n * \n * Creates skeleton loading states for text content\n */\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"children\" | \"isLoaded\"> {\n  /**\n   * Kaç satır gösterileceği\n   */\n  lines?: number;\n  /**\n   * Satır yüksekliği\n   */\n  lineHeight?: string | number;\n  /**\n   * Satırlar arası boşluk\n   */\n  spacing?: string | number;\n  /**\n   * Son satırın genişlik yüzdesi (0-100)\n   */\n  lastLineWidth?: number;\n  /**\n   * Rastgele satır genişlikleri\n   */\n  randomWidths?: boolean;\n}\n\nexport const SkeletonText = React.forwardRef<HTMLDivElement, SkeletonTextProps>(\n  ({ \n    className,\n    lines = 3,\n    lineHeight = \"0.85rem\",\n    spacing = \"0.5rem\",\n    lastLineWidth = 80,\n    randomWidths = false,\n    variant = \"default\",\n    animation = \"pulse\",\n    ...props \n  }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\"moonui-theme\", \"flex flex-col\", className)}\n        style={{ gap: spacing }}\n        {...props}\n      >\n        {Array.from({ length: lines }).map((_, i) => {\n          const isLastLine = i === lines - 1;\n          // Use deterministic widths based on line index for SSR compatibility\n          const widthPercentage = isLastLine\n            ? lastLineWidth\n            : randomWidths\n            ? 85 + (i % 3) * 5 // Creates a pattern: 85%, 90%, 95%, 85%, ...\n            : 100;\n\n          return (\n            <Skeleton\n              key={i}\n              variant={variant}\n              animation={animation}\n              className=\"w-full\"\n              style={{\n                height: lineHeight,\n                width: `${widthPercentage}%`,\n              }}\n            />\n          );\n        })}\n      </div>\n    );\n  }\n);\nSkeletonText.displayName = \"SkeletonText\";\n\n/**\n * Avatar Skeleton Component\n */\nexport interface SkeletonAvatarProps extends Omit<SkeletonProps, \"shape\" | \"size\"> {\n  /**\n   * Avatar boyutu (piksel)\n   */\n  size?: string | number;\n}\n\nexport const SkeletonAvatar = React.forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n  ({ \n    className,\n    size = \"2.5rem\",\n    variant = \"default\",\n    animation = \"pulse\",\n    ...props \n  }, ref) => {\n    return (\n      <Skeleton\n        ref={ref}\n        variant={variant}\n        animation={animation}\n        shape=\"circle\"\n        className={cn(\"moonui-theme\", \"shrink-0\", className)}\n        style={{\n          height: size,\n          width: size,\n        }}\n        {...props}\n      />\n    );\n  }\n);\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n/**\n * Card Skeleton Component\n */\nexport interface SkeletonCardProps extends Omit<SkeletonProps, \"children\" | \"isLoaded\"> {\n  /**\n   * Kart başlığının gösterilip gösterilmeyeceği\n   */\n  showHeader?: boolean;\n  /**\n   * İçerik satır sayısı\n   */\n  contentLines?: number;\n  /**\n   * Alt bilgi gösterilip gösterilmeyeceği\n   */\n  showFooter?: boolean;\n}\n\nexport const SkeletonCard = React.forwardRef<HTMLDivElement, SkeletonCardProps>(\n  ({ \n    className,\n    showHeader = true,\n    contentLines = 3,\n    showFooter = true,\n    variant = \"default\",\n    animation = \"pulse\",\n    ...props \n  }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"overflow-hidden rounded-md border border-border bg-background p-4\",\n          className\n        )}\n        {...props}\n      >\n        {showHeader && (\n          <div className=\"mb-4 flex items-center gap-4\">\n            <SkeletonAvatar size=\"2.5rem\" variant={variant} animation={animation} />\n            <div className=\"flex-1\">\n              <Skeleton \n                variant={variant} \n                animation={animation} \n                className=\"mb-2 h-4 w-1/3\" \n              />\n              <Skeleton \n                variant={variant} \n                animation={animation} \n                className=\"h-3 w-1/4\" \n              />\n            </div>\n          </div>\n        )}\n        \n        <SkeletonText \n          lines={contentLines} \n          variant={variant} \n          animation={animation} \n          className=\"mb-4\" \n        />\n        \n        {showFooter && (\n          <div className=\"flex items-center justify-between mt-4 pt-4 border-t border-border\">\n            <Skeleton \n              variant={variant} \n              animation={animation} \n              className=\"h-4 w-1/4\" \n            />\n            <Skeleton \n              variant={variant} \n              animation={animation} \n              className=\"h-4 w-1/5\" \n            />\n          </div>\n        )}\n      </div>\n    );\n  }\n);\nSkeletonCard.displayName = \"SkeletonCard\";\n\nexport { skeletonVariants };\n","\"use client\"\n\n// Basic Swipeable Card - Free Version\n\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface SwipeableCardProps extends React.HTMLAttributes<HTMLDivElement> {\n  children: React.ReactNode\n  onSwipeLeft?: () => void\n  onSwipeRight?: () => void\n  threshold?: number\n  disabled?: boolean\n}\n\nexport const SwipeableCard = React.forwardRef<HTMLDivElement, SwipeableCardProps>(\n  ({ className, children, onSwipeLeft, onSwipeRight, threshold = 100, disabled = false, ...props }, ref) => {\n    const [startX, setStartX] = React.useState(0)\n    const [currentX, setCurrentX] = React.useState(0)\n    const [isSwiping, setIsSwiping] = React.useState(false)\n\n    const handleTouchStart = (e: React.TouchEvent) => {\n      if (disabled) return\n      setStartX(e.touches[0].clientX)\n      setIsSwiping(true)\n    }\n\n    const handleTouchMove = (e: React.TouchEvent) => {\n      if (disabled || !isSwiping) return\n      setCurrentX(e.touches[0].clientX)\n    }\n\n    const handleTouchEnd = () => {\n      if (disabled || !isSwiping) return\n      \n      const deltaX = currentX - startX\n      \n      if (Math.abs(deltaX) > threshold) {\n        if (deltaX > 0 && onSwipeRight) {\n          onSwipeRight()\n        } else if (deltaX < 0 && onSwipeLeft) {\n          onSwipeLeft()\n        }\n      }\n      \n      setIsSwiping(false)\n      setCurrentX(0)\n      setStartX(0)\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"touch-pan-y select-none transition-transform duration-200\",\n          isSwiping && \"cursor-grabbing\",\n          className\n        )}\n        onTouchStart={handleTouchStart}\n        onTouchMove={handleTouchMove}\n        onTouchEnd={handleTouchEnd}\n        {...props}\n      >\n        {children}\n      </div>\n    )\n  }\n)\n\nSwipeableCard.displayName = \"SwipeableCard\"","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"../../lib/utils\"\n\ntype SwitchSize = \"sm\" | \"md\" | \"lg\";\ntype SwitchVariant = \"primary\" | \"success\" | \"warning\" | \"danger\" | \"secondary\";\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> {\n  /** Switch boyutu */\n  size?: SwitchSize;\n  /** Switch renk varyantı */\n  variant?: SwitchVariant;\n  /** Yükleniyor durumunu gösterir */\n  loading?: boolean;\n  /** Sol tarafta gösterilecek ikon */\n  leftIcon?: React.ReactNode;\n  /** Sağ tarafta gösterilecek ikon */\n  rightIcon?: React.ReactNode;\n  /** Switch açıklaması */\n  description?: string;\n}\n\nconst Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitives.Root>,\n  SwitchProps\n>(({ className, size = \"md\", variant = \"primary\", loading, leftIcon, rightIcon, description, ...props }, ref) => (\n  <div className=\"moonui-theme inline-flex items-center gap-2\">\n    {leftIcon && <span className=\"text-muted-foreground\">{leftIcon}</span>}\n    <SwitchPrimitives.Root\n      className={cn(\n        \"peer relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 dark:data-[state=unchecked]:bg-gray-700/70 dark:focus-visible:ring-primary/40 dark:focus-visible:ring-offset-gray-950\",\n        \n        // Boyutlar\n        size === \"sm\" && \"h-4 w-8\",\n        size === \"md\" && \"h-6 w-11\", \n        size === \"lg\" && \"h-7 w-14\",\n        \n        // Varyantlar (checked durumunda)\n        variant === \"primary\" && \"data-[state=checked]:bg-primary\",\n        variant === \"success\" && \"data-[state=checked]:bg-success\",\n        variant === \"warning\" && \"data-[state=checked]:bg-warning\",\n        variant === \"danger\" && \"data-[state=checked]:bg-error\",\n        variant === \"secondary\" && \"data-[state=checked]:bg-accent\",\n        \n        // Unchecked durumu\n        \"data-[state=unchecked]:bg-input\",\n        \n        // Loading durumu\n        loading && \"opacity-80 cursor-wait\",\n        \n        className\n      )}\n      disabled={loading || props.disabled}\n      {...props}\n      ref={ref}\n    >\n      {loading ? (\n        <div className=\"absolute inset-0 flex items-center justify-center\">\n          <div className=\"h-3 w-3 animate-spin rounded-full border-2 border-gray-300 border-t-primary\"></div>\n        </div>\n      ) : null}\n      \n      <SwitchPrimitives.Thumb\n        className={cn(\n          \"pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform\",\n          // Boyuta göre thumb boyutları\n          size === \"sm\" && \"h-3 w-3 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0\",\n          size === \"md\" && \"h-5 w-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\",\n          size === \"lg\" && \"h-6 w-6 data-[state=checked]:translate-x-7 data-[state=unchecked]:translate-x-0\",\n        )}\n      />\n    </SwitchPrimitives.Root>\n    {rightIcon && <span className=\"text-muted-foreground\">{rightIcon}</span>}\n    {description && <span className=\"text-sm text-muted-foreground\">{description}</span>}\n  </div>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\nexport type { SwitchSize, SwitchVariant }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { Badge } from \"./badge\";\n\nexport interface TagsInputProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"value\" | \"onChange\"> {\n  value: string[];\n  onChange: (tags: string[]) => void;\n  maxTags?: number;\n  variant?: \"primary\" | \"secondary\" | \"destructive\" | \"outline\";\n  allowDuplicates?: boolean;\n  delimiter?: string;\n}\n\nconst TagsInput = React.forwardRef<HTMLInputElement, TagsInputProps>(\n  (\n    {\n      value = [],\n      onChange,\n      maxTags,\n      variant = \"primary\",\n      allowDuplicates = false,\n      delimiter = \",\",\n      placeholder = \"Add tag and press Enter\",\n      className,\n      disabled,\n      ...props\n    },\n    ref\n  ) => {\n    const [inputValue, setInputValue] = React.useState(\"\");\n    const [error, setError] = React.useState(\"\");\n\n    const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n      if (e.key === \"Enter\" || e.key === delimiter) {\n        e.preventDefault();\n        addTag();\n      } else if (e.key === \"Backspace\" && inputValue === \"\" && value.length > 0) {\n        removeTag(value.length - 1);\n      }\n    };\n\n    const addTag = () => {\n      const tag = inputValue.trim();\n      \n      if (!tag) return;\n      \n      if (!allowDuplicates && value.includes(tag)) {\n        setError(\"This tag already exists\");\n        setTimeout(() => setError(\"\"), 2000);\n        return;\n      }\n      \n      if (maxTags && value.length >= maxTags) {\n        setError(`Maximum ${maxTags} tags allowed`);\n        setTimeout(() => setError(\"\"), 2000);\n        return;\n      }\n      \n      onChange([...value, tag]);\n      setInputValue(\"\");\n      setError(\"\");\n    };\n\n    const removeTag = (index: number) => {\n      if (disabled) return;\n      onChange(value.filter((_, i) => i !== index));\n    };\n\n    return (\n      <div className=\"relative\">\n        <div\n          className={cn(\n            \"flex items-center min-h-[2.5rem] w-full flex-wrap gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background\",\n            \"dark:bg-zinc-950/50 dark:border-zinc-800\",\n            \"focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n            disabled && \"cursor-not-allowed opacity-50\",\n            className\n          )}\n        >\n          {value.map((tag, index) => (\n            <Badge\n              key={index}\n              variant={variant}\n              className=\"gap-1 pr-1.5\"\n            >\n              <span className=\"text-xs\">{tag}</span>\n              {!disabled && (\n                <button\n                  type=\"button\"\n                  onClick={() => removeTag(index)}\n                  className=\"ml-1 rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n                >\n                  <X className=\"h-3 w-3 text-muted-foreground hover:text-foreground transition-colors\" />\n                </button>\n              )}\n            </Badge>\n          ))}\n          <input\n            ref={ref}\n            type=\"text\"\n            value={inputValue}\n            onChange={(e) => setInputValue(e.target.value)}\n            onKeyDown={handleKeyDown}\n            onBlur={addTag}\n            disabled={disabled}\n            placeholder={value.length === 0 ? placeholder : \"\"}\n            className={cn(\n              \"flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n              \"dark:placeholder:text-zinc-500\",\n              \"min-w-[120px]\",\n              disabled && \"cursor-not-allowed\"\n            )}\n            {...props}\n          />\n        </div>\n        {error && (\n          <p className=\"mt-1 text-xs text-destructive\">{error}</p>\n        )}\n      </div>\n    );\n  }\n);\n\nTagsInput.displayName = \"TagsInput\";\n\nexport { TagsInput };","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\nimport { Loader2 } from \"lucide-react\"\n\n/**\n * Textarea Variant Styles\n */\nconst textareaVariants = cva(\n  [\n    \"flex w-full rounded-md px-3 py-2 text-sm transition-all duration-200\",\n    \"text-foreground placeholder:text-muted-foreground dark:placeholder:text-gray-500\",\n    \"disabled:cursor-not-allowed disabled:opacity-50\",\n    \"focus-visible:outline-none dark:text-gray-200\",\n    \"resize-none\" // Always disable manual resize, we control it\n  ],\n  {\n    variants: {\n      variant: {\n        default: \"border border-gray-300 dark:border-gray-700 bg-background dark:bg-gray-800/80 hover:border-gray-400 dark:hover:border-gray-600 focus-visible:ring-2 focus-visible:ring-primary/30 dark:focus-visible:ring-primary/20 focus-visible:border-primary dark:focus-visible:border-primary/80 dark:shadow-inner dark:shadow-gray-950/10\",\n        outline: \"border-2 border-gray-300 dark:border-gray-700 bg-transparent hover:border-gray-400 dark:hover:border-gray-600 focus-visible:border-primary dark:focus-visible:border-primary/80\",\n        ghost: \"border-none bg-transparent hover:bg-gray-100/50 dark:hover:bg-gray-800/30 focus-visible:bg-transparent\",\n        underline: \"border-t-0 border-l-0 border-r-0 border-b-2 border-gray-300 dark:border-gray-600 rounded-none px-0 hover:border-gray-400 dark:hover:border-gray-500 focus-visible:ring-0 focus-visible:border-primary dark:focus-visible:border-primary/80 bg-transparent dark:bg-transparent\"\n      },\n      size: {\n        sm: \"min-h-[60px] text-xs\",\n        md: \"min-h-[80px] text-sm\",\n        lg: \"min-h-[120px] text-base\"\n      },\n      isError: {\n        true: \"border-error focus-visible:ring-error/30 focus-visible:border-error hover:border-error/80 dark:hover:border-error/80\",\n        false: \"\"\n      },\n      isSuccess: {\n        true: \"border-success focus-visible:ring-success/30 focus-visible:border-success hover:border-success/80 dark:hover:border-success/80\",\n        false: \"\"\n      }\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n      isError: false,\n      isSuccess: false\n    }\n  }\n)\n\nexport interface TextareaProps\n  extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">,\n    Omit<VariantProps<typeof textareaVariants>, \"isError\" | \"isSuccess\"> {\n  /** Hata mesajı */\n  error?: boolean | string\n  /** Başarı mesajı */\n  success?: boolean | string\n  /** Yükleniyor durumu */\n  loading?: boolean\n  /** Otomatik yükseklik ayarlama */\n  autoResize?: boolean\n  /** Maksimum yükseklik (px) */\n  maxHeight?: number\n  /** Karakter sayacı göster */\n  characterCount?: boolean\n  /** Wrapper için ek sınıflar */\n  wrapperClassName?: string\n  /** Mesaj için ek sınıflar */\n  messageClassName?: string\n}\n\n/**\n * Advanced Textarea Component\n *\n * Features:\n * - Auto-resize based on content\n * - Character count display\n * - Max height constraint\n * - Multiple variants\n * - Error/Success states\n * - Loading state\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n  ({\n    className,\n    wrapperClassName,\n    messageClassName,\n    variant,\n    size,\n    error,\n    success,\n    loading,\n    autoResize = false,\n    maxHeight,\n    characterCount = false,\n    disabled,\n    maxLength,\n    value,\n    defaultValue,\n    onChange,\n    ...props\n  }, ref) => {\n    const textareaRef = React.useRef<HTMLTextAreaElement>(null)\n    const [internalValue, setInternalValue] = React.useState(value || defaultValue || \"\")\n\n    // Merge refs\n    React.useImperativeHandle(ref, () => textareaRef.current!)\n\n    // Auto-resize logic\n    const adjustHeight = React.useCallback(() => {\n      const textarea = textareaRef.current\n      if (!textarea || !autoResize) return\n\n      // Reset height to get correct scrollHeight\n      textarea.style.height = 'auto'\n\n      // Set new height\n      const newHeight = textarea.scrollHeight\n      if (maxHeight && newHeight > maxHeight) {\n        textarea.style.height = `${maxHeight}px`\n        textarea.style.overflowY = 'auto'\n      } else {\n        textarea.style.height = `${newHeight}px`\n        textarea.style.overflowY = 'hidden'\n      }\n    }, [autoResize, maxHeight])\n\n    // Adjust height on value change\n    React.useEffect(() => {\n      adjustHeight()\n    }, [internalValue, adjustHeight])\n\n    // Handle value changes\n    React.useEffect(() => {\n      if (value !== undefined) {\n        setInternalValue(value)\n      }\n    }, [value])\n\n    const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n      setInternalValue(e.target.value)\n      onChange?.(e)\n    }\n\n    // Character count\n    const currentLength = String(internalValue).length\n    const showCharCount = characterCount && (maxLength !== undefined || currentLength > 0)\n\n    // Messages\n    const errorMessage = typeof error === \"string\" ? error : undefined\n    const successMessage = typeof success === \"string\" ? success : undefined\n    const showMessage = errorMessage || successMessage\n\n    return (\n      <div className={cn(\"moonui-theme\", \"space-y-1.5 w-full\", wrapperClassName)}>\n        <div className=\"relative\">\n          <textarea\n            ref={textareaRef}\n            className={cn(\n              textareaVariants({\n                variant,\n                size,\n                isError: !!error,\n                isSuccess: !!success\n              }),\n              loading && \"pr-10\",\n              className\n            )}\n            disabled={disabled || loading}\n            value={value}\n            defaultValue={defaultValue}\n            onChange={handleChange}\n            maxLength={maxLength}\n            aria-invalid={!!error || undefined}\n            aria-describedby={\n              errorMessage ? `${props.id || ''}-error` :\n              successMessage ? `${props.id || ''}-success` :\n              undefined\n            }\n            {...props}\n          />\n\n          {loading && (\n            <div className=\"absolute top-3 right-3 text-gray-500\">\n              <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden=\"true\" />\n            </div>\n          )}\n        </div>\n\n        <div className=\"flex items-center justify-between\">\n          {/* Error/Success Message */}\n          {showMessage && (\n            <p\n              className={cn(\n                \"text-xs transition-all\",\n                errorMessage && \"text-error\",\n                successMessage && \"text-success\",\n                messageClassName\n              )}\n              id={\n                errorMessage ? `${props.id || ''}-error` :\n                successMessage ? `${props.id || ''}-success` :\n                undefined\n              }\n            >\n              {errorMessage || successMessage}\n            </p>\n          )}\n\n          {/* Character Count */}\n          {showCharCount && (\n            <p className=\"text-xs text-muted-foreground dark:text-gray-500 ml-auto\">\n              {currentLength}{maxLength !== undefined && ` / ${maxLength}`}\n            </p>\n          )}\n        </div>\n      </div>\n    )\n  }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }","\"use client\";\n\nimport * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Viewport>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Viewport\n    ref={ref}\n    className={cn(\n      \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n      className\n    )}\n    {...props}\n  />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n  \"group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-8 shadow-sm transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n  {\n    variants: {\n      variant: {\n        default: \"border bg-background text-foreground\",\n        destructive:\n          \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n        success:\n          \"border-green-200 bg-green-50 text-green-900 dark:border-green-800 dark:bg-green-900/20 dark:text-green-100\",\n        warning:\n          \"border-orange-200 bg-orange-50 text-orange-900 dark:border-orange-800 dark:bg-orange-900/20 dark:text-orange-100\",\n        info:\n          \"border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-800 dark:bg-blue-900/20 dark:text-blue-100\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n);\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n  VariantProps<typeof toastVariants>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nconst Toast = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Root>,\n  ToastProps\n>(({ className, variant, ...props }, ref) => {\n  return (\n    <ToastPrimitives.Root\n      ref={ref}\n      className={cn(\"moonui-theme\", toastVariants({ variant }), className)}\n      {...props}\n    />\n  );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Action>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Action\n    ref={ref}\n    className={cn(\n      \"inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive\",\n      className\n    )}\n    {...props}\n  />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Close>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Close\n    ref={ref}\n    className={cn(\n      \"absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n      className\n    )}\n    toast-close=\"\"\n    {...props}\n  >\n    <X className=\"h-4 w-4\" />\n  </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Title>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Title\n    ref={ref}\n    className={cn(\"moonui-theme\", \"text-sm font-semibold [&+div]:text-xs\", className)}\n    {...props}\n  />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Description>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Description\n    ref={ref}\n    className={cn(\"moonui-theme\", \"text-sm opacity-90\", className)}\n    {...props}\n  />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastData = {\n  id: string;\n  title?: React.ReactNode;\n  description?: React.ReactNode;\n  action?: ToastActionElement;\n  variant?: ToastProps[\"variant\"];\n  duration?: number;\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n};\n\nconst TOAST_LIMIT = 5;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype State = {\n  toasts: ToastData[];\n};\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n  if (toastTimeouts.has(toastId)) {\n    return;\n  }\n\n  const timeout = setTimeout(() => {\n    toastTimeouts.delete(toastId);\n    dispatch({\n      type: \"REMOVE_TOAST\",\n      toastId: toastId,\n    });\n  }, TOAST_REMOVE_DELAY);\n\n  toastTimeouts.set(toastId, timeout);\n};\n\nconst reducer = (state: State, action: any): State => {\n  switch (action.type) {\n    case \"ADD_TOAST\":\n      return {\n        ...state,\n        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n      };\n\n    case \"UPDATE_TOAST\":\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === action.toast.id ? { ...t, ...action.toast } : t\n        ),\n      };\n\n    case \"DISMISS_TOAST\": {\n      const { toastId } = action;\n\n      if (toastId) {\n        addToRemoveQueue(toastId);\n      } else {\n        state.toasts.forEach((toast) => {\n          addToRemoveQueue(toast.id);\n        });\n      }\n\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === toastId || toastId === undefined\n            ? {\n                ...t,\n                open: false,\n              }\n            : t\n        ),\n      };\n    }\n    case \"REMOVE_TOAST\":\n      if (action.toastId === undefined) {\n        return {\n          ...state,\n          toasts: [],\n        };\n      }\n      return {\n        ...state,\n        toasts: state.toasts.filter((t) => t.id !== action.toastId),\n      };\n    default:\n      return state;\n  }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\nlet toastCounter = 0;\n\nfunction dispatch(action: any) {\n  memoryState = reducer(memoryState, action);\n  listeners.forEach((listener) => {\n    listener(memoryState);\n  });\n}\n\ntype Toast = Omit<ToastData, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n  const id = `toast-${Date.now()}-${++toastCounter}`;\n\n  const update = (props: ToastData) =>\n    dispatch({\n      type: \"UPDATE_TOAST\",\n      toast: { ...props, id },\n    });\n  const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n  dispatch({\n    type: \"ADD_TOAST\",\n    toast: {\n      ...props,\n      id,\n      open: true,\n      onOpenChange: (open: boolean) => {\n        if (!open) dismiss();\n      },\n    },\n  });\n\n  return {\n    id: id,\n    dismiss,\n    update,\n  };\n}\n\nfunction useToast() {\n  const [state, setState] = React.useState<State>(memoryState);\n\n  React.useEffect(() => {\n    listeners.push(setState);\n    return () => {\n      const index = listeners.indexOf(setState);\n      if (index > -1) {\n        listeners.splice(index, 1);\n      }\n    };\n  }, [state]);\n\n  return {\n    ...state,\n    toast,\n    dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n  };\n}\n\nfunction Toaster() {\n  const { toasts } = useToast();\n\n  return (\n    <ToastProvider>\n      {toasts.map(function ({ id, title, description, action, variant, open, onOpenChange, ...props }) {\n        return (\n          <Toast key={id} variant={variant} open={open} onOpenChange={onOpenChange} {...props}>\n            <div className=\"grid gap-1\">\n              {title && <ToastTitle>{title}</ToastTitle>}\n              {description && (\n                <ToastDescription>{description}</ToastDescription>\n              )}\n            </div>\n            {action}\n            <ToastClose />\n          </Toast>\n        );\n      })}\n      <ToastViewport />\n    </ToastProvider>\n  );\n}\n\nexport {\n  type ToastProps,\n  type ToastActionElement,\n  ToastProvider,\n  ToastViewport,\n  Toast,\n  ToastTitle,\n  ToastDescription,\n  ToastAction,\n  ToastClose,\n  Toaster,\n  toast,\n  useToast,\n};\n"]}