@health-samurai/react-components 0.0.0-alpha.6 → 0.0.0-alpha.8

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 (122) hide show
  1. package/dist/bundle.css +88 -451
  2. package/dist/src/components/button-dropdown.d.ts +10 -0
  3. package/dist/src/components/button-dropdown.d.ts.map +1 -0
  4. package/dist/src/components/button-dropdown.js +70 -0
  5. package/dist/src/components/button-dropdown.js.map +1 -0
  6. package/dist/src/components/button-dropdown.stories.d.ts +11 -0
  7. package/dist/src/components/button-dropdown.stories.d.ts.map +1 -0
  8. package/dist/src/components/button-dropdown.stories.js +48 -0
  9. package/dist/src/components/button-dropdown.stories.js.map +1 -0
  10. package/dist/src/components/data-table.d.ts +4 -3
  11. package/dist/src/components/data-table.d.ts.map +1 -1
  12. package/dist/src/components/data-table.js +5 -4
  13. package/dist/src/components/data-table.js.map +1 -1
  14. package/dist/src/components/data-table.stories.d.ts.map +1 -1
  15. package/dist/src/components/data-table.stories.js +196 -0
  16. package/dist/src/components/data-table.stories.js.map +1 -1
  17. package/dist/src/components/fhir-structure-view.d.ts +8 -8
  18. package/dist/src/components/fhir-structure-view.d.ts.map +1 -1
  19. package/dist/src/components/fhir-structure-view.js +21 -22
  20. package/dist/src/components/fhir-structure-view.js.map +1 -1
  21. package/dist/src/components/segment-control.d.ts +3 -3
  22. package/dist/src/components/segment-control.d.ts.map +1 -1
  23. package/dist/src/components/segment-control.js +5 -5
  24. package/dist/src/components/segment-control.js.map +1 -1
  25. package/dist/src/components/segment-control.stories.d.ts +2 -3
  26. package/dist/src/components/segment-control.stories.d.ts.map +1 -1
  27. package/dist/src/components/split-button.d.ts +2 -2
  28. package/dist/src/components/split-button.d.ts.map +1 -1
  29. package/dist/src/components/split-button.js +2 -2
  30. package/dist/src/components/split-button.js.map +1 -1
  31. package/dist/src/components/tree-view.d.ts +28 -5
  32. package/dist/src/components/tree-view.d.ts.map +1 -1
  33. package/dist/src/components/tree-view.js +75 -60
  34. package/dist/src/components/tree-view.js.map +1 -1
  35. package/dist/src/components/tree-view.stories.d.ts.map +1 -1
  36. package/dist/src/components/tree-view.stories.js +20 -11
  37. package/dist/src/components/tree-view.stories.js.map +1 -1
  38. package/dist/src/icons.d.ts +8 -8
  39. package/dist/src/icons.d.ts.map +1 -1
  40. package/dist/src/icons.js +78 -78
  41. package/dist/src/icons.js.map +1 -1
  42. package/dist/src/index.d.ts +3 -1
  43. package/dist/src/index.d.ts.map +1 -1
  44. package/dist/src/index.js +2 -0
  45. package/dist/src/index.js.map +1 -1
  46. package/dist/src/shadcn/components/ui/badge.d.ts +1 -1
  47. package/dist/src/shadcn/components/ui/card.d.ts +5 -1
  48. package/dist/src/shadcn/components/ui/card.d.ts.map +1 -1
  49. package/dist/src/shadcn/components/ui/card.js +21 -8
  50. package/dist/src/shadcn/components/ui/card.js.map +1 -1
  51. package/dist/src/shadcn/components/ui/card.stories.d.ts +302 -1
  52. package/dist/src/shadcn/components/ui/card.stories.d.ts.map +1 -1
  53. package/dist/src/shadcn/components/ui/card.stories.js +23 -2
  54. package/dist/src/shadcn/components/ui/card.stories.js.map +1 -1
  55. package/dist/src/shadcn/components/ui/chart.d.ts +2 -2
  56. package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
  57. package/dist/src/shadcn/components/ui/chart.js +2 -2
  58. package/dist/src/shadcn/components/ui/chart.js.map +1 -1
  59. package/dist/src/shadcn/components/ui/combobox.d.ts +13 -0
  60. package/dist/src/shadcn/components/ui/combobox.d.ts.map +1 -1
  61. package/dist/src/shadcn/components/ui/combobox.js +105 -12
  62. package/dist/src/shadcn/components/ui/combobox.js.map +1 -1
  63. package/dist/src/shadcn/components/ui/form.d.ts +2 -2
  64. package/dist/src/shadcn/components/ui/form.d.ts.map +1 -1
  65. package/dist/src/shadcn/components/ui/form.js +4 -4
  66. package/dist/src/shadcn/components/ui/form.js.map +1 -1
  67. package/dist/src/shadcn/components/ui/pagination.d.ts +8 -1
  68. package/dist/src/shadcn/components/ui/pagination.d.ts.map +1 -1
  69. package/dist/src/shadcn/components/ui/pagination.js +36 -19
  70. package/dist/src/shadcn/components/ui/pagination.js.map +1 -1
  71. package/dist/src/shadcn/components/ui/pagination.stories.d.ts.map +1 -1
  72. package/dist/src/shadcn/components/ui/pagination.stories.js +44 -37
  73. package/dist/src/shadcn/components/ui/pagination.stories.js.map +1 -1
  74. package/dist/src/shadcn/components/ui/sonner.d.ts +3 -3
  75. package/dist/src/shadcn/components/ui/sonner.d.ts.map +1 -1
  76. package/dist/src/shadcn/components/ui/sonner.js +4 -4
  77. package/dist/src/shadcn/components/ui/sonner.js.map +1 -1
  78. package/dist/src/shadcn/components/ui/table.d.ts.map +1 -1
  79. package/dist/src/shadcn/components/ui/table.js +1 -1
  80. package/dist/src/shadcn/components/ui/table.js.map +1 -1
  81. package/dist/src/shadcn/components/ui/tabs.d.ts +6 -1
  82. package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
  83. package/dist/src/shadcn/components/ui/tabs.js +12 -8
  84. package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
  85. package/dist/src/shadcn/components/ui/tree.d.ts.map +1 -1
  86. package/dist/src/shadcn/components/ui/tree.js +21 -9
  87. package/dist/src/shadcn/components/ui/tree.js.map +1 -1
  88. package/dist/src/typography.css +24 -8
  89. package/package.json +1 -1
  90. package/src/components/button-dropdown.stories.tsx +41 -0
  91. package/src/components/button-dropdown.tsx +95 -0
  92. package/src/components/data-table.stories.tsx +52 -1
  93. package/src/components/data-table.tsx +8 -4
  94. package/src/components/fhir-structure-view.tsx +29 -29
  95. package/src/components/segment-control.tsx +6 -5
  96. package/src/components/split-button.tsx +2 -2
  97. package/src/components/tree-view.stories.tsx +20 -14
  98. package/src/components/tree-view.tsx +122 -56
  99. package/src/icons.tsx +78 -78
  100. package/src/index.tsx +3 -2
  101. package/src/shadcn/components/ui/card.stories.tsx +17 -3
  102. package/src/shadcn/components/ui/card.tsx +52 -8
  103. package/src/shadcn/components/ui/chart.tsx +2 -2
  104. package/src/shadcn/components/ui/combobox.tsx +132 -10
  105. package/src/shadcn/components/ui/form.tsx +5 -7
  106. package/src/shadcn/components/ui/pagination.stories.tsx +8 -2
  107. package/src/shadcn/components/ui/pagination.tsx +54 -3
  108. package/src/shadcn/components/ui/sonner.tsx +5 -5
  109. package/src/shadcn/components/ui/table.tsx +6 -1
  110. package/src/shadcn/components/ui/tabs.tsx +26 -17
  111. package/src/shadcn/components/ui/tree.tsx +27 -9
  112. package/src/typography.css +24 -8
  113. package/dist/src/components/patient-table.d.ts +0 -73
  114. package/dist/src/components/patient-table.d.ts.map +0 -1
  115. package/dist/src/components/patient-table.js +0 -921
  116. package/dist/src/components/patient-table.js.map +0 -1
  117. package/dist/src/components/patient-table.stories.d.ts +0 -111
  118. package/dist/src/components/patient-table.stories.d.ts.map +0 -1
  119. package/dist/src/components/patient-table.stories.js +0 -172
  120. package/dist/src/components/patient-table.stories.js.map +0 -1
  121. package/src/components/patient-table.stories.tsx +0 -111
  122. package/src/components/patient-table.tsx +0 -1301
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/patient-table.tsx"],"sourcesContent":["import type {\n\tColumn,\n\tColumnDef,\n\tColumnPinningState,\n\tHeader,\n} from \"@tanstack/react-table\";\nimport {\n\tcreateColumnHelper,\n\tflexRender,\n\tgetCoreRowModel,\n\tuseReactTable,\n} from \"@tanstack/react-table\";\nimport {\n\tArrowLeftToLine,\n\tArrowRightToLine,\n\tChevronDown,\n\tChevronUp,\n\tGripVertical,\n\tMoreHorizontal,\n\tPinOff,\n\tSearch,\n} from \"lucide-react\";\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Button } from \"#shadcn/components/ui/button\";\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from \"#shadcn/components/ui/dropdown-menu\";\nimport { Input } from \"#shadcn/components/ui/input\";\nimport { cn } from \"#shadcn/lib/utils\";\n\n// Unstyled table components to preserve custom styling\nconst Table = ({ className, ...props }: React.ComponentProps<\"table\">) => (\n\t<table className={className} {...props} />\n);\nconst TableHeader = ({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"thead\">) => <thead className={className} {...props} />;\nconst TableBody = ({ className, ...props }: React.ComponentProps<\"tbody\">) => (\n\t<tbody className={className} {...props} />\n);\nconst TableRow = ({ className, ...props }: React.ComponentProps<\"tr\">) => (\n\t<tr className={className} {...props} />\n);\nconst TableHead = ({ className, ...props }: React.ComponentProps<\"th\">) => (\n\t<th className={className} {...props} />\n);\nconst TableCell = ({ className, ...props }: React.ComponentProps<\"td\">) => (\n\t<td className={className} {...props} />\n);\n\nconst getPinningStyles = <T,>(column: Column<T>): CSSProperties => {\n\tconst isPinned = column.getIsPinned();\n\treturn {\n\t\tleft: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n\t\tright: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n\t\tposition: isPinned ? \"sticky\" : \"relative\",\n\t\twidth: column.getSize(),\n\t\tzIndex: isPinned ? 1 : 0,\n\t};\n};\n\n// Column configuration types\nexport type ColumnType = \"text\" | \"code\" | \"link\" | \"button\";\n\nexport interface ActionConfig {\n\tlabel: string;\n\tonClick: (rowId: string) => void;\n\tvariant?: \"primary\" | \"secondary\" | \"link\" | \"ghost\";\n\tdanger?: boolean;\n}\n\nexport interface ColumnConfig {\n\tkey: string;\n\tlabel: string;\n\twidth?: string;\n\tfixed?: boolean;\n\trightAlign?: boolean;\n\ttype?: ColumnType;\n\tsortable?: boolean;\n\tfilterable?: boolean;\n\t// For action columns\n\tactions?: ActionConfig[];\n}\n\n// Styles\nconst styles = {\n\t// Table container\n\ttableContainer: cn(\n\t\t\"w-full\",\n\t\t\"overflow-x-auto\",\n\t\t\"border\",\n\t\t\"border-border-secondary\",\n\t\t\"rounded-md\",\n\t),\n\ttable: cn(\n\t\t\"w-full\",\n\t\t\"table-fixed\",\n\t\t\"border-collapse\",\n\t\t\"text-sm\",\n\t\t\"[&_td]:border-border\",\n\t\t\"[&_th]:border-border\",\n\t\t\"border-separate\",\n\t\t\"border-spacing-0\",\n\t\t\"[&_tfoot_td]:border-t\",\n\t\t\"[&_th]:border-b\",\n\t\t\"[&_tr]:border-none\",\n\t),\n\n\t// Global cell padding\n\tcellPadding: cn(\"px-4\"),\n\n\tpinnedColumn: cn(\n\t\t\"data-pinned:bg-background/90\",\n\t\t\"data-pinned:backdrop-blur-xs\",\n\t\t\"[&[data-pinned=left][data-last-col=left]]:border-r\",\n\t\t\"[&[data-pinned=left][data-last-col=left]]:border-r-border-primary\",\n\t\t\"[&[data-pinned=right][data-last-col=right]]:border-l\",\n\t\t\"[&[data-pinned=right][data-last-col=right]]:border-l-border-primary\",\n\t),\n\tpinnedHeader: cn(\n\t\t\"data-pinned:bg-muted/90\",\n\t\t\"data-pinned:backdrop-blur-xs\",\n\t\t\"[&[data-pinned=left][data-last-col=left]]:border-r\",\n\t\t\"[&[data-pinned=left][data-last-col=left]]:border-r-border-primary\",\n\t\t\"[&[data-pinned=right][data-last-col=right]]:border-l\",\n\t\t\"[&[data-pinned=right][data-last-col=right]]:border-l-border-primary\",\n\t),\n\n\t// Header styles\n\tthead: cn(\"bg-bg-secondary\"),\n\tth: cn(\"h-8\", \"text-left\", \"font-medium\", \"text-text-primary\", \"select-none\"),\n\tthSortable: cn(\"cursor-pointer\", \"hover:bg-bg-tertiary\"),\n\tthSorted: cn(\"bg-bg-link/3\", \"border-b\", \"border-border-link\"),\n\tthRightAlign: cn(\"text-right\"),\n\n\t// Cell styles for sorted columns\n\tcellSorted: cn(\"bg-bg-link/3\"),\n\n\t// Header content\n\theaderContent: cn(\n\t\t\"h-8\",\n\t\t\"flex\",\n\t\t\"items-center\",\n\t\t\"justify-between\",\n\t\t\"typo-body\",\n\t\t\"text-text-secondary\",\n\t\t\"relative\",\n\t\t\"w-full\",\n\t),\n\theaderText: cn(\"truncate\", \"pr-3\"),\n\theaderIcons: cn(\"flex\", \"flex-col\", \"items-center\", \"justify-center\"),\n\theaderIcon: cn(\"w-3\", \"h-3\"),\n\theaderIconInactive: cn(\"w-3\", \"h-3\", \"opacity-30\"),\n\n\t// Cell content\n\tcellContent: cn(\"h-8\", \"flex\", \"items-center\", \"text-text-primary\"),\n\tcellText: cn(\"truncate\"),\n\tcellCode: cn(\"h-8\", \"flex\", \"items-center\", \"text-text-primary\", \"typo-code\"),\n\tcellRightAlign: cn(\"justify-end\"),\n\tcellTextRightAlign: cn(\"text-right\"),\n\n\t// Filter row\n\tfilterRow: cn(\"bg-white\", \"border-b\", \"border-border-secondary\"),\n\tfilterCell: cn(\"px-1\", \"h-8\"),\n\tfilterCellPinned: cn(\"px-1\", \"h-8\", \"bg-white/90\", \"backdrop-blur-xs\"),\n\tfilterActions: cn(\"text-text-tertiary\", \"text-sm\"),\n\tfilterInput: cn(\"border-0\", \"h-8\"),\n\tfilterIcon: cn(\"w-4\", \"h-4\", \"text-text-tertiary\"),\n\n\tdataRow: cn(\"hover:bg-bg-link/10\"),\n\tdataRowZebra: cn(\"bg-bg-secondary\", \"hover:bg-bg-link/10\"),\n\tdataCell: cn(\"h-8\"),\n\n\t// Action button\n\tactionButton: cn(\n\t\t\"text-text-link\",\n\t\t\"hover:text-text-link_hover\",\n\t\t\"transition-colors\",\n\t\t\"cursor-pointer\",\n\t),\n\n\t// Action link\n\tactionLink: cn(\n\t\t\"text-text-link\",\n\t\t\"hover:text-text-link_hover\",\n\t\t\"transition-colors\",\n\t\t\"cursor-pointer\",\n\t),\n\n\t// Column resize handle\n\tresizeHandle: cn(\n\t\t\"absolute\",\n\t\t\"right-0\",\n\t\t\"top-0\",\n\t\t\"h-full\",\n\t\t\"w-1\",\n\t\t\"bg-border-primary\",\n\t\t\"cursor-col-resize\",\n\t\t\"user-select-none\",\n\t\t\"touch-action-none\",\n\t\t\"opacity-0\",\n\t\t\"hover:opacity-100\",\n\t\t\"active:opacity-100\",\n\t\t\"transition-opacity\",\n\t\t\"duration-150\",\n\t\t\"before:absolute\",\n\t\t\"before:right-[-4px]\",\n\t\t\"before:top-0\",\n\t\t\"before:w-2\",\n\t\t\"before:h-full\",\n\t\t\"before:content-['']\",\n\t),\n\tresizeHandleActive: cn(\"opacity-100\", \"bg-border-link\"),\n\n\t// Resizable header indicator\n\tresizableHeader: cn(\n\t\t\"group-hover:[&:not(:last-child)]:after:opacity-30\",\n\t\t\"after:absolute\",\n\t\t\"after:right-0\",\n\t\t\"after:top-1/2\",\n\t\t\"after:-translate-y-1/2\",\n\t\t\"after:h-4\",\n\t\t\"after:w-px\",\n\t\t\"after:bg-border-primary\",\n\t\t\"after:opacity-0\",\n\t\t\"after:transition-opacity\",\n\t\t\"after:duration-150\",\n\t\t\"hover:after:opacity-50\",\n\t\t\"last:after:w-0\",\n\t),\n\n\t// Draggable header styles\n\tdraggableHeader: cn(\"transition-all\", \"duration-150\", \"group/header\"),\n\tdragZone: cn(\n\t\t\"absolute\",\n\t\t\"left-0\",\n\t\t\"top-0\",\n\t\t\"h-full\",\n\t\t\"cursor-grab\",\n\t\t\"active:cursor-grabbing\",\n\t\t\"flex\",\n\t\t\"items-center\",\n\t\t\"justify-start\",\n\t\t\"pl-0\",\n\t\t\"opacity-0\",\n\t\t\"hover:opacity-100\",\n\t\t\"group-hover/header:opacity-60\",\n\t\t\"hover:!opacity-100\",\n\t\t\"transition-opacity\",\n\t\t\"duration-150\",\n\t\t\"bg-transparent\",\n\t\t\"border-none\",\n\t\t\"text-text-tertiary\",\n\t\t\"hover:text-text-secondary\",\n\t\t\"right-5\",\n\t),\n\tdraggingHeader: cn(\n\t\t\"bg-bg-primary_inverse/10\",\n\t\t\"scale-105\",\n\t\t\"shadow-lg\",\n\t\t\"z-50\",\n\t),\n\tdraggingColumn: cn(\"bg-bg-primary_inverse/10\", \"shadow-inner\"),\n\tdropZone: cn(\n\t\t\"relative\",\n\t\t\"before:absolute\",\n\t\t\"before:left-0\",\n\t\t\"before:top-0\",\n\t\t\"before:w-1\",\n\t\t\"before:h-full\",\n\t\t\"before:bg-border-link\",\n\t\t\"before:opacity-0\",\n\t\t\"before:transition-opacity\",\n\t\t\"before:duration-150\",\n\t),\n\tdropZoneActive: cn(\"before:opacity-100\"),\n} as const;\n\n// Types\nexport interface PatientRow {\n\tid: string;\n\tfirstName: string;\n\tlastName: string;\n\tphoneNumber: string;\n\temail: string;\n\tbirthDate: string;\n\tgender: \"MALE\" | \"FEMALE\" | \"OTHER\";\n\tstreet: string;\n\tcity: string;\n\tstate: string;\n\tzip: string;\n\tcountry?: string;\n\tencounters: number;\n}\n\nexport interface ColumnSearchConfig {\n\t[key: string]: {\n\t\tenabled: boolean;\n\t\ttype: \"text\" | \"date\";\n\t\tplaceholder: string;\n\t};\n}\n\nexport interface PaginationValues {\n\tpageIndex: number;\n\tpageSize: number;\n}\n\nexport interface TableHeaderContentProps {\n\tcontent: React.ReactNode;\n\tisSortable?: boolean;\n\tsortDirection?: \"asc\" | \"desc\" | null;\n\tisPinnable?: boolean;\n\tpinnedDirection?: \"left\" | \"right\" | false;\n\tonPin?: (direction: \"left\" | \"right\" | false) => void;\n}\n\nexport interface TableCellContentProps {\n\tcontent: React.ReactNode;\n\ttype?: ColumnType;\n\trightAlign?: boolean;\n\tactions?: ActionConfig[];\n\trowId?: string;\n}\n\n// Mock components\nfunction TableHeaderContent({\n\tcontent,\n\tisSortable = false,\n\tsortDirection = null,\n\tisPinnable = false,\n\tpinnedDirection = false,\n\tonPin,\n}: TableHeaderContentProps) {\n\treturn (\n\t\t<div className={styles.headerContent}>\n\t\t\t<span className={styles.headerText}>{content}</span>\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t{isSortable && (\n\t\t\t\t\t<div className={styles.headerIcons}>\n\t\t\t\t\t\t{sortDirection === \"asc\" ? (\n\t\t\t\t\t\t\t<ChevronUp className={styles.headerIcon} />\n\t\t\t\t\t\t) : sortDirection === \"desc\" ? (\n\t\t\t\t\t\t\t<ChevronDown className={styles.headerIcon} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t\t\t<ChevronUp className={styles.headerIconInactive} />\n\t\t\t\t\t\t\t\t<ChevronDown className={styles.headerIconInactive} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{isPinnable &&\n\t\t\t\t\tonPin &&\n\t\t\t\t\t(pinnedDirection ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclassName=\"h-6 w-6 p-0 ml-1 opacity-60 hover:opacity-100\"\n\t\t\t\t\t\t\tonClick={() => onPin(false)}\n\t\t\t\t\t\t\ttitle=\"Unpin column\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PinOff className=\"h-3 w-3\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<DropdownMenu>\n\t\t\t\t\t\t\t<DropdownMenuTrigger asChild>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 p-0 ml-1 opacity-60 hover:opacity-100\"\n\t\t\t\t\t\t\t\t\ttitle=\"Pin column\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MoreHorizontal className=\"h-3 w-3\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</DropdownMenuTrigger>\n\t\t\t\t\t\t\t<DropdownMenuContent align=\"end\">\n\t\t\t\t\t\t\t\t<DropdownMenuItem onClick={() => onPin(\"left\")}>\n\t\t\t\t\t\t\t\t\t<ArrowLeftToLine className=\"mr-2 h-4 w-4\" />\n\t\t\t\t\t\t\t\t\tStick to left\n\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t\t<DropdownMenuItem onClick={() => onPin(\"right\")}>\n\t\t\t\t\t\t\t\t\t<ArrowRightToLine className=\"mr-2 h-4 w-4\" />\n\t\t\t\t\t\t\t\t\tStick to right\n\t\t\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t\t\t</DropdownMenu>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction TableCellContent({\n\tcontent,\n\ttype = \"text\",\n\trightAlign = false,\n\tactions = [],\n\trowId,\n}: TableCellContentProps) {\n\t// For action types, render actions instead of content\n\tif (type === \"link\" || type === \"button\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(styles.cellContent, rightAlign && styles.cellRightAlign)}\n\t\t\t>\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t{actions.map((action, index) => {\n\t\t\t\t\t\tconst handleClick = (e: React.MouseEvent) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\taction.onClick(rowId || \"\");\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst actionKey = `${rowId}-${action.label}-${index}`;\n\n\t\t\t\t\t\tif (type === \"button\") {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tkey={actionKey}\n\t\t\t\t\t\t\t\t\tvariant={action.variant || \"primary\"}\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t{...(action.danger !== undefined && {\n\t\t\t\t\t\t\t\t\t\tdanger: action.danger,\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Default to link type\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={actionKey}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={styles.actionLink}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// For regular content\n\tconst cellClass = cn(\n\t\ttype === \"code\" ? styles.cellCode : styles.cellContent,\n\t\trightAlign && styles.cellRightAlign,\n\t);\n\n\tconst textClass = cn(\n\t\tstyles.cellText,\n\t\trightAlign && styles.cellTextRightAlign,\n\t);\n\n\treturn (\n\t\t<div className={cellClass}>\n\t\t\t<span className={textClass}>{content}</span>\n\t\t</div>\n\t);\n}\n\n// Filter row component\nfunction FilterRow<TData, TValue>({\n\theaders,\n\tdraggedColumn,\n\tdropTarget,\n}: {\n\theaders: Header<TData, TValue>[]; // TanStack Table headers\n\tdraggedColumn?: string | null;\n\tdropTarget?: string | null;\n}) {\n\treturn (\n\t\t<TableRow className={styles.filterRow}>\n\t\t\t{headers.map((header) => {\n\t\t\t\tconst tableColumn = header.column;\n\t\t\t\tconst columnKey = header.id;\n\n\t\t\t\tconst isPinned = tableColumn.getIsPinned();\n\t\t\t\tconst isBeingDragged = draggedColumn === columnKey;\n\t\t\t\tconst isDropTarget = dropTarget === columnKey;\n\t\t\t\tconst isLastLeftPinned =\n\t\t\t\t\tisPinned === \"left\" && tableColumn.getIsLastColumn(\"left\");\n\t\t\t\tconst isFirstRightPinned =\n\t\t\t\t\tisPinned === \"right\" && tableColumn.getIsFirstColumn(\"right\");\n\n\t\t\t\treturn (\n\t\t\t\t\t<TableCell\n\t\t\t\t\t\tkey={`filter-${columnKey}`}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tisPinned ? styles.filterCellPinned : styles.filterCell,\n\t\t\t\t\t\t\tstyles.pinnedColumn,\n\t\t\t\t\t\t\tisBeingDragged && styles.draggingColumn,\n\t\t\t\t\t\t\tisDropTarget && styles.dropZone,\n\t\t\t\t\t\t\tisDropTarget && styles.dropZoneActive,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...getPinningStyles(tableColumn),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdata-pinned={isPinned || undefined}\n\t\t\t\t\t\tdata-last-col={\n\t\t\t\t\t\t\tisLastLeftPinned\n\t\t\t\t\t\t\t\t? \"left\"\n\t\t\t\t\t\t\t\t: isFirstRightPinned\n\t\t\t\t\t\t\t\t\t? \"right\"\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{columnKey === \"actions\" ? (\n\t\t\t\t\t\t\t<div className={styles.filterActions}></div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\t\t\tleftSlot={<Search className={styles.filterIcon} />}\n\t\t\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\t\t\tconsole.log(`Filter ${columnKey}:`, e.target.value)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName={styles.filterInput}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</TableCell>\n\t\t\t\t);\n\t\t\t})}\n\t\t</TableRow>\n\t);\n}\n\n// Mock DataTable component\ninterface DataTableProps<T> {\n\tcolumns: ColumnDef<T>[];\n\tdata: T[];\n\tshowZebraStripes: boolean;\n\tshowFilters?: boolean;\n\tshowSorting?: boolean;\n\tenableColumnResizing?: boolean;\n\tenableColumnReordering?: boolean;\n\tenableColumnPinning?: boolean;\n\tonSort?: (columnKey: string) => void;\n\tcolumnWidths?: Record<string, string>;\n\tsortConfig?: { key: string; direction: \"asc\" | \"desc\" } | null;\n\tcolumnOrder?: string[];\n\tonColumnOrderChange?: (newOrder: string[]) => void;\n\tcolumnPinning?: ColumnPinningState;\n\tonColumnPinningChange?: (pinning: ColumnPinningState) => void;\n}\n\nfunction DataTable<T>({\n\tcolumns,\n\tdata,\n\tshowZebraStripes,\n\tshowFilters = true,\n\tshowSorting = true,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tenableColumnPinning = false,\n\tonSort,\n\tcolumnWidths = {},\n\tsortConfig,\n\tcolumnOrder = [],\n\tonColumnOrderChange,\n\tcolumnPinning = {},\n\tonColumnPinningChange,\n\tcolumnConfigs,\n}: DataTableProps<T> & { columnConfigs?: ColumnConfig[] }) {\n\tconst [draggedColumn, setDraggedColumn] = useState<string | null>(null);\n\tconst [dropTarget, setDropTarget] = useState<string | null>(null);\n\n\tconst initialColumnSizing = useMemo(() => {\n\t\tif (!enableColumnResizing || !columnConfigs) return {};\n\n\t\tconst sizing: Record<string, number> = {};\n\t\tcolumnConfigs.forEach((config) => {\n\t\t\tif (config.width) {\n\t\t\t\tconst width = parseInt(config.width.replace(\"px\", \"\"), 10);\n\t\t\t\tif (!Number.isNaN(width)) {\n\t\t\t\t\tsizing[config.key] = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn sizing;\n\t}, [enableColumnResizing, columnConfigs]);\n\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tenableColumnResizing,\n\t\tenableColumnPinning,\n\t\tcolumnResizeMode: \"onChange\",\n\t\tstate: {\n\t\t\t...(columnOrder.length > 0 && { columnOrder }),\n\t\t\t...(enableColumnPinning && { columnPinning }),\n\t\t},\n\t\t...(onColumnOrderChange && {\n\t\t\tonColumnOrderChange: (updater) => {\n\t\t\t\tconst newOrder =\n\t\t\t\t\ttypeof updater === \"function\" ? updater(columnOrder) : updater;\n\t\t\t\tonColumnOrderChange(newOrder);\n\t\t\t},\n\t\t}),\n\t\t...(onColumnPinningChange &&\n\t\t\tenableColumnPinning && {\n\t\t\t\tonColumnPinningChange: (updater) => {\n\t\t\t\t\tconst newPinning =\n\t\t\t\t\t\ttypeof updater === \"function\" ? updater(columnPinning) : updater;\n\t\t\t\t\tonColumnPinningChange(newPinning);\n\t\t\t\t},\n\t\t\t}),\n\t\tinitialState: {\n\t\t\tcolumnSizing: initialColumnSizing,\n\t\t},\n\t});\n\n\treturn (\n\t\t<div className={styles.tableContainer}>\n\t\t\t<Table className={styles.table}>\n\t\t\t\t<TableHeader className={styles.thead}>\n\t\t\t\t\t<TableRow className={enableColumnResizing ? \"group\" : \"\"}>\n\t\t\t\t\t\t{table.getHeaderGroups()[0]?.headers.map((header) => {\n\t\t\t\t\t\t\tconst columnKey = header.id;\n\t\t\t\t\t\t\tconst isSortable = columnKey !== \"actions\";\n\n\t\t\t\t\t\t\tconst isPinned = header.column.getIsPinned();\n\t\t\t\t\t\t\tconst isSorted = sortConfig?.key === columnKey;\n\t\t\t\t\t\t\tconst isDraggable = enableColumnReordering && !isPinned;\n\t\t\t\t\t\t\tconst isDragging = draggedColumn === columnKey;\n\t\t\t\t\t\t\tconst isDropTarget = dropTarget === columnKey;\n\t\t\t\t\t\t\tconst isLastLeftPinned =\n\t\t\t\t\t\t\t\tisPinned === \"left\" && header.column.getIsLastColumn(\"left\");\n\t\t\t\t\t\t\tconst isFirstRightPinned =\n\t\t\t\t\t\t\t\tisPinned === \"right\" && header.column.getIsFirstColumn(\"right\");\n\n\t\t\t\t\t\t\tconst columnConfig = columnConfigs?.find(\n\t\t\t\t\t\t\t\t(config) => config.key === columnKey,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst isRightAlign = columnConfig?.rightAlign || false;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\t\tkey={`header-${columnKey}`}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tstyles.cellPadding,\n\t\t\t\t\t\t\t\t\t\tstyles.th,\n\t\t\t\t\t\t\t\t\t\tisSortable && showSorting && styles.thSortable,\n\t\t\t\t\t\t\t\t\t\tstyles.pinnedHeader,\n\t\t\t\t\t\t\t\t\t\tisSorted && styles.thSorted,\n\t\t\t\t\t\t\t\t\t\tisRightAlign && styles.thRightAlign,\n\t\t\t\t\t\t\t\t\t\t\"relative\",\n\t\t\t\t\t\t\t\t\t\tenableColumnResizing &&\n\t\t\t\t\t\t\t\t\t\t\theader.column.getCanResize() &&\n\t\t\t\t\t\t\t\t\t\t\tstyles.resizableHeader,\n\t\t\t\t\t\t\t\t\t\tisDraggable && styles.draggableHeader,\n\t\t\t\t\t\t\t\t\t\tisDragging && styles.draggingHeader,\n\t\t\t\t\t\t\t\t\t\tisDragging && styles.draggingColumn,\n\t\t\t\t\t\t\t\t\t\tisDropTarget && styles.dropZone,\n\t\t\t\t\t\t\t\t\t\tisDropTarget && styles.dropZoneActive,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t...getPinningStyles(header.column),\n\t\t\t\t\t\t\t\t\t\t...(enableColumnResizing\n\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t: { width: columnWidths[columnKey] || \"200px\" }),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tdata-pinned={isPinned || undefined}\n\t\t\t\t\t\t\t\t\tdata-last-col={\n\t\t\t\t\t\t\t\t\t\tisLastLeftPinned\n\t\t\t\t\t\t\t\t\t\t\t? \"left\"\n\t\t\t\t\t\t\t\t\t\t\t: isFirstRightPinned\n\t\t\t\t\t\t\t\t\t\t\t\t? \"right\"\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst target = e.currentTarget;\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\ttarget.closest(\"[data-resize-handle]\") ||\n\t\t\t\t\t\t\t\t\t\t\ttarget.closest(\"[data-drag-zone]\")\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (isSortable && showSorting && onSort) {\n\t\t\t\t\t\t\t\t\t\t\tonSort(String(columnKey));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonDragOver={(e) => {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t!isDraggable ||\n\t\t\t\t\t\t\t\t\t\t\t!draggedColumn ||\n\t\t\t\t\t\t\t\t\t\t\tdraggedColumn === columnKey\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tsetDropTarget(columnKey);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonDragLeave={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst rect = e.currentTarget.getBoundingClientRect();\n\t\t\t\t\t\t\t\t\t\tconst x = e.clientX;\n\t\t\t\t\t\t\t\t\t\tconst y = e.clientY;\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tx < rect.left ||\n\t\t\t\t\t\t\t\t\t\t\tx > rect.right ||\n\t\t\t\t\t\t\t\t\t\t\ty < rect.top ||\n\t\t\t\t\t\t\t\t\t\t\ty > rect.bottom\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tsetDropTarget(null);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonDrop={(e) => {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tif (!isDraggable || !draggedColumn || !onColumnOrderChange)\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t\tconst currentOrder = table\n\t\t\t\t\t\t\t\t\t\t\t.getAllLeafColumns()\n\t\t\t\t\t\t\t\t\t\t\t.map((col) => col.id);\n\t\t\t\t\t\t\t\t\t\tconst draggedIndex = currentOrder.indexOf(draggedColumn);\n\t\t\t\t\t\t\t\t\t\tconst targetIndex = currentOrder.indexOf(columnKey);\n\n\t\t\t\t\t\t\t\t\t\tif (draggedIndex !== -1 && targetIndex !== -1) {\n\t\t\t\t\t\t\t\t\t\t\tconst newOrder = [...currentOrder];\n\t\t\t\t\t\t\t\t\t\t\tnewOrder.splice(draggedIndex, 1);\n\t\t\t\t\t\t\t\t\t\t\tnewOrder.splice(targetIndex, 0, draggedColumn);\n\t\t\t\t\t\t\t\t\t\t\tonColumnOrderChange(newOrder);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tsetDraggedColumn(null);\n\t\t\t\t\t\t\t\t\t\tsetDropTarget(null);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isDraggable && (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tdata-drag-zone\n\t\t\t\t\t\t\t\t\t\t\tdraggable\n\t\t\t\t\t\t\t\t\t\t\tclassName={styles.dragZone}\n\t\t\t\t\t\t\t\t\t\t\tonDragStart={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetDraggedColumn(columnKey);\n\t\t\t\t\t\t\t\t\t\t\t\te.dataTransfer.effectAllowed = \"move\";\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tonDragEnd={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetDraggedColumn(null);\n\t\t\t\t\t\t\t\t\t\t\t\tsetDropTarget(null);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<GripVertical className=\"w-4 h-4\" />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{enableColumnResizing && header.column.getCanResize() && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tdata-resize-handle\n\t\t\t\t\t\t\t\t\t\t\t{...{\n\t\t\t\t\t\t\t\t\t\t\t\tonMouseDown: header.getResizeHandler(),\n\t\t\t\t\t\t\t\t\t\t\t\tonTouchStart: header.getResizeHandler(),\n\t\t\t\t\t\t\t\t\t\t\t\tonClick: (e) => e.stopPropagation(),\n\t\t\t\t\t\t\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.resizeHandle,\n\t\t\t\t\t\t\t\t\t\t\t\t\theader.column.getIsResizing() &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyles.resizeHandleActive,\n\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHeader>\n\t\t\t\t<TableBody>\n\t\t\t\t\t{/* Filter row */}\n\t\t\t\t\t{showFilters && (\n\t\t\t\t\t\t<FilterRow\n\t\t\t\t\t\t\theaders={table.getHeaderGroups()[0]?.headers || []}\n\t\t\t\t\t\t\tdraggedColumn={draggedColumn}\n\t\t\t\t\t\t\tdropTarget={dropTarget}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Data rows */}\n\t\t\t\t\t{table.getRowModel().rows.map((row, rowIndex) => (\n\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\tkey={`row-${row.id}`}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tstyles.dataRow,\n\t\t\t\t\t\t\t\tshowZebraStripes &&\n\t\t\t\t\t\t\t\t\trowIndex % 2 === (showFilters ? 0 : 1) &&\n\t\t\t\t\t\t\t\t\tstyles.dataRowZebra,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{row.getVisibleCells().map((cell) => {\n\t\t\t\t\t\t\t\tconst columnKey = cell.column.id;\n\t\t\t\t\t\t\t\tconst isPinned = cell.column.getIsPinned();\n\t\t\t\t\t\t\t\tconst isSorted = sortConfig?.key === columnKey;\n\t\t\t\t\t\t\t\tconst isBeingDragged = draggedColumn === columnKey;\n\t\t\t\t\t\t\t\tconst isDropTarget = dropTarget === columnKey;\n\t\t\t\t\t\t\t\tconst isLastLeftPinned =\n\t\t\t\t\t\t\t\t\tisPinned === \"left\" && cell.column.getIsLastColumn(\"left\");\n\t\t\t\t\t\t\t\tconst isFirstRightPinned =\n\t\t\t\t\t\t\t\t\tisPinned === \"right\" && cell.column.getIsFirstColumn(\"right\");\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\tstyles.cellPadding,\n\t\t\t\t\t\t\t\t\t\t\tstyles.dataCell,\n\t\t\t\t\t\t\t\t\t\t\tstyles.pinnedColumn,\n\t\t\t\t\t\t\t\t\t\t\tisSorted && styles.cellSorted,\n\t\t\t\t\t\t\t\t\t\t\tisBeingDragged && styles.draggingColumn,\n\t\t\t\t\t\t\t\t\t\t\tisDropTarget && styles.dropZone,\n\t\t\t\t\t\t\t\t\t\t\tisDropTarget && styles.dropZoneActive,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...getPinningStyles(cell.column),\n\t\t\t\t\t\t\t\t\t\t\t...(enableColumnResizing\n\t\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t\t: { width: columnWidths[columnKey] || \"200px\" }),\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdata-pinned={isPinned || undefined}\n\t\t\t\t\t\t\t\t\t\tdata-last-col={\n\t\t\t\t\t\t\t\t\t\t\tisLastLeftPinned\n\t\t\t\t\t\t\t\t\t\t\t\t? \"left\"\n\t\t\t\t\t\t\t\t\t\t\t\t: isFirstRightPinned\n\t\t\t\t\t\t\t\t\t\t\t\t\t? \"right\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t))}\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</div>\n\t);\n}\n\nconst columnHelper = createColumnHelper<PatientRow>();\n\nconst columns = [\n\tcolumnHelper.accessor(\"firstName\", {\n\t\theader: () => <TableHeaderContent content=\"First name\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"lastName\", {\n\t\theader: () => <TableHeaderContent content=\"Last name\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"id\", {\n\t\theader: () => <TableHeaderContent content=\"ID\" />,\n\t\tcell: (props) => (\n\t\t\t<TableCellContent content={props.getValue()} type=\"code\" />\n\t\t),\n\t}),\n\tcolumnHelper.accessor(\"birthDate\", {\n\t\theader: () => <TableHeaderContent content=\"Birth\" />,\n\t\tcell: (props) => (\n\t\t\t<TableCellContent content={props.getValue()} type=\"code\" />\n\t\t),\n\t}),\n\tcolumnHelper.accessor(\"phoneNumber\", {\n\t\theader: () => <TableHeaderContent content=\"Phone number\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"email\", {\n\t\theader: () => <TableHeaderContent content=\"Email\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"gender\", {\n\t\theader: () => <TableHeaderContent content=\"Gender\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"street\", {\n\t\theader: () => <TableHeaderContent content=\"Street\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"city\", {\n\t\theader: () => <TableHeaderContent content=\"City\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"state\", {\n\t\theader: () => <TableHeaderContent content=\"State\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"zip\", {\n\t\theader: () => <TableHeaderContent content=\"ZIP\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"country\", {\n\t\theader: () => <TableHeaderContent content=\"Country\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.accessor(\"encounters\", {\n\t\theader: () => <TableHeaderContent content=\"Encounters\" />,\n\t\tcell: (props) => <TableCellContent content={props.getValue()} />,\n\t}),\n\tcolumnHelper.display({\n\t\tid: \"actions\",\n\t\theader: () => <TableHeaderContent content={\"Actions\"} />,\n\t\tcell: ({ row }) => (\n\t\t\t<TableCellContent\n\t\t\t\tcontent={\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={styles.actionButton}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tconsole.log(\"Match clicked for:\", row.original.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tMatch\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t/>\n\t\t),\n\t\tmeta: {\n\t\t\tfixed: \"right\",\n\t\t},\n\t}),\n];\n\nexport type PatientTableProps = {\n\t// data: PatientRow[],\n\tpage: number;\n\tcount: number;\n\tshowFilters?: boolean;\n\tshowSorting?: boolean;\n\tenableColumnResizing?: boolean;\n\tenableColumnReordering?: boolean;\n\tenableColumnPinning?: boolean;\n\tshowPinningMenu?: boolean;\n\tcolumnWidths?: Record<string, string>;\n\tcolumnConfigs?: ColumnConfig[];\n};\n\nexport function PatientTable(props: PatientTableProps) {\n\tconst {\n\t\tshowFilters = true,\n\t\tshowSorting = true,\n\t\tenableColumnResizing = false,\n\t\tenableColumnReordering = false,\n\t\tenableColumnPinning = false,\n\t\tshowPinningMenu = true,\n\t\tcolumnWidths = {},\n\t\tcolumnConfigs,\n\t} = props;\n\n\tconst [sortConfig, setSortConfig] = useState<{\n\t\tkey: string;\n\t\tdirection: \"asc\" | \"desc\";\n\t} | null>(null);\n\n\tconst [columnOrder, setColumnOrder] = useState<string[]>([]);\n\n\tconst [columnPinning, setColumnPinning] = useState<ColumnPinningState>({});\n\n\tuseEffect(() => {\n\t\tif (!enableColumnPinning || !columnConfigs) return;\n\n\t\tconst fixedColumns = columnConfigs.filter((config) => config.fixed);\n\t\tif (fixedColumns.length > 0) {\n\t\t\tconst initialPinning: ColumnPinningState = {\n\t\t\t\tright: fixedColumns.map((config) => config.key),\n\t\t\t};\n\t\t\tsetColumnPinning(initialPinning);\n\t\t}\n\t}, [enableColumnPinning, columnConfigs]);\n\n\tconst handleSort = (columnKey: string) => {\n\t\tsetSortConfig((current) => {\n\t\t\tif (current?.key === columnKey) {\n\t\t\t\treturn current.direction === \"asc\"\n\t\t\t\t\t? { key: columnKey, direction: \"desc\" }\n\t\t\t\t\t: null;\n\t\t\t}\n\t\t\treturn { key: columnKey, direction: \"asc\" };\n\t\t});\n\t};\n\n\tconst data: PatientRow[] = [\n\t\t{\n\t\t\tid: \"PAT-000001\",\n\t\t\tfirstName: \"John\",\n\t\t\tlastName: \"Smith\",\n\t\t\tphoneNumber: \"(555) 123-4567\",\n\t\t\temail: \"john.smith@gmail.com\",\n\t\t\tbirthDate: \"1985-03-15\",\n\t\t\tgender: \"MALE\",\n\t\t\tstreet: \"123 Main St\",\n\t\t\tcity: \"New York\",\n\t\t\tstate: \"NY\",\n\t\t\tzip: \"10001\",\n\t\t\tencounters: 5,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000002\",\n\t\t\tfirstName: \"Jane\",\n\t\t\tlastName: \"Johnson\",\n\t\t\tphoneNumber: \"(555) 234-5678\",\n\t\t\temail: \"jane.johnson@yahoo.com\",\n\t\t\tbirthDate: \"1990-07-22\",\n\t\t\tgender: \"FEMALE\",\n\t\t\tstreet: \"456 Oak Ave\",\n\t\t\tcity: \"Los Angeles\",\n\t\t\tstate: \"CA\",\n\t\t\tzip: \"90210\",\n\t\t\tencounters: 12,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000003\",\n\t\t\tfirstName: \"Michael\",\n\t\t\tlastName: \"Williams\",\n\t\t\tphoneNumber: \"(555) 345-6789\",\n\t\t\temail: \"michael.williams@hotmail.com\",\n\t\t\tbirthDate: \"1978-11-08\",\n\t\t\tgender: \"MALE\",\n\t\t\tstreet: \"789 Pine St\",\n\t\t\tcity: \"Chicago\",\n\t\t\tstate: \"IL\",\n\t\t\tzip: \"60601\",\n\t\t\tencounters: 8,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000004\",\n\t\t\tfirstName: \"Sarah\",\n\t\t\tlastName: \"Brown\",\n\t\t\tphoneNumber: \"(555) 456-7890\",\n\t\t\temail: \"sarah.brown@outlook.com\",\n\t\t\tbirthDate: \"1992-01-30\",\n\t\t\tgender: \"FEMALE\",\n\t\t\tstreet: \"321 Elm Ave\",\n\t\t\tcity: \"Houston\",\n\t\t\tstate: \"TX\",\n\t\t\tzip: \"77001\",\n\t\t\tencounters: 3,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000005\",\n\t\t\tfirstName: \"David\",\n\t\t\tlastName: \"Garcia\",\n\t\t\tphoneNumber: \"(555) 567-8901\",\n\t\t\temail: \"david.garcia@gmail.com\",\n\t\t\tbirthDate: \"1980-09-12\",\n\t\t\tgender: \"MALE\",\n\t\t\tstreet: \"654 Cedar St\",\n\t\t\tcity: \"Phoenix\",\n\t\t\tstate: \"AZ\",\n\t\t\tzip: \"85001\",\n\t\t\tencounters: 15,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000006\",\n\t\t\tfirstName: \"Emily\",\n\t\t\tlastName: \"Martinez\",\n\t\t\tphoneNumber: \"(555) 678-9012\",\n\t\t\temail: \"emily.martinez@icloud.com\",\n\t\t\tbirthDate: \"1995-05-18\",\n\t\t\tgender: \"FEMALE\",\n\t\t\tstreet: \"987 Washington St\",\n\t\t\tcity: \"Philadelphia\",\n\t\t\tstate: \"PA\",\n\t\t\tzip: \"19101\",\n\t\t\tencounters: 7,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000007\",\n\t\t\tfirstName: \"Robert\",\n\t\t\tlastName: \"Davis\",\n\t\t\tphoneNumber: \"(555) 789-0123\",\n\t\t\temail: \"robert.davis@aol.com\",\n\t\t\tbirthDate: \"1973-12-03\",\n\t\t\tgender: \"MALE\",\n\t\t\tstreet: \"147 Park Ave\",\n\t\t\tcity: \"San Antonio\",\n\t\t\tstate: \"TX\",\n\t\t\tzip: \"78201\",\n\t\t\tencounters: 22,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000008\",\n\t\t\tfirstName: \"Jessica\",\n\t\t\tlastName: \"Rodriguez\",\n\t\t\tphoneNumber: \"(555) 890-1234\",\n\t\t\temail: \"jessica.rodriguez@protonmail.com\",\n\t\t\tbirthDate: \"1988-04-25\",\n\t\t\tgender: \"FEMALE\",\n\t\t\tstreet: \"258 Lincoln St\",\n\t\t\tcity: \"San Diego\",\n\t\t\tstate: \"CA\",\n\t\t\tzip: \"92101\",\n\t\t\tencounters: 9,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000009\",\n\t\t\tfirstName: \"William\",\n\t\t\tlastName: \"Wilson\",\n\t\t\tphoneNumber: \"(555) 901-2345\",\n\t\t\temail: \"william.wilson@gmail.com\",\n\t\t\tbirthDate: \"1965-08-14\",\n\t\t\tgender: \"MALE\",\n\t\t\tstreet: \"369 Jefferson Ave\",\n\t\t\tcity: \"Dallas\",\n\t\t\tstate: \"TX\",\n\t\t\tzip: \"75201\",\n\t\t\tencounters: 18,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000010\",\n\t\t\tfirstName: \"Ashley\",\n\t\t\tlastName: \"Anderson\",\n\t\t\tphoneNumber: \"(555) 012-3456\",\n\t\t\temail: \"ashley.anderson@yahoo.com\",\n\t\t\tbirthDate: \"1993-10-07\",\n\t\t\tgender: \"FEMALE\",\n\t\t\tstreet: \"741 Madison St\",\n\t\t\tcity: \"San Jose\",\n\t\t\tstate: \"CA\",\n\t\t\tzip: \"95101\",\n\t\t\tencounters: 4,\n\t\t},\n\t\t{\n\t\t\tid: \"PAT-000011\",\n\t\t\tfirstName: \"Alex\",\n\t\t\tlastName: \"Taylor\",\n\t\t\tphoneNumber: \"(555) 111-2222\",\n\t\t\temail: \"alex.taylor@outlook.com\",\n\t\t\tbirthDate: \"1987-06-19\",\n\t\t\tgender: \"OTHER\",\n\t\t\tstreet: \"852 Adams Ave\",\n\t\t\tcity: \"Austin\",\n\t\t\tstate: \"TX\",\n\t\t\tzip: \"73301\",\n\t\t\tencounters: 11,\n\t\t},\n\t];\n\n\tconst sortedData = useMemo(() => {\n\t\tif (!sortConfig) return data;\n\n\t\treturn [...data].sort((a, b) => {\n\t\t\tconst aValue = a[sortConfig.key as keyof PatientRow] ?? \"\";\n\t\t\tconst bValue = b[sortConfig.key as keyof PatientRow] ?? \"\";\n\n\t\t\tif (aValue < bValue) return sortConfig.direction === \"asc\" ? -1 : 1;\n\t\t\tif (aValue > bValue) return sortConfig.direction === \"asc\" ? 1 : -1;\n\t\t\treturn 0;\n\t\t});\n\t}, [sortConfig]);\n\n\tconst generatedColumnWidths = useMemo(() => {\n\t\tif (!columnConfigs) {\n\t\t\treturn columnWidths;\n\t\t}\n\n\t\tconst configWidths: Record<string, string> = {};\n\t\tcolumnConfigs.forEach((config) => {\n\t\t\tif (config.width) {\n\t\t\t\tconfigWidths[config.key] = config.width;\n\t\t\t}\n\t\t});\n\n\t\treturn { ...columnWidths, ...configWidths };\n\t}, [columnConfigs, columnWidths]);\n\n\tconst generatedColumns = useMemo(() => {\n\t\tif (!columnConfigs) {\n\t\t\treturn columns;\n\t\t}\n\n\t\treturn columnConfigs.map((config): ColumnDef<PatientRow> => {\n\t\t\tconst columnSize = config.width\n\t\t\t\t? parseInt(config.width.replace(\"px\", \"\"), 10)\n\t\t\t\t: undefined;\n\n\t\t\tif (config.type === \"link\" || config.type === \"button\") {\n\t\t\t\treturn {\n\t\t\t\t\tid: config.key,\n\t\t\t\t\taccessorFn: () => null,\n\t\t\t\t\theader: () => <TableHeaderContent content={config.label} />,\n\t\t\t\t\tcell: ({ row }: { row: { original: PatientRow } }) => (\n\t\t\t\t\t\t<TableCellContent\n\t\t\t\t\t\t\tcontent=\"\"\n\t\t\t\t\t\t\t{...(config.type && { type: config.type })}\n\t\t\t\t\t\t\t{...(config.rightAlign !== undefined && {\n\t\t\t\t\t\t\t\trightAlign: config.rightAlign,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\tactions={config.actions || []}\n\t\t\t\t\t\t\trowId={row.original.id}\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\t\t\t\t\t...(config.fixed && { meta: { fixed: \"right\" } }),\n\t\t\t\t\t...(columnSize && { size: columnSize }),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\taccessorKey: config.key,\n\t\t\t\theader: () => <TableHeaderContent content={config.label} />,\n\t\t\t\tcell: ({ cell }: { cell: { getValue: () => any } }) => (\n\t\t\t\t\t<TableCellContent\n\t\t\t\t\t\tcontent={cell.getValue()}\n\t\t\t\t\t\ttype={config.type || \"text\"}\n\t\t\t\t\t\t{...(config.rightAlign !== undefined && {\n\t\t\t\t\t\t\trightAlign: config.rightAlign,\n\t\t\t\t\t\t})}\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\t...(config.fixed && { meta: { fixed: \"right\" } }),\n\t\t\t\t...(columnSize && { size: columnSize }),\n\t\t\t};\n\t\t});\n\t}, [columnConfigs]);\n\n\tconst columnsWithSorting = generatedColumns.map((column) => ({\n\t\t...column,\n\t\theader: () => {\n\t\t\tconst columnKey = (column as any).id || (column as any).accessorKey;\n\t\t\tconst isSortable = columnKey !== \"actions\";\n\t\t\tconst isPinnedLeft = columnPinning.left?.includes(columnKey);\n\t\t\tconst isPinnedRight = columnPinning.right?.includes(columnKey);\n\t\t\tconst pinnedDirection = isPinnedLeft\n\t\t\t\t? \"left\"\n\t\t\t\t: isPinnedRight\n\t\t\t\t\t? \"right\"\n\t\t\t\t\t: false;\n\n\t\t\tconst handlePin = (direction: \"left\" | \"right\" | false) => {\n\t\t\t\tconst newPinning: ColumnPinningState = { ...columnPinning };\n\n\t\t\t\tif (newPinning.left) {\n\t\t\t\t\tnewPinning.left = newPinning.left.filter((id) => id !== columnKey);\n\t\t\t\t}\n\t\t\t\tif (newPinning.right) {\n\t\t\t\t\tnewPinning.right = newPinning.right.filter((id) => id !== columnKey);\n\t\t\t\t}\n\n\t\t\t\tif (direction === \"left\") {\n\t\t\t\t\tnewPinning.left = [...(newPinning.left || []), columnKey];\n\t\t\t\t} else if (direction === \"right\") {\n\t\t\t\t\tnewPinning.right = [...(newPinning.right || []), columnKey];\n\t\t\t\t}\n\n\t\t\t\tsetColumnPinning(newPinning);\n\t\t\t};\n\n\t\t\treturn (\n\t\t\t\t<TableHeaderContent\n\t\t\t\t\tcontent={\n\t\t\t\t\t\ttypeof column.header === \"function\"\n\t\t\t\t\t\t\t? column.header({} as any)\n\t\t\t\t\t\t\t: column.header\n\t\t\t\t\t}\n\t\t\t\t\tisSortable={isSortable && showSorting}\n\t\t\t\t\tsortDirection={\n\t\t\t\t\t\tsortConfig?.key === columnKey && sortConfig\n\t\t\t\t\t\t\t? sortConfig.direction\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t}\n\t\t\t\t\tisPinnable={enableColumnPinning && showPinningMenu}\n\t\t\t\t\tpinnedDirection={pinnedDirection}\n\t\t\t\t\tonPin={handlePin}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t})) as ColumnDef<PatientRow>[];\n\n\treturn (\n\t\t<DataTable\n\t\t\tcolumns={columnsWithSorting}\n\t\t\tdata={sortedData}\n\t\t\tshowZebraStripes={true}\n\t\t\tshowFilters={showFilters}\n\t\t\tshowSorting={showSorting}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tenableColumnPinning={enableColumnPinning}\n\t\t\tonSort={handleSort}\n\t\t\tcolumnWidths={generatedColumnWidths}\n\t\t\tsortConfig={sortConfig}\n\t\t\tcolumnOrder={columnOrder}\n\t\t\tonColumnOrderChange={setColumnOrder}\n\t\t\tcolumnPinning={columnPinning}\n\t\t\tonColumnPinningChange={setColumnPinning}\n\t\t\t{...(columnConfigs && { columnConfigs })}\n\t\t/>\n\t);\n}\n"],"names":["createColumnHelper","flexRender","getCoreRowModel","useReactTable","ArrowLeftToLine","ArrowRightToLine","ChevronDown","ChevronUp","GripVertical","MoreHorizontal","PinOff","Search","useEffect","useMemo","useState","Button","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","Input","cn","Table","className","props","table","TableHeader","thead","TableBody","tbody","TableRow","tr","TableHead","th","TableCell","td","getPinningStyles","column","isPinned","getIsPinned","left","getStart","undefined","right","getAfter","position","width","getSize","zIndex","styles","tableContainer","cellPadding","pinnedColumn","pinnedHeader","thSortable","thSorted","thRightAlign","cellSorted","headerContent","headerText","headerIcons","headerIcon","headerIconInactive","cellContent","cellText","cellCode","cellRightAlign","cellTextRightAlign","filterRow","filterCell","filterCellPinned","filterActions","filterInput","filterIcon","dataRow","dataRowZebra","dataCell","actionButton","actionLink","resizeHandle","resizeHandleActive","resizableHeader","draggableHeader","dragZone","draggingHeader","draggingColumn","dropZone","dropZoneActive","TableHeaderContent","content","isSortable","sortDirection","isPinnable","pinnedDirection","onPin","div","span","size","variant","onClick","title","asChild","align","TableCellContent","type","rightAlign","actions","rowId","map","action","index","handleClick","e","stopPropagation","actionKey","label","danger","button","cellClass","textClass","FilterRow","headers","draggedColumn","dropTarget","header","tableColumn","columnKey","id","isBeingDragged","isDropTarget","isLastLeftPinned","getIsLastColumn","isFirstRightPinned","getIsFirstColumn","style","data-pinned","data-last-col","placeholder","leftSlot","onChange","console","log","target","value","DataTable","columns","data","showZebraStripes","showFilters","showSorting","enableColumnResizing","enableColumnReordering","enableColumnPinning","onSort","columnWidths","sortConfig","columnOrder","onColumnOrderChange","columnPinning","onColumnPinningChange","columnConfigs","setDraggedColumn","setDropTarget","initialColumnSizing","sizing","forEach","config","parseInt","replace","Number","isNaN","key","columnResizeMode","state","length","updater","newOrder","newPinning","initialState","columnSizing","getHeaderGroups","isSorted","isDraggable","isDragging","columnConfig","find","isRightAlign","getCanResize","currentTarget","closest","String","onDragOver","preventDefault","onDragLeave","rect","getBoundingClientRect","x","clientX","y","clientY","top","bottom","onDrop","currentOrder","getAllLeafColumns","col","draggedIndex","indexOf","targetIndex","splice","data-drag-zone","draggable","onDragStart","dataTransfer","effectAllowed","onDragEnd","columnDef","getContext","data-resize-handle","onMouseDown","getResizeHandler","onTouchStart","getIsResizing","getRowModel","rows","row","rowIndex","getVisibleCells","cell","columnHelper","accessor","getValue","display","original","meta","fixed","PatientTable","showPinningMenu","setSortConfig","setColumnOrder","setColumnPinning","fixedColumns","filter","initialPinning","handleSort","current","direction","firstName","lastName","phoneNumber","email","birthDate","gender","street","city","zip","encounters","sortedData","sort","a","b","aValue","bValue","generatedColumnWidths","configWidths","generatedColumns","columnSize","accessorFn","accessorKey","columnsWithSorting","isPinnedLeft","includes","isPinnedRight","handlePin"],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- import { type PatientTableProps } from "./patient-table";
2
- interface PatientTableStoryProps extends PatientTableProps {
3
- }
4
- declare function PatientTableWithStory({ page, count, showFilters, showSorting, enableColumnResizing, enableColumnReordering, enableColumnPinning, showPinningMenu, columnWidths, columnConfigs, }: PatientTableStoryProps): import("react/jsx-runtime").JSX.Element;
5
- declare const meta: {
6
- title: string;
7
- component: typeof PatientTableWithStory;
8
- parameters: {
9
- layout: string;
10
- };
11
- tags: string[];
12
- argTypes: {
13
- page: {
14
- control: {
15
- type: "number";
16
- min: number;
17
- };
18
- };
19
- count: {
20
- control: {
21
- type: "number";
22
- min: number;
23
- max: number;
24
- };
25
- };
26
- showFilters: {
27
- control: "boolean";
28
- };
29
- showSorting: {
30
- control: "boolean";
31
- };
32
- enableColumnResizing: {
33
- control: "boolean";
34
- };
35
- enableColumnReordering: {
36
- control: "boolean";
37
- };
38
- enableColumnPinning: {
39
- control: "boolean";
40
- };
41
- showPinningMenu: {
42
- control: "boolean";
43
- };
44
- columnWidths: {
45
- control: "object";
46
- };
47
- columnConfigs: {
48
- control: "object";
49
- };
50
- };
51
- };
52
- export default meta;
53
- export declare const Default: {
54
- args: {
55
- page: number;
56
- count: number;
57
- showFilters: true;
58
- showSorting: true;
59
- enableColumnResizing: true;
60
- };
61
- };
62
- export declare const Aidbox: {
63
- args: {
64
- page: number;
65
- count: number;
66
- showFilters: true;
67
- showSorting: true;
68
- enableColumnResizing: true;
69
- enableColumnReordering: true;
70
- enableColumnPinning: true;
71
- showPinningMenu: true;
72
- columnConfigs: ({
73
- key: string;
74
- label: string;
75
- width: string;
76
- type?: never;
77
- rightAlign?: never;
78
- fixed?: never;
79
- actions?: never;
80
- } | {
81
- key: string;
82
- label: string;
83
- width: string;
84
- type: "code";
85
- rightAlign?: never;
86
- fixed?: never;
87
- actions?: never;
88
- } | {
89
- key: string;
90
- label: string;
91
- width: string;
92
- rightAlign: true;
93
- type?: never;
94
- fixed?: never;
95
- actions?: never;
96
- } | {
97
- key: string;
98
- label: string;
99
- width: string;
100
- fixed: true;
101
- type: "button";
102
- actions: {
103
- label: string;
104
- onClick: (id: string) => void;
105
- variant: "secondary";
106
- }[];
107
- rightAlign?: never;
108
- })[];
109
- };
110
- };
111
- //# sourceMappingURL=patient-table.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patient-table.stories.d.ts","sourceRoot":"","sources":["../../../src/components/patient-table.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,UAAU,sBAAuB,SAAQ,iBAAiB;CAEzD;AAGD,iBAAS,qBAAqB,CAAC,EAC9B,IAAQ,EACR,KAAU,EACV,WAAkB,EAClB,WAAkB,EAClB,oBAA4B,EAC5B,sBAA8B,EAC9B,mBAA2B,EAC3B,eAAsB,EACtB,YAAY,EACZ,aAAa,GACb,EAAE,sBAAsB,2CAexB;AAED,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBoC,CAAC;AAE/C,eAAe,IAAI,CAAC;AAGpB,eAAO,MAAM,OAAO;;;;;;;;CAQH,CAAC;AAElB,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCF,CAAC"}
@@ -1,172 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { PatientTable } from "./patient-table.js";
3
- // Компонент обертка для Stories (аналогично InputWithLabel)
4
- function PatientTableWithStory({ page = 1, count = 10, showFilters = true, showSorting = true, enableColumnResizing = false, enableColumnReordering = false, enableColumnPinning = false, showPinningMenu = true, columnWidths, columnConfigs }) {
5
- return /*#__PURE__*/ _jsx(PatientTable, {
6
- page: page,
7
- count: count,
8
- showFilters: showFilters,
9
- showSorting: showSorting,
10
- enableColumnResizing: enableColumnResizing,
11
- enableColumnReordering: enableColumnReordering,
12
- enableColumnPinning: enableColumnPinning,
13
- showPinningMenu: showPinningMenu,
14
- ...columnWidths && {
15
- columnWidths
16
- },
17
- ...columnConfigs && {
18
- columnConfigs
19
- }
20
- });
21
- }
22
- const meta = {
23
- title: "Component/PatientTable",
24
- component: PatientTableWithStory,
25
- parameters: {
26
- layout: "padded"
27
- },
28
- tags: [
29
- "autodocs"
30
- ],
31
- argTypes: {
32
- page: {
33
- control: {
34
- type: "number",
35
- min: 1
36
- }
37
- },
38
- count: {
39
- control: {
40
- type: "number",
41
- min: 1,
42
- max: 100
43
- }
44
- },
45
- showFilters: {
46
- control: "boolean"
47
- },
48
- showSorting: {
49
- control: "boolean"
50
- },
51
- enableColumnResizing: {
52
- control: "boolean"
53
- },
54
- enableColumnReordering: {
55
- control: "boolean"
56
- },
57
- enableColumnPinning: {
58
- control: "boolean"
59
- },
60
- showPinningMenu: {
61
- control: "boolean"
62
- },
63
- columnWidths: {
64
- control: "object"
65
- },
66
- columnConfigs: {
67
- control: "object"
68
- }
69
- }
70
- };
71
- export default meta;
72
- export const Default = {
73
- args: {
74
- page: 1,
75
- count: 10,
76
- showFilters: true,
77
- showSorting: true,
78
- enableColumnResizing: true
79
- }
80
- };
81
- export const Aidbox = {
82
- args: {
83
- page: 1,
84
- count: 10,
85
- showFilters: true,
86
- showSorting: true,
87
- enableColumnResizing: true,
88
- enableColumnReordering: true,
89
- enableColumnPinning: true,
90
- showPinningMenu: true,
91
- columnConfigs: [
92
- {
93
- key: "firstName",
94
- label: "First Name",
95
- width: "160px"
96
- },
97
- {
98
- key: "lastName",
99
- label: "Last Name",
100
- width: "150px"
101
- },
102
- {
103
- key: "id",
104
- label: "Patient ID",
105
- width: "160px",
106
- type: "code"
107
- },
108
- {
109
- key: "birthDate",
110
- label: "Birth Date",
111
- width: "150px"
112
- },
113
- {
114
- key: "phoneNumber",
115
- label: "Phone Number",
116
- width: "200px"
117
- },
118
- {
119
- key: "email",
120
- label: "Email Address",
121
- width: "250px"
122
- },
123
- {
124
- key: "gender",
125
- label: "Gender",
126
- width: "120px"
127
- },
128
- {
129
- key: "street",
130
- label: "Street",
131
- width: "200px"
132
- },
133
- {
134
- key: "city",
135
- label: "City",
136
- width: "120px"
137
- },
138
- {
139
- key: "state",
140
- label: "State",
141
- width: "120px"
142
- },
143
- {
144
- key: "zip",
145
- label: "ZIP",
146
- width: "120px"
147
- },
148
- {
149
- key: "encounters",
150
- label: "Visits",
151
- width: "110px",
152
- rightAlign: true
153
- },
154
- {
155
- key: "actions",
156
- label: "Actions",
157
- width: "90px",
158
- fixed: true,
159
- type: "button",
160
- actions: [
161
- {
162
- label: "Match",
163
- onClick: (id)=>console.log("Match patient:", id),
164
- variant: "secondary"
165
- }
166
- ]
167
- }
168
- ]
169
- }
170
- };
171
-
172
- //# sourceMappingURL=patient-table.stories.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/patient-table.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { PatientTable, type PatientTableProps } from \"./patient-table\";\n\n// Интерфейс для Storybook контролов (расширяем основные пропсы)\ninterface PatientTableStoryProps extends PatientTableProps {\n\t// Добавляем дополнительные контролы если нужно\n}\n\n// Компонент обертка для Stories (аналогично InputWithLabel)\nfunction PatientTableWithStory({\n\tpage = 1,\n\tcount = 10,\n\tshowFilters = true,\n\tshowSorting = true,\n\tenableColumnResizing = false,\n\tenableColumnReordering = false,\n\tenableColumnPinning = false,\n\tshowPinningMenu = true,\n\tcolumnWidths,\n\tcolumnConfigs,\n}: PatientTableStoryProps) {\n\treturn (\n\t\t<PatientTable\n\t\t\tpage={page}\n\t\t\tcount={count}\n\t\t\tshowFilters={showFilters}\n\t\t\tshowSorting={showSorting}\n\t\t\tenableColumnResizing={enableColumnResizing}\n\t\t\tenableColumnReordering={enableColumnReordering}\n\t\t\tenableColumnPinning={enableColumnPinning}\n\t\t\tshowPinningMenu={showPinningMenu}\n\t\t\t{...(columnWidths && { columnWidths })}\n\t\t\t{...(columnConfigs && { columnConfigs })}\n\t\t/>\n\t);\n}\n\nconst meta = {\n\ttitle: \"Component/PatientTable\",\n\tcomponent: PatientTableWithStory,\n\tparameters: {\n\t\tlayout: \"padded\",\n\t},\n\ttags: [\"autodocs\"],\n\targTypes: {\n\t\tpage: { control: { type: \"number\", min: 1 } },\n\t\tcount: { control: { type: \"number\", min: 1, max: 100 } },\n\t\tshowFilters: { control: \"boolean\" },\n\t\tshowSorting: { control: \"boolean\" },\n\t\tenableColumnResizing: { control: \"boolean\" },\n\t\tenableColumnReordering: { control: \"boolean\" },\n\t\tenableColumnPinning: { control: \"boolean\" },\n\t\tshowPinningMenu: { control: \"boolean\" },\n\t\tcolumnWidths: { control: \"object\" },\n\t\tcolumnConfigs: { control: \"object\" },\n\t},\n} satisfies Meta<typeof PatientTableWithStory>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Default = {\n\targs: {\n\t\tpage: 1,\n\t\tcount: 10,\n\t\tshowFilters: true,\n\t\tshowSorting: true,\n\t\tenableColumnResizing: true,\n\t},\n} satisfies Story;\n\nexport const Aidbox = {\n\targs: {\n\t\tpage: 1,\n\t\tcount: 10,\n\t\tshowFilters: true,\n\t\tshowSorting: true,\n\t\tenableColumnResizing: true,\n\t\tenableColumnReordering: true,\n\t\tenableColumnPinning: true,\n\t\tshowPinningMenu: true,\n\t\tcolumnConfigs: [\n\t\t\t{ key: \"firstName\", label: \"First Name\", width: \"160px\" },\n\t\t\t{ key: \"lastName\", label: \"Last Name\", width: \"150px\" },\n\t\t\t{ key: \"id\", label: \"Patient ID\", width: \"160px\", type: \"code\" },\n\t\t\t{ key: \"birthDate\", label: \"Birth Date\", width: \"150px\" },\n\t\t\t{ key: \"phoneNumber\", label: \"Phone Number\", width: \"200px\" },\n\t\t\t{ key: \"email\", label: \"Email Address\", width: \"250px\" },\n\t\t\t{ key: \"gender\", label: \"Gender\", width: \"120px\" },\n\t\t\t{ key: \"street\", label: \"Street\", width: \"200px\" },\n\t\t\t{ key: \"city\", label: \"City\", width: \"120px\" },\n\t\t\t{ key: \"state\", label: \"State\", width: \"120px\" },\n\t\t\t{ key: \"zip\", label: \"ZIP\", width: \"120px\" },\n\t\t\t{ key: \"encounters\", label: \"Visits\", width: \"110px\", rightAlign: true },\n\t\t\t{\n\t\t\t\tkey: \"actions\",\n\t\t\t\tlabel: \"Actions\",\n\t\t\t\twidth: \"90px\",\n\t\t\t\tfixed: true,\n\t\t\t\ttype: \"button\",\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"Match\",\n\t\t\t\t\t\tonClick: (id) => console.log(\"Match patient:\", id),\n\t\t\t\t\t\tvariant: \"secondary\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t},\n} satisfies Story;\n"],"names":["PatientTable","PatientTableWithStory","page","count","showFilters","showSorting","enableColumnResizing","enableColumnReordering","enableColumnPinning","showPinningMenu","columnWidths","columnConfigs","meta","title","component","parameters","layout","tags","argTypes","control","type","min","max","Default","args","Aidbox","key","label","width","rightAlign","fixed","actions","onClick","id","console","log","variant"],"mappings":";AACA,SAASA,YAAY,QAAgC,qBAAkB;AAOvE,4DAA4D;AAC5D,SAASC,sBAAsB,EAC9BC,OAAO,CAAC,EACRC,QAAQ,EAAE,EACVC,cAAc,IAAI,EAClBC,cAAc,IAAI,EAClBC,uBAAuB,KAAK,EAC5BC,yBAAyB,KAAK,EAC9BC,sBAAsB,KAAK,EAC3BC,kBAAkB,IAAI,EACtBC,YAAY,EACZC,aAAa,EACW;IACxB,qBACC,KAACX;QACAE,MAAMA;QACNC,OAAOA;QACPC,aAAaA;QACbC,aAAaA;QACbC,sBAAsBA;QACtBC,wBAAwBA;QACxBC,qBAAqBA;QACrBC,iBAAiBA;QAChB,GAAIC,gBAAgB;YAAEA;QAAa,CAAC;QACpC,GAAIC,iBAAiB;YAAEA;QAAc,CAAC;;AAG1C;AAEA,MAAMC,OAAO;IACZC,OAAO;IACPC,WAAWb;IACXc,YAAY;QACXC,QAAQ;IACT;IACAC,MAAM;QAAC;KAAW;IAClBC,UAAU;QACThB,MAAM;YAAEiB,SAAS;gBAAEC,MAAM;gBAAUC,KAAK;YAAE;QAAE;QAC5ClB,OAAO;YAAEgB,SAAS;gBAAEC,MAAM;gBAAUC,KAAK;gBAAGC,KAAK;YAAI;QAAE;QACvDlB,aAAa;YAAEe,SAAS;QAAU;QAClCd,aAAa;YAAEc,SAAS;QAAU;QAClCb,sBAAsB;YAAEa,SAAS;QAAU;QAC3CZ,wBAAwB;YAAEY,SAAS;QAAU;QAC7CX,qBAAqB;YAAEW,SAAS;QAAU;QAC1CV,iBAAiB;YAAEU,SAAS;QAAU;QACtCT,cAAc;YAAES,SAAS;QAAS;QAClCR,eAAe;YAAEQ,SAAS;QAAS;IACpC;AACD;AAEA,eAAeP,KAAK;AAGpB,OAAO,MAAMW,UAAU;IACtBC,MAAM;QACLtB,MAAM;QACNC,OAAO;QACPC,aAAa;QACbC,aAAa;QACbC,sBAAsB;IACvB;AACD,EAAkB;AAElB,OAAO,MAAMmB,SAAS;IACrBD,MAAM;QACLtB,MAAM;QACNC,OAAO;QACPC,aAAa;QACbC,aAAa;QACbC,sBAAsB;QACtBC,wBAAwB;QACxBC,qBAAqB;QACrBC,iBAAiB;QACjBE,eAAe;YACd;gBAAEe,KAAK;gBAAaC,OAAO;gBAAcC,OAAO;YAAQ;YACxD;gBAAEF,KAAK;gBAAYC,OAAO;gBAAaC,OAAO;YAAQ;YACtD;gBAAEF,KAAK;gBAAMC,OAAO;gBAAcC,OAAO;gBAASR,MAAM;YAAO;YAC/D;gBAAEM,KAAK;gBAAaC,OAAO;gBAAcC,OAAO;YAAQ;YACxD;gBAAEF,KAAK;gBAAeC,OAAO;gBAAgBC,OAAO;YAAQ;YAC5D;gBAAEF,KAAK;gBAASC,OAAO;gBAAiBC,OAAO;YAAQ;YACvD;gBAAEF,KAAK;gBAAUC,OAAO;gBAAUC,OAAO;YAAQ;YACjD;gBAAEF,KAAK;gBAAUC,OAAO;gBAAUC,OAAO;YAAQ;YACjD;gBAAEF,KAAK;gBAAQC,OAAO;gBAAQC,OAAO;YAAQ;YAC7C;gBAAEF,KAAK;gBAASC,OAAO;gBAASC,OAAO;YAAQ;YAC/C;gBAAEF,KAAK;gBAAOC,OAAO;gBAAOC,OAAO;YAAQ;YAC3C;gBAAEF,KAAK;gBAAcC,OAAO;gBAAUC,OAAO;gBAASC,YAAY;YAAK;YACvE;gBACCH,KAAK;gBACLC,OAAO;gBACPC,OAAO;gBACPE,OAAO;gBACPV,MAAM;gBACNW,SAAS;oBACR;wBACCJ,OAAO;wBACPK,SAAS,CAACC,KAAOC,QAAQC,GAAG,CAAC,kBAAkBF;wBAC/CG,SAAS;oBACV;iBACA;YACF;SACA;IACF;AACD,EAAkB"}
@@ -1,111 +0,0 @@
1
- import type { Meta, StoryObj } from "@storybook/react-vite";
2
- import { PatientTable, type PatientTableProps } from "./patient-table";
3
-
4
- // Интерфейс для Storybook контролов (расширяем основные пропсы)
5
- interface PatientTableStoryProps extends PatientTableProps {
6
- // Добавляем дополнительные контролы если нужно
7
- }
8
-
9
- // Компонент обертка для Stories (аналогично InputWithLabel)
10
- function PatientTableWithStory({
11
- page = 1,
12
- count = 10,
13
- showFilters = true,
14
- showSorting = true,
15
- enableColumnResizing = false,
16
- enableColumnReordering = false,
17
- enableColumnPinning = false,
18
- showPinningMenu = true,
19
- columnWidths,
20
- columnConfigs,
21
- }: PatientTableStoryProps) {
22
- return (
23
- <PatientTable
24
- page={page}
25
- count={count}
26
- showFilters={showFilters}
27
- showSorting={showSorting}
28
- enableColumnResizing={enableColumnResizing}
29
- enableColumnReordering={enableColumnReordering}
30
- enableColumnPinning={enableColumnPinning}
31
- showPinningMenu={showPinningMenu}
32
- {...(columnWidths && { columnWidths })}
33
- {...(columnConfigs && { columnConfigs })}
34
- />
35
- );
36
- }
37
-
38
- const meta = {
39
- title: "Component/PatientTable",
40
- component: PatientTableWithStory,
41
- parameters: {
42
- layout: "padded",
43
- },
44
- tags: ["autodocs"],
45
- argTypes: {
46
- page: { control: { type: "number", min: 1 } },
47
- count: { control: { type: "number", min: 1, max: 100 } },
48
- showFilters: { control: "boolean" },
49
- showSorting: { control: "boolean" },
50
- enableColumnResizing: { control: "boolean" },
51
- enableColumnReordering: { control: "boolean" },
52
- enableColumnPinning: { control: "boolean" },
53
- showPinningMenu: { control: "boolean" },
54
- columnWidths: { control: "object" },
55
- columnConfigs: { control: "object" },
56
- },
57
- } satisfies Meta<typeof PatientTableWithStory>;
58
-
59
- export default meta;
60
- type Story = StoryObj<typeof meta>;
61
-
62
- export const Default = {
63
- args: {
64
- page: 1,
65
- count: 10,
66
- showFilters: true,
67
- showSorting: true,
68
- enableColumnResizing: true,
69
- },
70
- } satisfies Story;
71
-
72
- export const Aidbox = {
73
- args: {
74
- page: 1,
75
- count: 10,
76
- showFilters: true,
77
- showSorting: true,
78
- enableColumnResizing: true,
79
- enableColumnReordering: true,
80
- enableColumnPinning: true,
81
- showPinningMenu: true,
82
- columnConfigs: [
83
- { key: "firstName", label: "First Name", width: "160px" },
84
- { key: "lastName", label: "Last Name", width: "150px" },
85
- { key: "id", label: "Patient ID", width: "160px", type: "code" },
86
- { key: "birthDate", label: "Birth Date", width: "150px" },
87
- { key: "phoneNumber", label: "Phone Number", width: "200px" },
88
- { key: "email", label: "Email Address", width: "250px" },
89
- { key: "gender", label: "Gender", width: "120px" },
90
- { key: "street", label: "Street", width: "200px" },
91
- { key: "city", label: "City", width: "120px" },
92
- { key: "state", label: "State", width: "120px" },
93
- { key: "zip", label: "ZIP", width: "120px" },
94
- { key: "encounters", label: "Visits", width: "110px", rightAlign: true },
95
- {
96
- key: "actions",
97
- label: "Actions",
98
- width: "90px",
99
- fixed: true,
100
- type: "button",
101
- actions: [
102
- {
103
- label: "Match",
104
- onClick: (id) => console.log("Match patient:", id),
105
- variant: "secondary",
106
- },
107
- ],
108
- },
109
- ],
110
- },
111
- } satisfies Story;