@bsol-oss/react-datatable5 12.0.0-beta.45 → 12.0.0-beta.46

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/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { Row, RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionSta
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { ReactNode, Dispatch, SetStateAction } from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
- import { ImageProps, GridProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps, CardBodyProps, FlexProps, TextProps, BoxProps } from '@chakra-ui/react';
6
+ import { ImageProps, GridProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps, BoxProps, FlexProps, CardBodyProps, TextProps } from '@chakra-ui/react';
7
7
  import { IconType } from 'react-icons';
8
8
  import * as react_i18next from 'react-i18next';
9
9
  import { UseTranslationResponse } from 'react-i18next';
@@ -41,20 +41,11 @@ declare const PageSizeControl: ({ pageSizes, }: PageSizeControlProps) => react_j
41
41
 
42
42
  declare const Pagination: () => react_jsx_runtime.JSX.Element;
43
43
 
44
- interface ResetFilteringButtonProps {
45
- text?: string;
46
- }
47
- declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => react_jsx_runtime.JSX.Element;
44
+ declare const ResetFilteringButton: () => react_jsx_runtime.JSX.Element;
48
45
 
49
- interface ResetSelectionButtonProps {
50
- text?: string;
51
- }
52
- declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => react_jsx_runtime.JSX.Element;
46
+ declare const ResetSelectionButton: () => react_jsx_runtime.JSX.Element;
53
47
 
54
- interface ResetSortingButtonProps {
55
- text?: string;
56
- }
57
- declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => react_jsx_runtime.JSX.Element;
48
+ declare const ResetSortingButton: () => react_jsx_runtime.JSX.Element;
58
49
 
59
50
  declare const RowCountText: () => react_jsx_runtime.JSX.Element;
60
51
 
@@ -172,6 +163,20 @@ interface DataTableContext<TData = unknown> extends DataTableProps {
172
163
  setGlobalFilter: OnChangeFn<string>;
173
164
  type: "client" | "server";
174
165
  translate: UseTranslationResponse<any, unknown>;
166
+ tableLabel: {
167
+ view: string;
168
+ edit: string;
169
+ filterButtonText: string;
170
+ filterTitle: string;
171
+ filterReset: string;
172
+ filterClose: string;
173
+ reloadTooltip: string;
174
+ reloadButtonText: string;
175
+ resetSelection: string;
176
+ resetSorting: string;
177
+ rowCountText: string;
178
+ hasErrorText: string;
179
+ };
175
180
  }
176
181
  declare const DataTableContext: React$1.Context<DataTableContext<unknown>>;
177
182
 
@@ -304,7 +309,10 @@ interface TableControlsProps {
304
309
  showPageSizeControl?: boolean;
305
310
  showPageCountText?: boolean;
306
311
  showView?: boolean;
307
- filterOptions?: string[];
312
+ filterOptions?: {
313
+ label: string;
314
+ value: string;
315
+ }[];
308
316
  extraItems?: ReactNode;
309
317
  loading?: boolean;
310
318
  hasError?: boolean;
@@ -338,9 +346,8 @@ interface TableRowSelectorProps<TData> {
338
346
  light: string;
339
347
  dark: string;
340
348
  };
341
- alwaysShowSelector?: boolean;
342
349
  }
343
- declare const TableBody: ({ showSelector, alwaysShowSelector, canResize, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
350
+ declare const TableBody: ({ showSelector, canResize, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
344
351
 
345
352
  interface TableFooterProps {
346
353
  showSelector?: boolean;
@@ -348,14 +355,56 @@ interface TableFooterProps {
348
355
  }
349
356
  declare const TableFooter: ({ showSelector, alwaysShowSelector, }: TableFooterProps) => react_jsx_runtime.JSX.Element;
350
357
 
358
+ interface TableHeaderTexts {
359
+ pinColumn?: string;
360
+ cancelPin?: string;
361
+ sortAscending?: string;
362
+ sortDescending?: string;
363
+ clearSorting?: string;
364
+ }
351
365
  interface TableHeaderProps {
352
366
  canResize?: boolean;
353
367
  showSelector?: boolean;
354
368
  isSticky?: boolean;
355
369
  tableHeaderProps?: TableHeaderProps$1;
356
370
  tableRowProps?: TableRowProps;
371
+ /**
372
+ * Default text configuration for all columns.
373
+ * Can be overridden per column via meta.headerTexts.
374
+ */
375
+ defaultTexts?: TableHeaderTexts;
357
376
  }
358
- declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
377
+ /**
378
+ * TableHeader component with configurable text strings.
379
+ *
380
+ * @example
381
+ * // Using default texts
382
+ * <TableHeader />
383
+ *
384
+ * @example
385
+ * // Customizing default texts for all columns
386
+ * <TableHeader
387
+ * defaultTexts={{
388
+ * pinColumn: "Pin This Column",
389
+ * sortAscending: "Sort A-Z"
390
+ * }}
391
+ * />
392
+ *
393
+ * @example
394
+ * // Customizing texts per column via meta
395
+ * const columns = [
396
+ * columnHelper.accessor("name", {
397
+ * header: "Name",
398
+ * meta: {
399
+ * headerTexts: {
400
+ * pinColumn: "Pin Name Column",
401
+ * sortAscending: "Sort Names A-Z"
402
+ * }
403
+ * }
404
+ * })
405
+ * ];
406
+ */
407
+ declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, defaultTexts, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
359
408
 
360
409
  interface DefaultTableProps {
361
410
  showFooter?: boolean;
@@ -369,16 +418,18 @@ interface DefaultTableProps {
369
418
  declare const DefaultTable: ({ showFooter, tableProps, tableHeaderProps, tableBodyProps, tableFooterProps, controlProps, variant, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
370
419
 
371
420
  interface ReloadButtonProps {
372
- text?: string;
373
421
  variant?: string;
374
422
  }
375
- declare const ReloadButton: ({ text, variant, }: ReloadButtonProps) => react_jsx_runtime.JSX.Element;
423
+ declare const ReloadButton: ({ variant, }: ReloadButtonProps) => react_jsx_runtime.JSX.Element;
376
424
 
377
- interface TableCardContainerProps extends GridProps {
425
+ interface TableCardContainerProps extends BoxProps {
378
426
  children: ReactNode;
379
427
  variant?: "carousel" | "";
428
+ gap?: string;
429
+ gridTemplateColumns?: string;
430
+ direction?: FlexProps["direction"];
380
431
  }
381
- declare const TableCardContainer: ({ children, variant, ...props }: TableCardContainerProps) => react_jsx_runtime.JSX.Element;
432
+ declare const TableCardContainer: ({ children, variant, gap, gridTemplateColumns, direction, ...props }: TableCardContainerProps) => react_jsx_runtime.JSX.Element;
382
433
 
383
434
  interface TableCardsProps<TData> {
384
435
  isSelectable?: boolean;
@@ -595,6 +646,17 @@ declare module "@tanstack/react-table" {
595
646
  * The display name of the column, used for rendering headers.
596
647
  */
597
648
  displayName?: string;
649
+ /**
650
+ * Text configuration for the column header menu items.
651
+ * These strings can be customized per column.
652
+ */
653
+ headerTexts?: {
654
+ pinColumn?: string;
655
+ cancelPin?: string;
656
+ sortAscending?: string;
657
+ sortDescending?: string;
658
+ clearSorting?: string;
659
+ };
598
660
  /**
599
661
  * Specifies the type of filter to be used for the column.
600
662
  *
@@ -615,7 +677,10 @@ declare module "@tanstack/react-table" {
615
677
  /**
616
678
  * Options for the select filter variant, if applicable.
617
679
  */
618
- filterOptions?: string[];
680
+ filterOptions?: {
681
+ label: string;
682
+ value: string;
683
+ }[];
619
684
  /**
620
685
  * Configuration for the range filter variant, if applicable.
621
686
  *
@@ -641,4 +706,4 @@ declare module "@tanstack/react-table" {
641
706
  }
642
707
  }
643
708
 
644
- export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultForm, type DefaultFormProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, type EditFilterButtonProps, EditSortingButton, type EditSortingButtonProps, type EditViewButtonProps, EmptyState, type EmptyStateProps, ErrorAlert, type ErrorAlertProps, FilterDialog, FilterOptions, type FilterOptionsProps, FormBody, FormRoot, type FormRootProps, FormTitle, type GetColumnsConfigs, type GetDateColorProps, type GetMultiDatesProps, type GetRangeDatesProps, type GetStyleProps, type GetVariantProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, Pagination, type RangeCalendarProps, type RangeDatePickerProps, RecordDisplay, type RecordDisplayProps, ReloadButton, type ReloadButtonProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableControls, type TableControlsProps, TableDataDisplay, type TableDataDisplayProps, TableFilter, TableFilterTags, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableLoadingComponent, type TableLoadingComponentProps, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, type UseDataTableProps, type UseDataTableReturn, type UseDataTableServerProps, type UseDataTableServerReturn, type UseFormProps, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
709
+ export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultForm, type DefaultFormProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, type EditFilterButtonProps, EditSortingButton, type EditSortingButtonProps, type EditViewButtonProps, EmptyState, type EmptyStateProps, ErrorAlert, type ErrorAlertProps, FilterDialog, FilterOptions, type FilterOptionsProps, FormBody, FormRoot, type FormRootProps, FormTitle, type GetColumnsConfigs, type GetDateColorProps, type GetMultiDatesProps, type GetRangeDatesProps, type GetStyleProps, type GetVariantProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, Pagination, type RangeCalendarProps, type RangeDatePickerProps, RecordDisplay, type RecordDisplayProps, ReloadButton, type ReloadButtonProps, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableControls, type TableControlsProps, TableDataDisplay, type TableDataDisplayProps, TableFilter, TableFilterTags, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, type TableHeaderTexts, TableLoadingComponent, type TableLoadingComponentProps, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, type UseDataTableProps, type UseDataTableReturn, type UseDataTableServerProps, type UseDataTableServerReturn, type UseFormProps, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
package/dist/index.js CHANGED
@@ -91,6 +91,10 @@ const DataTableContext = React.createContext({
91
91
  },
92
92
  rowSelection: {},
93
93
  columnVisibility: {},
94
+ tableLabel: {
95
+ view: "View",
96
+ edit: "Edit",
97
+ },
94
98
  });
95
99
 
96
100
  const useDataTableContext = () => {
@@ -146,11 +150,13 @@ const TableSorter = () => {
146
150
  }) }))) }));
147
151
  };
148
152
 
149
- const ResetSortingButton = ({ text = "Reset Sorting", }) => {
153
+ const ResetSortingButton = () => {
150
154
  const { table } = useDataTableContext();
155
+ const { tableLabel } = useDataTableContext();
156
+ const { resetSorting } = tableLabel;
151
157
  return (jsxRuntime.jsx(react.Button, { onClick: () => {
152
158
  table.resetSorting();
153
- }, children: text }));
159
+ }, children: resetSorting }));
154
160
  };
155
161
 
156
162
  const EditSortingButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineSort, {}), title = "Edit Sorting", }) => {
@@ -361,10 +367,11 @@ const Filter = ({ column }) => {
361
367
  if (filterVariant === "select") {
362
368
  return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(RadioGroup, { value: column.getFilterValue() ? String(column.getFilterValue()) : "", onValueChange: (details) => {
363
369
  column.setFilterValue(details.value);
364
- }, children: jsxRuntime.jsx(react.Flex, { flexFlow: "wrap", gap: "0.5rem", children: filterOptions.map((item) => (jsxRuntime.jsx(Radio, { value: item, children: item }, item))) }) })] }, column.id));
370
+ }, children: jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: "0.5rem", children: [filterOptions.length === 0 && jsxRuntime.jsx(react.Text, { children: "No filter options" }), filterOptions.length > 0 &&
371
+ filterOptions.map((item) => (jsxRuntime.jsx(Radio, { value: item.value, children: item.label }, item.value)))] }) })] }, column.id));
365
372
  }
366
373
  if (filterVariant === "tag") {
367
- return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(TagFilter, { availableTags: filterOptions, selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
374
+ return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(TagFilter, { availableTags: filterOptions.map((item) => item.value), selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
368
375
  if (tags.length === 0) {
369
376
  return column.setFilterValue(undefined);
370
377
  }
@@ -427,17 +434,20 @@ const TableFilter = () => {
427
434
  }) }));
428
435
  };
429
436
 
430
- const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
437
+ const ResetFilteringButton = () => {
431
438
  const { table } = useDataTableContext();
439
+ const { tableLabel } = useDataTableContext();
440
+ const { filterReset } = tableLabel;
432
441
  return (jsxRuntime.jsx(react.Button, { onClick: () => {
433
442
  table.resetColumnFilters();
434
- }, children: text }));
443
+ }, children: filterReset }));
435
444
  };
436
445
 
437
446
  const FilterDialog = ({ icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
438
447
  const filterModal = react.useDisclosure();
439
- const { translate } = useDataTableContext();
440
- return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filter_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("filter_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, { text: translate.t("filter_dialog.reset") }), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filter_dialog.close") })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
448
+ const { tableLabel } = useDataTableContext();
449
+ const { filterButtonText, filterTitle, filterClose } = tableLabel;
450
+ return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", filterButtonText] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: filterTitle }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, {}), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: filterClose })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
441
451
  };
442
452
 
443
453
  const MenuContent = React__namespace.forwardRef(function MenuContent(props, ref) {
@@ -556,11 +566,13 @@ const Pagination = () => {
556
566
  }, children: jsxRuntime.jsxs(react.HStack, { children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), jsxRuntime.jsx(PaginationItems, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) }));
557
567
  };
558
568
 
559
- const ResetSelectionButton = ({ text = "Reset Selection", }) => {
569
+ const ResetSelectionButton = () => {
560
570
  const { table } = useDataTableContext();
571
+ const { tableLabel } = useDataTableContext();
572
+ const { resetSelection } = tableLabel;
561
573
  return (jsxRuntime.jsx(react.Button, { onClick: () => {
562
574
  table.resetRowSelection();
563
- }, children: text }));
575
+ }, children: resetSelection }));
564
576
  };
565
577
 
566
578
  const RowCountText = () => {
@@ -2571,8 +2583,9 @@ const TableViewer = () => {
2571
2583
 
2572
2584
  const ViewDialog = ({ icon = jsxRuntime.jsx(io.IoMdEye, {}) }) => {
2573
2585
  const viewModel = react.useDisclosure();
2574
- const { translate } = useDataTableContext();
2575
- return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("view_dialog.button_text")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("view_dialog.title") }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
2586
+ const { tableLabel } = useDataTableContext();
2587
+ const { view } = tableLabel;
2588
+ return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", view] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: view }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
2576
2589
  };
2577
2590
 
2578
2591
  const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
@@ -2848,7 +2861,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2848
2861
  setGlobalFilter,
2849
2862
  type: "client",
2850
2863
  translate,
2851
- columns,
2864
+ columns: columns,
2852
2865
  sorting,
2853
2866
  setSorting,
2854
2867
  columnFilters,
@@ -2864,6 +2877,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2864
2877
  columnVisibility,
2865
2878
  setColumnVisibility,
2866
2879
  data,
2880
+ tableLabel: {
2881
+ view: "View",
2882
+ edit: "Edit",
2883
+ },
2867
2884
  }, children: children }));
2868
2885
  }
2869
2886
 
@@ -2881,7 +2898,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2881
2898
  function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }) {
2882
2899
  const table = reactTable.useReactTable({
2883
2900
  _features: [DensityFeature],
2884
- data: query.data?.data ?? [],
2901
+ data: (query.data?.data ?? []),
2885
2902
  rowCount: query.data?.count ?? 0,
2886
2903
  columns: columns,
2887
2904
  getCoreRowModel: reactTable.getCoreRowModel(),
@@ -2927,12 +2944,12 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
2927
2944
  // for tanstack-table ts bug end
2928
2945
  });
2929
2946
  return (jsxRuntime.jsx(DataTableContext.Provider, { value: {
2930
- table: { ...table },
2947
+ table: table,
2931
2948
  globalFilter,
2932
2949
  setGlobalFilter,
2933
2950
  type: "server",
2934
2951
  translate,
2935
- columns,
2952
+ columns: columns,
2936
2953
  sorting,
2937
2954
  setSorting,
2938
2955
  columnFilters,
@@ -2985,17 +3002,19 @@ const GlobalFilter = () => {
2985
3002
  } }) }) }));
2986
3003
  };
2987
3004
 
2988
- const ReloadButton = ({ text = "Reload", variant = "icon", }) => {
3005
+ const ReloadButton = ({ variant = "icon", }) => {
2989
3006
  const { url } = useDataTableServerContext();
2990
3007
  const queryClient = reactQuery.useQueryClient();
3008
+ const { tableLabel } = useDataTableContext();
3009
+ const { reloadTooltip, reloadButtonText } = tableLabel;
2991
3010
  if (variant === "icon") {
2992
- return (jsxRuntime.jsx(Tooltip, { showArrow: true, content: "This is the tooltip content", children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: () => {
3011
+ return (jsxRuntime.jsx(Tooltip, { showArrow: true, content: reloadTooltip, children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: () => {
2993
3012
  queryClient.invalidateQueries({ queryKey: [url] });
2994
3013
  }, "aria-label": "refresh", children: jsxRuntime.jsx(io5.IoReload, {}) }) }));
2995
3014
  }
2996
3015
  return (jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
2997
3016
  queryClient.invalidateQueries({ queryKey: [url] });
2998
- }, children: [jsxRuntime.jsx(io5.IoReload, {}), " ", text] }));
3017
+ }, children: [jsxRuntime.jsx(io5.IoReload, {}), " ", reloadButtonText] }));
2999
3018
  };
3000
3019
 
3001
3020
  const FilterOptions = ({ column }) => {
@@ -3004,6 +3023,7 @@ const FilterOptions = ({ column }) => {
3004
3023
  const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
3005
3024
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: options.map((option) => {
3006
3025
  const selected = table.getColumn(column)?.getFilterValue() === option;
3026
+ const { label, value } = option;
3007
3027
  return (jsxRuntime.jsxs(react.Button, { size: "sm", onClick: () => {
3008
3028
  if (selected) {
3009
3029
  table.setColumnFilters((state) => {
@@ -3013,8 +3033,8 @@ const FilterOptions = ({ column }) => {
3013
3033
  });
3014
3034
  return;
3015
3035
  }
3016
- table.getColumn(column)?.setFilterValue(option);
3017
- }, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [option, selected && jsxRuntime.jsx(md.MdClose, {})] }, option));
3036
+ table.getColumn(column)?.setFilterValue(value);
3037
+ }, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsxRuntime.jsx(md.MdClose, {})] }, option.value));
3018
3038
  }) }));
3019
3039
  };
3020
3040
 
@@ -3030,10 +3050,12 @@ const TableFilterTags = () => {
3030
3050
  };
3031
3051
 
3032
3052
  const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
3033
- const { translate } = useDataTableContext();
3034
- return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("has_error"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
3035
- return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(FilterOptions, { column: column })] }, column));
3036
- }) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
3053
+ const { tableLabel } = useDataTableContext();
3054
+ const { rowCountText, hasErrorText } = tableLabel;
3055
+ return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: hasErrorText, children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((option) => {
3056
+ const { label, value } = option;
3057
+ return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [label, ":"] }), jsxRuntime.jsx(FilterOptions, { column: value })] }, value));
3058
+ }) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: rowCountText }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
3037
3059
  };
3038
3060
 
3039
3061
  const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
@@ -3055,7 +3077,7 @@ const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
3055
3077
  return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
3056
3078
  });
3057
3079
 
3058
- const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
3080
+ const TableBody = ({ showSelector = false, canResize = true, }) => {
3059
3081
  "use no memo";
3060
3082
  const { table } = useDataTableContext();
3061
3083
  const SELECTION_BOX_WIDTH = 20;
@@ -3099,7 +3121,7 @@ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize
3099
3121
  })] }, `chakra-table-row-${row.id}`));
3100
3122
  }) }));
3101
3123
  };
3102
- const TableRowSelector = ({ index, row, }) => {
3124
+ const TableRowSelector = ({ row, }) => {
3103
3125
  const { table } = useDataTableContext();
3104
3126
  const SELECTION_BOX_WIDTH = 20;
3105
3127
  return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
@@ -3136,14 +3158,57 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
3136
3158
  // styling resize and pinning start
3137
3159
  maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3138
3160
  ? null
3139
- : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
3140
- // <UpDownIcon />
3141
- jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3161
+ : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3142
3162
  };
3143
3163
 
3144
- const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
3164
+ // Default text values
3165
+ const DEFAULT_HEADER_TEXTS = {
3166
+ pinColumn: "Pin Column",
3167
+ cancelPin: "Cancel Pin",
3168
+ sortAscending: "Sort Ascending",
3169
+ sortDescending: "Sort Descending",
3170
+ clearSorting: "Clear Sorting",
3171
+ };
3172
+ /**
3173
+ * TableHeader component with configurable text strings.
3174
+ *
3175
+ * @example
3176
+ * // Using default texts
3177
+ * <TableHeader />
3178
+ *
3179
+ * @example
3180
+ * // Customizing default texts for all columns
3181
+ * <TableHeader
3182
+ * defaultTexts={{
3183
+ * pinColumn: "Pin This Column",
3184
+ * sortAscending: "Sort A-Z"
3185
+ * }}
3186
+ * />
3187
+ *
3188
+ * @example
3189
+ * // Customizing texts per column via meta
3190
+ * const columns = [
3191
+ * columnHelper.accessor("name", {
3192
+ * header: "Name",
3193
+ * meta: {
3194
+ * headerTexts: {
3195
+ * pinColumn: "Pin Name Column",
3196
+ * sortAscending: "Sort Names A-Z"
3197
+ * }
3198
+ * }
3199
+ * })
3200
+ * ];
3201
+ */
3202
+ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
3145
3203
  const { table } = useDataTableContext();
3146
3204
  const SELECTION_BOX_WIDTH = 20;
3205
+ // Merge default texts with provided defaults
3206
+ const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
3207
+ // Helper function to get text for a specific header
3208
+ const getHeaderText = (header, key) => {
3209
+ const columnMeta = header.column.columnDef.meta;
3210
+ return columnMeta?.headerTexts?.[key] || mergedDefaultTexts[key];
3211
+ };
3147
3212
  const getThProps = (header) => {
3148
3213
  const thProps = header.column.getIsPinned()
3149
3214
  ? {
@@ -3197,9 +3262,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3197
3262
  ? null
3198
3263
  : reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) }), jsxRuntime.jsx(react.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }) }), jsxRuntime.jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3199
3264
  header.column.pin("left");
3200
- }, children: [jsxRuntime.jsx(md.MdPushPin, {}), "Pin Column"] }) })), header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3265
+ }, children: [jsxRuntime.jsx(md.MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3201
3266
  header.column.pin(false);
3202
- }, children: [jsxRuntime.jsx(md.MdCancel, {}), "Cancel Pin"] }) })), header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3267
+ }, children: [jsxRuntime.jsx(md.MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3203
3268
  table.setSorting((state) => {
3204
3269
  return [
3205
3270
  ...state.filter((column) => {
@@ -3208,7 +3273,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3208
3273
  { id: header.id, desc: false },
3209
3274
  ];
3210
3275
  });
3211
- }, children: [jsxRuntime.jsx(gr.GrAscend, {}), "Sort Ascending"] }) }), jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3276
+ }, children: [jsxRuntime.jsx(gr.GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3212
3277
  table.setSorting((state) => {
3213
3278
  return [
3214
3279
  ...state.filter((column) => {
@@ -3217,9 +3282,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3217
3282
  { id: header.id, desc: true },
3218
3283
  ];
3219
3284
  });
3220
- }, children: [jsxRuntime.jsx(gr.GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3285
+ }, children: [jsxRuntime.jsx(gr.GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3221
3286
  header.column.clearSorting();
3222
- }, children: [jsxRuntime.jsx(md.MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3287
+ }, children: [jsxRuntime.jsx(md.MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3223
3288
  ? "colorPalette.700"
3224
3289
  : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3225
3290
  borderRightColor: header.column.getIsResizing()
@@ -3236,11 +3301,11 @@ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps =
3236
3301
  return (jsxRuntime.jsx(TableControls, { ...controlProps, children: jsxRuntime.jsxs(Table, { ...tableProps, children: [jsxRuntime.jsx(TableHeader, { ...tableHeaderProps }), jsxRuntime.jsx(TableBody, { ...tableBodyProps }), showFooter && jsxRuntime.jsx(TableFooter, { ...tableFooterProps })] }) }));
3237
3302
  };
3238
3303
 
3239
- const TableCardContainer = ({ children, variant = "", ...props }) => {
3304
+ const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
3240
3305
  if (variant === "carousel") {
3241
- return (jsxRuntime.jsx(react.Flex, { overflow: "scroll", gap: "1rem", children: children }));
3306
+ return (jsxRuntime.jsx(react.Flex, { overflow: "auto", gap: gap, direction: direction, ...props, children: children }));
3242
3307
  }
3243
- return (jsxRuntime.jsx(react.Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(20rem, 1fr))", gap: "0.5rem", ...props, children: children }));
3308
+ return (jsxRuntime.jsx(react.Grid, { gridTemplateColumns: gridTemplateColumns, gap: gap, ...props, children: children }));
3244
3309
  };
3245
3310
 
3246
3311
  const DefaultCardTitle = () => {
@@ -3269,8 +3334,8 @@ const TableComponent = ({ render = () => {
3269
3334
  };
3270
3335
 
3271
3336
  const TableLoadingComponent = ({ render, }) => {
3272
- const { loading } = useDataTableContext();
3273
- return jsxRuntime.jsx(jsxRuntime.Fragment, { children: render(loading) });
3337
+ const { query } = useDataTableServerContext();
3338
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: render(query.isLoading) });
3274
3339
  };
3275
3340
 
3276
3341
  const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText = "", clearAllText = "", }) => {
@@ -3490,10 +3555,7 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
3490
3555
  };
3491
3556
 
3492
3557
  const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
3493
- const { table, columns, translate, data } = useDataTableContext();
3494
- const columnDef = table._getColumnDefs();
3495
- console.log(columnDef, "glp");
3496
- console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
3558
+ const { columns, translate, data } = useDataTableContext();
3497
3559
  const columnsMap = Object.fromEntries(columns.map((def) => {
3498
3560
  const { accessorKey, id } = def;
3499
3561
  if (accessorKey) {
package/dist/index.mjs CHANGED
@@ -71,6 +71,10 @@ const DataTableContext = createContext({
71
71
  },
72
72
  rowSelection: {},
73
73
  columnVisibility: {},
74
+ tableLabel: {
75
+ view: "View",
76
+ edit: "Edit",
77
+ },
74
78
  });
75
79
 
76
80
  const useDataTableContext = () => {
@@ -126,11 +130,13 @@ const TableSorter = () => {
126
130
  }) }))) }));
127
131
  };
128
132
 
129
- const ResetSortingButton = ({ text = "Reset Sorting", }) => {
133
+ const ResetSortingButton = () => {
130
134
  const { table } = useDataTableContext();
135
+ const { tableLabel } = useDataTableContext();
136
+ const { resetSorting } = tableLabel;
131
137
  return (jsx(Button$1, { onClick: () => {
132
138
  table.resetSorting();
133
- }, children: text }));
139
+ }, children: resetSorting }));
134
140
  };
