@nccirtu/tablefy 0.1.0

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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +236 -0
  3. package/dist/columns/actions-column.d.ts +26 -0
  4. package/dist/columns/avatar-group-column.d.ts +38 -0
  5. package/dist/columns/badge-column.d.ts +22 -0
  6. package/dist/columns/base-column.d.ts +19 -0
  7. package/dist/columns/button-column.d.ts +14 -0
  8. package/dist/columns/checkbox-column.d.ts +5 -0
  9. package/dist/columns/date-column.d.ts +24 -0
  10. package/dist/columns/dropdown-column.d.ts +17 -0
  11. package/dist/columns/icon-column.d.ts +58 -0
  12. package/dist/columns/image-column.d.ts +21 -0
  13. package/dist/columns/index.d.ts +13 -0
  14. package/dist/columns/input-column.d.ts +14 -0
  15. package/dist/columns/link-column.d.ts +27 -0
  16. package/dist/columns/number-column.d.ts +23 -0
  17. package/dist/columns/progress-column.d.ts +30 -0
  18. package/dist/columns/select-column.d.ts +19 -0
  19. package/dist/columns/text-column.d.ts +14 -0
  20. package/dist/columns/types.d.ts +37 -0
  21. package/dist/components/animata/list/avatar-list.d.ts +12 -0
  22. package/dist/components/ui/badge.d.ts +9 -0
  23. package/dist/components/ui/button.d.ts +10 -0
  24. package/dist/components/ui/checkbox.d.ts +4 -0
  25. package/dist/components/ui/data-table/data-table-empty.d.ts +8 -0
  26. package/dist/components/ui/data-table/data-table-header.d.ts +15 -0
  27. package/dist/components/ui/data-table/data-table-pagination.d.ts +9 -0
  28. package/dist/components/ui/data-table/data-table-schema.d.ts +5 -0
  29. package/dist/components/ui/data-table/data-table.d.ts +13 -0
  30. package/dist/components/ui/dropdown-menu.d.ts +25 -0
  31. package/dist/components/ui/input.d.ts +3 -0
  32. package/dist/components/ui/progress.d.ts +4 -0
  33. package/dist/components/ui/select.d.ts +15 -0
  34. package/dist/components/ui/table.d.ts +10 -0
  35. package/dist/components/ui/tooltip.d.ts +7 -0
  36. package/dist/index.d.ts +15 -0
  37. package/dist/index.esm.js +10260 -0
  38. package/dist/index.esm.js.map +1 -0
  39. package/dist/index.js +10294 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/lib/builders/empty-state.d.ts +27 -0
  42. package/dist/lib/builders/index.d.ts +2 -0
  43. package/dist/lib/builders/table-schema.d.ts +15 -0
  44. package/dist/lib/table/schema/empty-state.d.ts +23 -0
  45. package/dist/lib/table/types.d.ts +76 -0
  46. package/dist/lib/types/actions.d.ts +20 -0
  47. package/dist/lib/types/empty-state.d.ts +18 -0
  48. package/dist/lib/types/filters.d.ts +25 -0
  49. package/dist/lib/types/index.d.ts +4 -0
  50. package/dist/lib/types/table.d.ts +41 -0
  51. package/dist/lib/utils.d.ts +1 -0
  52. package/dist/schema/data-table-schema.d.ts +75 -0
  53. package/dist/schema/empty-state.d.ts +45 -0
  54. package/dist/schema/table-schema.d.ts +44 -0
  55. package/dist/schema.d.ts +11 -0
  56. package/dist/src/columns/actions-column.d.ts +26 -0
  57. package/dist/src/columns/avatar-group-column.d.ts +38 -0
  58. package/dist/src/columns/badge-column.d.ts +22 -0
  59. package/dist/src/columns/base-column.d.ts +19 -0
  60. package/dist/src/columns/button-column.d.ts +14 -0
  61. package/dist/src/columns/checkbox-column.d.ts +5 -0
  62. package/dist/src/columns/date-column.d.ts +24 -0
  63. package/dist/src/columns/dropdown-column.d.ts +17 -0
  64. package/dist/src/columns/icon-column.d.ts +58 -0
  65. package/dist/src/columns/image-column.d.ts +21 -0
  66. package/dist/src/columns/index.d.ts +13 -0
  67. package/dist/src/columns/input-column.d.ts +14 -0
  68. package/dist/src/columns/link-column.d.ts +27 -0
  69. package/dist/src/columns/number-column.d.ts +23 -0
  70. package/dist/src/columns/progress-column.d.ts +30 -0
  71. package/dist/src/columns/select-column.d.ts +19 -0
  72. package/dist/src/columns/text-column.d.ts +14 -0
  73. package/dist/src/columns/types.d.ts +37 -0
  74. package/dist/src/components/animata/list/avatar-list.d.ts +12 -0
  75. package/dist/src/components/ui/badge.d.ts +9 -0
  76. package/dist/src/components/ui/button.d.ts +10 -0
  77. package/dist/src/components/ui/checkbox.d.ts +4 -0
  78. package/dist/src/components/ui/data-table/data-table-empty.d.ts +8 -0
  79. package/dist/src/components/ui/data-table/data-table-header.d.ts +15 -0
  80. package/dist/src/components/ui/data-table/data-table-pagination.d.ts +9 -0
  81. package/dist/src/components/ui/data-table/data-table-schema.d.ts +5 -0
  82. package/dist/src/components/ui/data-table/data-table.d.ts +13 -0
  83. package/dist/src/components/ui/dropdown-menu.d.ts +25 -0
  84. package/dist/src/components/ui/input.d.ts +3 -0
  85. package/dist/src/components/ui/progress.d.ts +4 -0
  86. package/dist/src/components/ui/select.d.ts +15 -0
  87. package/dist/src/components/ui/table.d.ts +10 -0
  88. package/dist/src/components/ui/tooltip.d.ts +7 -0
  89. package/dist/src/index.d.ts +15 -0
  90. package/dist/src/lib/table/schema/empty-state.d.ts +23 -0
  91. package/dist/src/lib/table/types.d.ts +76 -0
  92. package/dist/src/lib/utils.d.ts +1 -0
  93. package/dist/src/schema/data-table-schema.d.ts +75 -0
  94. package/dist/src/schema/empty-state.d.ts +45 -0
  95. package/dist/src/schema/table-schema.d.ts +44 -0
  96. package/dist/src/schema.d.ts +11 -0
  97. package/dist/src/types.d.ts +76 -0
  98. package/dist/types.d.ts +76 -0
  99. package/package.json +73 -0
