@nccirtu/tablefy 0.8.2 → 0.8.4

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.
@@ -17,6 +17,13 @@ export declare class BadgeColumn<TData> extends BaseColumn<TData, BadgeColumnCon
17
17
  label: string;
18
18
  color: string;
19
19
  }>): this;
20
+ variantFn(fn: (value: unknown, row: TData) => {
21
+ label?: string;
22
+ variant?: BadgeVariant;
23
+ className?: string;
24
+ icon?: ReactNode;
25
+ }): this;
26
+ classNameFn(fn: (value: unknown, row: TData) => string): this;
20
27
  build(): ColumnDef<TData, unknown>;
21
28
  }
22
29
  export {};
@@ -17,6 +17,13 @@ export declare class BadgeColumn<TData> extends BaseColumn<TData, BadgeColumnCon
17
17
  label: string;
18
18
  color: string;
19
19
  }>): this;
20
+ variantFn(fn: (value: unknown, row: TData) => {
21
+ label?: string;
22
+ variant?: BadgeVariant;
23
+ className?: string;
24
+ icon?: ReactNode;
25
+ }): this;
26
+ classNameFn(fn: (value: unknown, row: TData) => string): this;
20
27
  build(): ColumnDef<TData, unknown>;
21
28
  }
22
29
  export {};
@@ -27,6 +27,13 @@ export interface BadgeColumnConfig<TData> extends BaseColumnConfig<TData> {
27
27
  className?: string;
28
28
  icon?: ReactNode;
29
29
  }>;
30
+ variantFn?: (value: unknown, row: TData) => {
31
+ label?: string;
32
+ variant?: "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "info" | "muted";
33
+ className?: string;
34
+ icon?: ReactNode;
35
+ };
36
+ classNameFn?: (value: unknown, row: TData) => string;
30
37
  }
31
38
  export interface ActionConfig<TData> {
32
39
  label: string;
@@ -13,6 +13,9 @@ export { InputColumn, InputColumn as inputColumn, } from "./columns/input-column
13
13
  export { LinkColumn } from "./columns/link-column";
14
14
  export { NumberColumn } from "./columns/number-column";
15
15
  export { ProgressColumn, SelectColumn } from "./columns";
16
+ export { ActionsColumn, ActionsColumn as actionsColumn, } from "./columns/actions-column";
17
+ export type { ActionItem } from "./columns/actions-column";
18
+ export { TextColumn, TextColumn as textColumn } from "./columns/text-column";
16
19
  export { EnumColumn, EnumColumn as enumColumn } from "./columns/enum-column";
17
20
  export type { EnumOption } from "./columns/enum-column";
18
21
  export { ConfirmProvider, confirm } from "./confirm";
@@ -241,8 +241,18 @@ class BadgeColumn extends BaseColumn {
241
241
  this.config.variants = variants;
242
242
  return this;
243
243
  }
244
+ // Dynamische Variante basierend auf Row-Daten
245
+ variantFn(fn) {
246
+ this.config.variantFn = fn;
247
+ return this;
248
+ }
249
+ // Dynamische className basierend auf Row-Daten
250
+ classNameFn(fn) {
251
+ this.config.classNameFn = fn;
252
+ return this;
253
+ }
244
254
  build() {
245
- const { accessor, label, sortable, variants } = this.config;
255
+ const { accessor, label, sortable, variants, variantFn, classNameFn } = this.config;
246
256
  return {
247
257
  accessorKey: accessor,
248
258
  header: ({ column }) => {
@@ -252,18 +262,31 @@ class BadgeColumn extends BaseColumn {
252
262
  }
253
263
  return (jsxs(Button, { variant: "table_header", size: "table_header", onClick: () => column.toggleSorting(column.getIsSorted() === "asc"), className: cn("text-muted-foreground font-medium", this.getAlignmentClass(), this.config.headerClassName), children: [displayLabel, jsx(ArrowUpDown, { className: "ml-2 h-4 w-4" })] }));
254
264
  },
255
- cell: ({ getValue }) => {
256
- const value = String(getValue());
257
- const variantConfig = variants?.[value];
258
- if (!variantConfig) {
259
- return (jsx(Badge, { variant: "outline", className: this.config.cellClassName, children: value }));
265
+ cell: ({ getValue, row }) => {
266
+ const value = getValue();
267
+ const stringValue = String(value);
268
+ // Priority 1: Dynamic variantFn (highest priority)
269
+ if (variantFn) {
270
+ const dynamicConfig = variantFn(value, row.original);
271
+ return (jsxs(Badge, { variant: dynamicConfig.variant === "success" ||
272
+ dynamicConfig.variant === "warning" ||
273
+ dynamicConfig.variant === "info" ||
274
+ dynamicConfig.variant === "muted"
275
+ ? "default"
276
+ : dynamicConfig.variant || "default", className: cn(dynamicConfig.className, classNameFn?.(value, row.original), this.config.cellClassName), children: [dynamicConfig.icon, dynamicConfig.label || stringValue] }));
277
+ }
278
+ // Priority 2: Static variants lookup
279
+ const variantConfig = variants?.[stringValue];
280
+ if (variantConfig) {
281
+ return (jsxs(Badge, { variant: variantConfig.variant === "success" ||
282
+ variantConfig.variant === "warning" ||
283
+ variantConfig.variant === "info" ||
284
+ variantConfig.variant === "muted"
285
+ ? "default"
286
+ : variantConfig.variant || "default", className: cn(variantConfig.className, classNameFn?.(value, row.original), this.config.cellClassName), children: [variantConfig.icon, variantConfig.label || stringValue] }));
260
287
  }
261
- return (jsxs(Badge, { variant: variantConfig.variant === "success" ||
262
- variantConfig.variant === "warning" ||
263
- variantConfig.variant === "info" ||
264
- variantConfig.variant === "muted"
265
- ? "default"
266
- : variantConfig.variant || "default", className: cn(variantConfig.className, this.config.cellClassName), children: [variantConfig.icon, variantConfig.label || value] }));
288
+ // Priority 3: Default badge with optional dynamic className
289
+ return (jsx(Badge, { variant: "outline", className: cn(classNameFn?.(value, row.original), this.config.cellClassName), children: stringValue }));
267
290
  },
268
291
  };
269
292
  }