135
141
 
136
142
  const EditSortingButton = ({ text, icon = jsx(MdOutlineSort, {}), title = "Edit Sorting", }) => {
@@ -341,10 +347,11 @@ const Filter = ({ column }) => {
341
347
  if (filterVariant === "select") {
342
348
  return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(RadioGroup, { value: column.getFilterValue() ? String(column.getFilterValue()) : "", onValueChange: (details) => {
343
349
  column.setFilterValue(details.value);
344
- }, children: jsx(Flex, { flexFlow: "wrap", gap: "0.5rem", children: filterOptions.map((item) => (jsx(Radio, { value: item, children: item }, item))) }) })] }, column.id));
350
+ }, children: jsxs(Flex, { flexFlow: "wrap", gap: "0.5rem", children: [filterOptions.length === 0 && jsx(Text, { children: "No filter options" }), filterOptions.length > 0 &&
351
+ filterOptions.map((item) => (jsx(Radio, { value: item.value, children: item.label }, item.value)))] }) })] }, column.id));
345
352
  }
346
353
  if (filterVariant === "tag") {
347
- return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(TagFilter, { availableTags: filterOptions, selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
354
+ return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(TagFilter, { availableTags: filterOptions.map((item) => item.value), selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
348
355
  if (tags.length === 0) {
349
356
  return column.setFilterValue(undefined);
350
357
  }
@@ -407,17 +414,20 @@ const TableFilter = () => {
407
414
  }) }));
408
415
  };