@@ -0,0 +1,45 @@
1
+ import { ReactNode } from 'react';
2
+ import { EmptyStateConfig } from '../types';
3
+ export declare class EmptyStateBuilder {
4
+ private config;
5
+ static make(): EmptyStateBuilder;
6
+ title(title: string): this;
7
+ description(description: string): this;
8
+ icon(icon: ReactNode): this;
9
+ imageUrl(imageUrl: string): this;
10
+ variant(variant: EmptyStateConfig['variant']): this;
11
+ action(config: {
12
+ label: string;
13
+ onClick?: () => void;
14
+ href?: string;
15
+ icon?: ReactNode;
16
+ }): this;
17
+ static noData(config?: {
18
+ title?: string;
19
+ description?: string;
20
+ createLabel?: string;
21
+ onCreate?: () => void;
22
+ createHref?: string;
23
+ }): EmptyStateBuilder;
24
+ static noSearchResults(config?: {
25
+ title?: string;
26
+ description?: string;
27
+ onClear?: () => void;
28
+ }): EmptyStateBuilder;
29
+ static noFilterResults(config?: {
30
+ title?: string;
31
+ description?: string;
32
+ onClear?: () => void;
33
+ }): EmptyStateBuilder;
34
+ static error(config?: {
35
+ title?: string;
36
+ description?: string;
37
+ onRetry?: () => void;
38
+ }): EmptyStateBuilder;
39
+ private createInboxIcon;
40
+ private createSearchIcon;
41
+ private createFilterIcon;
42
+ private createAlertIcon;
43
+ private createPlusIcon;
44
+ build(): EmptyStateConfig;
45
+ }
@@ -0,0 +1,44 @@
1
+ import { ReactNode } from 'react';
2
+ import { EmptyStateConfig } from '../types';
3
+ export declare class EmptyStateBuilder {
4
+ private config;
5
+ static make(): EmptyStateBuilder;
6
+ title(title: string): this;
7
+ description(description: string): this;
8
+ icon(icon: ReactNode): this;
9
+ variant(variant: EmptyStateConfig['variant']): this;
10
+ action(config: {
11
+ label: string;
12
+ onClick?: () => void;
13
+ href?: string;
14
+ icon?: ReactNode;
15
+ }): this;
16
+ static noData(config?: {
17
+ title?: string;
18
+ description?: string;
19
+ createLabel?: string;
20
+ onCreate?: () => void;
21
+ createHref?: string;
22
+ }): EmptyStateBuilder;
23
+ static noSearchResults(config?: {
24
+ title?: string;
25
+ description?: string;
26
+ onClear?: () => void;
27
+ }): EmptyStateBuilder;
28
+ static noFilterResults(config?: {
29
+ title?: string;
30
+ description?: string;
31
+ onClear?: () => void;
32
+ }): EmptyStateBuilder;
33
+ static error(config?: {
34
+ title?: string;
35
+ description?: string;
36
+ onRetry?: () => void;
37
+ }): EmptyStateBuilder;
38
+ private createInboxIcon;
39
+ private createSearchIcon;
40
+ private createFilterIcon;
41
+ private createAlertIcon;
42
+ private createPlusIcon;
43
+ build(): EmptyStateConfig;
44
+ }
@@ -0,0 +1,11 @@
1
+ import { ColumnDef } from '@tanstack/react-table';
2
+ type ColumnBuilder<TData> = {
3
+ build(): ColumnDef<TData, unknown>;
4
+ };
5
+ export declare class TableSchema<TData> {
6
+ private columnBuilders;
7
+ static make<TData>(): TableSchema<TData>;
8
+ columns(...builders: ColumnBuilder<TData>[]): this;
9
+ build(): ColumnDef<TData, unknown>[];
10
+ }
11
+ export {};
@@ -0,0 +1,76 @@
1
+ import { ReactNode } from "react";
2
+ export interface HeaderAction<TData = unknown> {
3
+ id: string;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ variant?: "default" | "secondary" | "outline" | "ghost" | "destructive";
7
+ size?: "default" | "sm" | "lg" | "icon";
8
+ onClick?: () => void;
9
+ href?: string;
10
+ disabled?: boolean;
11
+ loading?: boolean;
12
+ bulk?: boolean;
13
+ bulkOnClick?: (selectedRows: TData[]) => void;
14
+ hidden?: boolean;
15
+ children?: Omit<HeaderAction<TData>, "children" | "bulk">[];
16
+ }
17
+ export interface EmptyStateConfig {
18
+ icon?: ReactNode;
19
+ imageUrl?: string;
20
+ title: string;
21
+ description?: string;
22
+ action?: {
23
+ label: string;
24
+ onClick?: () => void;
25
+ href?: string;
26
+ icon?: ReactNode;
27
+ };
28
+ variant?: "default" | "search" | "filter" | "error" | "custom";
29
+ }
30
+ export interface FilterConfig {
31
+ id: string;
32
+ label: string;
33
+ type: "text" | "select" | "multi-select" | "date" | "date-range" | "boolean";
34
+ column: string;
35
+ placeholder?: string;
36
+ options?: Array<{
37
+ label: string;
38
+ value: string;
39
+ }>;
40
+ }
41
+ export interface SearchConfig {
42
+ enabled: boolean;
43
+ placeholder?: string;
44
+ columns?: string[];
45
+ debounce?: number;
46
+ }
47
+ export interface PaginationConfig {
48
+ enabled: boolean;
49
+ pageSize?: number;
50
+ pageSizeOptions?: number[];
51
+ showPageInfo?: boolean;
52
+ showPageSizeSelector?: boolean;
53
+ }
54
+ export interface DataTableConfig<TData> {
55
+ title?: string;
56
+ description?: string;
57
+ headerActions?: HeaderAction<TData>[];
58
+ emptyState?: EmptyStateConfig;
59
+ searchEmptyState?: EmptyStateConfig;
60
+ filterEmptyState?: EmptyStateConfig;
61
+ search?: SearchConfig;
62
+ filters?: FilterConfig[];
63
+ pagination?: PaginationConfig;
64
+ enableRowSelection?: boolean;
65
+ enableMultiRowSelection?: boolean;
66
+ enableSorting?: boolean;
67
+ defaultSort?: {
68
+ id: string;
69
+ desc: boolean;
70
+ };
71
+ enableColumnVisibility?: boolean;
72
+ density?: "compact" | "default" | "comfortable";
73
+ bordered?: boolean;
74
+ striped?: boolean;
75
+ hoverable?: boolean;
76
+ }
@@ -0,0 +1,76 @@
1
+ import { ReactNode } from "react";
2
+ export interface HeaderAction<TData = unknown> {
3
+ id: string;
4
+ label: string;
5
+ icon?: ReactNode;
6
+ variant?: "default" | "secondary" | "outline" | "ghost" | "destructive";
7
+ size?: "default" | "sm" | "lg" | "icon";
8
+ onClick?: () => void;
9
+ href?: string;
10
+ disabled?: boolean;
11
+ loading?: boolean;
12
+ bulk?: boolean;
13
+ bulkOnClick?: (selectedRows: TData[]) => void;
14
+ hidden?: boolean;
15
+ children?: Omit<HeaderAction<TData>, "children" | "bulk">[];
16
+ }
17
+ export interface EmptyStateConfig {
18
+ icon?: ReactNode;
19
+ imageUrl?: string;
20
+ title: string;
21
+ description?: string;
22
+ action?: {
23
+ label: string;
24
+ onClick?: () => void;
25
+ href?: string;
26
+ icon?: ReactNode;
27
+ };
28
+ variant?: "default" | "search" | "filter" | "error" | "custom";
29
+ }
30
+ export interface FilterConfig {
31
+ id: string;
32
+ label: string;
33
+ type: "text" | "select" | "multi-select" | "date" | "date-range" | "boolean";
34
+ column: string;
35
+ placeholder?: string;
36
+ options?: Array<{
37
+ label: string;
38
+ value: string;
39
+ }>;
40
+ }
41
+ export interface SearchConfig {
42
+ enabled: boolean;
43
+ placeholder?: string;
44
+ columns?: string[];
45
+ debounce?: number;
46
+ }
47
+ export interface PaginationConfig {
48
+ enabled: boolean;
49
+ pageSize?: number;
50
+ pageSizeOptions?: number[];
51
+ showPageInfo?: boolean;
52
+ showPageSizeSelector?: boolean;
53
+ }
54
+ export interface DataTableConfig<TData> {
55
+ title?: string;
56
+ description?: string;
57
+ headerActions?: HeaderAction<TData>[];
58
+ emptyState?: EmptyStateConfig;
59
+ searchEmptyState?: EmptyStateConfig;
60
+ filterEmptyState?: EmptyStateConfig;
61
+ search?: SearchConfig;
62
+ filters?: FilterConfig[];
63
+ pagination?: PaginationConfig;
64
+ enableRowSelection?: boolean;
65
+ enableMultiRowSelection?: boolean;
66
+ enableSorting?: boolean;
67
+ defaultSort?: {
68
+ id: string;
69
+ desc: boolean;
70
+ };
71
+ enableColumnVisibility?: boolean;
72
+ density?: "compact" | "default" | "comfortable";
73
+ bordered?: boolean;
74
+ striped?: boolean;
75
+ hoverable?: boolean;
76
+ }
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@nccirtu/tablefy",
3
+ "version": "0.1.0",
4
+ "description": "A powerful, type-safe React table package built with TanStack Table and shadcn/ui components",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "type": "module",
9
+ "scripts": {
10
+ "build": "rollup -c",
11
+ "test": "jest",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "react",
16
+ "table",
17
+ "data-table",
18
+ "shadcn-ui",
19
+ "tanstack-table",
20
+ "typescript",
21
+ "react-table",
22
+ "data-grid",
23
+ "ui-components",
24
+ "tailwind"
25
+ ],
26
+ "author": "Cirtu Cristian <your-email@example.com>",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/nccirtu/Tablefy.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/nccirtu/Tablefy/issues"
34
+ },
35
+ "homepage": "https://github.com/nccirtu/Tablefy#readme",
36
+ "files": [
37
+ "dist",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "peerDependencies": {
42
+ "react": "^18.0.0",
43
+ "react-dom": "^18.0.0",
44
+ "tailwindcss": "^3.0.0"
45
+ },
46
+ "dependencies": {
47
+ "@radix-ui/react-icons": "^1.3.0",
48
+ "@tanstack/react-table": "^8.9.0",
49
+ "class-variance-authority": "^0.7.1",
50
+ "clsx": "^2.1.1",
51
+ "lucide-react": "^0.292.0",
52
+ "radix-ui": "^1.4.3",
53
+ "tslib": "^2.5.0"
54
+ },
55
+ "devDependencies": {
56
+ "@rollup/plugin-commonjs": "^25.0.0",
57
+ "@rollup/plugin-node-resolve": "^15.0.0",
58
+ "@rollup/plugin-typescript": "^11.0.0",
59
+ "@types/jest": "^29.5.0",
60
+ "@types/react": "^18.2.0",
61
+ "jest": "^29.5.0",
62
+ "rollup": "^3.20.0",
63
+ "ts-jest": "^29.1.0",
64
+ "typescript": "^5.0.0"
65
+ },
66
+ "exports": {
67
+ ".": {
68
+ "import": "./dist/index.esm.js",
69
+ "require": "./dist/index.js",
70
+ "types": "./dist/index.d.ts"
71
+ }
72
+ }
73
+ }