@simpleapps-com/augur-web 2.2.24 → 2.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checkbox.cjs +4 -21
- package/dist/checkbox.cjs.map +1 -1
- package/dist/checkbox.js +3 -20
- package/dist/checkbox.js.map +1 -1
- package/dist/chunk-3UFEQSTN.js +26 -0
- package/dist/chunk-3UFEQSTN.js.map +1 -0
- package/dist/chunk-3VN3FX2Q.js +165 -0
- package/dist/chunk-3VN3FX2Q.js.map +1 -0
- package/dist/chunk-JXW4XE2P.cjs +143 -0
- package/dist/chunk-JXW4XE2P.cjs.map +1 -0
- package/dist/chunk-MOC5N2N4.js +143 -0
- package/dist/chunk-MOC5N2N4.js.map +1 -0
- package/dist/chunk-NSSX7USQ.cjs +165 -0
- package/dist/chunk-NSSX7USQ.cjs.map +1 -0
- package/dist/chunk-XGKBDPGD.cjs +26 -0
- package/dist/chunk-XGKBDPGD.cjs.map +1 -0
- package/dist/data-table.cjs +319 -80
- package/dist/data-table.cjs.map +1 -1
- package/dist/data-table.d.cts +23 -32
- package/dist/data-table.d.ts +23 -32
- package/dist/data-table.js +321 -82
- package/dist/data-table.js.map +1 -1
- package/dist/dropdown-menu.cjs +34 -140
- package/dist/dropdown-menu.cjs.map +1 -1
- package/dist/dropdown-menu.js +17 -123
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/pagination.cjs +22 -161
- package/dist/pagination.cjs.map +1 -1
- package/dist/pagination.js +10 -149
- package/dist/pagination.js.map +1 -1
- package/package.json +6 -6
package/dist/data-table.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/data-table.cjs","../src/data-table.tsx"],"names":[],"mappings":"AAAA,+8BAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACdA,2EAAuB;AACvB;AACE;AACA;AACA;AACA;AACA;AAAA,mDAGK;AACP,sDAAmB;AACnB,oCAAsD;AA2G9C,+CAAA;AAlER,SAAS,oBAAA,CAAwB,OAAA,EAA0D;AACzF,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAA,GAAA,CAAS;AAAA,IAC3B,EAAA,EAAI,GAAA,CAAI,GAAA;AAAA,IACR,WAAA,EAAa,GAAA,CAAI,GAAA;AAAA,IACjB,MAAA,EAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,aAAA,mBAAe,GAAA,CAAI,QAAA,UAAY,OAAA;AAAA,IAC/B,IAAA,EAAM,GAAA,CAAI,OAAA,EACN,CAAC,IAAA,EAAA,GAAS,GAAA,CAAI,MAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,QAAQ,EAAA,EACvC,CAAC,IAAA,EAAA,GAAS,MAAA,kBAAO,IAAA,CAAK,QAAA,CAAS,CAAA,UAAK,IAAE,CAAA;AAAA,IAC1C,IAAA,EAAM,EAAE,KAAA,EAAO,GAAA,CAAI,MAAM;AAAA,EAC3B,CAAA,CAAE,CAAA;AACJ;AAEA,IAAM,WAAA,EAAa;AAAA,EACjB,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,aAAA;AAAA,EACR,KAAA,EAAO;AACT,CAAA;AAiBA,SAAS,SAAA,CAAa;AAAA,EACpB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA,EAAa,KAAA;AAAA,EACb,kBAAA,EAAoB,WAAA;AAAA,EACpB,UAAA;AAAA,EACA,QAAA,EAAU,KAAA;AAAA,EACV,aAAA,EAAe,aAAA;AAAA,EACf,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,EAAA,EAAU,KAAA,CAAA,QAAA,CAAuB,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAU,KAAA,CAAA,QAAA,CAAS,EAAE,CAAA;AAEzD,EAAA,MAAM,gBAAA,EAAwB,KAAA,CAAA,OAAA,CAAQ,CAAA,EAAA,GAAM,oBAAA,CAAqB,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEpF,EAAA,MAAM,MAAA,EAAQ,uCAAA;AAAc,IAC1B,IAAA;AAAA,IACA,OAAA,EAAS,eAAA;AAAA,IACT,KAAA,EAAO,EAAE,OAAA,EAAS,aAAa,CAAA;AAAA,IAC/B,eAAA,EAAiB,UAAA;AAAA,IACjB,oBAAA,EAAsB,eAAA;AAAA,IACtB,eAAA,EAAiB,yCAAA,CAAgB;AAAA,IACjC,iBAAA,EAAmB,2CAAA,CAAkB;AAAA,IACrC,mBAAA,EAAqB,6CAAA,CAAoB;AAAA,IACzC,QAAA,EAAU,SAAA,EAAW,CAAC,GAAA,EAAA,GAAQ,QAAA,CAAS,GAAG,EAAA,EAAI,KAAA;AAAA,EAChD,CAAC,CAAA;AAED,EAAA,uBACE,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,qBAAA,WAAG,EAAa,SAAS,CAAA,EACrC,QAAA,EAAA;AAAA,IAAA,CAAA,WAAA,GAAc,OAAA,EAAA,mBACd,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,WAAA,mBACC,6BAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,WAAA,EAAa,iBAAA;AAAA,UACb,KAAA,EAAO,YAAA;AAAA,UACP,QAAA,EAAU,CAAC,CAAA,EAAA,GAAM,eAAA,CAAgB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,UAC/C,SAAA,EAAU;AAAA,QAAA;AAAA,MACZ,CAAA;AAAA,MAED;AAAA,IAAA,EAAA,CACH,CAAA;AAAA,oBAEF,8BAAA,uBAAC,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,6BAAA,6BAAC,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,eAAA,CAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,WAAA,EAAA,mBAC5B,6BAAA,0BAAC,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAA,GAAW;AACnC,QAAA,MAAM,MAAA,mCACH,MAAA,mBAAO,MAAA,qBAAO,SAAA,qBAAU,IAAA,6BAAyC,OAAA,UAAS,QAAA;AAC7E,QAAA,uBACE,6BAAA;AAAA,UAAC,2BAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,qBAAA;AAAA,cACT,UAAA,CAAW,KAAgC,CAAA;AAAA,cAC3C,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,EAAA,GAAK;AAAA,YAChC,CAAA;AAAA,YACA,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,uBAAA,CAAwB,CAAA;AAAA,YAE/C,QAAA,kBAAA,8BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,cAAA,oCAAA,MAAW,CAAO,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,cAC9D,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,EAAA,mBACxB,6BAAA,aAAC,EAAA,EAAc,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,EAAA,CAAG;AAAA,YAAA,EAAA,CAE3D;AAAA,UAAA,CAAA;AAAA,UAZK,MAAA,CAAO;AAAA,QAad,CAAA;AAAA,MAEJ,CAAC,EAAA,CAAA,EArBY,WAAA,CAAY,EAsB3B,CACD,EAAA,CACH,CAAA;AAAA,sBACA,6BAAA,2BAAC,EAAA,EACE,QAAA,EAAA,QAAA,kBACC,6BAAA,0BAAC,EAAA,EACC,QAAA,kBAAA,6BAAA,2BAAC,EAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,SAAA,EAAU,kBAAA,EAC5C,QAAA,kBAAA,6BAAA,yBAAC,EAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,UAAA,CAAU,EAAA,CACzC,EAAA,CACF,EAAA,EACE,KAAA,CAAM,WAAA,CAAY,CAAA,CAAE,IAAA,CAAK,OAAA,IAAW,EAAA,kBACtC,6BAAA,0BAAC,EAAA,EACC,QAAA,kBAAA,6BAAA,2BAAC,EAAA,EAAU,OAAA,EAAS,OAAA,CAAQ,MAAA,EAAQ,SAAA,EAAU,kBAAA,EAC3C,QAAA,EAAA,aAAA,CACH,EAAA,CACF,EAAA,EAEA,KAAA,CAAM,WAAA,CAAY,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAA,mBAC5B,6BAAA;AAAA,QAAC,0BAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,qBAAA,WAAG,GAAc,gBAAgB,CAAA;AAAA,UAC5C,OAAA,EAAS,WAAA,EAAa,CAAA,EAAA,GAAM,UAAA,CAAW,GAAA,CAAI,QAAQ,EAAA,EAAI,KAAA,CAAA;AAAA,UAEtD,QAAA,EAAA,GAAA,CAAI,eAAA,CAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS;AACnC,YAAA,MAAM,MAAA,mCACH,IAAA,qBAAK,MAAA,qBAAO,SAAA,qBAAU,IAAA,6BAAyC,OAAA,UAAS,QAAA;AAC3E,YAAA,uBACE,6BAAA;AAAA,cAAC,2BAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,UAAA,CAAW,KAAgC,CAAA;AAAA,gBAErD,QAAA,EAAA,oCAAA,IAAW,CAAK,MAAA,CAAO,SAAA,CAAU,IAAA,EAAM,IAAA,CAAK,UAAA,CAAW,CAAC;AAAA,cAAA,CAAA;AAAA,cAHpD,IAAA,CAAK;AAAA,YAIZ,CAAA;AAAA,UAEJ,CAAC;AAAA,QAAA,CAAA;AAAA,QAfI,GAAA,CAAI;AAAA,MAgBX,CACD,EAAA,CAEL;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,CAAA;AAEJ;AACA,SAAA,CAAU,YAAA,EAAc,WAAA;AAExB,SAAS,aAAA,CAAc,EAAE,UAAU,CAAA,EAA0C;AAC3E,EAAA,GAAA,CAAI,UAAA,IAAc,KAAA,EAAO,uBAAO,6BAAA,aAAC,EAAA,EAAU,SAAA,EAAU,UAAA,CAAU,CAAA;AAC/D,EAAA,GAAA,CAAI,UAAA,IAAc,MAAA,EAAQ,uBAAO,6BAAA,eAAC,EAAA,EAAY,SAAA,EAAU,UAAA,CAAU,CAAA;AAClE,EAAA,uBAAO,6BAAA,iBAAC,EAAA,EAAc,SAAA,EAAU,mCAAA,CAAmC,CAAA;AACrE;AD7EA;AACE;AACF,8BAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/data-table.cjs","sourcesContent":[null,"/** Sortable, searchable data table built on TanStack Table. */\n\"use client\";\n\nimport * as React from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n useReactTable,\n type ColumnDef as TanstackColumnDef,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuArrowDown, LuArrowUp, LuArrowUpDown } from \"react-icons/lu\";\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\n\nexport interface ColumnDef<T> {\n /** Property key on the data object. */\n key: keyof T & string;\n /** Column header label. */\n header: string;\n /** Enable sorting on this column. */\n sortable?: boolean;\n /** Custom cell renderer. Receives the row data object. */\n render?: (row: T) => React.ReactNode;\n /** Text alignment. */\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface DataTableProps<T> {\n /** Column definitions describing each table column. */\n columns: ColumnDef<T>[];\n /** Data rows to display. */\n data: T[];\n /** Show a search input above the table. */\n searchable?: boolean;\n /** Placeholder text for the search input. */\n searchPlaceholder?: string;\n /** Callback when a row is clicked. Receives the row data. */\n onRowClick?: (row: T) => void;\n /** Show a loading spinner instead of data. */\n loading?: boolean;\n /** Message shown when data is empty. */\n emptyMessage?: string;\n /** Additional toolbar content rendered between search and table. */\n toolbar?: React.ReactNode;\n /** Additional class name for the root container. */\n className?: string;\n /** Row key extractor. Defaults to the row index. */\n getRowId?: (row: T) => string;\n}\n\nfunction buildTanstackColumns<T>(columns: ColumnDef<T>[]): TanstackColumnDef<T, unknown>[] {\n return columns.map((col) => ({\n id: col.key,\n accessorKey: col.key,\n header: col.header,\n enableSorting: col.sortable ?? false,\n cell: col.render\n ? (info) => col.render!(info.row.original)\n : (info) => String(info.getValue() ?? \"\"),\n meta: { align: col.align },\n }));\n}\n\nconst alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n\n/**\n * Data-driven table with sorting and search. Wraps TanStack Table with\n * the augur-web Table primitives.\n *\n * @example\n * ```tsx\n * const columns: ColumnDef<Brand>[] = [\n * { key: \"brandsUid\", header: \"UID\", sortable: true },\n * { key: \"brandsName\", header: \"Name\", sortable: true },\n * { key: \"brandsDesc\", header: \"Description\" },\n * ];\n *\n * <DataTable columns={columns} data={brands} searchable onRowClick={selectBrand} />\n * ```\n */\nfunction DataTable<T>({\n columns,\n data,\n searchable = false,\n searchPlaceholder = \"Search...\",\n onRowClick,\n loading = false,\n emptyMessage = \"No results.\",\n toolbar,\n className,\n getRowId,\n}: DataTableProps<T>) {\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [globalFilter, setGlobalFilter] = React.useState(\"\");\n\n const tanstackColumns = React.useMemo(() => buildTanstackColumns(columns), [columns]);\n\n const table = useReactTable({\n data,\n columns: tanstackColumns,\n state: { sorting, globalFilter },\n onSortingChange: setSorting,\n onGlobalFilterChange: setGlobalFilter,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getRowId: getRowId ? (row) => getRowId(row) : undefined,\n });\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {(searchable || toolbar) && (\n <div className=\"flex items-center gap-4\">\n {searchable && (\n <Input\n placeholder={searchPlaceholder}\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n className=\"max-w-sm\"\n />\n )}\n {toolbar}\n </div>\n )}\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const align =\n (header.column.columnDef.meta as { align?: string } | undefined)?.align ?? \"left\";\n return (\n <TableHead\n key={header.id}\n className={cn(\n alignClass[align as keyof typeof alignClass],\n header.column.getCanSort() && \"cursor-pointer select-none\",\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n <span className=\"inline-flex items-center gap-1\">\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getCanSort() && (\n <SortIndicator direction={header.column.getIsSorted()} />\n )}\n </span>\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n <Spinner size=\"lg\" className=\"mx-auto\" />\n </TableCell>\n </TableRow>\n ) : table.getRowModel().rows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n ) : (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n className={cn(onRowClick && \"cursor-pointer\")}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n >\n {row.getVisibleCells().map((cell) => {\n const align =\n (cell.column.columnDef.meta as { align?: string } | undefined)?.align ?? \"left\";\n return (\n <TableCell\n key={cell.id}\n className={alignClass[align as keyof typeof alignClass]}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n );\n}\nDataTable.displayName = \"DataTable\";\n\nfunction SortIndicator({ direction }: { direction: false | \"asc\" | \"desc\" }) {\n if (direction === \"asc\") return <LuArrowUp className=\"h-4 w-4\" />;\n if (direction === \"desc\") return <LuArrowDown className=\"h-4 w-4\" />;\n return <LuArrowUpDown className=\"text-muted-foreground/50 h-4 w-4\" />;\n}\n\nexport { DataTable };\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/data-table.cjs","../src/data-table.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/data-table.cjs","sourcesContent":[null,"/** Feature-complete admin data table built on TanStack Table. */\n\"use client\";\n\nimport * as React from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n useReactTable,\n type ColumnDef as TanstackColumnDef,\n type SortingState,\n type RowSelectionState,\n type VisibilityState,\n type Table as TanstackTable,\n type Header,\n type Row,\n type Cell,\n} from \"@tanstack/react-table\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { LuArrowDown, LuArrowUp, LuArrowUpDown, LuDownload, LuSettings2 } from \"react-icons/lu\";\nimport { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\nimport { Checkbox } from \"./checkbox\";\nimport { Button } from \"./button\";\nimport { ListPagination } from \"./pagination\";\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n} from \"./dropdown-menu\";\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface ColumnDef<T> {\n key: keyof T & string;\n header: string;\n sortable?: boolean;\n render?: (row: T) => React.ReactNode;\n align?: \"left\" | \"center\" | \"right\";\n hideable?: boolean;\n}\n\nexport interface DataTablePagination {\n page: number;\n totalPages: number;\n getHref: (page: number) => string;\n onPageChange?: (page: number) => void;\n}\n\nexport interface DataTableProps<T> {\n columns: ColumnDef<T>[];\n data: T[];\n searchable?: boolean;\n searchPlaceholder?: string;\n onRowClick?: (row: T) => void;\n loading?: boolean;\n emptyMessage?: string;\n toolbar?: React.ReactNode;\n className?: string;\n getRowId?: (row: T) => string;\n pagination?: DataTablePagination;\n globalFilter?: string;\n onGlobalFilterChange?: (value: string) => void;\n sortingState?: SortingState;\n onSortingChange?: (state: SortingState) => void;\n selectable?: boolean;\n rowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n bulkActions?: (selectedRows: T[]) => React.ReactNode;\n columnToggle?: boolean;\n exportCsv?: boolean;\n csvFilename?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\nconst ALIGN_CLASS = { left: \"text-left\", center: \"text-center\", right: \"text-right\" } as const;\n\nfunction getAlignCn(meta: unknown): string {\n const align = (meta as { align?: string } | undefined)?.align ?? \"left\";\n return ALIGN_CLASS[align as keyof typeof ALIGN_CLASS];\n}\n\nfunction buildTanstackColumns<T>(\n columns: ColumnDef<T>[],\n selectable: boolean,\n): TanstackColumnDef<T, unknown>[] {\n const cols: TanstackColumnDef<T, unknown>[] = [];\n if (selectable) {\n cols.push({\n id: \"_select\",\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n onCheckedChange={(v) => table.toggleAllPageRowsSelected(!!v)}\n aria-label=\"Select all\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(v) => row.toggleSelected(!!v)}\n aria-label=\"Select row\"\n onClick={(e) => e.stopPropagation()}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n meta: { align: \"center\" },\n });\n }\n for (const col of columns) {\n cols.push({\n id: col.key,\n accessorKey: col.key,\n header: col.header,\n enableSorting: col.sortable ?? false,\n enableHiding: col.hideable !== false,\n cell: col.render\n ? (info) => col.render!(info.row.original)\n : (info) => String(info.getValue() ?? \"\"),\n meta: { align: col.align },\n });\n }\n return cols;\n}\n\nfunction exportToCsv<T>(columns: ColumnDef<T>[], data: T[], filename: string) {\n const headers = columns.map((c) => c.header);\n const rows = data.map((row) =>\n columns.map((col) => {\n const str = String(row[col.key] ?? \"\");\n return str.includes(\",\") || str.includes('\"') || str.includes(\"\\n\")\n ? `\"${str.replace(/\"/g, '\"\"')}\"`\n : str;\n }),\n );\n const csv = [headers.join(\",\"), ...rows.map((r) => r.join(\",\"))].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8;\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = `${filename}.csv`;\n link.click();\n URL.revokeObjectURL(url);\n}\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\nfunction SortIndicator({ direction }: { direction: false | \"asc\" | \"desc\" }) {\n if (direction === \"asc\") return <LuArrowUp className=\"h-4 w-4\" />;\n if (direction === \"desc\") return <LuArrowDown className=\"h-4 w-4\" />;\n return <LuArrowUpDown className=\"text-muted-foreground/50 h-4 w-4\" />;\n}\n\nfunction ColumnToggle<T>({ table }: { table: TanstackTable<T> }) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\">\n <LuSettings2 className=\"mr-2 h-4 w-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((col) => col.getCanHide())\n .map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}\n >\n {col.columnDef.header as string}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction HeaderCell<T>({ header }: { header: Header<T, unknown> }) {\n return (\n <TableHead\n className={cn(\n getAlignCn(header.column.columnDef.meta),\n header.column.getCanSort() && \"cursor-pointer select-none\",\n )}\n onClick={header.column.getToggleSortingHandler()}\n >\n <span className=\"inline-flex items-center gap-1\">\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getCanSort() && <SortIndicator direction={header.column.getIsSorted()} />}\n </span>\n </TableHead>\n );\n}\n\nfunction DataCell<T>({ cell }: { cell: Cell<T, unknown> }) {\n return (\n <TableCell className={getAlignCn(cell.column.columnDef.meta)}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n}\n\nfunction DataRow<T>({ row, onRowClick }: { row: Row<T>; onRowClick?: (r: T) => void }) {\n return (\n <TableRow\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n className={cn(onRowClick && \"cursor-pointer\")}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n >\n {row.getVisibleCells().map((cell) => (\n <DataCell key={cell.id} cell={cell} />\n ))}\n </TableRow>\n );\n}\n\nfunction ExportButton<T>({\n columns,\n data,\n csvFilename,\n}: {\n columns: ColumnDef<T>[];\n data: T[];\n csvFilename: string;\n}) {\n return (\n <Button variant=\"outline\" size=\"sm\" onClick={() => exportToCsv(columns, data, csvFilename)}>\n <LuDownload className=\"mr-2 h-4 w-4\" />\n Export\n </Button>\n );\n}\n\nfunction BulkActionsBar<T>({\n selectedRows,\n bulkActions,\n}: {\n selectedRows: T[];\n bulkActions: (rows: T[]) => React.ReactNode;\n}) {\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">{selectedRows.length} selected</span>\n {bulkActions(selectedRows)}\n </div>\n );\n}\n\nfunction Toolbar<T>({\n searchable,\n searchPlaceholder,\n globalFilter,\n onGlobalFilterChange,\n selectedRows,\n bulkActions,\n toolbar,\n exportCsv,\n columns,\n data,\n csvFilename,\n columnToggle,\n table,\n}: {\n searchable: boolean;\n searchPlaceholder: string;\n globalFilter: string;\n onGlobalFilterChange: (value: string) => void;\n selectedRows: T[];\n bulkActions?: (rows: T[]) => React.ReactNode;\n toolbar?: React.ReactNode;\n exportCsv: boolean;\n columns: ColumnDef<T>[];\n data: T[];\n csvFilename: string;\n columnToggle: boolean;\n table: TanstackTable<T>;\n}) {\n const hasSelection = selectedRows.length > 0;\n return (\n <div className=\"flex items-center gap-4\">\n {searchable && (\n <Input\n placeholder={searchPlaceholder}\n value={globalFilter}\n onChange={(e) => onGlobalFilterChange(e.target.value)}\n className=\"max-w-sm\"\n />\n )}\n {hasSelection && bulkActions && (\n <BulkActionsBar selectedRows={selectedRows} bulkActions={bulkActions} />\n )}\n <div className=\"ml-auto flex items-center gap-2\">\n {toolbar}\n {exportCsv && <ExportButton columns={columns} data={data} csvFilename={csvFilename} />}\n {columnToggle && <ColumnToggle table={table} />}\n </div>\n </div>\n );\n}\n\nfunction TableBodyContent<T>({\n loading,\n colSpan,\n emptyMessage,\n rows,\n onRowClick,\n}: {\n loading: boolean;\n colSpan: number;\n emptyMessage: string;\n rows: Row<T>[];\n onRowClick?: (r: T) => void;\n}) {\n if (loading) {\n return (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center\">\n <Spinner size=\"lg\" className=\"mx-auto\" />\n </TableCell>\n </TableRow>\n );\n }\n if (rows.length === 0) {\n return (\n <TableRow>\n <TableCell colSpan={colSpan} className=\"h-24 text-center\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n );\n }\n return (\n <>\n {rows.map((row) => (\n <DataRow key={row.id} row={row} onRowClick={onRowClick} />\n ))}\n </>\n );\n}\n\nfunction PaginationFooter({ pagination }: { pagination?: DataTablePagination }) {\n if (!pagination || pagination.totalPages <= 1) return null;\n return (\n <ListPagination\n page={pagination.page}\n totalPages={pagination.totalPages}\n getHref={pagination.getHref}\n onPageChange={pagination.onPageChange}\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Hook: encapsulates all state management and TanStack Table configuration\n// ---------------------------------------------------------------------------\n\ninterface UseDataTableOptions<T> {\n columns: ColumnDef<T>[];\n data: T[];\n selectable: boolean;\n getRowId?: (row: T) => string;\n pagination?: DataTablePagination;\n externalGlobalFilter?: string;\n onGlobalFilterChange?: (value: string) => void;\n externalSorting?: SortingState;\n onSortingChange?: (state: SortingState) => void;\n externalRowSelection?: RowSelectionState;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n}\n\nfunction useDataTable<T>(opts: UseDataTableOptions<T>) {\n const isManualFiltering = opts.externalGlobalFilter !== undefined;\n const isManualSorting = opts.externalSorting !== undefined;\n\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const [internalGlobalFilter, setInternalGlobalFilter] = React.useState(\"\");\n const [internalRowSelection, setInternalRowSelection] = React.useState<RowSelectionState>({});\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n\n const sorting = opts.externalSorting ?? internalSorting;\n const globalFilter = opts.externalGlobalFilter ?? internalGlobalFilter;\n const rowSelectionState = opts.externalRowSelection ?? internalRowSelection;\n\n const handleSortingChange = opts.onSortingChange\n ? (updater: SortingState | ((prev: SortingState) => SortingState)) => {\n opts.onSortingChange!((updater as (prev: SortingState) => SortingState)(sorting));\n }\n : setInternalSorting;\n\n const handleGlobalFilterChange = opts.onGlobalFilterChange ?? setInternalGlobalFilter;\n\n const handleRowSelectionChange = opts.onRowSelectionChange\n ? (updater: RowSelectionState | ((prev: RowSelectionState) => RowSelectionState)) => {\n opts.onRowSelectionChange!(\n (updater as (prev: RowSelectionState) => RowSelectionState)(rowSelectionState),\n );\n }\n : setInternalRowSelection;\n\n const tanstackColumns = React.useMemo(\n () => buildTanstackColumns(opts.columns, opts.selectable),\n [opts.columns, opts.selectable],\n );\n\n const table = useReactTable({\n data: opts.data,\n columns: tanstackColumns,\n state: {\n sorting,\n globalFilter: isManualFiltering ? undefined : globalFilter,\n rowSelection: rowSelectionState,\n columnVisibility,\n },\n onSortingChange: handleSortingChange,\n onGlobalFilterChange: isManualFiltering ? undefined : setInternalGlobalFilter,\n onRowSelectionChange: handleRowSelectionChange,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: isManualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: isManualFiltering ? undefined : getFilteredRowModel(),\n manualSorting: isManualSorting,\n manualFiltering: isManualFiltering,\n manualPagination: opts.pagination !== undefined,\n enableRowSelection: opts.selectable,\n getRowId: opts.getRowId ? (row) => opts.getRowId!(row) : undefined,\n });\n\n const selectedRows = opts.selectable\n ? table.getSelectedRowModel().rows.map((r) => r.original)\n : [];\n\n return { table, tanstackColumns, globalFilter, handleGlobalFilterChange, selectedRows };\n}\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\nfunction DataTable<T>({\n columns,\n data,\n searchable = false,\n searchPlaceholder = \"Search...\",\n onRowClick,\n loading = false,\n emptyMessage = \"No results.\",\n toolbar,\n className,\n getRowId,\n pagination,\n globalFilter: externalGlobalFilter,\n onGlobalFilterChange,\n sortingState,\n onSortingChange,\n selectable = false,\n rowSelection,\n onRowSelectionChange,\n bulkActions,\n columnToggle = false,\n exportCsv = false,\n csvFilename = \"export\",\n}: DataTableProps<T>) {\n const { table, tanstackColumns, globalFilter, handleGlobalFilterChange, selectedRows } =\n useDataTable({\n columns,\n data,\n selectable,\n getRowId,\n pagination,\n externalGlobalFilter,\n onGlobalFilterChange,\n externalSorting: sortingState,\n onSortingChange,\n externalRowSelection: rowSelection,\n onRowSelectionChange,\n });\n\n const showToolbar = searchable || toolbar || columnToggle || exportCsv || selectedRows.length > 0;\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {showToolbar && (\n <Toolbar\n searchable={searchable}\n searchPlaceholder={searchPlaceholder}\n globalFilter={globalFilter}\n onGlobalFilterChange={handleGlobalFilterChange}\n selectedRows={selectedRows}\n bulkActions={bulkActions}\n toolbar={toolbar}\n exportCsv={exportCsv}\n columns={columns}\n data={data}\n csvFilename={csvFilename}\n columnToggle={columnToggle}\n table={table}\n />\n )}\n <Table>\n <TableHeader className=\"bg-background sticky top-0 z-10\">\n {table.getHeaderGroups().map((hg) => (\n <TableRow key={hg.id}>\n {hg.headers.map((h) => (\n <HeaderCell key={h.id} header={h} />\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n <TableBodyContent\n loading={loading}\n colSpan={tanstackColumns.length}\n emptyMessage={emptyMessage}\n rows={table.getRowModel().rows}\n onRowClick={onRowClick}\n />\n </TableBody>\n </Table>\n <PaginationFooter pagination={pagination} />\n </div>\n );\n}\nDataTable.displayName = \"DataTable\";\n\nexport { DataTable };\nexport type { SortingState, RowSelectionState, VisibilityState };\n"]}
|
package/dist/data-table.d.cts
CHANGED
|
@@ -1,58 +1,49 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { SortingState, RowSelectionState } from '@tanstack/react-table';
|
|
4
|
+
export { RowSelectionState, SortingState, VisibilityState } from '@tanstack/react-table';
|
|
3
5
|
|
|
4
6
|
interface ColumnDef<T> {
|
|
5
|
-
/** Property key on the data object. */
|
|
6
7
|
key: keyof T & string;
|
|
7
|
-
/** Column header label. */
|
|
8
8
|
header: string;
|
|
9
|
-
/** Enable sorting on this column. */
|
|
10
9
|
sortable?: boolean;
|
|
11
|
-
/** Custom cell renderer. Receives the row data object. */
|
|
12
10
|
render?: (row: T) => React.ReactNode;
|
|
13
|
-
/** Text alignment. */
|
|
14
11
|
align?: "left" | "center" | "right";
|
|
12
|
+
hideable?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface DataTablePagination {
|
|
15
|
+
page: number;
|
|
16
|
+
totalPages: number;
|
|
17
|
+
getHref: (page: number) => string;
|
|
18
|
+
onPageChange?: (page: number) => void;
|
|
15
19
|
}
|
|
16
20
|
interface DataTableProps<T> {
|
|
17
|
-
/** Column definitions describing each table column. */
|
|
18
21
|
columns: ColumnDef<T>[];
|
|
19
|
-
/** Data rows to display. */
|
|
20
22
|
data: T[];
|
|
21
|
-
/** Show a search input above the table. */
|
|
22
23
|
searchable?: boolean;
|
|
23
|
-
/** Placeholder text for the search input. */
|
|
24
24
|
searchPlaceholder?: string;
|
|
25
|
-
/** Callback when a row is clicked. Receives the row data. */
|
|
26
25
|
onRowClick?: (row: T) => void;
|
|
27
|
-
/** Show a loading spinner instead of data. */
|
|
28
26
|
loading?: boolean;
|
|
29
|
-
/** Message shown when data is empty. */
|
|
30
27
|
emptyMessage?: string;
|
|
31
|
-
/** Additional toolbar content rendered between search and table. */
|
|
32
28
|
toolbar?: React.ReactNode;
|
|
33
|
-
/** Additional class name for the root container. */
|
|
34
29
|
className?: string;
|
|
35
|
-
/** Row key extractor. Defaults to the row index. */
|
|
36
30
|
getRowId?: (row: T) => string;
|
|
31
|
+
pagination?: DataTablePagination;
|
|
32
|
+
globalFilter?: string;
|
|
33
|
+
onGlobalFilterChange?: (value: string) => void;
|
|
34
|
+
sortingState?: SortingState;
|
|
35
|
+
onSortingChange?: (state: SortingState) => void;
|
|
36
|
+
selectable?: boolean;
|
|
37
|
+
rowSelection?: RowSelectionState;
|
|
38
|
+
onRowSelectionChange?: (state: RowSelectionState) => void;
|
|
39
|
+
bulkActions?: (selectedRows: T[]) => React.ReactNode;
|
|
40
|
+
columnToggle?: boolean;
|
|
41
|
+
exportCsv?: boolean;
|
|
42
|
+
csvFilename?: string;
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
* Data-driven table with sorting and search. Wraps TanStack Table with
|
|
40
|
-
* the augur-web Table primitives.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```tsx
|
|
44
|
-
* const columns: ColumnDef<Brand>[] = [
|
|
45
|
-
* { key: "brandsUid", header: "UID", sortable: true },
|
|
46
|
-
* { key: "brandsName", header: "Name", sortable: true },
|
|
47
|
-
* { key: "brandsDesc", header: "Description" },
|
|
48
|
-
* ];
|
|
49
|
-
*
|
|
50
|
-
* <DataTable columns={columns} data={brands} searchable onRowClick={selectBrand} />
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
declare function DataTable<T>({ columns, data, searchable, searchPlaceholder, onRowClick, loading, emptyMessage, toolbar, className, getRowId, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
44
|
+
declare function DataTable<T>({ columns, data, searchable, searchPlaceholder, onRowClick, loading, emptyMessage, toolbar, className, getRowId, pagination, globalFilter: externalGlobalFilter, onGlobalFilterChange, sortingState, onSortingChange, selectable, rowSelection, onRowSelectionChange, bulkActions, columnToggle, exportCsv, csvFilename, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
54
45
|
declare namespace DataTable {
|
|
55
46
|
var displayName: string;
|
|
56
47
|
}
|
|
57
48
|
|
|
58
|
-
export { type ColumnDef, DataTable, type DataTableProps };
|
|
49
|
+
export { type ColumnDef, DataTable, type DataTablePagination, type DataTableProps };
|
package/dist/data-table.d.ts
CHANGED
|
@@ -1,58 +1,49 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { SortingState, RowSelectionState } from '@tanstack/react-table';
|
|
4
|
+
export { RowSelectionState, SortingState, VisibilityState } from '@tanstack/react-table';
|
|
3
5
|
|
|
4
6
|
interface ColumnDef<T> {
|
|
5
|
-
/** Property key on the data object. */
|
|
6
7
|
key: keyof T & string;
|
|
7
|
-
/** Column header label. */
|
|
8
8
|
header: string;
|
|
9
|
-
/** Enable sorting on this column. */
|
|
10
9
|
sortable?: boolean;
|
|
11
|
-
/** Custom cell renderer. Receives the row data object. */
|
|
12
10
|
render?: (row: T) => React.ReactNode;
|
|
13
|
-
/** Text alignment. */
|
|
14
11
|
align?: "left" | "center" | "right";
|
|
12
|
+
hideable?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface DataTablePagination {
|
|
15
|
+
page: number;
|
|
16
|
+
totalPages: number;
|
|
17
|
+
getHref: (page: number) => string;
|
|
18
|
+
onPageChange?: (page: number) => void;
|
|
15
19
|
}
|
|
16
20
|
interface DataTableProps<T> {
|
|
17
|
-
/** Column definitions describing each table column. */
|
|
18
21
|
columns: ColumnDef<T>[];
|
|
19
|
-
/** Data rows to display. */
|
|
20
22
|
data: T[];
|
|
21
|
-
/** Show a search input above the table. */
|
|
22
23
|
searchable?: boolean;
|
|
23
|
-
/** Placeholder text for the search input. */
|
|
24
24
|
searchPlaceholder?: string;
|
|
25
|
-
/** Callback when a row is clicked. Receives the row data. */
|
|
26
25
|
onRowClick?: (row: T) => void;
|
|
27
|
-
/** Show a loading spinner instead of data. */
|
|
28
26
|
loading?: boolean;
|
|
29
|
-
/** Message shown when data is empty. */
|
|
30
27
|
emptyMessage?: string;
|
|
31
|
-
/** Additional toolbar content rendered between search and table. */
|
|
32
28
|
toolbar?: React.ReactNode;
|
|
33
|
-
/** Additional class name for the root container. */
|
|
34
29
|
className?: string;
|
|
35
|
-
/** Row key extractor. Defaults to the row index. */
|
|
36
30
|
getRowId?: (row: T) => string;
|
|
31
|
+
pagination?: DataTablePagination;
|
|
32
|
+
globalFilter?: string;
|
|
33
|
+
onGlobalFilterChange?: (value: string) => void;
|
|
34
|
+
sortingState?: SortingState;
|
|
35
|
+
onSortingChange?: (state: SortingState) => void;
|
|
36
|
+
selectable?: boolean;
|
|
37
|
+
rowSelection?: RowSelectionState;
|
|
38
|
+
onRowSelectionChange?: (state: RowSelectionState) => void;
|
|
39
|
+
bulkActions?: (selectedRows: T[]) => React.ReactNode;
|
|
40
|
+
columnToggle?: boolean;
|
|
41
|
+
exportCsv?: boolean;
|
|
42
|
+
csvFilename?: string;
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
* Data-driven table with sorting and search. Wraps TanStack Table with
|
|
40
|
-
* the augur-web Table primitives.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```tsx
|
|
44
|
-
* const columns: ColumnDef<Brand>[] = [
|
|
45
|
-
* { key: "brandsUid", header: "UID", sortable: true },
|
|
46
|
-
* { key: "brandsName", header: "Name", sortable: true },
|
|
47
|
-
* { key: "brandsDesc", header: "Description" },
|
|
48
|
-
* ];
|
|
49
|
-
*
|
|
50
|
-
* <DataTable columns={columns} data={brands} searchable onRowClick={selectBrand} />
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
declare function DataTable<T>({ columns, data, searchable, searchPlaceholder, onRowClick, loading, emptyMessage, toolbar, className, getRowId, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
44
|
+
declare function DataTable<T>({ columns, data, searchable, searchPlaceholder, onRowClick, loading, emptyMessage, toolbar, className, getRowId, pagination, globalFilter: externalGlobalFilter, onGlobalFilterChange, sortingState, onSortingChange, selectable, rowSelection, onRowSelectionChange, bulkActions, columnToggle, exportCsv, csvFilename, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
54
45
|
declare namespace DataTable {
|
|
55
46
|
var displayName: string;
|
|
56
47
|
}
|
|
57
48
|
|
|
58
|
-
export { type ColumnDef, DataTable, type DataTableProps };
|
|
49
|
+
export { type ColumnDef, DataTable, type DataTablePagination, type DataTableProps };
|