409
416
 
410
- const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
417
+ const ResetFilteringButton = () => {
411
418
  const { table } = useDataTableContext();
419
+ const { tableLabel } = useDataTableContext();
420
+ const { filterReset } = tableLabel;
412
421
  return (jsx(Button$1, { onClick: () => {
413
422
  table.resetColumnFilters();
414
- }, children: text }));
423
+ }, children: filterReset }));
415
424
  };
416
425
 
417
426
  const FilterDialog = ({ icon = jsx(MdFilterAlt, {}), }) => {
418
427
  const filterModal = useDisclosure();
419
- const { translate } = useDataTableContext();
420
- return (jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filter_dialog.button_text")] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("filter_dialog.title") }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, { text: translate.t("filter_dialog.reset") }), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filter_dialog.close") })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
428
+ const { tableLabel } = useDataTableContext();
429
+ const { filterButtonText, filterTitle, filterClose } = tableLabel;
430
+ return (jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", filterButtonText] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: filterTitle }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, {}), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: filterClose })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
421
431
  };
422
432
 
423
433
  const MenuContent = React.forwardRef(function MenuContent(props, ref) {
@@ -536,11 +546,13 @@ const Pagination = () => {
536
546
  }, children: jsxs(HStack, { children: [jsx(PaginationPrevTrigger, {}), jsx(PaginationItems, {}), jsx(PaginationNextTrigger, {})] }) }));
