@customafk/lunas-ui 0.1.95 → 0.1.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/{button-DgVnlWul.d.mts → button-BnpEQNcI.d.cts} +4 -4
  2. package/dist/{button-BRHW1rSO.d.cts → button-DmtBrsu5.d.mts} +5 -5
  3. package/dist/cards/grid-product-card.cjs +1 -1
  4. package/dist/cards/grid-product-card.mjs +1 -1
  5. package/dist/cards/product-card.cjs +1 -1
  6. package/dist/cards/product-card.mjs +1 -1
  7. package/dist/cards/simple-card.cjs +1 -1
  8. package/dist/cards/simple-card.d.mts +2 -2
  9. package/dist/cards/simple-card.mjs +1 -1
  10. package/dist/{command-BciJADha.cjs → command-Dd4OnuB0.cjs} +2 -2
  11. package/dist/{command-BciJADha.cjs.map → command-Dd4OnuB0.cjs.map} +1 -1
  12. package/dist/{command-DSvEsWG8.mjs → command-Uq5FAdtW.mjs} +2 -2
  13. package/dist/{command-DSvEsWG8.mjs.map → command-Uq5FAdtW.mjs.map} +1 -1
  14. package/dist/data-display/country.cjs +1 -1
  15. package/dist/data-display/country.mjs +1 -1
  16. package/dist/data-display/empty.d.cts +2 -2
  17. package/dist/data-display/empty.d.mts +2 -2
  18. package/dist/data-display/name.cjs +1 -1
  19. package/dist/data-display/name.mjs +1 -1
  20. package/dist/data-display/statistic.d.cts +2 -2
  21. package/dist/data-display/user.cjs +1 -1
  22. package/dist/data-display/user.mjs +1 -1
  23. package/dist/{dialog-D5TBBX99.cjs → dialog-2N-D9B9o.cjs} +2 -2
  24. package/dist/{dialog-D5TBBX99.cjs.map → dialog-2N-D9B9o.cjs.map} +1 -1
  25. package/dist/{dialog-zsQVCZzj.d.cts → dialog-BWDpdfq4.d.cts} +12 -12
  26. package/dist/{dialog-B4h77Z-1.d.mts → dialog-CfAXxmem.d.mts} +12 -12
  27. package/dist/{dialog-DSvmcuYl.mjs → dialog-DTz8ngeU.mjs} +2 -2
  28. package/dist/{dialog-DSvmcuYl.mjs.map → dialog-DTz8ngeU.mjs.map} +1 -1
  29. package/dist/dialogs/confirm-dialog.cjs +1 -1
  30. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  31. package/dist/dialogs/confirm-dialog.d.cts +3 -0
  32. package/dist/dialogs/confirm-dialog.d.mts +3 -0
  33. package/dist/dialogs/confirm-dialog.mjs +1 -1
  34. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  35. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +24 -24
  36. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +24 -24
  37. package/dist/dialogs/error-dialog.cjs +1 -1
  38. package/dist/dialogs/error-dialog.mjs +1 -1
  39. package/dist/dialogs/loading-dialog.cjs +1 -1
  40. package/dist/dialogs/loading-dialog.mjs +1 -1
  41. package/dist/features/descriptions/index.cjs +1 -1
  42. package/dist/features/descriptions/index.mjs +1 -1
  43. package/dist/features/search-modal/index.cjs +1 -1
  44. package/dist/features/search-modal/index.d.cts +2 -2
  45. package/dist/features/search-modal/index.d.mts +2 -2
  46. package/dist/features/search-modal/index.mjs +1 -1
  47. package/dist/features/tables/index.cjs +1 -1
  48. package/dist/features/tables/index.cjs.map +1 -1
  49. package/dist/features/tables/index.d.cts +23 -23
  50. package/dist/features/tables/index.d.mts +1 -1
  51. package/dist/features/tables/index.mjs +1 -1
  52. package/dist/features/tables/index.mjs.map +1 -1
  53. package/dist/features/tanstack-form/index.cjs +1 -1
  54. package/dist/features/tanstack-form/index.d.cts +224 -224
  55. package/dist/features/tanstack-form/index.mjs +1 -1
  56. package/dist/{input-VtO0d8O-.d.cts → input-B4scaWjT.d.mts} +5 -5
  57. package/dist/{input-Dv7UKl6Z.d.mts → input-Bq2N5bvL.d.cts} +6 -6
  58. package/dist/layouts/flex.d.cts +2 -2
  59. package/dist/layouts/flex.d.mts +2 -2
  60. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  61. package/dist/pages/FeatureDeveloping.d.mts +2 -2
  62. package/dist/pages/FeatureFixing.d.cts +2 -2
  63. package/dist/pages/FeatureFixing.d.mts +2 -2
  64. package/dist/pages/NotAuthorized.d.cts +2 -2
  65. package/dist/pages/NotAuthorized.d.mts +2 -2
  66. package/dist/pages/NotFound.d.cts +2 -2
  67. package/dist/pages/NotFound.d.mts +2 -2
  68. package/dist/paragraph-BBye8n4M.cjs +2 -0
  69. package/dist/paragraph-BBye8n4M.cjs.map +1 -0
  70. package/dist/paragraph-BS88Xdo7.mjs +2 -0
  71. package/dist/paragraph-BS88Xdo7.mjs.map +1 -0
  72. package/dist/typography/paragraph.cjs +1 -1
  73. package/dist/typography/paragraph.d.cts +4 -4
  74. package/dist/typography/paragraph.d.mts +2 -2
  75. package/dist/typography/paragraph.mjs +1 -1
  76. package/dist/typography/title.d.cts +2 -2
  77. package/dist/typography/title.d.mts +2 -2
  78. package/dist/ui/alert-dialog.cjs +1 -1
  79. package/dist/ui/alert-dialog.cjs.map +1 -1
  80. package/dist/ui/alert-dialog.d.cts +12 -12
  81. package/dist/ui/alert-dialog.d.mts +12 -12
  82. package/dist/ui/alert-dialog.mjs +1 -1
  83. package/dist/ui/alert-dialog.mjs.map +1 -1
  84. package/dist/ui/alert.d.cts +6 -6
  85. package/dist/ui/alert.d.mts +4 -4
  86. package/dist/ui/aspect-ratio.d.cts +2 -2
  87. package/dist/ui/aspect-ratio.d.mts +2 -2
  88. package/dist/ui/avatar.d.cts +4 -4
  89. package/dist/ui/avatar.d.mts +4 -4
  90. package/dist/ui/badge.d.cts +4 -4
  91. package/dist/ui/badge.d.mts +4 -4
  92. package/dist/ui/breadcrumb.d.cts +8 -8
  93. package/dist/ui/breadcrumb.d.mts +8 -8
  94. package/dist/ui/button-group.d.cts +6 -6
  95. package/dist/ui/button-group.d.mts +6 -6
  96. package/dist/ui/button.d.cts +1 -1
  97. package/dist/ui/button.d.mts +1 -1
  98. package/dist/ui/buttons/add-new.cjs +1 -1
  99. package/dist/ui/buttons/add-new.mjs +1 -1
  100. package/dist/ui/buttons/refresh.cjs +1 -1
  101. package/dist/ui/buttons/refresh.mjs +1 -1
  102. package/dist/ui/calendar.d.cts +4 -4
  103. package/dist/ui/calendar.d.mts +4 -4
  104. package/dist/ui/card.cjs +1 -1
  105. package/dist/ui/card.d.cts +8 -8
  106. package/dist/ui/card.d.mts +8 -8
  107. package/dist/ui/card.mjs +1 -1
  108. package/dist/ui/carousel.d.cts +7 -7
  109. package/dist/ui/carousel.d.mts +7 -7
  110. package/dist/ui/checkbox.d.cts +2 -2
  111. package/dist/ui/checkbox.d.mts +2 -2
  112. package/dist/ui/collapsible.d.cts +4 -4
  113. package/dist/ui/collapsible.d.mts +4 -4
  114. package/dist/ui/command.cjs +1 -1
  115. package/dist/ui/command.d.cts +11 -11
  116. package/dist/ui/command.d.mts +11 -11
  117. package/dist/ui/command.mjs +1 -1
  118. package/dist/ui/context-menu.d.cts +16 -16
  119. package/dist/ui/context-menu.d.mts +16 -16
  120. package/dist/ui/dialog.cjs +1 -1
  121. package/dist/ui/dialog.d.cts +1 -1
  122. package/dist/ui/dialog.d.mts +1 -1
  123. package/dist/ui/dialog.mjs +1 -1
  124. package/dist/ui/drawer.d.cts +11 -11
  125. package/dist/ui/drawer.d.mts +11 -11
  126. package/dist/ui/dropdown-menu.d.cts +16 -16
  127. package/dist/ui/dropdown-menu.d.mts +16 -16
  128. package/dist/ui/empty.d.cts +9 -9
  129. package/dist/ui/empty.d.mts +9 -9
  130. package/dist/ui/field.d.cts +24 -24
  131. package/dist/ui/field.d.mts +22 -22
  132. package/dist/ui/file-uploader.d.cts +2 -2
  133. package/dist/ui/file-uploader.d.mts +2 -2
  134. package/dist/ui/form.d.cts +11 -11
  135. package/dist/ui/form.d.mts +11 -11
  136. package/dist/ui/hover-card.d.cts +4 -4
  137. package/dist/ui/hover-card.d.mts +4 -4
  138. package/dist/ui/input-otp.d.cts +5 -5
  139. package/dist/ui/input-otp.d.mts +5 -5
  140. package/dist/ui/input.d.cts +1 -1
  141. package/dist/ui/input.d.mts +1 -1
  142. package/dist/ui/inputs/search-input.d.cts +3 -3
  143. package/dist/ui/inputs/search-input.d.mts +3 -3
  144. package/dist/ui/item.d.cts +14 -14
  145. package/dist/ui/item.d.mts +14 -14
  146. package/dist/ui/label.d.cts +2 -2
  147. package/dist/ui/label.d.mts +2 -2
  148. package/dist/ui/menubar.d.cts +17 -17
  149. package/dist/ui/menubar.d.mts +17 -17
  150. package/dist/ui/multi-select.cjs +1 -1
  151. package/dist/ui/multi-select.d.cts +2 -2
  152. package/dist/ui/multi-select.d.mts +3 -3
  153. package/dist/ui/multi-select.mjs +1 -1
  154. package/dist/ui/navigation-menu.d.cts +11 -11
  155. package/dist/ui/navigation-menu.d.mts +11 -11
  156. package/dist/ui/pagination.d.cts +9 -9
  157. package/dist/ui/pagination.d.mts +9 -9
  158. package/dist/ui/popover.d.cts +6 -6
  159. package/dist/ui/popover.d.mts +6 -6
  160. package/dist/ui/progress.d.cts +2 -2
  161. package/dist/ui/progress.d.mts +2 -2
  162. package/dist/ui/radio-group.d.cts +3 -3
  163. package/dist/ui/radio-group.d.mts +3 -3
  164. package/dist/ui/resizable.d.cts +9 -9
  165. package/dist/ui/resizable.d.mts +9 -9
  166. package/dist/ui/scroll-area.d.cts +6 -6
  167. package/dist/ui/scroll-area.d.mts +6 -6
  168. package/dist/ui/select.d.cts +9 -9
  169. package/dist/ui/select.d.mts +9 -9
  170. package/dist/ui/separator.d.cts +2 -2
  171. package/dist/ui/separator.d.mts +2 -2
  172. package/dist/ui/sheet.d.cts +9 -9
  173. package/dist/ui/sheet.d.mts +9 -9
  174. package/dist/ui/sidebar.d.cts +28 -28
  175. package/dist/ui/sidebar.d.mts +28 -28
  176. package/dist/ui/skeleton.d.cts +2 -2
  177. package/dist/ui/skeleton.d.mts +2 -2
  178. package/dist/ui/slider.d.cts +2 -2
  179. package/dist/ui/slider.d.mts +2 -2
  180. package/dist/ui/sonner.d.cts +2 -2
  181. package/dist/ui/sonner.d.mts +2 -2
  182. package/dist/ui/spinner.d.cts +2 -2
  183. package/dist/ui/spinner.d.mts +2 -2
  184. package/dist/ui/switch.d.cts +2 -2
  185. package/dist/ui/switch.d.mts +2 -2
  186. package/dist/ui/table.d.cts +18 -18
  187. package/dist/ui/table.d.mts +18 -18
  188. package/dist/ui/tabs.d.cts +5 -5
  189. package/dist/ui/tabs.d.mts +5 -5
  190. package/dist/ui/textarea.d.cts +2 -2
  191. package/dist/ui/textarea.d.mts +2 -2
  192. package/dist/ui/toggle-group.d.cts +3 -3
  193. package/dist/ui/toggle-group.d.mts +3 -3
  194. package/dist/ui/toggle.d.cts +4 -4
  195. package/dist/ui/toggle.d.mts +4 -4
  196. package/dist/ui/tooltip.d.cts +5 -5
  197. package/dist/ui/tooltip.d.mts +5 -5
  198. package/package.json +1 -1
  199. package/styles/typography.css +2 -0
  200. package/dist/paragraph-4z_6Z5aj.cjs +0 -2
  201. package/dist/paragraph-4z_6Z5aj.cjs.map +0 -1
  202. package/dist/paragraph-BTJV4aeF.mjs +0 -2
  203. package/dist/paragraph-BTJV4aeF.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["UITableEmpty: React.FC","MinusIcon","UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}>","XIcon","UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}>","XIcon","CheckIcon","UITableDateDisplay: React.FC<Props>","TooltipProvider","Tooltip","TooltipTrigger","Badge","DateDisplay","TooltipContent","UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","TooltipContent","UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}>","DropdownMenu","DropdownMenuTrigger","Button","MoreVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","UITableNameDisplay: React.FC<NameDisplayProps>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","UITablePermalink: React.FC<{ href: string; label?: string }>","ExternalLinkIcon","UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>>","Tooltip","TooltipTrigger","TooltipContent","UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}>","Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent","options: Intl.NumberFormatOptions","Flex","UITableUserDataDisplay: React.FC<Props>","Flex","Avatar","AvatarFallback","UserRoundIcon","colorHashLight","Paragraph","DropdownMenu","DropdownMenuTrigger","EllipsisVerticalIcon","DropdownMenuContent","DropdownMenuGroup","Activity","DropdownMenuItem","DropdownMenuShortcut","PinOffIcon","MoveLeftIcon","MoveRightIcon","Checkbox","Spinner","BoxIcon","pinnedWidth: number","flexibleColumnsCount: number","fixedSizeTotal: number","width","ChevronDown","AlertTriangle","UITableContainer: React.FC<React.PropsWithChildren>","ResizablePanelGroup","ResizablePanel","ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}>","Checkbox","ResizablePanel","Activity","Separator","Button","ListFilterPlus","Columns4Icon","ListFilterIcon","rows","UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n>","Input","SearchIcon","ArrowRightIcon","ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>>","UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}>","CirclePlus","RefreshCwIcon","DownloadIcon","UITableTooltip: React.FC<React.PropsWithChildren>"],"sources":["../../../packages/components/features/tables/components/atoms/empty.tsx","../../../packages/components/features/tables/components/atoms/badge-display.tsx","../../../packages/components/features/tables/components/atoms/boolean-display.tsx","../../../packages/components/features/tables/components/atoms/date-display.tsx","../../../packages/components/features/tables/components/atoms/description-display.tsx","../../../packages/components/features/tables/components/atoms/more-button.tsx","../../../packages/components/features/tables/components/atoms/name-display.tsx","../../../packages/components/features/tables/components/atoms/permalink.tsx","../../../packages/components/features/tables/components/atoms/phone-number.tsx","../../../packages/components/features/tables/components/atoms/remove-button.tsx","../../../packages/components/features/tables/components/atoms/statistic.tsx","../../../packages/components/features/tables/components/atoms/user.tsx","../../../packages/components/features/tables/constants.ts","../../../packages/components/features/tables/hooks/use-context.ts","../../../packages/components/features/tables/components/common.tsx","../../../packages/components/features/tables/components/table.tsx","../../../packages/components/features/tables/components/table/filter.tsx","../../../packages/components/features/tables/components/table/provider.tsx","../../../packages/components/features/tables/components/table/tooltip.tsx"],"sourcesContent":["import { MinusIcon } from 'lucide-react';\n\nexport const UITableEmpty: React.FC = () => {\n return (\n <div className=\"flex gap-0 text-text-positive-weak\">\n <MinusIcon size={16} />\n <MinusIcon size={16} />\n </div>\n );\n};\n","import { XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}> = ({ label, onClick, onRemove }) => {\n if (!label) return <UITableEmpty />;\n if (onRemove) {\n return (\n <div\n className=\"flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n <button\n className=\"cursor-pointer text-text-positive-weak hover:text-text-positive-strong\"\n onClick={e => {\n onRemove?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <XIcon size={12} />\n </button>\n </div>\n );\n }\n return (\n <button\n className=\"w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n </button>\n );\n};\n","import { CheckIcon, XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}> = ({ value }) => {\n if (value === null || value === undefined) return <UITableEmpty />;\n if (value === false) {\n return (\n <div className=\"text-danger-strong\">\n <XIcon />\n </div>\n );\n }\n return (\n <div className=\"text-success-strong\">\n <CheckIcon />\n </div>\n );\n};\n","import { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from '@/components/data-display/date';\nimport { UITableEmpty } from './empty';\n\ntype Props = {\n date: Date | string | number | null | undefined;\n};\nexport const UITableDateDisplay: React.FC<Props> = ({ date }) => {\n if (typeof date === 'undefined' || date === null) return <UITableEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"font-normal text-white\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent className=\"rounded\">\n <DateDisplay date={date} format=\"full\" showTime className=\"font-medium text-text-negative text-xs\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content === undefined || content === null) {\n return <UITableEmpty />;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak\">{content}</div>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { MoreVerticalIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nexport const UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}> = ({ items = [] }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" color=\"secondary\" className=\"size-9 rounded-full\">\n <MoreVerticalIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {items.map(item => (\n <DropdownMenuItem\n key={item.id}\n className=\"px-3\"\n onSelect={e => {\n item.onClick(item.id);\n e.stopPropagation();\n }}\n >\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Paragraph } from '@/components/typography/paragraph';\nimport { UITableEmpty } from './empty';\n\ntype NameDisplayProps = {\n name?: string | null | undefined;\n};\n\nexport const UITableNameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n if (!name) return <UITableEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { ExternalLinkIcon } from 'lucide-react';\n\nexport const UITablePermalink: React.FC<{ href: string; label?: string }> = ({ href, label }) => {\n return (\n <a href={href} target=\"_blank\" className=\"inline-flex items-center gap-1 truncate text-primary text-sm underline\" rel=\"noopener noreferrer\">\n <span>{label || href}</span>\n <ExternalLinkIcon size={14} />\n </a>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p className=\"font-number text-secondary-foreground text-sm tabular-nums\">{value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}</p>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\ntype Props = {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number; // Số chữ số thập phân\n roundingMode?: 'round' | 'floor' | 'ceil'; // Kiểu làm tròn\n showTrailingZeros?: boolean; // Hiển thị số 0 cuối\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; // Kích thước của component\n value: number | string | null | undefined;\n};\n\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number text-lg text-secondary-foreground tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n","import { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Paragraph } from '@/components/typography/paragraph';\n\ntype Props = {\n uuid?: string | null | undefined;\n username?: string | null | undefined;\n email?: string | null | undefined;\n};\n\nexport const UITableUserDataDisplay: React.FC<Props> = ({ uuid, username, email }) => {\n return (\n <Flex wrap={false} gap=\"sm\" padding=\"none\">\n {!uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback className=\"bg-muted-weak\">\n <UserRoundIcon size={28} className=\"text-text-negative\" />\n </AvatarFallback>\n </Avatar>\n )}\n {uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n )}\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"font-medium text-sm text-text-positive-weak\">{username ?? 'Unknown User'}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-text-positive-weak text-xs\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n","export const SELECT_WIDTH = 60;\nexport const ACTION_WIDTH = 60;\nexport const TABLE_HEADER_Z_INDEX = 20;\nexport const PINNED_COLUMN_Z_INDEX = 20;\n","import { createContext, use } from 'react';\n\nimport type { AnyEntity } from '@/types';\nimport type { TTableBodyContext, TTableContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext } from '../types';\n\nexport const TableInnerWrapperContext = createContext<TTableInnerWrapperContext | null>(null);\n\nexport const useUITableInnerWrapperContext = () => {\n const ctx = use(TableInnerWrapperContext);\n if (!ctx) {\n throw new Error('useTableInnerWrapperContext must be used within a TableInnerWrapperProvider');\n }\n return ctx;\n};\n\nexport const TableInnerTableContext = createContext<TTableInnerTableContext | null>(null);\n\nexport const useUITableInnerTableContext = () => {\n const ctx = use(TableInnerTableContext);\n if (!ctx) {\n throw new Error('useTableInnerTableContext must be used within a TableInnerTableProvider');\n }\n return ctx;\n};\n\nexport const TableHeadRowContext = createContext<TTableHeadRowContext | null>(null);\n\nexport const useUITableHeadRowContext = () => {\n const ctx = use(TableHeadRowContext);\n if (!ctx) {\n throw new Error('useTableHeaderRowContext must be used within a TableHeaderRowProvider');\n }\n return ctx;\n};\n\nexport const TableBodyContext = createContext<TTableBodyContext | null>(null);\n\nexport const useUITableBodyContext = () => {\n const ctx = use(TableBodyContext);\n if (!ctx) {\n throw new Error('useTableBodyContext must be used within a TableBodyProvider');\n }\n return ctx;\n};\n\nexport const TableRowContext = createContext<TTableRowContext<AnyEntity, AnyEntity> | null>(null);\n\nexport const useUITableRowContext = () => {\n const ctx = use(TableRowContext);\n if (!ctx) {\n throw new Error('useTableRowContext must be used within a TableRowProvider');\n }\n return ctx;\n};\n\nexport const TableContext = createContext<TTableContext<AnyEntity> | null>(null);\n\nexport const useUITableContext = () => {\n const context = use(TableContext);\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context;\n};\n","import { Activity, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { flexRender } from '@tanstack/react-table';\n\nimport { AlertTriangle, BoxIcon, ChevronDown, EllipsisVerticalIcon, MoveLeftIcon, MoveRightIcon, PinOffIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Spinner } from '@/components/ui/spinner';\n\nimport type { AnyEntity } from '@/types';\nimport { ACTION_WIDTH, PINNED_COLUMN_Z_INDEX, SELECT_WIDTH, TABLE_HEADER_Z_INDEX } from '../constants';\nimport {\n useUITableBodyContext,\n useUITableHeadRowContext,\n useUITableInnerTableContext,\n useUITableInnerWrapperContext,\n useUITableRowContext,\n} from '../hooks/use-context';\nimport type {\n TUITableBody,\n TUITableCell,\n TUITableCellActions,\n TUITableCellSelect,\n TUITableEmptyDisplay,\n TUITableFooter,\n TUITableHead,\n TUITableHeadCell,\n TUITableHeadCellOption,\n TUITableHeadCellSelect,\n TUITableHeadRow,\n TUITableInnerTable,\n TUITableInnerWrapper,\n TUITableLoadMore,\n TUITableRow,\n TUITableWrapper,\n} from '../types';\n\nexport const UITableHeadCellOption = memo<TUITableHeadCellOption>(({ isPinned, onLeftPin, onRightPin, onUnpin, className }) => {\n const handleLeftPin = useCallback(() => {\n onLeftPin?.('left');\n }, [onLeftPin]);\n\n const handleRightPin = useCallback(() => {\n onRightPin?.('right');\n }, [onRightPin]);\n\n const handleUnpin = useCallback(() => {\n onUnpin?.(false);\n }, [onUnpin]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'absolute right-2 z-10 p-0.5 opacity-0',\n 'cursor-pointer rounded-full transition-all',\n 'text-text-positive-weak',\n '[&>svg]:size-4',\n 'group-hover:opacity-100',\n 'hover:bg-muted-muted hover:text-text-positive',\n className\n )}\n >\n <EllipsisVerticalIcon />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64 p-4\">\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <Activity mode={isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleUnpin}>\n {!!isPinned && 'Unpin'}\n <DropdownMenuShortcut>\n <PinOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n <Activity mode={!isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleLeftPin}>\n {isPinned ? 'Unpin' : 'Pin to Left'}\n <DropdownMenuShortcut>\n <MoveLeftIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={handleRightPin}>\n {isPinned ? 'Unpin' : 'Pin to Right'}\n <DropdownMenuShortcut>\n <MoveRightIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n});\nUITableHeadCellOption.displayName = 'UITableHeadCellOption';\n\nexport const UITableHeadCellSelect = memo<TUITableHeadCellSelect>(({ isPinned, isAllRowsSelected, style, onToggleAllRowsSelected, ...props }) => {\n const handleToggleAllRowsSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleAllRowsSelected?.(!!value);\n },\n [onToggleAllRowsSelected]\n );\n return (\n <th\n slot=\"table-header-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: TABLE_HEADER_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn(isPinned ? 'sticky' : 'relative')}\n {...props}\n >\n <div\n className=\"absolute inset-0 flex items-center justify-center\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select All Rows\" checked={isAllRowsSelected} onCheckedChange={handleToggleAllRowsSelected} />\n </div>\n </th>\n );\n});\nUITableHeadCellSelect.displayName = 'UITableHeadCellSelect';\n\nexport const UITableEmptyDisplay = memo<TUITableEmptyDisplay>(({ isEmpty, isFetching }) => {\n if (!isEmpty && !isFetching) return null;\n return (\n <div className=\"sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100\">\n {isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <Spinner className=\"size-12\" />\n <p>Loading data...</p>\n </div>\n )}\n {isEmpty && !isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <BoxIcon strokeWidth={1} size={48} />\n <p>No data available</p>\n </div>\n )}\n </div>\n );\n});\nUITableEmptyDisplay.displayName = 'UITableEmptyDisplay';\n\nexport const UITableWrapper = memo<TUITableWrapper>(({ className, children, ...props }) => {\n return (\n <div slot=\"table-wrapper\" className={cn('relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2', className)} {...props}>\n {children}\n </div>\n );\n});\nUITableWrapper.displayName = 'UITableWrapper';\n\nexport const UITableInnerWrapper = memo<TUITableInnerWrapper>(({ children, ...props }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n return (\n <div\n id={innerWrapperId}\n slot=\"table-inner-wrapper\"\n className=\"relative size-full overflow-auto border-b border-b-border border-l border-l-border bg-card\"\n {...props}\n >\n {children}\n </div>\n );\n});\nUITableInnerWrapper.displayName = 'UITableInnerWrapper';\n\nexport const UITableInnerTable = memo<TUITableInnerTable>(({ children, ...props }) => {\n const { table, innerTableId, totalSize } = useUITableInnerTableContext();\n const tableRef = useRef<HTMLTableElement>(null);\n\n /**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: table element.\n useEffect(() => {\n if (!tableRef.current) return;\n\n const headers = table.getFlatHeaders();\n\n const observer = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n const tableElement = entries[0].target;\n if (tableElement instanceof HTMLTableElement) {\n const tableEntry = entries[0];\n if (!tableEntry) return;\n const tableContentRectWidth = tableEntry.contentRect.width;\n\n const { left: leftColumnPinning = [], right: rightColumnPinning = [] } = table.getState().columnPinning;\n\n // --- 1. DUYỆT 1 LẦN DUYẾT ĐỂ LẤY TẤT CẢ THÔNG SỐ ---\n let pinnedWidth: number = 0;\n let flexibleColumnsCount: number = 0;\n let fixedSizeTotal: number = 0;\n const columnSpecs = headers.map(header => {\n const { id } = header;\n const isSpecial = id === 'select' || id === 'actions';\n const isPinned = leftColumnPinning.includes(id) || rightColumnPinning.includes(id);\n const size = header.getSize();\n const maxSize = header.column.columnDef.maxSize;\n\n // Tính toán chiều rộng cố định (pinned hoặc special)\n if (isSpecial) {\n const width = id === 'select' ? SELECT_WIDTH : ACTION_WIDTH;\n pinnedWidth += width;\n return { id, isFlex: false, width };\n }\n\n if (isPinned) {\n pinnedWidth += size;\n return { id, isFlex: false, width: size };\n }\n\n // Kiểm tra nếu cột có size cụ thể (khác mặc định 150)\n if (header.column.columnDef.size || size !== 150) {\n fixedSizeTotal += size;\n return { id, isFlex: false, width: size };\n }\n\n // Cột có thể co giãn\n flexibleColumnsCount++;\n return { id, isFlex: true, maxSize };\n });\n\n // --- 2. TÍNH TOÁN CHIỀU RỘNG CHIA ĐỀU (AVENGER WIDTH) ---\n const remainingWidth = tableContentRectWidth - pinnedWidth - fixedSizeTotal;\n const rawFlexWidth = flexibleColumnsCount > 0 ? Math.max(0, Math.floor(remainingWidth / flexibleColumnsCount)) : 0;\n\n // --- 3. ÁP DỤNG STYLE TRONG MỘT LẦN DUYỆT ---\n columnSpecs.forEach(col => {\n if (col.isFlex) {\n // Nếu có maxSize, đảm bảo không vượt quá\n const finalWidth = col.maxSize ? Math.min(rawFlexWidth, col.maxSize) : rawFlexWidth;\n tableElement.style.setProperty(`--header-${col.id}-size`, `${finalWidth}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${finalWidth}`);\n if (col.maxSize) {\n tableElement.style.setProperty(`--col-${col.id}-maxSize`, `${col.maxSize}`);\n }\n } else {\n tableElement.style.setProperty(`--header-${col.id}-size`, `${col.width}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${col.width}`);\n }\n });\n }\n });\n });\n observer.observe(tableRef.current);\n return () => observer.disconnect();\n }, [table.getState().columnSizingInfo, table.getState().columnSizing, table.getState().columnPinning]);\n\n return (\n <table\n id={innerTableId}\n ref={tableRef}\n slot=\"table-inner-table\"\n className=\"grid w-full table-fixed caption-bottom border-collapse border-spacing-0 flex-col content-start [&_tfoot_td]:border-t\"\n style={{ minWidth: totalSize }}\n {...props}\n >\n {children}\n </table>\n );\n});\nUITableInnerTable.displayName = 'UITableInnerTable';\n\nexport const UITableHead = memo<TUITableHead>(({ className, children, ...props }) => {\n return (\n <thead\n slot=\"table-head\"\n className={cn(\n 'sticky top-0 z-20 h-9 w-full',\n 'grid select-none bg-muted-bg-subtle',\n 'border-b border-b-border shadow',\n 'font-medium text-[13px] text-text-positive-weak',\n\n '[&_tr:not(:last-child)_td]:border-b',\n\n '[&_th]:inline-flex',\n '[&_th]:items-center',\n '[&_th]:transition-all',\n '[&_th]:duration-300',\n '[&_th]:whitespace-nowrap',\n '[&_th]:border-border',\n '[&_th]:last:border-r-0',\n '[&_th]:first:border-l-0',\n\n '[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle',\n className\n )}\n {...props}\n >\n {children}\n </thead>\n );\n});\nUITableHead.displayName = 'UITableHead';\n\nexport const UITableHeadRow = memo<TUITableHeadRow>(({ headerGroup, className, ...props }) => {\n const { isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected } = useUITableHeadRowContext();\n const firstRightPinnedHeaderId = rightPinnedHeaders[0]?.id;\n const lastLeftPinnedHeaderId = leftPinnedHeaders[leftPinnedHeaders.length - 1]?.id;\n return (\n <tr slot=\"table-head-row\" className={cn('flex', className)} {...props}>\n {headerGroup.headers.map((header, index) => {\n const isVisible = header.column.getIsVisible();\n const isPinned = columnPinningState.left?.includes(header.id) ? 'left' : columnPinningState.right?.includes(header.id) ? 'right' : false;\n if (header.id === 'select') {\n return (\n <UITableHeadCellSelect\n key={header.id}\n isPinned={isPinned}\n isAllRowsSelected={isAllRowsSelected}\n onToggleAllRowsSelected={onToggleAllRowsSelected}\n />\n );\n }\n return (\n <UITableHeadCell\n key={`${header.id}-${index}`}\n isVisible={isVisible}\n isPinned={isPinned}\n isFirstCell={header.id === firstRightPinnedHeaderId}\n isLastCell={header.id === lastLeftPinnedHeaderId}\n isOptionsVisible={!['select', 'actions'].includes(header.id)}\n headerId={header.id}\n headerColumn={header.column}\n colSpan={header.colSpan}\n onColumnPin={header.column.pin}\n onToggleVisibility={header.column.toggleVisibility}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </UITableHeadCell>\n );\n })}\n </tr>\n );\n});\nUITableHeadRow.displayName = 'UITableHeadRow';\n\nexport const UITableHeadCell = memo<TUITableHeadCell>(\n ({\n isVisible = true,\n isPinned = false,\n isFirstCell = false,\n isLastCell = false,\n isOptionsVisible = true,\n headerId,\n headerColumn,\n className,\n children,\n onColumnPin,\n onToggleVisibility,\n ...props\n }) => {\n const zIndex = useMemo(() => {\n return isPinned ? PINNED_COLUMN_Z_INDEX : undefined;\n }, [isPinned]);\n\n const left = useMemo(() => {\n const axis = headerColumn?.getStart?.('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const right = useMemo(() => {\n const axis = headerColumn?.getAfter?.('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const width = useMemo(() => {\n return `calc(var(--header-${headerId}-size) * 1px)`;\n }, [headerId]);\n\n const minSize = useMemo(() => {\n return headerColumn?.columnDef.minSize ? `calc(var(--col-${headerId}-minSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n\n const maxSize = useMemo(() => {\n return headerColumn?.columnDef.maxSize ? `calc(var(--col-${headerId}-maxSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n return (\n <th\n slot=\"table-head-cell\"\n data-pinned={isPinned}\n data-header={headerId}\n style={{\n zIndex,\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className={cn(\n 'group flex',\n isPinned ? 'sticky' : 'relative',\n isPinned === 'left' && isLastCell && 'border-r border-r-border',\n isPinned === 'right' && isFirstCell && 'border-l border-l-border',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'center' && 'justify-center',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'end' && 'justify-end',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'start' && 'justify-start',\n className\n )}\n {...props}\n >\n <div className=\"truncate pl-4\">{children}</div>\n {isOptionsVisible && (\n <UITableHeadCellOption isPinned={isPinned} isVisible={isVisible} onLeftPin={onColumnPin} onRightPin={onColumnPin} onUnpin={onColumnPin} />\n )}\n </th>\n );\n }\n);\nUITableHeadCell.displayName = 'UITableHeadCell';\n\nexport const UITableBody = memo<TUITableBody>(({ height, className, children, ...props }) => {\n const { isFetching, isEmpty } = useUITableBodyContext();\n if (isEmpty || isFetching) return null;\n return (\n <tbody\n slot=\"table-body\"\n style={{ height }}\n className={cn(\n 'relative w-full',\n 'grid',\n\n '[&_tr]:absolute',\n '[&_tr]:flex',\n '[&_tr]:flex-none',\n '[&_tr]:w-full',\n '[&_tr]:cursor-pointer [&_tr]:focus:outline-none',\n '[&_tr]:border-b [&_tr]:border-b-border',\n\n '[&_td]:z-10',\n '[&_td]:transition-all',\n '[&_td]:duration-300',\n '[&_td]:flex',\n '[&_td]:flex-none',\n '[&_td]:overflow-hidden',\n '[&_td]:whitespace-nowrap',\n '[&_td]:px-4',\n '[&_td]:py-2.5',\n '[&_td]:align-middle',\n '[&_td]:border-border',\n\n '[&_td]:data-[selected=true]:bg-muted-muted!',\n '[&_td]:data-[selected=true]:hover:bg-muted-muted!',\n\n '[&_td>div]:inline-flex',\n '[&_td>div]:items-center',\n '[&_td>div]:w-full',\n\n '[&_td:not([data-pinned=false])]:z-20',\n '[&_td:not([data-pinned=false])]:sticky',\n '[&_td:not([data-pinned=false])]:bg-card',\n\n '**:data-lastcell:border-r',\n '**:data-firstcell:border-l',\n className\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n});\nUITableBody.displayName = 'UITableBody';\n\nexport const UITableRow = memo<TUITableRow>(({ row, isSelected, virtualRowIndex, virtualRowStart, children, ...props }) => {\n const { keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow } = useUITableRowContext();\n\n const pinnedLeftColumns = useMemo(() => columnPinningState.left ?? [], [columnPinningState]);\n const pinnedRightColumns = useMemo(() => columnPinningState.right ?? [], [columnPinningState]);\n const firstRightPinnedHeaderId = useMemo(() => rightPinnedHeaders?.[0]?.id, [rightPinnedHeaders]);\n const lastLeftPinnedHeaderId = useMemo(() => leftPinnedHeaders?.[leftPinnedHeaders.length - 1]?.id, [leftPinnedHeaders]);\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLTableRowElement>>(\n e => {\n const value = keyOfClickRow ? row.original?.[keyOfClickRow] : undefined;\n onClickRow?.(virtualRowIndex, typeof value === 'string' || typeof value === 'number' ? value : undefined);\n e.preventDefault();\n e.stopPropagation();\n },\n [keyOfClickRow, onClickRow, row, virtualRowIndex]\n );\n return (\n <tr\n slot=\"table-row\"\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n }}\n className=\"group\"\n onClick={handleClick}\n {...props}\n >\n {row.getVisibleCells().map((cell, index) => {\n const isPinnedLeft = pinnedLeftColumns.includes(cell.column.id);\n const isPinnedRight = pinnedRightColumns.includes(cell.column.id);\n const isPinned = isPinnedLeft ? 'left' : isPinnedRight ? 'right' : false;\n if (cell.column.id === 'actions') {\n return (\n <UITableCellActions\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n virtualRowIndex={virtualRowIndex}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n }\n if (cell.column.id === 'select') {\n return (\n <UITableCellSelect\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isSelected={isAllRowsSelected || isSelected}\n onToggleRowSelected={cell.row.toggleSelected}\n />\n );\n }\n return (\n <UITableCell\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isFirstCell={cell.column.id === firstRightPinnedHeaderId}\n isLastCell={cell.column.id === lastLeftPinnedHeaderId}\n colId={cell.column.id}\n position={(cell.column.columnDef.meta as AnyEntity)?.position ?? 'start'}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n })}\n </tr>\n );\n});\nUITableRow.displayName = 'UITableRow';\n\nexport const UITableCellSelect = memo<TUITableCellSelect>(({ isPinned, isSelected = false, className, onToggleRowSelected, ...props }) => {\n const handleToggleRowSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleRowSelected?.(!!value);\n },\n [onToggleRowSelected]\n );\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: PINNED_COLUMN_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn('group-hover:bg-muted-bg-subtle!', isPinned ? 'sticky' : 'relative', className)}\n {...props}\n >\n <div\n data-slot=\"table-cell-inner\"\n className=\"flex! w-full! items-center justify-center bg-transparent text-center align-middle\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select Row\" checked={isSelected} onCheckedChange={handleToggleRowSelected} />\n </div>\n </td>\n );\n});\nUITableCellSelect.displayName = 'UITableCellSelect';\n\nexport const UITableCellActions = memo<TUITableCellActions>(({ virtualRowIndex, column, getContext, className, ...props }) => {\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n return (\n <td\n data-col=\"actions\"\n data-cell={virtualRowIndex}\n className=\"sticky inset-y-0 right-0 z-50 flex items-center pr-4 group-hover:bg-muted-bg-subtle!\"\n {...props}\n >\n {render}\n </td>\n );\n});\nUITableCellActions.displayName = 'UITableCellActions';\n\nexport const UITableCell = memo<TUITableCell>(\n ({ isPinned = false, isFirstCell = false, isLastCell = false, colId, position = 'start', column, getContext, ...props }) => {\n const { innerTableId, table } = useUITableInnerTableContext();\n const tableRef = useRef<Element>(document.querySelector(`table[id=\"${innerTableId}\"]`));\n const cellRef = useRef<HTMLDivElement>(null);\n\n const left = useMemo(() => {\n const axis = column?.getStart('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const right = useMemo(() => {\n const axis = column?.getAfter('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const width = useMemo(() => {\n return `calc(var(--col-${colId}-size) * 1px)`;\n }, [colId]);\n\n const minSize = useMemo(() => {\n return column?.columnDef.minSize ? `calc(var(--col-${colId}-minSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const maxSize = useMemo(() => {\n return column?.columnDef.maxSize ? `calc(var(--col-${colId}-maxSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n\n useEffect(() => {\n if (!cellRef.current) return;\n\n // Đo kích thước thực tế của nội dung bên trong\n const width = cellRef.current.scrollWidth;\n const currentSize = column?.getSize();\n\n // Nếu cell này dài hơn size hiện tại của cột, cập nhật lại size cho column\n if (!!currentSize && width > currentSize) {\n if (tableRef.current instanceof HTMLTableElement && typeof colId === 'string' && !!(column?.columnDef.meta as AnyEntity)?.['fitContent']) {\n table.setColumnSizing(old => ({\n ...old,\n [colId]: width + 32,\n }));\n }\n }\n }, [colId, column, table]); // Chạy lại khi data trong cell thay đổi\n\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={isPinned}\n data-lastcell={isLastCell || undefined}\n data-firstcell={isFirstCell || undefined}\n style={{\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className=\"group-hover:bg-muted-bg-subtle!\"\n {...props}\n >\n <div\n ref={cellRef}\n slot=\"table-body-cell-inner\"\n className={cn(position === 'start' && 'justify-start', position === 'center' && 'justify-center', position === 'end' && 'justify-end')}\n >\n {render}\n </div>\n </td>\n );\n }\n);\nUITableCell.displayName = 'UITableCell';\n\nexport const UITableFooter = memo<TUITableFooter>(({ className, children, ...props }) => {\n return (\n <tfoot\n slot=\"table-footer\"\n className={cn('flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n >\n {children}\n </tfoot>\n );\n});\nUITableFooter.displayName = 'UITableFooter';\n\nexport const UITableLoadMore = memo<TUITableLoadMore>(({ virtualRowIndex, virtualRowStart, fetchMoreData }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n\n const tableWrapperRef = useRef<Element | null>(document.querySelector(`div[id=\"${innerWrapperId}\"]`));\n const rowRef = useRef<HTMLTableRowElement>(null);\n\n const [fetchingState, setFetchingState] = useState<'idle' | 'fetching' | 'error'>('idle');\n\n const [width, setWidth] = useState<number>(0);\n\n const handleFetchMoreData = useCallback(async () => {\n try {\n setFetchingState('fetching');\n await fetchMoreData?.();\n setFetchingState('idle');\n } catch (error) {\n console.error('Error fetching more data:', error);\n setFetchingState('error');\n } finally {\n // setFetchingState('idle');\n }\n }, [fetchMoreData]);\n\n useEffect(() => {\n if (!tableWrapperRef.current) return;\n\n const observer = new ResizeObserver(entries => {\n // Access width from contentRect\n setWidth(entries[0].contentRect.width);\n });\n\n observer.observe(tableWrapperRef.current);\n return () => observer.disconnect(); // Cleanup on unmount\n }, []);\n\n return (\n <tr\n ref={rowRef}\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n width,\n }}\n className=\"sticky! left-0 h-10\"\n >\n <td className=\"absolute left-0 flex w-full items-center justify-center text-xs\">\n <button\n type=\"button\"\n disabled={fetchingState === 'fetching'}\n className={cn(\n 'flex cursor-pointer gap-x-0.5',\n fetchingState === 'fetching' && 'cursor-not-allowed',\n fetchingState === 'idle' && 'text-text-positive-weak hover:text-text-positive',\n fetchingState === 'error' && 'text-danger hover:text-danger-strong'\n )}\n onClick={handleFetchMoreData}\n >\n {fetchingState === 'idle' && <ChevronDown className=\"size-4\" />}\n {fetchingState === 'fetching' && <Spinner className=\"size-4 animate-spin\" />}\n {fetchingState === 'error' && <AlertTriangle className=\"size-4 text-danger\" />}\n {fetchingState === 'idle' && 'Load More'}\n {fetchingState === 'fetching' && 'Loading...'}\n {fetchingState === 'error' && 'Error! Retry?'}\n </button>\n </td>\n </tr>\n );\n});\nUITableLoadMore.displayName = 'UITableLoadMore';\n","'use client';\nimport { useMemo, useRef } from 'react';\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';\n\nimport { useUITableBodyContext, useUITableContext } from '../hooks/use-context';\nimport { UITableBody, UITableEmptyDisplay, UITableHead, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableLoadMore, UITableRow } from './common';\n\nexport const UITableContainer: React.FC<React.PropsWithChildren> = () => {\n const { table, isEmpty, isFetching, fetchMoreData } = useUITableContext();\n const { rowSelectionState } = useUITableBodyContext();\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n const { rows } = table.getRowModel();\n\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length + 1,\n estimateSize: () => 40, // estimated row height\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1 ? element => element?.getBoundingClientRect().height : undefined,\n overscan: 2, // Render additional rows beyond viewport for smoother scrolling\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rowVirtualizer getTotalSize\n const tableBodyHeight = useMemo(() => {\n const totalSize = rowVirtualizer.getTotalSize();\n const containerHeight = tableContainerRef.current?.clientHeight || 0;\n return totalSize < containerHeight ? `${containerHeight}px` : `${totalSize}px`;\n }, [rowVirtualizer.getTotalSize()]);\n\n return (\n <ResizablePanelGroup\n direction=\"horizontal\"\n style={{ direction: table.options.columnResizeDirection }}\n className=\"relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border border-r border-r-border bg-slate-50 p-0 text-sm\"\n >\n <ResizablePanel className=\"relative\">\n <UITableInnerWrapper ref={tableContainerRef}>\n <UITableInnerTable>\n <UITableHead>\n {table.getHeaderGroups().map(headerGroup => (\n <UITableHeadRow key={headerGroup.id} headerGroup={headerGroup} />\n ))}\n </UITableHead>\n <UITableBody height={tableBodyHeight}>\n {rowVirtualizer.getVirtualItems().map(virtualRow => {\n const row = rows[virtualRow.index];\n const isSelected = Object.entries(rowSelectionState).some(([k, v]) => k === `${row?.id}` && v);\n if (!row) {\n return (\n <UITableLoadMore\n key={virtualRow.index}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n fetchMoreData={fetchMoreData}\n />\n );\n }\n return (\n <UITableRow\n key={virtualRow.index}\n ref={rowVirtualizer.measureElement}\n row={row}\n isSelected={isSelected}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n />\n );\n })}\n </UITableBody>\n </UITableInnerTable>\n <UITableEmptyDisplay isEmpty={isEmpty} isFetching={isFetching} />\n </UITableInnerWrapper>\n </ResizablePanel>\n </ResizablePanelGroup>\n );\n};\n","import { Activity, useState } from 'react';\n\nimport { Columns4Icon, ListFilterIcon, ListFilterPlus } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { ResizablePanel } from '@/components/ui/resizable';\nimport { Separator } from '@/components/ui/separator';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\nconst ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}> = ({ checked, title, onCheckedChange }) => {\n return (\n <div className=\"flex h-fit items-center gap-2\">\n <Checkbox checked={checked} onCheckedChange={onCheckedChange} />\n <p className=\"text-sm\">{title}</p>\n </div>\n );\n};\n\nexport const UITableFilter = () => {\n const { table } = useUITableContext();\n const [tab, setTab] = useState<'columns' | 'filters' | null>(null);\n\n return (\n <ResizablePanel defaultSize={25} className={cn('bg-card', tab === null ? 'max-w-8!' : 'min-w-64')}>\n <div className=\"relative z-20 flex size-full bg-muted-bg-subtle\">\n <div className=\"flex-1\">\n <Activity mode={tab === 'columns' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col gap-2 p-4\">\n <p className=\"px-2 font-medium\">Columns Visibility</p>\n <Separator />\n <div className=\"flex flex-col gap-4 pt-4\">\n {table.getAllColumns().map(column => {\n if (['select', 'actions'].includes(column.id)) return null;\n return (\n <ColumnVisibility\n key={column.id}\n checked={column.getIsVisible()}\n title={String(column.columnDef.header)}\n onCheckedChange={value => column.toggleVisibility(!!value)}\n />\n );\n })}\n </div>\n </div>\n </Activity>\n <Activity mode={tab === 'filters' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col p-2\">\n <Button variant=\"outline\" color=\"muted\">\n <ListFilterPlus />\n Add Filter\n </Button>\n </div>\n </Activity>\n </div>\n <div className=\"flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm\">\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'columns' && 'bg-card')}\n onClick={() => setTab(tab === 'columns' ? null : 'columns')}\n >\n <Columns4Icon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Columns</span>\n </button>\n <Separator />\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'filters' && 'bg-card')}\n onClick={() => setTab(tab === 'filters' ? null : 'filters')}\n >\n <ListFilterIcon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Filters</span>\n </button>\n <Separator />\n </div>\n </div>\n </ResizablePanel>\n );\n};\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\n\nimport type { ColumnDef, ColumnPinningState, ExpandedState, RowSelectionState } from '@tanstack/react-table';\nimport { getCoreRowModel, getExpandedRowModel, getGroupedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport type { AnyEntity } from '@/types';\nimport {\n TableBodyContext,\n TableContext,\n TableHeadRowContext,\n TableInnerTableContext,\n TableInnerWrapperContext,\n TableRowContext,\n} from '../../hooks/use-context';\nimport type {\n RowData,\n TableProviderProps,\n TTableBodyContext,\n TTableContext,\n TTableHeadRowContext,\n TTableInnerTableContext,\n TTableInnerWrapperContext,\n TTableRowContext,\n TUITableColumn,\n} from '../../types';\n\nconst UITableInnerWrapperProvider = memo<React.PropsWithChildren<TTableInnerWrapperContext>>(({ innerWrapperId, children }) => {\n const value = useMemo<TTableInnerWrapperContext>(() => ({ innerWrapperId }), [innerWrapperId]);\n return <TableInnerWrapperContext.Provider value={value}>{children}</TableInnerWrapperContext.Provider>;\n});\nUITableInnerWrapperProvider.displayName = 'UITableInnerWrapperProvider';\n\nconst UITableInnerTableProvider = memo<React.PropsWithChildren<TTableInnerTableContext>>(({ table, innerTableId, totalSize, children }) => {\n const value = useMemo<TTableInnerTableContext>(() => ({ table, innerTableId, totalSize }), [table, innerTableId, totalSize]);\n return <TableInnerTableContext.Provider value={value}>{children}</TableInnerTableContext.Provider>;\n});\nUITableInnerTableProvider.displayName = 'UITableInnerTableProvider';\n\nconst UITableHeadRowProvider = memo<React.PropsWithChildren<TTableHeadRowContext>>(\n ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected, children }) => {\n const value = useMemo<TTableHeadRowContext>(\n () => ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected }),\n [isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected]\n );\n return <TableHeadRowContext.Provider value={value}>{children}</TableHeadRowContext.Provider>;\n }\n);\nUITableHeadRowProvider.displayName = 'UITableHeadRowProvider';\n\nconst UITableBodyProvider = memo<React.PropsWithChildren<TTableBodyContext>>(({ isFetching, isEmpty, rowSelectionState, children }) => {\n const value = useMemo<TTableBodyContext>(() => ({ isFetching, isEmpty, rowSelectionState }), [isFetching, isEmpty, rowSelectionState]);\n return <TableBodyContext.Provider value={value}>{children}</TableBodyContext.Provider>;\n});\nUITableBodyProvider.displayName = 'UITableBodyProvider';\n\nconst UITableRowProvider = memo<React.PropsWithChildren<TTableRowContext<AnyEntity, AnyEntity>>>(\n ({ keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow, children }) => {\n const value = useMemo<TTableRowContext<AnyEntity, AnyEntity>>(\n () => ({\n keyOfClickRow,\n isAllRowsSelected,\n columnPinningState,\n leftPinnedHeaders,\n rightPinnedHeaders,\n onClickRow,\n }),\n [keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow]\n );\n return <TableRowContext.Provider value={value}>{children}</TableRowContext.Provider>;\n }\n);\nUITableRowProvider.displayName = 'UITableRowProvider';\n\nexport const UITableProvider = <\n TData extends RowData<TData> = RowData<AnyEntity>,\n TKey extends keyof TData = keyof TData,\n TColumns extends ReadonlyArray<TUITableColumn<TData>> = TUITableColumn<TData>[],\n>({\n title,\n\n isFetching = false,\n isRefetching = false,\n\n data,\n columns,\n totalRows,\n\n leftPinnedColumns = [],\n rightPinnedColumns = [],\n\n keyOfClickRow,\n onClickRow,\n onRowSelection,\n onColumnPinning,\n\n fetchMoreData,\n children,\n}: React.PropsWithChildren<TableProviderProps<TData, TKey, TColumns>>) => {\n const innerWrapperId = useId();\n const innerTableId = useId();\n\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\n right: rightPinnedColumns as unknown as string[],\n left: ['select', ...leftPinnedColumns] as unknown as string[],\n });\n const [expanded, setExpanded] = useState<ExpandedState>({});\n\n const handleRowSelectionChange = useCallback<React.Dispatch<React.SetStateAction<RowSelectionState>>>(\n newRowSelection => {\n setRowSelection(newRowSelection);\n onRowSelection?.(newRowSelection instanceof Function ? newRowSelection(rowSelection) : newRowSelection);\n return newRowSelection;\n },\n [rowSelection, onRowSelection]\n );\n\n const handleColumnPinningChange = useCallback<React.Dispatch<React.SetStateAction<ColumnPinningState>>>(\n newColumnPinning => {\n setColumnPinning(newColumnPinning);\n onColumnPinning?.(newColumnPinning instanceof Function ? newColumnPinning(columnPinning) : newColumnPinning);\n },\n [columnPinning, onColumnPinning]\n );\n\n const table = useReactTable<TData>({\n data: data,\n columns: columns as unknown as ColumnDef<AnyEntity, unknown>[],\n state: {\n rowSelection,\n columnPinning,\n expanded,\n },\n defaultColumn: {\n enableResizing: false,\n size: undefined,\n minSize: undefined,\n maxSize: undefined,\n },\n columnResizeMode: 'onChange',\n columnResizeDirection: 'ltr',\n\n enableColumnPinning: true,\n enableRowSelection: true,\n enableColumnResizing: true,\n enableMultiRowSelection: true,\n\n autoResetAll: false,\n autoResetExpanded: false,\n autoResetPageIndex: false,\n\n getSubRows: row => row.subRows,\n getCoreRowModel: getCoreRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n onRowSelectionChange: handleRowSelectionChange,\n onColumnPinningChange: handleColumnPinningChange,\n onExpandedChange: setExpanded,\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rows\n const rows = useMemo(() => {\n const { rows } = table.getRowModel();\n return rows;\n }, [table.getRowModel().rows, table.getState().columnPinning]);\n\n const isEmpty = useMemo<boolean>(() => {\n return !isFetching && rows.length === 0;\n }, [rows, isFetching]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const value = useMemo<TTableContext<TData>>(\n () => ({\n title,\n table,\n\n isEmpty,\n isFetching,\n isRefetching,\n\n totalRows,\n\n fetchMoreData,\n }),\n [\n title,\n table,\n\n isEmpty,\n isRefetching,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n table.getState().columnPinning,\n table.getState().expanded,\n ]\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const tableState = useMemo(() => {\n return table.getState();\n }, [table.getState()]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const isAllRowsSelected = useMemo(() => {\n return table.getIsAllRowsSelected();\n }, [table.getIsAllRowsSelected()]);\n\n const rowSelectionState = useMemo(() => {\n return tableState.rowSelection;\n }, [tableState.rowSelection]);\n\n const columnPinningState = useMemo(() => {\n return tableState.columnPinning;\n }, [tableState.columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const leftPinnedHeaders = useMemo(() => {\n return table.getLeftHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const rightPinnedHeaders = useMemo(() => {\n return table.getRightHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get total size\n const totalSize = useMemo(() => {\n return table.getTotalSize();\n }, [table.getTotalSize()]);\n\n return (\n <TableContext.Provider value={value as TTableContext<TData>}>\n <UITableInnerWrapperProvider innerWrapperId={innerWrapperId}>\n <UITableInnerTableProvider table={table} innerTableId={innerTableId} totalSize={totalSize}>\n <UITableHeadRowProvider\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onToggleAllRowsSelected={table.toggleAllRowsSelected}\n >\n <UITableBodyProvider isFetching={isFetching} isEmpty={isEmpty} rowSelectionState={rowSelectionState}>\n <UITableRowProvider\n keyOfClickRow={keyOfClickRow}\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onClickRow={onClickRow}\n >\n {children}\n </UITableRowProvider>\n </UITableBodyProvider>\n </UITableHeadRowProvider>\n </UITableInnerTableProvider>\n </UITableInnerWrapperProvider>\n </TableContext.Provider>\n );\n};\n","import { ArrowRightIcon, CirclePlus, DownloadIcon, RefreshCwIcon, SearchIcon } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\nexport const UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n> = ({ onSearch, onChange, ...props }) => {\n const debouncedSearch = useDebounceCallback((value: string) => {\n onSearch?.(value);\n }, 500);\n return (\n <div className=\"relative w-full max-w-80 flex-1\">\n <Input\n {...props}\n size=\"lg\"\n type=\"search\"\n placeholder=\"Search records...\"\n className=\"flex-1 ps-9 pe-9\"\n onChange={e => {\n onChange?.(e);\n debouncedSearch(e.target.value ?? '');\n }}\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Submit search\"\n type=\"submit\"\n >\n <ArrowRightIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n};\n\nconst ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>> = ({ children, disabled, onClick }) => {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className=\"flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive disabled:pointer-events-none disabled:cursor-default disabled:opacity-60 [&_svg]:size-3.5\"\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n\nexport const UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}> = ({ onCreate, onDownload, onRefresh }) => {\n return (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\">\n <ActionButton\n disabled={!onCreate}\n onClick={e => {\n onCreate?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <CirclePlus />\n </ActionButton>\n <ActionButton\n disabled={!onRefresh}\n onClick={e => {\n onRefresh?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <RefreshCwIcon />\n </ActionButton>\n <ActionButton\n disabled={!onDownload}\n onClick={e => {\n onDownload?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <DownloadIcon />\n </ActionButton>\n </div>\n );\n};\n\nexport const UITableTooltip: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { title } = useUITableContext();\n return (\n <div data-slot=\"table-tooltip\" className=\"relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm\">\n <h3 className=\"font-semibold text-base text-text-positive\">{title}</h3>\n <div className=\"flex w-full flex-1 justify-between gap-x-2\">{children}</div>\n </div>\n );\n};\nUITableTooltip.displayName = 'TableTooltip';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["UITableEmpty: React.FC","MinusIcon","UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}>","XIcon","UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}>","XIcon","CheckIcon","UITableDateDisplay: React.FC<Props>","TooltipProvider","Tooltip","TooltipTrigger","Badge","DateDisplay","TooltipContent","UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }>","Tooltip","TooltipTrigger","TooltipContent","UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}>","DropdownMenu","DropdownMenuTrigger","Button","MoreVerticalIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","UITableNameDisplay: React.FC<NameDisplayProps>","Tooltip","TooltipTrigger","Paragraph","TooltipContent","UITablePermalink: React.FC<{ href: string; label?: string }>","ExternalLinkIcon","UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>>","Tooltip","TooltipTrigger","TooltipContent","UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}>","Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent","options: Intl.NumberFormatOptions","Flex","UITableUserDataDisplay: React.FC<Props>","Flex","Avatar","AvatarFallback","UserRoundIcon","colorHashLight","Paragraph","DropdownMenu","DropdownMenuTrigger","EllipsisVerticalIcon","DropdownMenuContent","DropdownMenuGroup","Activity","DropdownMenuItem","DropdownMenuShortcut","PinOffIcon","MoveLeftIcon","MoveRightIcon","Checkbox","Spinner","BoxIcon","pinnedWidth: number","flexibleColumnsCount: number","fixedSizeTotal: number","width","ChevronDown","AlertTriangle","UITableContainer: React.FC<React.PropsWithChildren>","ResizablePanelGroup","ResizablePanel","ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}>","Checkbox","ResizablePanel","Activity","Separator","Button","ListFilterPlus","Columns4Icon","ListFilterIcon","rows","UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n>","Input","SearchIcon","ArrowRightIcon","ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>>","UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}>","CirclePlus","RefreshCwIcon","DownloadIcon","UITableTooltip: React.FC<React.PropsWithChildren>"],"sources":["../../../packages/components/features/tables/components/atoms/empty.tsx","../../../packages/components/features/tables/components/atoms/badge-display.tsx","../../../packages/components/features/tables/components/atoms/boolean-display.tsx","../../../packages/components/features/tables/components/atoms/date-display.tsx","../../../packages/components/features/tables/components/atoms/description-display.tsx","../../../packages/components/features/tables/components/atoms/more-button.tsx","../../../packages/components/features/tables/components/atoms/name-display.tsx","../../../packages/components/features/tables/components/atoms/permalink.tsx","../../../packages/components/features/tables/components/atoms/phone-number.tsx","../../../packages/components/features/tables/components/atoms/remove-button.tsx","../../../packages/components/features/tables/components/atoms/statistic.tsx","../../../packages/components/features/tables/components/atoms/user.tsx","../../../packages/components/features/tables/constants.ts","../../../packages/components/features/tables/hooks/use-context.ts","../../../packages/components/features/tables/components/common.tsx","../../../packages/components/features/tables/components/table.tsx","../../../packages/components/features/tables/components/table/filter.tsx","../../../packages/components/features/tables/components/table/provider.tsx","../../../packages/components/features/tables/components/table/tooltip.tsx"],"sourcesContent":["import { MinusIcon } from 'lucide-react';\n\nexport const UITableEmpty: React.FC = () => {\n return (\n <div className=\"flex gap-0 text-text-positive-weak\">\n <MinusIcon size={16} />\n <MinusIcon size={16} />\n </div>\n );\n};\n","import { XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBadgeDisplay: React.FC<{\n label: string | number | null | undefined;\n onClick?: () => void;\n onRemove?: () => void;\n}> = ({ label, onClick, onRemove }) => {\n if (!label) return <UITableEmpty />;\n if (onRemove) {\n return (\n <div\n className=\"flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n <button\n className=\"cursor-pointer text-text-positive-weak hover:text-text-positive-strong\"\n onClick={e => {\n onRemove?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <XIcon size={12} />\n </button>\n </div>\n );\n }\n return (\n <button\n className=\"w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n </button>\n );\n};\n","import { CheckIcon, XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableBooleanDisplay: React.FC<{\n value: boolean | null | undefined;\n}> = ({ value }) => {\n if (value === null || value === undefined) return <UITableEmpty />;\n if (value === false) {\n return (\n <div className=\"text-danger-strong\">\n <XIcon />\n </div>\n );\n }\n return (\n <div className=\"text-success-strong\">\n <CheckIcon />\n </div>\n );\n};\n","import { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from '@/components/data-display/date';\nimport { UITableEmpty } from './empty';\n\ntype Props = {\n date: Date | string | number | null | undefined;\n};\nexport const UITableDateDisplay: React.FC<Props> = ({ date }) => {\n if (typeof date === 'undefined' || date === null) return <UITableEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"font-normal text-white\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent className=\"rounded\">\n <DateDisplay date={date} format=\"full\" showTime className=\"font-medium text-text-negative text-xs\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { UITableEmpty } from './empty';\n\nexport const UITableDescriptionDisplay: React.FC<{ content: string | null | undefined | number }> = ({ content }) => {\n if (content === undefined || content === null) {\n return <UITableEmpty />;\n }\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"line-clamp-2 whitespace-pre-line break-all text-start text-[13px] text-text-positive-weak\">{content}</div>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{content}</p>\n <p className=\"w-full text-end\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { MoreVerticalIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nexport const UITableMoreButton: React.FC<{\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n onClick?: () => void;\n}> = ({ items = [] }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" color=\"secondary\" className=\"size-9 rounded-full\">\n <MoreVerticalIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {items.map(item => (\n <DropdownMenuItem\n key={item.id}\n className=\"px-3\"\n onSelect={e => {\n item.onClick(item.id);\n e.stopPropagation();\n }}\n >\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Paragraph } from '@/components/typography/paragraph';\nimport { UITableEmpty } from './empty';\n\ntype NameDisplayProps = {\n name?: string | null | undefined;\n};\n\nexport const UITableNameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n if (!name) return <UITableEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start text-sm\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { ExternalLinkIcon } from 'lucide-react';\n\nexport const UITablePermalink: React.FC<{ href: string; label?: string }> = ({ href, label }) => {\n return (\n <a href={href} target=\"_blank\" className=\"inline-flex items-center gap-1 truncate text-primary text-sm underline\" rel=\"noopener noreferrer\">\n <span>{label || href}</span>\n <ExternalLinkIcon size={14} />\n </a>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{ value: string }>> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p className=\"font-number text-secondary-foreground text-sm tabular-nums\">{value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}</p>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nexport const UITableRemoveButton: React.FC<{\n title?: string;\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\ntype Props = {\n decimalSeparator?: string;\n groupSeparator?: string;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n precision?: number; // Số chữ số thập phân\n roundingMode?: 'round' | 'floor' | 'ceil'; // Kiểu làm tròn\n showTrailingZeros?: boolean; // Hiển thị số 0 cuối\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; // Kích thước của component\n value: number | string | null | undefined;\n};\n\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number text-lg text-secondary-foreground tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n","import { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Paragraph } from '@/components/typography/paragraph';\n\ntype Props = {\n uuid?: string | null | undefined;\n username?: string | null | undefined;\n email?: string | null | undefined;\n};\n\nexport const UITableUserDataDisplay: React.FC<Props> = ({ uuid, username, email }) => {\n return (\n <Flex wrap={false} gap=\"sm\" padding=\"none\">\n {!uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback className=\"bg-muted-weak\">\n <UserRoundIcon size={28} className=\"text-text-negative\" />\n </AvatarFallback>\n </Avatar>\n )}\n {uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n )}\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"font-medium text-sm text-text-positive-weak\">{username ?? 'Unknown User'}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-text-positive-weak text-xs\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n","export const SELECT_WIDTH = 60;\nexport const ACTION_WIDTH = 60;\nexport const TABLE_HEADER_Z_INDEX = 20;\nexport const PINNED_COLUMN_Z_INDEX = 20;\n","import { createContext, use } from 'react';\n\nimport type { AnyEntity } from '@/types';\nimport type { TTableBodyContext, TTableContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext } from '../types';\n\nexport const TableInnerWrapperContext = createContext<TTableInnerWrapperContext | null>(null);\n\nexport const useUITableInnerWrapperContext = () => {\n const ctx = use(TableInnerWrapperContext);\n if (!ctx) {\n throw new Error('useTableInnerWrapperContext must be used within a TableInnerWrapperProvider');\n }\n return ctx;\n};\n\nexport const TableInnerTableContext = createContext<TTableInnerTableContext | null>(null);\n\nexport const useUITableInnerTableContext = () => {\n const ctx = use(TableInnerTableContext);\n if (!ctx) {\n throw new Error('useTableInnerTableContext must be used within a TableInnerTableProvider');\n }\n return ctx;\n};\n\nexport const TableHeadRowContext = createContext<TTableHeadRowContext | null>(null);\n\nexport const useUITableHeadRowContext = () => {\n const ctx = use(TableHeadRowContext);\n if (!ctx) {\n throw new Error('useTableHeaderRowContext must be used within a TableHeaderRowProvider');\n }\n return ctx;\n};\n\nexport const TableBodyContext = createContext<TTableBodyContext | null>(null);\n\nexport const useUITableBodyContext = () => {\n const ctx = use(TableBodyContext);\n if (!ctx) {\n throw new Error('useTableBodyContext must be used within a TableBodyProvider');\n }\n return ctx;\n};\n\nexport const TableRowContext = createContext<TTableRowContext<AnyEntity, AnyEntity> | null>(null);\n\nexport const useUITableRowContext = () => {\n const ctx = use(TableRowContext);\n if (!ctx) {\n throw new Error('useTableRowContext must be used within a TableRowProvider');\n }\n return ctx;\n};\n\nexport const TableContext = createContext<TTableContext<AnyEntity> | null>(null);\n\nexport const useUITableContext = () => {\n const context = use(TableContext);\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context;\n};\n","import { Activity, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { flexRender } from '@tanstack/react-table';\n\nimport { AlertTriangle, BoxIcon, ChevronDown, EllipsisVerticalIcon, MoveLeftIcon, MoveRightIcon, PinOffIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Spinner } from '@/components/ui/spinner';\n\nimport type { AnyEntity } from '@/types';\nimport { ACTION_WIDTH, PINNED_COLUMN_Z_INDEX, SELECT_WIDTH, TABLE_HEADER_Z_INDEX } from '../constants';\nimport {\n useUITableBodyContext,\n useUITableHeadRowContext,\n useUITableInnerTableContext,\n useUITableInnerWrapperContext,\n useUITableRowContext,\n} from '../hooks/use-context';\nimport type {\n TUITableBody,\n TUITableCell,\n TUITableCellActions,\n TUITableCellSelect,\n TUITableEmptyDisplay,\n TUITableFooter,\n TUITableHead,\n TUITableHeadCell,\n TUITableHeadCellOption,\n TUITableHeadCellSelect,\n TUITableHeadRow,\n TUITableInnerTable,\n TUITableInnerWrapper,\n TUITableLoadMore,\n TUITableRow,\n TUITableWrapper,\n} from '../types';\n\nexport const UITableHeadCellOption = memo<TUITableHeadCellOption>(({ isPinned, onLeftPin, onRightPin, onUnpin, className }) => {\n const handleLeftPin = useCallback(() => {\n onLeftPin?.('left');\n }, [onLeftPin]);\n\n const handleRightPin = useCallback(() => {\n onRightPin?.('right');\n }, [onRightPin]);\n\n const handleUnpin = useCallback(() => {\n onUnpin?.(false);\n }, [onUnpin]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'absolute right-2 z-10 p-0.5 opacity-0',\n 'cursor-pointer rounded-full transition-all',\n 'text-text-positive-weak',\n '[&>svg]:size-4',\n 'group-hover:opacity-100',\n 'hover:bg-muted-muted hover:text-text-positive',\n className\n )}\n >\n <EllipsisVerticalIcon />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64 p-4\">\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <Activity mode={isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleUnpin}>\n {!!isPinned && 'Unpin'}\n <DropdownMenuShortcut>\n <PinOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n <Activity mode={!isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleLeftPin}>\n {isPinned ? 'Unpin' : 'Pin to Left'}\n <DropdownMenuShortcut>\n <MoveLeftIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={handleRightPin}>\n {isPinned ? 'Unpin' : 'Pin to Right'}\n <DropdownMenuShortcut>\n <MoveRightIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n});\nUITableHeadCellOption.displayName = 'UITableHeadCellOption';\n\nexport const UITableHeadCellSelect = memo<TUITableHeadCellSelect>(({ isPinned, isAllRowsSelected, style, onToggleAllRowsSelected, ...props }) => {\n const handleToggleAllRowsSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleAllRowsSelected?.(!!value);\n },\n [onToggleAllRowsSelected]\n );\n return (\n <th\n slot=\"table-header-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: TABLE_HEADER_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn(isPinned ? 'sticky' : 'relative')}\n {...props}\n >\n <div\n className=\"absolute inset-0 flex items-center justify-center\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select All Rows\" checked={isAllRowsSelected} onCheckedChange={handleToggleAllRowsSelected} />\n </div>\n </th>\n );\n});\nUITableHeadCellSelect.displayName = 'UITableHeadCellSelect';\n\nexport const UITableEmptyDisplay = memo<TUITableEmptyDisplay>(({ isEmpty, isFetching }) => {\n if (!isEmpty && !isFetching) return null;\n return (\n <div className=\"sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100\">\n {isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <Spinner className=\"size-12\" />\n <p>Loading data...</p>\n </div>\n )}\n {isEmpty && !isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <BoxIcon strokeWidth={1} size={48} />\n <p>No data available</p>\n </div>\n )}\n </div>\n );\n});\nUITableEmptyDisplay.displayName = 'UITableEmptyDisplay';\n\nexport const UITableWrapper = memo<TUITableWrapper>(({ className, children, ...props }) => {\n return (\n <div slot=\"table-wrapper\" className={cn('relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2', className)} {...props}>\n {children}\n </div>\n );\n});\nUITableWrapper.displayName = 'UITableWrapper';\n\nexport const UITableInnerWrapper = memo<TUITableInnerWrapper>(({ children, ...props }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n return (\n <div\n id={innerWrapperId}\n slot=\"table-inner-wrapper\"\n className=\"relative size-full overflow-auto border-b border-b-border border-l border-l-border bg-card\"\n {...props}\n >\n {children}\n </div>\n );\n});\nUITableInnerWrapper.displayName = 'UITableInnerWrapper';\n\nexport const UITableInnerTable = memo<TUITableInnerTable>(({ children, ...props }) => {\n const { table, innerTableId, totalSize } = useUITableInnerTableContext();\n const tableRef = useRef<HTMLTableElement>(null);\n\n /**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: table element.\n useEffect(() => {\n if (!tableRef.current) return;\n\n const headers = table.getFlatHeaders();\n\n const observer = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n const tableElement = entries[0].target;\n if (tableElement instanceof HTMLTableElement) {\n const tableEntry = entries[0];\n if (!tableEntry) return;\n const tableContentRectWidth = tableEntry.contentRect.width;\n\n const { left: leftColumnPinning = [], right: rightColumnPinning = [] } = table.getState().columnPinning;\n\n // --- 1. DUYỆT 1 LẦN DUYẾT ĐỂ LẤY TẤT CẢ THÔNG SỐ ---\n let pinnedWidth: number = 0;\n let flexibleColumnsCount: number = 0;\n let fixedSizeTotal: number = 0;\n const columnSpecs = headers.map(header => {\n const { id } = header;\n const isSpecial = id === 'select' || id === 'actions';\n const isPinned = leftColumnPinning.includes(id) || rightColumnPinning.includes(id);\n const size = header.getSize();\n const maxSize = header.column.columnDef.maxSize;\n\n // Tính toán chiều rộng cố định (pinned hoặc special)\n if (isSpecial) {\n const width = id === 'select' ? SELECT_WIDTH : ACTION_WIDTH;\n pinnedWidth += width;\n return { id, isFlex: false, width };\n }\n\n if (isPinned) {\n pinnedWidth += size;\n return { id, isFlex: false, width: size };\n }\n\n // Kiểm tra nếu cột có size cụ thể (khác mặc định 150)\n if (header.column.columnDef.size || size !== 150) {\n fixedSizeTotal += size;\n return { id, isFlex: false, width: size };\n }\n\n // Cột có thể co giãn\n flexibleColumnsCount++;\n return { id, isFlex: true, maxSize };\n });\n\n // --- 2. TÍNH TOÁN CHIỀU RỘNG CHIA ĐỀU (AVENGER WIDTH) ---\n const remainingWidth = tableContentRectWidth - pinnedWidth - fixedSizeTotal;\n const rawFlexWidth = flexibleColumnsCount > 0 ? Math.max(0, Math.floor(remainingWidth / flexibleColumnsCount)) : 0;\n\n // --- 3. ÁP DỤNG STYLE TRONG MỘT LẦN DUYỆT ---\n columnSpecs.forEach(col => {\n if (col.isFlex) {\n // Nếu có maxSize, đảm bảo không vượt quá\n const finalWidth = col.maxSize ? Math.min(rawFlexWidth, col.maxSize) : rawFlexWidth;\n tableElement.style.setProperty(`--header-${col.id}-size`, `${finalWidth}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${finalWidth}`);\n if (col.maxSize) {\n tableElement.style.setProperty(`--col-${col.id}-maxSize`, `${col.maxSize}`);\n }\n } else {\n tableElement.style.setProperty(`--header-${col.id}-size`, `${col.width}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${col.width}`);\n }\n });\n }\n });\n });\n observer.observe(tableRef.current);\n return () => observer.disconnect();\n }, [table.getState().columnSizingInfo, table.getState().columnSizing, table.getState().columnPinning]);\n\n return (\n <table\n id={innerTableId}\n ref={tableRef}\n slot=\"table-inner-table\"\n className=\"grid w-full table-fixed caption-bottom border-collapse border-spacing-0 flex-col content-start [&_tfoot_td]:border-t\"\n style={{ minWidth: totalSize }}\n {...props}\n >\n {children}\n </table>\n );\n});\nUITableInnerTable.displayName = 'UITableInnerTable';\n\nexport const UITableHead = memo<TUITableHead>(({ className, children, ...props }) => {\n return (\n <thead\n slot=\"table-head\"\n className={cn(\n 'sticky top-0 z-20 h-9 w-full',\n 'grid select-none bg-muted-bg-subtle',\n 'border-b border-b-border shadow',\n 'font-medium text-[13px] text-text-positive-weak',\n\n '[&_tr:not(:last-child)_td]:border-b',\n\n '[&_th]:inline-flex',\n '[&_th]:items-center',\n '[&_th]:transition-all',\n '[&_th]:duration-300',\n '[&_th]:whitespace-nowrap',\n '[&_th]:border-border',\n '[&_th]:last:border-r-0',\n '[&_th]:first:border-l-0',\n\n '[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle',\n className\n )}\n {...props}\n >\n {children}\n </thead>\n );\n});\nUITableHead.displayName = 'UITableHead';\n\nexport const UITableHeadRow = memo<TUITableHeadRow>(({ headerGroup, className, ...props }) => {\n const { isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected } = useUITableHeadRowContext();\n const firstRightPinnedHeaderId = rightPinnedHeaders[0]?.id;\n const lastLeftPinnedHeaderId = leftPinnedHeaders[leftPinnedHeaders.length - 1]?.id;\n return (\n <tr slot=\"table-head-row\" className={cn('flex', className)} {...props}>\n {headerGroup.headers.map((header, index) => {\n const isVisible = header.column.getIsVisible();\n const isPinned = columnPinningState.left?.includes(header.id) ? 'left' : columnPinningState.right?.includes(header.id) ? 'right' : false;\n if (header.id === 'select') {\n return (\n <UITableHeadCellSelect\n key={header.id}\n isPinned={isPinned}\n isAllRowsSelected={isAllRowsSelected}\n onToggleAllRowsSelected={onToggleAllRowsSelected}\n />\n );\n }\n return (\n <UITableHeadCell\n key={`${header.id}-${index}`}\n isVisible={isVisible}\n isPinned={isPinned}\n isFirstCell={header.id === firstRightPinnedHeaderId}\n isLastCell={header.id === lastLeftPinnedHeaderId}\n isOptionsVisible={!['select', 'actions'].includes(header.id)}\n headerId={header.id}\n headerColumn={header.column}\n colSpan={header.colSpan}\n onColumnPin={header.column.pin}\n onToggleVisibility={header.column.toggleVisibility}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </UITableHeadCell>\n );\n })}\n </tr>\n );\n});\nUITableHeadRow.displayName = 'UITableHeadRow';\n\nexport const UITableHeadCell = memo<TUITableHeadCell>(\n ({\n isVisible = true,\n isPinned = false,\n isFirstCell = false,\n isLastCell = false,\n isOptionsVisible = true,\n headerId,\n headerColumn,\n className,\n children,\n onColumnPin,\n onToggleVisibility,\n ...props\n }) => {\n const zIndex = useMemo(() => {\n return isPinned ? PINNED_COLUMN_Z_INDEX : undefined;\n }, [isPinned]);\n\n const left = useMemo(() => {\n const axis = headerColumn?.getStart?.('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const right = useMemo(() => {\n const axis = headerColumn?.getAfter?.('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const width = useMemo(() => {\n return `calc(var(--header-${headerId}-size) * 1px)`;\n }, [headerId]);\n\n const minSize = useMemo(() => {\n return headerColumn?.columnDef.minSize ? `calc(var(--col-${headerId}-minSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n\n const maxSize = useMemo(() => {\n return headerColumn?.columnDef.maxSize ? `calc(var(--col-${headerId}-maxSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n return (\n <th\n slot=\"table-head-cell\"\n data-pinned={isPinned}\n data-header={headerId}\n style={{\n zIndex,\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className={cn(\n 'group flex',\n isPinned ? 'sticky' : 'relative',\n isPinned === 'left' && isLastCell && 'border-r border-r-border',\n isPinned === 'right' && isFirstCell && 'border-l border-l-border',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'center' && 'justify-center',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'end' && 'justify-end',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'start' && 'justify-start',\n className\n )}\n {...props}\n >\n <div className=\"truncate pl-4\">{children}</div>\n {isOptionsVisible && (\n <UITableHeadCellOption isPinned={isPinned} isVisible={isVisible} onLeftPin={onColumnPin} onRightPin={onColumnPin} onUnpin={onColumnPin} />\n )}\n </th>\n );\n }\n);\nUITableHeadCell.displayName = 'UITableHeadCell';\n\nexport const UITableBody = memo<TUITableBody>(({ height, className, children, ...props }) => {\n const { isFetching, isEmpty } = useUITableBodyContext();\n if (isEmpty || isFetching) return null;\n return (\n <tbody\n slot=\"table-body\"\n style={{ height }}\n className={cn(\n 'relative w-full',\n 'grid',\n\n '[&_tr]:absolute',\n '[&_tr]:flex',\n '[&_tr]:flex-none',\n '[&_tr]:w-full',\n '[&_tr]:cursor-pointer [&_tr]:focus:outline-none',\n '[&_tr]:border-b [&_tr]:border-b-border',\n\n '[&_td]:z-10',\n '[&_td]:transition-all',\n '[&_td]:duration-300',\n '[&_td]:flex',\n '[&_td]:flex-none',\n '[&_td]:overflow-hidden',\n '[&_td]:whitespace-nowrap',\n '[&_td]:px-4',\n '[&_td]:py-2.5',\n '[&_td]:align-middle',\n '[&_td]:border-border',\n\n '[&_td]:data-[selected=true]:bg-muted-muted!',\n '[&_td]:data-[selected=true]:hover:bg-muted-muted!',\n\n '[&_td>div]:inline-flex',\n '[&_td>div]:items-center',\n '[&_td>div]:w-full',\n\n '[&_td:not([data-pinned=false])]:z-20',\n '[&_td:not([data-pinned=false])]:sticky',\n '[&_td:not([data-pinned=false])]:bg-card',\n\n '**:data-lastcell:border-r',\n '**:data-firstcell:border-l',\n className\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n});\nUITableBody.displayName = 'UITableBody';\n\nexport const UITableRow = memo<TUITableRow>(({ row, isSelected, virtualRowIndex, virtualRowStart, children, ...props }) => {\n const { keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow } = useUITableRowContext();\n\n const pinnedLeftColumns = useMemo(() => columnPinningState.left ?? [], [columnPinningState]);\n const pinnedRightColumns = useMemo(() => columnPinningState.right ?? [], [columnPinningState]);\n const firstRightPinnedHeaderId = useMemo(() => rightPinnedHeaders?.[0]?.id, [rightPinnedHeaders]);\n const lastLeftPinnedHeaderId = useMemo(() => leftPinnedHeaders?.[leftPinnedHeaders.length - 1]?.id, [leftPinnedHeaders]);\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLTableRowElement>>(\n e => {\n const value = keyOfClickRow ? row.original?.[keyOfClickRow] : undefined;\n onClickRow?.(virtualRowIndex, typeof value === 'string' || typeof value === 'number' ? value : undefined);\n e.preventDefault();\n e.stopPropagation();\n },\n [keyOfClickRow, onClickRow, row, virtualRowIndex]\n );\n return (\n <tr\n slot=\"table-row\"\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n }}\n className=\"group\"\n onClick={handleClick}\n {...props}\n >\n {row.getVisibleCells().map((cell, index) => {\n const isPinnedLeft = pinnedLeftColumns.includes(cell.column.id);\n const isPinnedRight = pinnedRightColumns.includes(cell.column.id);\n const isPinned = isPinnedLeft ? 'left' : isPinnedRight ? 'right' : false;\n if (cell.column.id === 'actions') {\n return (\n <UITableCellActions\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n virtualRowIndex={virtualRowIndex}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n }\n if (cell.column.id === 'select') {\n return (\n <UITableCellSelect\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isSelected={isAllRowsSelected || isSelected}\n onToggleRowSelected={cell.row.toggleSelected}\n />\n );\n }\n return (\n <UITableCell\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isFirstCell={cell.column.id === firstRightPinnedHeaderId}\n isLastCell={cell.column.id === lastLeftPinnedHeaderId}\n colId={cell.column.id}\n position={(cell.column.columnDef.meta as AnyEntity)?.position ?? 'start'}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n })}\n </tr>\n );\n});\nUITableRow.displayName = 'UITableRow';\n\nexport const UITableCellSelect = memo<TUITableCellSelect>(({ isPinned, isSelected = false, className, onToggleRowSelected, ...props }) => {\n const handleToggleRowSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleRowSelected?.(!!value);\n },\n [onToggleRowSelected]\n );\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: PINNED_COLUMN_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn('group-hover:bg-muted-bg-subtle!', isPinned ? 'sticky' : 'relative', className)}\n {...props}\n >\n <div\n data-slot=\"table-cell-inner\"\n className=\"flex! w-full! items-center justify-center bg-transparent text-center align-middle\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select Row\" checked={isSelected} onCheckedChange={handleToggleRowSelected} />\n </div>\n </td>\n );\n});\nUITableCellSelect.displayName = 'UITableCellSelect';\n\nexport const UITableCellActions = memo<TUITableCellActions>(({ virtualRowIndex, column, getContext, className, ...props }) => {\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n return (\n <td\n data-col=\"actions\"\n data-cell={virtualRowIndex}\n className=\"sticky inset-y-0 right-0 z-50 flex items-center pr-4 group-hover:bg-muted-bg-subtle!\"\n {...props}\n >\n {render}\n </td>\n );\n});\nUITableCellActions.displayName = 'UITableCellActions';\n\nexport const UITableCell = memo<TUITableCell>(\n ({ isPinned = false, isFirstCell = false, isLastCell = false, colId, position = 'start', column, getContext, ...props }) => {\n const { innerTableId, table } = useUITableInnerTableContext();\n const tableRef = useRef<Element>(document.querySelector(`table[id=\"${innerTableId}\"]`));\n const cellRef = useRef<HTMLDivElement>(null);\n\n const left = useMemo(() => {\n const axis = column?.getStart('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const right = useMemo(() => {\n const axis = column?.getAfter('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const width = useMemo(() => {\n return `calc(var(--col-${colId}-size) * 1px)`;\n }, [colId]);\n\n const minSize = useMemo(() => {\n return column?.columnDef.minSize ? `calc(var(--col-${colId}-minSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const maxSize = useMemo(() => {\n return column?.columnDef.maxSize ? `calc(var(--col-${colId}-maxSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n\n useEffect(() => {\n if (!cellRef.current) return;\n\n // Đo kích thước thực tế của nội dung bên trong\n const width = cellRef.current.scrollWidth;\n const currentSize = column?.getSize();\n\n // Nếu cell này dài hơn size hiện tại của cột, cập nhật lại size cho column\n if (!!currentSize && width > currentSize) {\n if (tableRef.current instanceof HTMLTableElement && typeof colId === 'string' && !!(column?.columnDef.meta as AnyEntity)?.['fitContent']) {\n table.setColumnSizing(old => ({\n ...old,\n [colId]: width + 32,\n }));\n }\n }\n }, [colId, column, table]); // Chạy lại khi data trong cell thay đổi\n\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={isPinned}\n data-lastcell={isLastCell || undefined}\n data-firstcell={isFirstCell || undefined}\n style={{\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className=\"group-hover:bg-muted-bg-subtle!\"\n {...props}\n >\n <div\n ref={cellRef}\n slot=\"table-body-cell-inner\"\n className={cn(position === 'start' && 'justify-start', position === 'center' && 'justify-center', position === 'end' && 'justify-end')}\n >\n {render}\n </div>\n </td>\n );\n }\n);\nUITableCell.displayName = 'UITableCell';\n\nexport const UITableFooter = memo<TUITableFooter>(({ className, children, ...props }) => {\n return (\n <tfoot\n slot=\"table-footer\"\n className={cn('flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n >\n {children}\n </tfoot>\n );\n});\nUITableFooter.displayName = 'UITableFooter';\n\nexport const UITableLoadMore = memo<TUITableLoadMore>(({ virtualRowIndex, virtualRowStart, fetchMoreData }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n\n const tableWrapperRef = useRef<Element | null>(document.querySelector(`div[id=\"${innerWrapperId}\"]`));\n const rowRef = useRef<HTMLTableRowElement>(null);\n\n const [fetchingState, setFetchingState] = useState<'idle' | 'fetching' | 'error'>('idle');\n\n const [width, setWidth] = useState<number>(0);\n\n const handleFetchMoreData = useCallback(async () => {\n try {\n setFetchingState('fetching');\n await fetchMoreData?.();\n setFetchingState('idle');\n } catch (error) {\n console.error('Error fetching more data:', error);\n setFetchingState('error');\n } finally {\n // setFetchingState('idle');\n }\n }, [fetchMoreData]);\n\n useEffect(() => {\n if (!tableWrapperRef.current) return;\n\n const observer = new ResizeObserver(entries => {\n // Access width from contentRect\n setWidth(entries[0].contentRect.width);\n });\n\n observer.observe(tableWrapperRef.current);\n return () => observer.disconnect(); // Cleanup on unmount\n }, []);\n\n if (!fetchMoreData) return null;\n\n return (\n <tr\n ref={rowRef}\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n width,\n }}\n className=\"sticky! left-0 h-10\"\n >\n <td className=\"absolute left-0 flex w-full items-center justify-center text-xs\">\n <button\n type=\"button\"\n disabled={fetchingState === 'fetching'}\n className={cn(\n 'flex cursor-pointer gap-x-0.5',\n fetchingState === 'fetching' && 'cursor-not-allowed',\n fetchingState === 'idle' && 'text-text-positive-weak hover:text-text-positive',\n fetchingState === 'error' && 'text-danger hover:text-danger-strong'\n )}\n onClick={handleFetchMoreData}\n >\n {fetchingState === 'idle' && <ChevronDown className=\"size-4\" />}\n {fetchingState === 'fetching' && <Spinner className=\"size-4 animate-spin\" />}\n {fetchingState === 'error' && <AlertTriangle className=\"size-4 text-danger\" />}\n {fetchingState === 'idle' && 'Load More'}\n {fetchingState === 'fetching' && 'Loading...'}\n {fetchingState === 'error' && 'Error! Retry?'}\n </button>\n </td>\n </tr>\n );\n});\nUITableLoadMore.displayName = 'UITableLoadMore';\n","'use client';\nimport { useMemo, useRef } from 'react';\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';\n\nimport { useUITableBodyContext, useUITableContext } from '../hooks/use-context';\nimport { UITableBody, UITableEmptyDisplay, UITableHead, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableLoadMore, UITableRow } from './common';\n\nexport const UITableContainer: React.FC<React.PropsWithChildren> = () => {\n const { table, isEmpty, isFetching, fetchMoreData } = useUITableContext();\n const { rowSelectionState } = useUITableBodyContext();\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n const { rows } = table.getRowModel();\n\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length + 1,\n estimateSize: () => 40, // estimated row height\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1 ? element => element?.getBoundingClientRect().height : undefined,\n overscan: 2, // Render additional rows beyond viewport for smoother scrolling\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rowVirtualizer getTotalSize\n const tableBodyHeight = useMemo(() => {\n const totalSize = rowVirtualizer.getTotalSize();\n const containerHeight = tableContainerRef.current?.clientHeight || 0;\n return totalSize < containerHeight ? `${containerHeight}px` : `${totalSize}px`;\n }, [rowVirtualizer.getTotalSize()]);\n\n return (\n <ResizablePanelGroup\n direction=\"horizontal\"\n style={{ direction: table.options.columnResizeDirection }}\n className=\"relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border border-r border-r-border bg-slate-50 p-0 text-sm\"\n >\n <ResizablePanel className=\"relative\">\n <UITableInnerWrapper ref={tableContainerRef}>\n <UITableInnerTable>\n <UITableHead>\n {table.getHeaderGroups().map(headerGroup => (\n <UITableHeadRow key={headerGroup.id} headerGroup={headerGroup} />\n ))}\n </UITableHead>\n <UITableBody height={tableBodyHeight}>\n {rowVirtualizer.getVirtualItems().map(virtualRow => {\n const row = rows[virtualRow.index];\n const isSelected = Object.entries(rowSelectionState).some(([k, v]) => k === `${row?.id}` && v);\n if (!row) {\n return (\n <UITableLoadMore\n key={virtualRow.index}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n fetchMoreData={fetchMoreData}\n />\n );\n }\n return (\n <UITableRow\n key={virtualRow.index}\n ref={rowVirtualizer.measureElement}\n row={row}\n isSelected={isSelected}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n />\n );\n })}\n </UITableBody>\n </UITableInnerTable>\n <UITableEmptyDisplay isEmpty={isEmpty} isFetching={isFetching} />\n </UITableInnerWrapper>\n </ResizablePanel>\n </ResizablePanelGroup>\n );\n};\n","import { Activity, useState } from 'react';\n\nimport { Columns4Icon, ListFilterIcon, ListFilterPlus } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { ResizablePanel } from '@/components/ui/resizable';\nimport { Separator } from '@/components/ui/separator';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\nconst ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}> = ({ checked, title, onCheckedChange }) => {\n return (\n <div className=\"flex h-fit items-center gap-2\">\n <Checkbox checked={checked} onCheckedChange={onCheckedChange} />\n <p className=\"text-sm\">{title}</p>\n </div>\n );\n};\n\nexport const UITableFilter = () => {\n const { table } = useUITableContext();\n const [tab, setTab] = useState<'columns' | 'filters' | null>(null);\n\n return (\n <ResizablePanel defaultSize={25} className={cn('bg-card', tab === null ? 'max-w-8!' : 'min-w-64')}>\n <div className=\"relative z-20 flex size-full bg-muted-bg-subtle\">\n <div className=\"flex-1\">\n <Activity mode={tab === 'columns' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col gap-2 p-4\">\n <p className=\"px-2 font-medium\">Columns Visibility</p>\n <Separator />\n <div className=\"flex flex-col gap-4 pt-4\">\n {table.getAllColumns().map(column => {\n if (['select', 'actions'].includes(column.id)) return null;\n return (\n <ColumnVisibility\n key={column.id}\n checked={column.getIsVisible()}\n title={String(column.columnDef.header)}\n onCheckedChange={value => column.toggleVisibility(!!value)}\n />\n );\n })}\n </div>\n </div>\n </Activity>\n <Activity mode={tab === 'filters' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col p-2\">\n <Button variant=\"outline\" color=\"muted\">\n <ListFilterPlus />\n Add Filter\n </Button>\n </div>\n </Activity>\n </div>\n <div className=\"flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm\">\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'columns' && 'bg-card')}\n onClick={() => setTab(tab === 'columns' ? null : 'columns')}\n >\n <Columns4Icon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Columns</span>\n </button>\n <Separator />\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'filters' && 'bg-card')}\n onClick={() => setTab(tab === 'filters' ? null : 'filters')}\n >\n <ListFilterIcon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Filters</span>\n </button>\n <Separator />\n </div>\n </div>\n </ResizablePanel>\n );\n};\n","import { memo, useCallback, useId, useMemo, useState } from 'react';\n\nimport type { ColumnDef, ColumnPinningState, ExpandedState, RowSelectionState } from '@tanstack/react-table';\nimport { getCoreRowModel, getExpandedRowModel, getGroupedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport type { AnyEntity } from '@/types';\nimport {\n TableBodyContext,\n TableContext,\n TableHeadRowContext,\n TableInnerTableContext,\n TableInnerWrapperContext,\n TableRowContext,\n} from '../../hooks/use-context';\nimport type {\n RowData,\n TableProviderProps,\n TTableBodyContext,\n TTableContext,\n TTableHeadRowContext,\n TTableInnerTableContext,\n TTableInnerWrapperContext,\n TTableRowContext,\n TUITableColumn,\n} from '../../types';\n\nconst UITableInnerWrapperProvider = memo<React.PropsWithChildren<TTableInnerWrapperContext>>(({ innerWrapperId, children }) => {\n const value = useMemo<TTableInnerWrapperContext>(() => ({ innerWrapperId }), [innerWrapperId]);\n return <TableInnerWrapperContext.Provider value={value}>{children}</TableInnerWrapperContext.Provider>;\n});\nUITableInnerWrapperProvider.displayName = 'UITableInnerWrapperProvider';\n\nconst UITableInnerTableProvider = memo<React.PropsWithChildren<TTableInnerTableContext>>(({ table, innerTableId, totalSize, children }) => {\n const value = useMemo<TTableInnerTableContext>(() => ({ table, innerTableId, totalSize }), [table, innerTableId, totalSize]);\n return <TableInnerTableContext.Provider value={value}>{children}</TableInnerTableContext.Provider>;\n});\nUITableInnerTableProvider.displayName = 'UITableInnerTableProvider';\n\nconst UITableHeadRowProvider = memo<React.PropsWithChildren<TTableHeadRowContext>>(\n ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected, children }) => {\n const value = useMemo<TTableHeadRowContext>(\n () => ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected }),\n [isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected]\n );\n return <TableHeadRowContext.Provider value={value}>{children}</TableHeadRowContext.Provider>;\n }\n);\nUITableHeadRowProvider.displayName = 'UITableHeadRowProvider';\n\nconst UITableBodyProvider = memo<React.PropsWithChildren<TTableBodyContext>>(({ isFetching, isEmpty, rowSelectionState, children }) => {\n const value = useMemo<TTableBodyContext>(() => ({ isFetching, isEmpty, rowSelectionState }), [isFetching, isEmpty, rowSelectionState]);\n return <TableBodyContext.Provider value={value}>{children}</TableBodyContext.Provider>;\n});\nUITableBodyProvider.displayName = 'UITableBodyProvider';\n\nconst UITableRowProvider = memo<React.PropsWithChildren<TTableRowContext<AnyEntity, AnyEntity>>>(\n ({ keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow, children }) => {\n const value = useMemo<TTableRowContext<AnyEntity, AnyEntity>>(\n () => ({\n keyOfClickRow,\n isAllRowsSelected,\n columnPinningState,\n leftPinnedHeaders,\n rightPinnedHeaders,\n onClickRow,\n }),\n [keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow]\n );\n return <TableRowContext.Provider value={value}>{children}</TableRowContext.Provider>;\n }\n);\nUITableRowProvider.displayName = 'UITableRowProvider';\n\nexport const UITableProvider = <\n TData extends RowData<TData> = RowData<AnyEntity>,\n TKey extends keyof TData = keyof TData,\n TColumns extends ReadonlyArray<TUITableColumn<TData>> = TUITableColumn<TData>[],\n>({\n title,\n\n isFetching = false,\n isRefetching = false,\n\n data,\n columns,\n totalRows,\n\n leftPinnedColumns = [],\n rightPinnedColumns = [],\n\n keyOfClickRow,\n onClickRow,\n onRowSelection,\n onColumnPinning,\n\n fetchMoreData,\n children,\n}: React.PropsWithChildren<TableProviderProps<TData, TKey, TColumns>>) => {\n const innerWrapperId = useId();\n const innerTableId = useId();\n\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\n right: rightPinnedColumns as unknown as string[],\n left: ['select', ...leftPinnedColumns] as unknown as string[],\n });\n const [expanded, setExpanded] = useState<ExpandedState>({});\n\n const handleRowSelectionChange = useCallback<React.Dispatch<React.SetStateAction<RowSelectionState>>>(\n newRowSelection => {\n setRowSelection(newRowSelection);\n onRowSelection?.(newRowSelection instanceof Function ? newRowSelection(rowSelection) : newRowSelection);\n return newRowSelection;\n },\n [rowSelection, onRowSelection]\n );\n\n const handleColumnPinningChange = useCallback<React.Dispatch<React.SetStateAction<ColumnPinningState>>>(\n newColumnPinning => {\n setColumnPinning(newColumnPinning);\n onColumnPinning?.(newColumnPinning instanceof Function ? newColumnPinning(columnPinning) : newColumnPinning);\n },\n [columnPinning, onColumnPinning]\n );\n\n const table = useReactTable<TData>({\n data: data,\n columns: columns as unknown as ColumnDef<AnyEntity, unknown>[],\n state: {\n rowSelection,\n columnPinning,\n expanded,\n },\n defaultColumn: {\n enableResizing: false,\n size: undefined,\n minSize: undefined,\n maxSize: undefined,\n },\n columnResizeMode: 'onChange',\n columnResizeDirection: 'ltr',\n\n enableColumnPinning: true,\n enableRowSelection: true,\n enableColumnResizing: true,\n enableMultiRowSelection: true,\n\n autoResetAll: false,\n autoResetExpanded: false,\n autoResetPageIndex: false,\n\n getSubRows: row => row.subRows,\n getCoreRowModel: getCoreRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n onRowSelectionChange: handleRowSelectionChange,\n onColumnPinningChange: handleColumnPinningChange,\n onExpandedChange: setExpanded,\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rows\n const rows = useMemo(() => {\n const { rows } = table.getRowModel();\n return rows;\n }, [table.getRowModel().rows, table.getState().columnPinning]);\n\n const isEmpty = useMemo<boolean>(() => {\n return !isFetching && rows.length === 0;\n }, [rows, isFetching]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const value = useMemo<TTableContext<TData>>(\n () => ({\n title,\n table,\n\n isEmpty,\n isFetching,\n isRefetching,\n\n totalRows,\n\n fetchMoreData,\n }),\n [\n title,\n table,\n\n isEmpty,\n isRefetching,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n table.getState().columnPinning,\n table.getState().expanded,\n ]\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const tableState = useMemo(() => {\n return table.getState();\n }, [table.getState()]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const isAllRowsSelected = useMemo(() => {\n return table.getIsAllRowsSelected();\n }, [table.getIsAllRowsSelected()]);\n\n const rowSelectionState = useMemo(() => {\n return tableState.rowSelection;\n }, [tableState.rowSelection]);\n\n const columnPinningState = useMemo(() => {\n return tableState.columnPinning;\n }, [tableState.columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const leftPinnedHeaders = useMemo(() => {\n return table.getLeftHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const rightPinnedHeaders = useMemo(() => {\n return table.getRightHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get total size\n const totalSize = useMemo(() => {\n return table.getTotalSize();\n }, [table.getTotalSize()]);\n\n return (\n <TableContext.Provider value={value as TTableContext<TData>}>\n <UITableInnerWrapperProvider innerWrapperId={innerWrapperId}>\n <UITableInnerTableProvider table={table} innerTableId={innerTableId} totalSize={totalSize}>\n <UITableHeadRowProvider\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onToggleAllRowsSelected={table.toggleAllRowsSelected}\n >\n <UITableBodyProvider isFetching={isFetching} isEmpty={isEmpty} rowSelectionState={rowSelectionState}>\n <UITableRowProvider\n keyOfClickRow={keyOfClickRow}\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onClickRow={onClickRow}\n >\n {children}\n </UITableRowProvider>\n </UITableBodyProvider>\n </UITableHeadRowProvider>\n </UITableInnerTableProvider>\n </UITableInnerWrapperProvider>\n </TableContext.Provider>\n );\n};\n","import { ArrowRightIcon, CirclePlus, DownloadIcon, RefreshCwIcon, SearchIcon } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\nexport const UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n> = ({ onSearch, onChange, ...props }) => {\n const debouncedSearch = useDebounceCallback((value: string) => {\n onSearch?.(value);\n }, 500);\n return (\n <div className=\"relative w-full max-w-80 flex-1\">\n <Input\n {...props}\n size=\"lg\"\n type=\"search\"\n placeholder=\"Search records...\"\n className=\"flex-1 ps-9 pe-9\"\n onChange={e => {\n onChange?.(e);\n debouncedSearch(e.target.value ?? '');\n }}\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Submit search\"\n type=\"submit\"\n >\n <ArrowRightIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n};\n\nconst ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>> = ({ children, disabled, onClick }) => {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className=\"flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive disabled:pointer-events-none disabled:cursor-default disabled:opacity-60 [&_svg]:size-3.5\"\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n\nexport const UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}> = ({ onCreate, onDownload, onRefresh }) => {\n return (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\">\n <ActionButton\n disabled={!onCreate}\n onClick={e => {\n onCreate?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <CirclePlus />\n </ActionButton>\n <ActionButton\n disabled={!onRefresh}\n onClick={e => {\n onRefresh?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <RefreshCwIcon />\n </ActionButton>\n <ActionButton\n disabled={!onDownload}\n onClick={e => {\n onDownload?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <DownloadIcon />\n </ActionButton>\n </div>\n );\n};\n\nexport const UITableTooltip: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { title } = useUITableContext();\n return (\n <div data-slot=\"table-tooltip\" className=\"relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm\">\n <h3 className=\"font-semibold text-base text-text-positive\">{title}</h3>\n <div className=\"flex w-full flex-1 justify-between gap-x-2\">{children}</div>\n </div>\n );\n};\nUITableTooltip.displayName = 'TableTooltip';\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as AnyEntity } from "../../types-Bd0JePtp.cjs";
2
- import { t as Input } from "../../input-VtO0d8O-.cjs";
3
- import * as react_jsx_runtime333 from "react/jsx-runtime";
4
- import * as react255 from "react";
2
+ import { t as Input } from "../../input-Bq2N5bvL.cjs";
3
+ import * as react_jsx_runtime346 from "react/jsx-runtime";
4
+ import * as react267 from "react";
5
5
  import { AccessorKeyColumnDef, CellContext, Column, ColumnPinningPosition, ColumnPinningState, Header, HeaderGroup, Row, RowSelectionState, Table } from "@tanstack/react-table";
6
6
  import { VirtualItem, Virtualizer } from "@tanstack/react-virtual";
7
7
 
@@ -73,7 +73,7 @@ type Props$1 = {
73
73
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
74
74
  value: number | string | null | undefined;
75
75
  };
76
- declare const UITableStatisticDisplay: react255.MemoExoticComponent<({
76
+ declare const UITableStatisticDisplay: react267.MemoExoticComponent<({
77
77
  decimalSeparator,
78
78
  groupSeparator,
79
79
  prefix: Prefix,
@@ -83,7 +83,7 @@ declare const UITableStatisticDisplay: react255.MemoExoticComponent<({
83
83
  showTrailingZeros,
84
84
  size,
85
85
  value
86
- }: Props$1) => react_jsx_runtime333.JSX.Element>;
86
+ }: Props$1) => react_jsx_runtime346.JSX.Element>;
87
87
  //#endregion
88
88
  //#region packages/components/features/tables/components/atoms/user.d.ts
89
89
  type Props = {
@@ -236,28 +236,28 @@ type TableProviderProps<TData extends RowData<TData>, TKey extends keyof TData =
236
236
  };
237
237
  //#endregion
238
238
  //#region packages/components/features/tables/components/common.d.ts
239
- declare const UITableHeadCellOption: react255.NamedExoticComponent<TUITableHeadCellOption>;
240
- declare const UITableHeadCellSelect: react255.NamedExoticComponent<TUITableHeadCellSelect>;
241
- declare const UITableEmptyDisplay: react255.NamedExoticComponent<TUITableEmptyDisplay>;
242
- declare const UITableWrapper: react255.NamedExoticComponent<TUITableWrapper>;
243
- declare const UITableInnerWrapper: react255.NamedExoticComponent<TUITableInnerWrapper>;
244
- declare const UITableInnerTable: react255.NamedExoticComponent<TUITableInnerTable>;
245
- declare const UITableHead: react255.NamedExoticComponent<TUITableHead>;
246
- declare const UITableHeadRow: react255.NamedExoticComponent<TUITableHeadRow>;
247
- declare const UITableHeadCell: react255.NamedExoticComponent<TUITableHeadCell>;
248
- declare const UITableBody: react255.NamedExoticComponent<TUITableBody>;
249
- declare const UITableRow: react255.NamedExoticComponent<TUITableRow>;
250
- declare const UITableCellSelect: react255.NamedExoticComponent<TUITableCellSelect>;
251
- declare const UITableCellActions: react255.NamedExoticComponent<TUITableCellActions>;
252
- declare const UITableCell: react255.NamedExoticComponent<TUITableCell>;
253
- declare const UITableFooter: react255.NamedExoticComponent<TUITableFooter>;
254
- declare const UITableLoadMore: react255.NamedExoticComponent<TUITableLoadMore>;
239
+ declare const UITableHeadCellOption: react267.NamedExoticComponent<TUITableHeadCellOption>;
240
+ declare const UITableHeadCellSelect: react267.NamedExoticComponent<TUITableHeadCellSelect>;
241
+ declare const UITableEmptyDisplay: react267.NamedExoticComponent<TUITableEmptyDisplay>;
242
+ declare const UITableWrapper: react267.NamedExoticComponent<TUITableWrapper>;
243
+ declare const UITableInnerWrapper: react267.NamedExoticComponent<TUITableInnerWrapper>;
244
+ declare const UITableInnerTable: react267.NamedExoticComponent<TUITableInnerTable>;
245
+ declare const UITableHead: react267.NamedExoticComponent<TUITableHead>;
246
+ declare const UITableHeadRow: react267.NamedExoticComponent<TUITableHeadRow>;
247
+ declare const UITableHeadCell: react267.NamedExoticComponent<TUITableHeadCell>;
248
+ declare const UITableBody: react267.NamedExoticComponent<TUITableBody>;
249
+ declare const UITableRow: react267.NamedExoticComponent<TUITableRow>;
250
+ declare const UITableCellSelect: react267.NamedExoticComponent<TUITableCellSelect>;
251
+ declare const UITableCellActions: react267.NamedExoticComponent<TUITableCellActions>;
252
+ declare const UITableCell: react267.NamedExoticComponent<TUITableCell>;
253
+ declare const UITableFooter: react267.NamedExoticComponent<TUITableFooter>;
254
+ declare const UITableLoadMore: react267.NamedExoticComponent<TUITableLoadMore>;
255
255
  //#endregion
256
256
  //#region packages/components/features/tables/components/table.d.ts
257
257
  declare const UITableContainer: React.FC<React.PropsWithChildren>;
258
258
  //#endregion
259
259
  //#region packages/components/features/tables/components/table/filter.d.ts
260
- declare const UITableFilter: () => react_jsx_runtime333.JSX.Element;
260
+ declare const UITableFilter: () => react_jsx_runtime346.JSX.Element;
261
261
  //#endregion
262
262
  //#region packages/components/features/tables/components/table/provider.d.ts
263
263
  declare const UITableProvider: <TData extends RowData<TData> = RowData<AnyEntity>, TKey extends keyof TData = keyof TData, TColumns extends ReadonlyArray<TUITableColumn<TData>> = TUITableColumn<TData>[]>({
@@ -275,7 +275,7 @@ declare const UITableProvider: <TData extends RowData<TData> = RowData<AnyEntity
275
275
  onColumnPinning,
276
276
  fetchMoreData,
277
277
  children
278
- }: React.PropsWithChildren<TableProviderProps<TData, TKey, TColumns>>) => react_jsx_runtime333.JSX.Element;
278
+ }: React.PropsWithChildren<TableProviderProps<TData, TKey, TColumns>>) => react_jsx_runtime346.JSX.Element;
279
279
  //#endregion
280
280
  //#region packages/components/features/tables/components/table/tooltip.d.ts
281
281
  declare const UITableTooltipFilter: React.FC<Omit<React.ComponentProps<typeof Input>, 'className'> & {
@@ -1,5 +1,5 @@
1
1
  import { t as AnyEntity } from "../../types-BpHcqlOI.mjs";
2
- import { t as Input } from "../../input-Dv7UKl6Z.mjs";
2
+ import { t as Input } from "../../input-B4scaWjT.mjs";
3
3
  import * as react267 from "react";
4
4
  import * as react_jsx_runtime346 from "react/jsx-runtime";
5
5
  import { AccessorKeyColumnDef, CellContext, Column, ColumnPinningPosition, ColumnPinningState, Header, HeaderGroup, Row, RowSelectionState, Table } from "@tanstack/react-table";