537
547
  };
538
548
 
539
- const ResetSelectionButton = ({ text = "Reset Selection", }) => {
549
+ const ResetSelectionButton = () => {
540
550
  const { table } = useDataTableContext();
551
+ const { tableLabel } = useDataTableContext();
552
+ const { resetSelection } = tableLabel;
541
553
  return (jsx(Button$1, { onClick: () => {
542
554
  table.resetRowSelection();
543
- }, children: text }));
555
+ }, children: resetSelection }));
544
556
  };
545
557
 
546
558
  const RowCountText = () => {
@@ -2551,8 +2563,9 @@ const TableViewer = () => {
2551
2563
 
2552
2564
  const ViewDialog = ({ icon = jsx(IoMdEye, {}) }) => {
2553
2565
  const viewModel = useDisclosure();
2554
- const { translate } = useDataTableContext();
2555
- return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("view_dialog.button_text")] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("view_dialog.title") }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
2566
+ const { tableLabel } = useDataTableContext();
2567
+ const { view } = tableLabel;
2568
+ return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", view] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: view }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
2556
2569
  };
2557
2570
 
2558
2571
  const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
@@ -2828,7 +2841,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2828
2841
  setGlobalFilter,
2829
2842
  type: "client",
2830
2843
  translate,
2831
- columns,
2844
+ columns: columns,
2832
2845
  sorting,
2833
2846
  setSorting,
2834
2847
  columnFilters,
@@ -2844,6 +2857,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2844
2857
  columnVisibility,
2845
2858
  setColumnVisibility,
2846
2859
  data,
2860
+ tableLabel: {
2861
+ view: "View",
2862
+ edit: "Edit",
2863
+ },
2847
2864
  }, children: children }));
2848
2865
  }
2849
2866
 
@@ -2861,7 +2878,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
2861
2878
  function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }) {
2862
2879
  const table = useReactTable({
2863
2880
  _features: [DensityFeature],
2864
- data: query.data?.data ?? [],
2881
+ data: (query.data?.data ?? []),
2865
2882
  rowCount: query.data?.count ?? 0,
2866
2883
  columns: columns,
2867
2884
  getCoreRowModel: getCoreRowModel(),
@@ -2907,12 +2924,12 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
2907
2924
  // for tanstack-table ts bug end
2908
2925
  });
2909
2926
  return (jsx(DataTableContext.Provider, { value: {
2910
- table: { ...table },
2927
+ table: table,
2911
2928
  globalFilter,
2912
2929
  setGlobalFilter,
2913
2930
  type: "server",
2914
2931
  translate,
2915
- columns,
2932
+ columns: columns,
2916
2933
  sorting,
2917
2934
  setSorting,
2918
2935
  columnFilters,
@@ -2965,17 +2982,19 @@ const GlobalFilter = () => {
2965
2982
  } }) }) }));
2966
2983
  };
2967
2984
 
2968
- const ReloadButton = ({ text = "Reload", variant = "icon", }) => {
2985
+ const ReloadButton = ({ variant = "icon", }) => {
2969
2986
  const { url } = useDataTableServerContext();
2970
2987
  const queryClient = useQueryClient();
2988
+ const { tableLabel } = useDataTableContext();
2989
+ const { reloadTooltip, reloadButtonText } = tableLabel;
2971
2990
  if (variant === "icon") {
2972
- return (jsx(Tooltip, { showArrow: true, content: "This is the tooltip content", children: jsx(Button, { variant: "ghost", onClick: () => {
2991
+ return (jsx(Tooltip, { showArrow: true, content: reloadTooltip, children: jsx(Button, { variant: "ghost", onClick: () => {
2973
2992
  queryClient.invalidateQueries({ queryKey: [url] });
2974
2993
  }, "aria-label": "refresh", children: jsx(IoReload, {}) }) }));
2975
2994
  }
2976
2995
  return (jsxs(Button, { variant: "ghost", onClick: () => {
2977
2996
  queryClient.invalidateQueries({ queryKey: [url] });
2978
- }, children: [jsx(IoReload, {}), " ", text] }));
2997
+ }, children: [jsx(IoReload, {}), " ", reloadButtonText] }));
2979
2998
  };
2980
2999
 
2981
3000
  const FilterOptions = ({ column }) => {
@@ -2984,6 +3003,7 @@ const FilterOptions = ({ column }) => {
2984
3003
  const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
2985
3004
  return (jsx(Fragment, { children: options.map((option) => {
2986
3005
  const selected = table.getColumn(column)?.getFilterValue() === option;
3006
+ const { label, value } = option;
2987
3007
  return (jsxs(Button$1, { size: "sm", onClick: () => {
2988
3008
  if (selected) {
2989
3009
  table.setColumnFilters((state) => {
@@ -2993,8 +3013,8 @@ const FilterOptions = ({ column }) => {
2993
3013
  });
2994
3014
  return;
2995
3015
  }
2996
- table.getColumn(column)?.setFilterValue(option);
2997
- }, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [option, selected && jsx(MdClose, {})] }, option));
3016
+ table.getColumn(column)?.setFilterValue(value);
3017
+ }, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsx(MdClose, {})] }, option.value));
2998
3018
  }) }));
2999
3019
  };
3000
3020
 
@@ -3010,10 +3030,12 @@ const TableFilterTags = () => {
3010
3030
  };
3011
3031
 
3012
3032
  const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsx(Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsx(Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
3013
- const { translate } = useDataTableContext();
3014
- return (jsxs(Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxs(Flex, { flexFlow: "column", gap: 2, children: [jsxs(Flex, { justifyContent: "space-between", children: [jsx(Box, { children: showView && jsx(ViewDialog, { icon: jsx(MdOutlineViewColumn, {}) }) }), jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsx(Spinner, { size: "sm" }), hasError && (jsx(Tooltip, { content: translate.t("has_error"), children: jsx(Icon, { as: BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsx(GlobalFilter, {}), showFilter && jsx(FilterDialog, {}), showReload && jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsx(Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
3015
- return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(FilterOptions, { column: column })] }, column));
3016
- }) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxs(Flex, { justifyContent: "space-between", children: [jsxs(Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsx(PageSizeControl, {}), showPageCountText && (jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsx(RowCountText, {})] }))] }), jsx(Box, { justifySelf: "end", children: showPagination && jsx(Pagination, {}) })] }))] }));
3033
+ const { tableLabel } = useDataTableContext();
3034
+ const { rowCountText, hasErrorText } = tableLabel;
3035
+ return (jsxs(Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, children: [jsxs(Flex, { flexFlow: "column", gap: 2, children: [jsxs(Flex, { justifyContent: "space-between", children: [jsx(Box, { children: showView && jsx(ViewDialog, { icon: jsx(MdOutlineViewColumn, {}) }) }), jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsx(Spinner, { size: "sm" }), hasError && (jsx(Tooltip, { content: hasErrorText, children: jsx(Icon, { as: BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsx(GlobalFilter, {}), showFilter && jsx(FilterDialog, {}), showReload && jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsx(Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((option) => {
3036
+ const { label, value } = option;
3037
+ return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [label, ":"] }), jsx(FilterOptions, { column: value })] }, value));
3038
+ }) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (jsxs(Flex, { justifyContent: "space-between", children: [jsxs(Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsx(PageSizeControl, {}), showPageCountText && (jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: rowCountText }), jsx(RowCountText, {})] }))] }), jsx(Box, { justifySelf: "end", children: showPagination && jsx(Pagination, {}) })] }))] }));
3017
3039
  };
3018
3040
 
3019
3041
  const EmptyState = React.forwardRef(function EmptyState(props, ref) {
@@ -3035,7 +3057,7 @@ const Checkbox = React.forwardRef(function Checkbox(props, ref) {
3035
3057
  return (jsxs(Checkbox$1.Root, { ref: rootRef, ...rest, children: [jsx(Checkbox$1.HiddenInput, { ref: ref, ...inputProps }), jsx(Checkbox$1.Control, { children: icon || jsx(Checkbox$1.Indicator, {}) }), children != null && (jsx(Checkbox$1.Label, { children: children }))] }));
3036
3058
  });
3037
3059
 
3038
- const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize = true, }) => {
3060
+ const TableBody = ({ showSelector = false, canResize = true, }) => {
3039
3061
  "use no memo";
3040
3062
  const { table } = useDataTableContext();
3041
3063
  const SELECTION_BOX_WIDTH = 20;
@@ -3079,7 +3101,7 @@ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize
3079
3101
  })] }, `chakra-table-row-${row.id}`));
3080
3102
  }) }));
3081
3103
  };
3082
- const TableRowSelector = ({ index, row, }) => {
3104
+ const TableRowSelector = ({ row, }) => {
3083
3105
  const { table } = useDataTableContext();
3084
3106
  const SELECTION_BOX_WIDTH = 20;
3085
3107
  return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
@@ -3116,14 +3138,57 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
3116
3138
  // styling resize and pinning start
3117
3139
  maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsx(MenuRoot$1, { children: jsx(MenuTrigger$1, { asChild: true, children: jsx(Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3118
3140
  ? null
3119
- : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
3120
- // <UpDownIcon />
3121
- jsx(Fragment, {})), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3141
+ : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3122
3142
  };
3123
3143
 
3124
- const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, }) => {
3144
+ // Default text values
3145
+ const DEFAULT_HEADER_TEXTS = {
3146
+ pinColumn: "Pin Column",
3147
+ cancelPin: "Cancel Pin",
3148
+ sortAscending: "Sort Ascending",
3149
+ sortDescending: "Sort Descending",
3150
+ clearSorting: "Clear Sorting",
3151
+ };
3152
+ /**
3153
+ * TableHeader component with configurable text strings.
3154
+ *
3155
+ * @example
3156
+ * // Using default texts
3157
+ * <TableHeader />
3158
+ *
3159
+ * @example
3160
+ * // Customizing default texts for all columns
3161
+ * <TableHeader
3162
+ * defaultTexts={{
3163
+ * pinColumn: "Pin This Column",
3164
+ * sortAscending: "Sort A-Z"
3165
+ * }}
3166
+ * />
3167
+ *
3168
+ * @example
3169
+ * // Customizing texts per column via meta
3170
+ * const columns = [
3171
+ * columnHelper.accessor("name", {
3172
+ * header: "Name",
3173
+ * meta: {
3174
+ * headerTexts: {
3175
+ * pinColumn: "Pin Name Column",
3176
+ * sortAscending: "Sort Names A-Z"
3177
+ * }
3178
+ * }
3179
+ * })
3180
+ * ];
3181
+ */
3182
+ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
3125
3183
  const { table } = useDataTableContext();
3126
3184
  const SELECTION_BOX_WIDTH = 20;
3185
+ // Merge default texts with provided defaults
3186
+ const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
3187
+ // Helper function to get text for a specific header
3188
+ const getHeaderText = (header, key) => {
3189
+ const columnMeta = header.column.columnDef.meta;
3190
+ return columnMeta?.headerTexts?.[key] || mergedDefaultTexts[key];
3191
+ };
3127
3192
  const getThProps = (header) => {
3128
3193
  const thProps = header.column.getIsPinned()
3129
3194
  ? {
@@ -3177,9 +3242,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3177
3242
  ? null
3178
3243
  : flexRender(header.column.columnDef.header, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) }), jsx(Box, { children: header.column.getIsFiltered() && jsx(MdFilterListAlt, {}) })] }) }) }), jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxs(Button, { variant: "ghost", onClick: () => {
3179
3244
  header.column.pin("left");
3180
- }, children: [jsx(MdPushPin, {}), "Pin Column"] }) })), header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxs(Button, { variant: "ghost", onClick: () => {
3245
+ }, children: [jsx(MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxs(Button, { variant: "ghost", onClick: () => {
3181
3246
  header.column.pin(false);
3182
- }, children: [jsx(MdCancel, {}), "Cancel Pin"] }) })), header.column.getCanSort() && (jsxs(Fragment, { children: [jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3247
+ }, children: [jsx(MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxs(Fragment, { children: [jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3183
3248
  table.setSorting((state) => {
3184
3249
  return [
3185
3250
  ...state.filter((column) => {
@@ -3188,7 +3253,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3188
3253
  { id: header.id, desc: false },
3189
3254
  ];
3190
3255
  });
3191
- }, children: [jsx(GrAscend, {}), "Sort Ascending"] }) }), jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3256
+ }, children: [jsx(GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3192
3257
  table.setSorting((state) => {
3193
3258
  return [
3194
3259
  ...state.filter((column) => {
@@ -3197,9 +3262,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3197
3262
  { id: header.id, desc: true },
3198
3263
  ];
3199
3264
  });
3200
- }, children: [jsx(GrDescend, {}), "Sort Descending"] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3265
+ }, children: [jsx(GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxs(Button, { variant: "ghost", onClick: () => {
3201
3266
  header.column.clearSorting();
3202
- }, children: [jsx(MdClear, {}), "Clear Sorting"] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3267
+ }, children: [jsx(MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3203
3268
  ? "colorPalette.700"
3204
3269
  : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3205
3270
  borderRightColor: header.column.getIsResizing()
@@ -3216,11 +3281,11 @@ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps =
3216
3281
  return (jsx(TableControls, { ...controlProps, children: jsxs(Table, { ...tableProps, children: [jsx(TableHeader, { ...tableHeaderProps }), jsx(TableBody, { ...tableBodyProps }), showFooter && jsx(TableFooter, { ...tableFooterProps })] }) }));
3217
3282
  };
3218
3283
 
3219
- const TableCardContainer = ({ children, variant = "", ...props }) => {
3284
+ const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
3220
3285
  if (variant === "carousel") {
3221
- return (jsx(Flex, { overflow: "scroll", gap: "1rem", children: children }));
3286
+ return (jsx(Flex, { overflow: "auto", gap: gap, direction: direction, ...props, children: children }));
3222
3287
  }
3223
- return (jsx(Grid, { gridTemplateColumns: "repeat(auto-fit, minmax(20rem, 1fr))", gap: "0.5rem", ...props, children: children }));
3288
+ return (jsx(Grid, { gridTemplateColumns: gridTemplateColumns, gap: gap, ...props, children: children }));
3224
3289
  };
3225
3290
 
3226
3291
  const DefaultCardTitle = () => {
@@ -3249,8 +3314,8 @@ const TableComponent = ({ render = () => {
3249
3314
  };
3250
3315
 
3251
3316
  const TableLoadingComponent = ({ render, }) => {
3252
- const { loading } = useDataTableContext();
3253
- return jsx(Fragment, { children: render(loading) });
3317
+ const { query } = useDataTableServerContext();
3318
+ return jsx(Fragment, { children: render(query.isLoading) });
3254
3319
  };
3255
3320
 
3256
3321
  const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText = "", clearAllText = "", }) => {
@@ -3470,10 +3535,7 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
3470
3535
  };
3471
3536
 
3472
3537
  const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
3473
- const { table, columns, translate, data } = useDataTableContext();
3474
- const columnDef = table._getColumnDefs();
3475
- console.log(columnDef, "glp");
3476
- console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
3538
+ const { columns, translate, data } = useDataTableContext();
3477
3539
  const columnsMap = Object.fromEntries(columns.map((def) => {
3478
3540
  const { accessorKey, id } = def;
3479
3541
  if (accessorKey) {
@@ -8,5 +8,19 @@ export interface DataTableContext<TData = unknown> extends DataTableProps {
8
8
  setGlobalFilter: OnChangeFn<string>;
9
9
  type: "client" | "server";
10
10
  translate: UseTranslationResponse<any, unknown>;
11
+ tableLabel: {
12
+ view: string;
13
+ edit: string;
14
+ filterButtonText: string;
15
+ filterTitle: string;
16
+ filterReset: string;
17
+ filterClose: string;
18
+ reloadTooltip: string;
19
+ reloadButtonText: string;
20
+ resetSelection: string;
21
+ resetSorting: string;
22
+ rowCountText: string;
23
+ hasErrorText: string;
24
+ };
11
25
  }
12
26
  export declare const DataTableContext: import("react").Context<DataTableContext<unknown>>;
@@ -1,5 +1,4 @@
1
1
  export interface ReloadButtonProps {
2
- text?: string;
3
2
  variant?: string;
4
3
  }
5
- export declare const ReloadButton: ({ text, variant, }: ReloadButtonProps) => import("react/jsx-runtime").JSX.Element;
4
+ export declare const ReloadButton: ({ variant, }: ReloadButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1 @@
1
- export interface ResetFilteringButtonProps {
2
- text?: string;
3
- }
4
- export declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ResetFilteringButton: () => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1 @@
1
- export interface ResetSelectionButtonProps {
2
- text?: string;
3
- }
4
- export declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ResetSelectionButton: () => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1 @@
1
- export interface ResetSortingButtonProps {
2
- text?: string;
3
- }
4
- export declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const ResetSortingButton: () => import("react/jsx-runtime").JSX.Element;
@@ -14,7 +14,10 @@ export interface TableControlsProps {
14
14
  showPageSizeControl?: boolean;
15
15
  showPageCountText?: boolean;
16
16
  showView?: boolean;
17
- filterOptions?: string[];
17
+ filterOptions?: {
18
+ label: string;
19
+ value: string;
20
+ }[];
18
21
  extraItems?: ReactNode;
19
22
  loading?: boolean;
20
23
  hasError?: boolean;
@@ -16,6 +16,5 @@ export interface TableRowSelectorProps<TData> {
16
16
  light: string;
17
17
  dark: string;
18
18
  };
19
- alwaysShowSelector?: boolean;
20
19
  }
21
- export declare const TableBody: ({ showSelector, alwaysShowSelector, canResize, }: TableBodyProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const TableBody: ({ showSelector, canResize, }: TableBodyProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,10 @@
1
- import { GridProps } from "@chakra-ui/react";
1
+ import { BoxProps, FlexProps } from "@chakra-ui/react";
2
2
  import { ReactNode } from "react";
3
- export interface TableCardContainerProps extends GridProps {
3
+ export interface TableCardContainerProps extends BoxProps {
4
4
  children: ReactNode;
5
5
  variant?: "carousel" | "";
6
+ gap?: string;
7
+ gridTemplateColumns?: string;
8
+ direction?: FlexProps["direction"];
6
9
  }
7
- export declare const TableCardContainer: ({ children, variant, ...props }: TableCardContainerProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const TableCardContainer: ({ children, variant, gap, gridTemplateColumns, direction, ...props }: TableCardContainerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,9 +1,51 @@
1
1
  import { TableHeaderProps as ChakraTableHeaderProps, TableRowProps } from "@chakra-ui/react";
2
+ export interface TableHeaderTexts {
3
+ pinColumn?: string;
4
+ cancelPin?: string;
5
+ sortAscending?: string;
6
+ sortDescending?: string;
7
+ clearSorting?: string;
8
+ }
2
9
  export interface TableHeaderProps {
3
10
  canResize?: boolean;
4
11
  showSelector?: boolean;
5
12
  isSticky?: boolean;
6
13
  tableHeaderProps?: ChakraTableHeaderProps;
7
14
  tableRowProps?: TableRowProps;
15
+ /**
16
+ * Default text configuration for all columns.
17
+ * Can be overridden per column via meta.headerTexts.
18
+ */
19
+ defaultTexts?: TableHeaderTexts;
8
20
  }
9
- export declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
21
+ /**
22
+ * TableHeader component with configurable text strings.
23
+ *
24
+ * @example
25
+ * // Using default texts
26
+ * <TableHeader />
27
+ *
28
+ * @example
29
+ * // Customizing default texts for all columns
30
+ * <TableHeader
31
+ * defaultTexts={{
32
+ * pinColumn: "Pin This Column",
33
+ * sortAscending: "Sort A-Z"
34
+ * }}
35
+ * />
36
+ *
37
+ * @example
38
+ * // Customizing texts per column via meta
39
+ * const columns = [
40
+ * columnHelper.accessor("name", {
41
+ * header: "Name",
42
+ * meta: {
43
+ * headerTexts: {
44
+ * pinColumn: "Pin Name Column",
45
+ * sortAscending: "Sort Names A-Z"
46
+ * }
47
+ * }
48
+ * })
49
+ * ];
50
+ */
51
+ export declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, defaultTexts, }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
@@ -12,6 +12,17 @@ declare module "@tanstack/react-table" {
12
12
  * The display name of the column, used for rendering headers.
13
13
  */
14
14
  displayName?: string;
15
+ /**
16
+ * Text configuration for the column header menu items.
17
+ * These strings can be customized per column.
18
+ */
19
+ headerTexts?: {
20
+ pinColumn?: string;
21
+ cancelPin?: string;
22
+ sortAscending?: string;
23
+ sortDescending?: string;
24
+ clearSorting?: string;
25
+ };
15
26
  /**
16
27
  * Specifies the type of filter to be used for the column.
17
28
  *
@@ -32,7 +43,10 @@ declare module "@tanstack/react-table" {
32
43
  /**
33
44
  * Options for the select filter variant, if applicable.
34
45
  */
35
- filterOptions?: string[];
46
+ filterOptions?: {
47
+ label: string;
48
+ value: string;
49
+ }[];
36
50
  /**
37
51
  * Configuration for the range filter variant, if applicable.
38
52
  *
@@ -86,6 +100,7 @@ export * from "./components/DataTable/controls/TableFilters";
86
100
  export * from "./components/DataTable/controls/TableFilterTags";
87
101
  export * from "./components/DataTable/display/TableFooter";
88
102
  export * from "./components/DataTable/display/TableHeader";
103
+ export type { TableHeaderTexts } from "./components/DataTable/display/TableHeader";
89
104
  export * from "./components/DataTable/display/TableLoadingComponent";
90
105
  export * from "./components/DataTable/controls/TableSelector";
91
106
  export * from "./components/DataTable/controls/TableSorter";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "12.0.0-beta.45",
3
+ "version": "12.0.0-beta.46",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",